summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbrobecke <brobecke@138bc75d-0d04-0410-961f-82ee72b054a4>2011-07-01 17:51:05 +0000
committerbrobecke <brobecke@138bc75d-0d04-0410-961f-82ee72b054a4>2011-07-01 17:51:05 +0000
commitfd109ff585b20343601fa08c8b0bc45436305ec4 (patch)
tree2101553adc801554eb75138475f104cfda9d278b
parentc87f3e505755ba95d5457255ed66071d331587aa (diff)
downloadgcc-fd109ff585b20343601fa08c8b0bc45436305ec4.tar.gz
Darwin has case-insensitive filesystems
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@175762 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--include/ChangeLog6
-rw-r--r--include/filenames.h8
-rw-r--r--libiberty/ChangeLog5
-rw-r--r--libiberty/filename_cmp.c28
4 files changed, 41 insertions, 6 deletions
diff --git a/include/ChangeLog b/include/ChangeLog
index e4a6bcae4f9..a05663a2765 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -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
diff --git a/include/filenames.h b/include/filenames.h
index d4955df661c..75ec3302d1d 100644
--- a/include/filenames.h
+++ b/include/filenames.h
@@ -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)
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index 809f22bc381..2f8e73497d9 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -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
diff --git a/libiberty/filename_cmp.c b/libiberty/filename_cmp.c
index 0eed12086bf..5179f8dd14f 100644
--- a/libiberty/filename_cmp.c
+++ b/libiberty/filename_cmp.c
@@ -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);