From 36cf9153a64ce5eeba90936bfa9ce09cefe11028 Mon Sep 17 00:00:00 2001 From: DJ Delorie Date: Thu, 29 Mar 2007 21:03:48 +0000 Subject: merge from gcc --- libiberty/ChangeLog | 8 ++++++ libiberty/Makefile.in | 16 +++++++---- libiberty/filename_cmp.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++++ libiberty/functions.texi | 16 +++++++++++ 4 files changed, 108 insertions(+), 5 deletions(-) create mode 100644 libiberty/filename_cmp.c (limited to 'libiberty') diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index 5c2f527c102..006c354c987 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,11 @@ +2007-03-29 Joel Brobecker + + * 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 * cp-demangle.c (d_encoding): Exit early on error. diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in index 90686f00b15..4f5e2152783 100644 --- a/libiberty/Makefile.in +++ b/libiberty/Makefile.in @@ -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 index 00000000000..5e12c82ca41 --- /dev/null +++ b/libiberty/filename_cmp.c @@ -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 +#endif + +#include +#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 +} + diff --git a/libiberty/functions.texi b/libiberty/functions.texi index 9f49ff484d6..fd3e8e74ea7 100644 --- a/libiberty/functions.texi +++ b/libiberty/functions.texi @@ -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}) -- cgit v1.2.1