From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24306 invoked by alias); 28 Mar 2007 20:23:45 -0000 Received: (qmail 24243 invoked by uid 22791); 28 Mar 2007 20:23:41 -0000 X-Spam-Check-By: sourceware.org Received: from nile.gnat.com (HELO nile.gnat.com) (205.232.38.5) by sourceware.org (qpsmtpd/0.31) with ESMTP; Wed, 28 Mar 2007 21:23:34 +0100 Received: from localhost (localhost [127.0.0.1]) by filtered-nile.gnat.com (Postfix) with ESMTP id EF04748CBEE; Wed, 28 Mar 2007 16:23:32 -0400 (EDT) Received: from nile.gnat.com ([127.0.0.1]) by localhost (nile.gnat.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id 09994-01-4; Wed, 28 Mar 2007 16:23:32 -0400 (EDT) Received: from joel.gnat.com (unknown [70.71.0.212]) by nile.gnat.com (Postfix) with ESMTP id 90E5248CCA2; Wed, 28 Mar 2007 16:23:31 -0400 (EDT) Received: by joel.gnat.com (Postfix, from userid 1000) id 63C08E7B43; Wed, 28 Mar 2007 16:24:43 -0400 (EDT) Date: Wed, 28 Mar 2007 20:23:00 -0000 From: Joel Brobecker To: DJ Delorie Cc: gcc-patches@gcc.gnu.org, gdb-patches@sourceware.org Subject: Re: [RFA/libiberty] Enhance FILENAME_CMP for Windows filesystems Message-ID: <20070328202443.GD3956@adacore.com> References: <20070328191845.GB3956@adacore.com> <200703281930.l2SJUYLW003949@greed.delorie.com> <20070328193743.GC3956@adacore.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="5I6of5zJg18YgZEa" Content-Disposition: inline In-Reply-To: <20070328193743.GC3956@adacore.com> User-Agent: Mutt/1.4.2.2i Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2007-03/txt/msg00294.txt.bz2 --5I6of5zJg18YgZEa Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-length: 1149 > Hmmm, You are probably right. I copied this copyright blurb from > another file without paying enough attention. I think the physmem.c > copyright notice will be more appropriate, but I will double-check > where the macro is being used. The macro is only used in java/jcf-path.c and protoize.c, so I don't think it needs the exclusion. Here is a revised version of the patch that should address both comments (copyright notice, and lack of documentation): libiberty/ change: 2007-03-28 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. include/ change: 2007-03-28 Joel Brobecker * filenames.h (FILENAME_CMP): Adjust define to call filename_cmp regardless of the type of file system. The documentation change was tested by regenerating function.texi then regenerating the .info documentation, and finally by browsing the resulting document with the "info" program. OK to apply? Thank you, -- Joel --5I6of5zJg18YgZEa Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="filename_cmp.c" Content-length: 2073 /* 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 } --5I6of5zJg18YgZEa Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="filename_cmp.diff" Content-length: 4655 Index: libiberty/Makefile.in =================================================================== RCS file: /cvs/src/src/libiberty/Makefile.in,v retrieving revision 1.85 diff -u -p -r1.85 Makefile.in --- libiberty/Makefile.in 5 Mar 2007 22:15:38 -0000 1.85 +++ libiberty/Makefile.in 28 Mar 2007 20:19:14 -0000 @@ -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 atex 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. ./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 \ Index: libiberty/functions.texi =================================================================== RCS file: /cvs/src/src/libiberty/functions.texi,v retrieving revision 1.30 diff -u -p -r1.30 functions.texi --- libiberty/functions.texi 31 Jan 2007 20:25:23 -0000 1.30 +++ libiberty/functions.texi 28 Mar 2007 20:19:14 -0000 @@ -268,6 +268,22 @@ value 1). If @var{valu} is zero, zero i @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}) Index: include/filenames.h =================================================================== RCS file: /cvs/src/src/include/filenames.h,v retrieving revision 1.3 diff -u -p -r1.3 filenames.h --- include/filenames.h 10 May 2005 10:21:08 -0000 1.3 +++ include/filenames.h 28 Mar 2007 20:19:14 -0000 @@ -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 - F 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 */ --5I6of5zJg18YgZEa--