merge from gcc
authorDJ Delorie <dj@redhat.com>
Thu, 29 Mar 2007 21:03:48 +0000 (21:03 +0000)
committerDJ Delorie <dj@redhat.com>
Thu, 29 Mar 2007 21:03:48 +0000 (21:03 +0000)
include/ChangeLog
include/filenames.h
libiberty/ChangeLog
libiberty/Makefile.in
libiberty/filename_cmp.c [new file with mode: 0644]
libiberty/functions.texi

index 75c4753b77d755d142f1b76dea3087c786a5785e..269409ca630ce0450cd36385d74569ed36f704f9 100644 (file)
@@ -1,3 +1,8 @@
+2007-03-29  Joel Brobecker  <brobecker@adacore.com>
+
+       * filenames.h (FILENAME_CMP): Adjust define to call filename_cmp
+       regardless of the type of file system.
+
 2007-03-06  Jan Hubicka  <jh@suse.cz>
 
        * ansidecl.h (ATTRIBUTE_COLD, ATTRIBUTE_HOT): New.
index 6b72fd249b40363753beffc3eef912429323cb3b..5338208e0242dcfb8e9786b0319f2d249166172c 100644 (file)
@@ -5,7 +5,7 @@
    use forward- and back-slash in path names interchangeably, and
    some of them have case-insensitive file names.
 
-   Copyright 2000, 2001 Free Software Foundation, Inc.
+   Copyright 2000, 2001, 2007 Free Software Foundation, Inc.
 
 This file is part of BFD, the Binary File Descriptor library.
 
@@ -38,14 +38,15 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
    want to know whether to prepend the current working directory to
    a file name, which should not be done with a name like d:foo.  */
 #define IS_ABSOLUTE_PATH(f)    (IS_DIR_SEPARATOR((f)[0]) || (((f)[0]) && ((f)[1] == ':')))
-#define FILENAME_CMP(s1, s2)   strcasecmp(s1, s2)
 
 #else  /* not DOSish */
 
 #define IS_DIR_SEPARATOR(c)    ((c) == '/')
 #define IS_ABSOLUTE_PATH(f)    (IS_DIR_SEPARATOR((f)[0]))
-#define FILENAME_CMP(s1, s2)   strcmp(s1, s2)
 
 #endif /* not DOSish */
 
+extern int filename_cmp (const char *s1, const char *s2);
+#define FILENAME_CMP(s1, s2)   filename_cmp(s1, s2)
+
 #endif /* FILENAMES_H */
index 5c2f527c102c0809ec7c70bbc52e7561063e4411..006c354c9878c39c9d24634ded43bccd912f5f0f 100644 (file)
@@ -1,3 +1,11 @@
+2007-03-29  Joel Brobecker  <brobecker@adacore.com>
+
+       * filename_cmp.c: New file.
+       * Makefile.in (CFILES): Add filename_cmp.c.
+       (REQUIRED_OFILES): Add filename_cmp.o
+       (filename_cmp.o): New rule.
+       * functions.texi: Regenerate.
+
 2007-03-15  Geoffrey Keating  <geoffk@apple.com>
 
        * cp-demangle.c (d_encoding): Exit early on error.
index 90686f00b15f897a69364c173a49939a1fc40847..4f5e2152783a5b5267fee6050366aae845d201f7 100644 (file)
@@ -1,6 +1,6 @@
 #
 # Makefile
-#   Copyright (C) 1990, 91-99, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+#   Copyright (C) 1990, 91-99, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
 #   Free Software Foundation
 #
 # This file is part of the libiberty library.
@@ -131,8 +131,8 @@ CFILES = alloca.c argv.c asprintf.c atexit.c                                \
        calloc.c choose-temp.c clock.c concat.c cp-demangle.c           \
         cp-demint.c cplus-dem.c                                        \
        dyn-string.c                                                    \
-       fdmatch.c ffs.c fibheap.c floatformat.c fnmatch.c               \
-        fopen_unlocked.c                                               \
+       fdmatch.c ffs.c fibheap.c filename_cmp.c floatformat.c          \
+       fnmatch.c fopen_unlocked.c                                      \
        getcwd.c getopt.c getopt1.c getpagesize.c getpwd.c getruntime.c \
          gettimeofday.c                                                 \
        hashtab.c hex.c                                                 \
@@ -165,8 +165,8 @@ REQUIRED_OFILES = ./regex.o ./cplus-dem.o ./cp-demangle.o ./md5.o   \
        ./alloca.o ./argv.o                                             \
        ./choose-temp.o ./concat.o ./cp-demint.o                        \
        ./dyn-string.o                                                  \
-       ./fdmatch.o ./fibheap.o ./floatformat.o ./fnmatch.o             \
-        ./fopen_unlocked.o                                             \
+       ./fdmatch.o ./fibheap.o ./filename_cmp.o ./floatformat.o        \
+       ./fnmatch.o ./fopen_unlocked.o                                  \
        ./getopt.o ./getopt1.o ./getpwd.o ./getruntime.o                \
        ./hashtab.o ./hex.o                                             \
        ./lbasename.o ./lrealpath.o                                     \
@@ -651,6 +651,12 @@ $(CONFIGURED_OFILES): stamp-picdir
        else true; fi
        $(COMPILE.c) $(srcdir)/fibheap.c $(OUTPUT_OPTION)
 
+./filename_cmp.o: $(srcdir)/filename_cmp.c $(INCDIR)/filenames.h
+       if [ x"$(PICFLAG)" != x ]; then \
+         $(COMPILE.c) $(PICFLAG) $(srcdir)/filename_cmp.c -o pic/$@; \
+       else true; fi
+       $(COMPILE.c) $(srcdir)/filename_cmp.c $(OUTPUT_OPTION)
+
 ./floatformat.o: $(srcdir)/floatformat.c config.h $(INCDIR)/ansidecl.h \
        $(INCDIR)/floatformat.h $(INCDIR)/libiberty.h
        if [ x"$(PICFLAG)" != x ]; then \
diff --git a/libiberty/filename_cmp.c b/libiberty/filename_cmp.c
new file mode 100644 (file)
index 0000000..5e12c82
--- /dev/null
@@ -0,0 +1,73 @@
+/* File name comparison routine.
+
+   Copyright (C) 2007 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include <ctype.h>
+#include "filenames.h"
+
+/*
+
+@deftypefn Extension int filename_cmp (const char *@var{s1}, const char *@var{s2})
+
+Return zero if the two paths @var{s1} and @var{s2} are equivalent.
+If not equivalent, the returned value is similar to what strcmp would
+return.  In other words, it returns a negative value if @var{s1} is less
+than @var{s2}, or a positive value if @var{s2} is greater than @var{s2}.
+
+This function does not normalize path names. As a result, this function
+will treat filenames that are spelled differently as different even in
+the case when the two filenames point to the same underlying file.
+However, it does handle the fact that on DOS-like file systems, forward
+and backward slashes are equal.
+
+@end deftypefn
+
+*/
+
+int
+filename_cmp (const char *s1, const char *s2)
+{
+#ifndef HAVE_DOS_BASED_FILE_SYSTEM
+  return strcmp(s1, s2);
+#else
+  for (;;)
+    {
+      int c1 = tolower (*s1);
+      int c2 = tolower (*s2);
+
+      /* On DOS-based file systems, the '/' and the '\' are equivalent.  */
+      if (c1 == '/')
+        c1 = '\\';
+      if (c2 == '/')
+        c2 = '\\';
+
+      if (c1 != c2)
+        return (c1 - c2);
+
+      if (c1 == '\0')
+        return 0;
+
+      s1++;
+      s2++;
+    }
+#endif
+}
+
index 9f49ff484d60813ed770e83b56ca4f6bc79f4080..fd3e8e74ea7b17565dfa00aadf3726071c6f9c2c 100644 (file)
@@ -268,6 +268,22 @@ value 1).  If @var{valu} is zero, zero is returned.
 
 @end deftypefn
 
+@c filename_cmp.c:28
+@deftypefn Extension int filename_cmp (const char *@var{s1}, const char *@var{s2})
+
+Return zero if the two paths @var{s1} and @var{s2} are equivalent.
+If not equivalent, the returned value is similar to what strcmp would
+return.  In other words, it returns a negative value if @var{s1} is less
+than @var{s2}, or a positive value if @var{s2} is greater than @var{s2}.
+
+This function does not normalize path names. As a result, this function
+will treat filenames that are spelled differently as different even in
+the case when the two filenames point to the same underlying file.
+However, it does handle the fact that on DOS-like file systems, forward
+and backward slashes are equal.
+
+@end deftypefn
+
 @c fnmatch.txh:1
 @deftypefn Replacement int fnmatch (const char *@var{pattern}, const char *@var{string}, int @var{flags})