aboutsummaryrefslogtreecommitdiff
path: root/libiberty/filename_cmp.c
diff options
context:
space:
mode:
authorJoel Brobecker <brobecker@gnat.com>2011-07-01 18:24:39 +0000
committerJoel Brobecker <brobecker@gnat.com>2011-07-01 18:24:39 +0000
commit7d6b320b79bc7bb87a7c8985c70036e56e4c2e9f (patch)
tree89ce45124730f73ec4546ae15012931b2431367a /libiberty/filename_cmp.c
parent02e7efbffbcf85bbb9766f4ca0d278a79b4ae2b3 (diff)
downloadfsf-binutils-gdb-7d6b320b79bc7bb87a7c8985c70036e56e4c2e9f.zip
fsf-binutils-gdb-7d6b320b79bc7bb87a7c8985c70036e56e4c2e9f.tar.gz
fsf-binutils-gdb-7d6b320b79bc7bb87a7c8985c70036e56e4c2e9f.tar.bz2
[libiberty/filename_cmp] Darwin has case-insensitive filesystems
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.
Diffstat (limited to 'libiberty/filename_cmp.c')
-rw-r--r--libiberty/filename_cmp.c28
1 files changed, 22 insertions, 6 deletions
diff --git a/libiberty/filename_cmp.c b/libiberty/filename_cmp.c
index 0eed120..5179f8d 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);