merge from gcc

This commit is contained in:
DJ Delorie 2007-03-29 21:03:48 +00:00
parent 483367eebc
commit 9c577e8950
6 changed files with 117 additions and 8 deletions

View 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.

View 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 */

View 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.

View 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 \

73
libiberty/filename_cmp.c Normal file
View File

@ -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
}

View 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})