Darwin has case-insensitive filesystems
authorJoel Brobecker <brobecker@adacore.com>
Fri, 1 Jul 2011 17:51:05 +0000 (17:51 +0000)
committerJoel Brobecker <brobecke@gcc.gnu.org>
Fri, 1 Jul 2011 17:51:05 +0000 (17:51 +0000)
HFS+, the FS on Darwin, is case insensitive. So this patch adjusts
filename_cmp.c to ignore the casing when comparing filenames on Darwin.

include/ChangeLog:

        * filenames.h (HAVE_CASE_INSENSITIVE_FILE_SYSTEM): Define
        on Darwin, as well as on the systems that use a DOS-like
        filesystem.

libiberty/ChangeLog:

        * filename_cmp.c (filename_cmp, filename_ncmp): Add handling of
        HAVE_CASE_INSENSITIVE_FILE_SYSTEM.

From-SVN: r175762

include/ChangeLog
include/filenames.h
libiberty/ChangeLog
libiberty/filename_cmp.c

index e4a6bcae4f9af05c07417241c8bca2de65af27f2..a05663a27655647743109db43d62710184635f31 100644 (file)
@@ -1,3 +1,9 @@
+2011-07-01  Joel Brobecker  <brobecker@adacore.com>
+
+       * filenames.h (HAVE_CASE_INSENSITIVE_FILE_SYSTEM): Define
+       on Darwin, as well as on the systems that use a DOS-like
+       filesystem.
+
 2011-06-22  Jakub Jelinek  <jakub@redhat.com>
 
        PR debug/47858
index d4955df661cf4f965a4e22806eeb350acccc4a79..75ec3302d1d0a9764c86efaf2c25fd69c0708c6a 100644 (file)
@@ -34,10 +34,18 @@ extern "C" {
 #  ifndef HAVE_DOS_BASED_FILE_SYSTEM
 #    define HAVE_DOS_BASED_FILE_SYSTEM 1
 #  endif
+#  ifndef HAVE_CASE_INSENSITIVE_FILE_SYSTEM
+#    define HAVE_CASE_INSENSITIVE_FILE_SYSTEM 1
+#  endif
 #  define HAS_DRIVE_SPEC(f) HAS_DOS_DRIVE_SPEC (f)
 #  define IS_DIR_SEPARATOR(c) IS_DOS_DIR_SEPARATOR (c)
 #  define IS_ABSOLUTE_PATH(f) IS_DOS_ABSOLUTE_PATH (f)
 #else /* not DOSish */
+#  if defined(__APPLE__)
+#    ifndef HAVE_CASE_INSENSITIVE_FILE_SYSTEM
+#      define HAVE_CASE_INSENSITIVE_FILE_SYSTEM 1
+#    endif
+#  endif /* __APPLE__ */
 #  define HAS_DRIVE_SPEC(f) (0)
 #  define IS_DIR_SEPARATOR(c) IS_UNIX_DIR_SEPARATOR (c)
 #  define IS_ABSOLUTE_PATH(f) IS_UNIX_ABSOLUTE_PATH (f)
index 809f22bc381eae7ecb67bdd86003987f99f9c331..2f8e73497d9f0cfbd0daddd5d9d4417aad6b3d10 100644 (file)
@@ -1,3 +1,8 @@
+2011-07-01  Joel Brobecker  <brobecker@adacore.com>
+
+       * filename_cmp.c (filename_cmp, filename_ncmp): Add handling of
+       HAVE_CASE_INSENSITIVE_FILE_SYSTEM.
+
 2011-07-01  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
        PR debug/49408
index 0eed12086bfe41d00d9a593b3a60b7008b3d758f..5179f8dd14ff40b3ebcefc1c36d9ee9f278ed53c 100644 (file)
@@ -50,19 +50,27 @@ and backward slashes are equal.
 int
 filename_cmp (const char *s1, const char *s2)
 {
-#ifndef HAVE_DOS_BASED_FILE_SYSTEM
+#if !defined(HAVE_DOS_BASED_FILE_SYSTEM) \
+    && !defined(HAVE_CASE_INSENSITIVE_FILE_SYSTEM)
   return strcmp(s1, s2);
 #else
   for (;;)
     {
-      int c1 = TOLOWER (*s1);
-      int c2 = TOLOWER (*s2);
+      int c1 = *s1;
+      int c2 = *s2;
 
+#if defined (HAVE_CASE_INSENSITIVE_FILE_SYSTEM)
+      c1 = TOLOWER (c1);
+      c2 = TOLOWER (c2);
+#endif
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
       /* On DOS-based file systems, the '/' and the '\' are equivalent.  */
       if (c1 == '/')
         c1 = '\\';
       if (c2 == '/')
         c2 = '\\';
+#endif
 
       if (c1 != c2)
         return (c1 - c2);
@@ -100,21 +108,29 @@ and backward slashes are equal.
 int
 filename_ncmp (const char *s1, const char *s2, size_t n)
 {
-#ifndef HAVE_DOS_BASED_FILE_SYSTEM
+#if !defined(HAVE_DOS_BASED_FILE_SYSTEM) \
+    && !defined(HAVE_CASE_INSENSITIVE_FILE_SYSTEM)
   return strncmp(s1, s2, n);
 #else
   if (!n)
     return 0;
   for (; n > 0; --n)
   {
-      int c1 = TOLOWER (*s1);
-      int c2 = TOLOWER (*s2);
+      int c1 = *s1;
+      int c2 = *s2;
 
+#if defined (HAVE_CASE_INSENSITIVE_FILE_SYSTEM)
+      c1 = TOLOWER (c1);
+      c2 = TOLOWER (c2);
+#endif
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
       /* On DOS-based file systems, the '/' and the '\' are equivalent.  */
       if (c1 == '/')
         c1 = '\\';
       if (c2 == '/')
         c2 = '\\';
+#endif
 
       if (c1 == '\0' || c1 != c2)
         return (c1 - c2);