[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
dircolors patch for locales like Turkish
From: |
Paul Eggert |
Subject: |
dircolors patch for locales like Turkish |
Date: |
Wed, 14 Feb 2007 16:09:45 -0800 |
User-agent: |
Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux) |
As we've been seeing in bug-gnulib, locales like Turkish say that "i"
and "I" are not lower- and upper-case variants of the same letter, but
are two different letters. Hence utilities should not rely on
strcasecmp when they want the usual ASCII semantics. Here's a patch
for coreutils.
2007-02-14 Paul Eggert <address@hidden>
* bootstrap.conf (gnulib_modules): Add c-strcase. Remove strcase.
* src/dircolors.c: Include c-strcase.h.
(dc_parse_stream): Use c_strcasecmp rather than
strcasecmp to avoid unreliable results in locales like Turkish
where strcasecmp is incompatible with the C locale.
diff --git a/bootstrap.conf b/bootstrap.conf
index 631f2ed..e94478a 100644
--- a/bootstrap.conf
+++ b/bootstrap.conf
@@ -38,7 +38,8 @@ obsolete_gnulib_modules='
gnulib_modules="
$avoided_gnulib_modules
$obsolete_gnulib_modules
- acl alloca announce-gen argmatch assert backupfile base64 c-strtod
+ acl alloca announce-gen argmatch assert backupfile base64
+ c-strcase c-strtod
c-strtold calloc canon-host canonicalize chown cloexec
config-h configmake
closeout cycle-check d-ino d-type diacrit dirfd dirname dup2
@@ -60,7 +61,7 @@ gnulib_modules="
rpmatch
safe-read same
save-cwd savedir savewd settime sha1 sig2str ssize_t stat-macros
- stat-time stdbool stdlib-safer stpcpy strcase strftime
+ stat-time stdbool stdlib-safer stpcpy strftime
strpbrk strtoimax strtoumax strverscmp sys_stat timespec tzset
unicodeio unistd-safer unlink-busy unlinkdir unlocked-io
uptime userspec utimecmp utimens vasprintf verify version-etc-fsf
diff --git a/src/dircolors.c b/src/dircolors.c
index a6c9889..82eb1e0 100644
--- a/src/dircolors.c
+++ b/src/dircolors.c
@@ -24,6 +24,7 @@
#include "system.h"
#include "dircolors.h"
+#include "c-strcase.h"
#include "error.h"
#include "getline.h"
#include "obstack.h"
@@ -295,7 +296,7 @@ dc_parse_stream (FILE *fp, const char *filename)
}
unrecognized = false;
- if (strcasecmp (keywd, "TERM") == 0)
+ if (c_strcasecmp (keywd, "TERM") == 0)
{
if (STREQ (arg, term))
state = ST_TERMSURE;
@@ -324,9 +325,9 @@ dc_parse_stream (FILE *fp, const char *filename)
append_quoted (arg);
APPEND_CHAR (':');
}
- else if (strcasecmp (keywd, "OPTIONS") == 0
- || strcasecmp (keywd, "COLOR") == 0
- || strcasecmp (keywd, "EIGHTBIT") == 0)
+ else if (c_strcasecmp (keywd, "OPTIONS") == 0
+ || c_strcasecmp (keywd, "COLOR") == 0
+ || c_strcasecmp (keywd, "EIGHTBIT") == 0)
{
/* Ignore. */
}
@@ -335,7 +336,7 @@ dc_parse_stream (FILE *fp, const char *filename)
int i;
for (i = 0; slack_codes[i] != NULL; ++i)
- if (strcasecmp (keywd, slack_codes[i]) == 0)
+ if (c_strcasecmp (keywd, slack_codes[i]) == 0)
break;
if (slack_codes[i] != NULL)
- dircolors patch for locales like Turkish,
Paul Eggert <=