DMARC-Filter: OpenDMARC Filter v1.4.2 delorie.com 51GGImoI2526928 Authentication-Results: delorie.com; dmarc=pass (p=none dis=none) header.from=cygwin.com Authentication-Results: delorie.com; spf=pass smtp.mailfrom=cygwin.com DKIM-Filter: OpenDKIM Filter v2.11.0 delorie.com 51GGImoI2526928 Authentication-Results: delorie.com; dkim=pass (1024-bit key, unprotected) header.d=cygwin.com header.i=@cygwin.com header.a=rsa-sha256 header.s=default header.b=FrZZ0jfQ X-Recipient: archive-cygwin AT delorie DOT com DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A2BAB3858D29 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cygwin.com; s=default; t=1739722726; bh=hCGHZF8sjgwOVOhd3amG+fqvsoLIh9wJ/6NG0Mxfbao=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=FrZZ0jfQeO5e0F0YPP1hvtsuzWvBJbJfQzWwBALvqYiHxZhVNMPsyBmz3zRwh+wtm sVvwAy8WjuoynfYtFCfaMpG/RIKnd5dArBmd8tTR6YPWESjZ0VuYUg4ZlujxSPnNW7 DxSG+352aIFvj9DzbpJEMtoLmboB+P/IYQHJz1n0= X-Original-To: cygwin AT cygwin DOT com Delivered-To: cygwin AT cygwin DOT com DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 5F5533858D1E ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 5F5533858D1E ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1739722690; cv=pass; b=VAFcX1su5vWW1k192BE/BSnSxUl9QnviijW4nAjNg5u0E6rIo6ibRFiWzr0bMT9OcPzxNnuC75wDMBYlJjeLUvmO/TinmcsK8TZv7kFBcLENOGWwgiunQrG1jIWFGK7TA+mKTZedrsdBixWMWEq90UH2S/xrqVYCc4rlMonqjO8= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1739722690; c=relaxed/simple; bh=sS7Vh26BPEGuPJHq+fZh11MkbdIfEpdS+pmP+Wco3po=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=IKBzZpy5DE8vURt3LbCrASXz4jKRbXqzxbfgkbEtcDlvEOz+kUdEhLXWaUidJkX63+QhY2NJ9X4g4wMEW8bxFvDlKRJljC4A4JjfSwFdnZTWyRt8cjrqaBtdNab6R5flTwh2k6mk0t2KJ40pblOHkgzzdip8Ucdpx78uJGjLLUA= ARC-Authentication-Results: i=2; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5F5533858D1E ARC-Seal: i=1; a=rsa-sha256; t=1739722688; cv=none; d=strato.com; s=strato-dkim-0002; b=D04/GtjPmERtZZraiWVtgGcbhGhJXOGUTIT06TrGgMNETMSH9KwANpyM6wFHgaLIUZ j0etCDDTUl5Hew1Iq4afG+XqL/2BCDMK3Z3CFD6apRvxQM0QeImOE7lko6/s2YDCjoOZ rqt2EpI/27xBGx+4/DWqnwMTrAtetkmF4htumxMa5CoI3ByzPz4O+RpvpEzHi5iduU56 BnhS6O7Igmq613JiBx04azCcoDUw+2k8Ms56ZKQT1MW3umDmZ6SA48HpH2a9zWGt5p5E dSFLM4hHGuIk6f4vcgWuTUop1LZIhVp0NNTtPorhtJsBjfLpVPqsJfmOsLa261NO54vF r03w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; t=1739722688; s=strato-dkim-0002; d=strato.com; h=Message-ID:Date:Subject:To:From:Cc:Date:From:Subject:Sender; bh=dx1RPjOPl4X7RnIeGcxN/3uTHPUoyqvVZrjHUeoepwQ=; b=R87t46csSJTCHH7QMYwwGYU00TSUVZHmNdDa/kaaemTpvp10T7JHo1dz+pTqk2h6Fn RwNV3CJDcpg4ewCZpmZltw2o1Z+uzscW5lPPF9cLLt/D8LpCMiUSGtEdqy6zWNWLc56g RGb01S+e9ArllQEHEZUONu7AfPo5SCz7GoblsBeLOFrFYXO3uDQgSSry1EuWDGg4FytL F99APt4HUT/SXD9D148rr84cl/nPQnoNWG5/gfvmnK199dGDZ+Xl+N0381xrLC4brzKD l/bsx5PIOPzux7Sqa9Yh0KHOCbhdQwz69O4h1OQ6a5TbWBltpAUGRsv1zmhx5aEm9TcL dZDA== ARC-Authentication-Results: i=1; strato.com; arc=none; dkim=none X-RZG-CLASS-ID: mo00 X-RZG-AUTH: ":Ln4Re0+Ic/6oZXR1YgKryK8brlshOcZlLnY4jECd2hdUURIbZgL8PX2QiTuZ3cdB8X/nqmmeHTyqSHKY0MaVUIjzuYeaGlfV" To: cygwin AT cygwin DOT com Subject: bug in strcasecmp and strncasecmp Date: Sun, 16 Feb 2025 17:18:08 +0100 Message-ID: <2031387.2IRrRt1zHL@nimes> Organization: GNU MIME-Version: 1.0 X-BeenThere: cygwin AT cygwin DOT com X-Mailman-Version: 2.1.30 List-Id: General Cygwin discussions and problem reports List-Archive: List-Post: List-Help: List-Subscribe: , From: Bruno Haible via Cygwin Reply-To: Bruno Haible Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "Cygwin" Per POSIX [1], the functions strcasecmp and strncasecmp should "use the current locale to determine the case of the characters.". [1] https://pubs.opengroup.org/onlinepubs/9799919799/functions/strcasecmp.html This is not what Cygwin does: In the fr_FR.ISO8859-1 locale, the characters 0xE9 and 0xC9 are the same modulo case, but strcasecmp and strncasecmp consider these characters to be different. How to reproduce (in Cygwin 2.9.0 or 3.5.6): ============================= foo.c ========================== #include #include #include #include int main () { if (setlocale (LC_ALL, "fr_FR.ISO8859-1") == NULL) return 1; int c1 = (unsigned char) '\311'; int c2 = (unsigned char) '\351'; printf ("0x%02X -> 0x%02X, 0x%02X\n", c1, tolower (c1), toupper (c1)); printf ("0x%02X -> 0x%02X, 0x%02X\n", c2, tolower (c2), toupper (c2)); printf ("strcasecmp -> %d\n", strcasecmp ("Fej\311r", "Fej\351r")); printf ("strncasecmp -> %d\n", strncasecmp ("Fej\311r", "Fej\351r", 5)); } ======================================================================= $ gcc -Wall foo.c $ ./a Expected output: 0xC9 -> 0xE9, 0xC9 0xE9 -> 0xE9, 0xC9 strcasecmp -> 0 strncasecmp -> 0 Actual output: 0xC9 -> 0xE9, 0xC9 0xE9 -> 0xE9, 0xC9 strcasecmp -> 256 strncasecmp -> 256 Bruno -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple