OSDN Git Service

* filename_cmp.c: New file.
authorbrobecke <brobecke@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 29 Mar 2007 20:55:09 +0000 (20:55 +0000)
committerbrobecke <brobecke@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 29 Mar 2007 20:55:09 +0000 (20:55 +0000)
        * Makefile.in (CFILES): Add filename_cmp.c.
        (REQUIRED_OFILES): Add filename_cmp.o
        (filename_cmp.o): New rule.
        * functions.texi: Regenerate.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@123342 138bc75d-0d04-0410-961f-82ee72b054a4

libiberty/ChangeLog
libiberty/Makefile.in
libiberty/filename_cmp.c [new file with mode: 0644]
libiberty/functions.texi

index 5c2f527..006c354 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 90686f0..4f5e215 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 9f49ff4..fd3e8e7 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})