public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* [patch bfd libiberty]: Let binutils understand DOS-paths (1 of 4)
@ 2011-02-28  7:56 Kai Tietz
  2011-02-28 13:40 ` Nick Clifton
  0 siblings, 1 reply; 3+ messages in thread
From: Kai Tietz @ 2011-02-28  7:56 UTC (permalink / raw)
  To: Binutils, Nick Clifton; +Cc: DJ Delorie, Dave Korn

[-- Attachment #1: Type: text/plain, Size: 1145 bytes --]

Hello,

the libiberty and include part was already sent to GCC's ML at
http://gcc.gnu.org/ml/gcc-patches/2011-02/msg01667.html thread. I
added this part to this patch to allow review and building of this
patch-series.

ChangeLog libiberty/
2011-02-28  Kai Tietz

	* filename_cmp.c (filename_ncmp): New
	function.

ChangeLog include/
2011-02-28  Kai Tietz

	* filenames.h (filename_ncmp): New prototype.

ChangeLog bfd/
2011-02-28  Kai Tietz

	* archive.c (_bfd_find_nested_archive): Use filename_(n)cmp.
	(adjust_relative_path): Likewise.
	(_bfd_construct_extended_name_table): Likewise.
	* corefile.c (generic_core_file_matches_executable_p): Likewise.
	* elf32-bfin.c (bfinfdpic_relocate_section): Likewise.
	* elf32-frv.c (elf32_frv_relocate_section): Likewise.
	* elf32-spu.c (sort_bfds): Likewise.
	(spu_elf_auto_overlay): Likewise.
	* syms.c (_bfd_stab_section_find_nearest_line): Likewise.
	* xcofflink.c (xcoff_set_import_path): Likewise.
	* xtensa-isa.c (xtensa_regfile_lookup): Likewise.
	(xtensa_regfile_lookup_shortname): Likewise.

Tested for x86_64-w64-mingw32, i686-pc-cygwin, and
x86_64-pc-linux-gnu. Ok for apply?

Regards,
Kai

[-- Attachment #2: bfd_filename.txt --]
[-- Type: text/plain, Size: 10500 bytes --]

Index: src/include/filenames.h
===================================================================
--- src.orig/include/filenames.h	2011-02-26 23:07:15.246909100 +0100
+++ src/include/filenames.h	2011-02-27 12:08:39.608504400 +0100
@@ -73,6 +73,9 @@ extern "C" {
 extern int filename_cmp (const char *s1, const char *s2);
 #define FILENAME_CMP(s1, s2)	filename_cmp(s1, s2)
 
+extern int filename_ncmp (const char *s1, const char *s2,
+			  size_t n);
+
 #ifdef __cplusplus
 }
 #endif
Index: src/libiberty/filename_cmp.c
===================================================================
--- src.orig/libiberty/filename_cmp.c	2011-02-26 23:07:15.247909100 +0100
+++ src/libiberty/filename_cmp.c	2011-02-27 12:08:39.613504700 +0100
@@ -76,3 +76,52 @@ filename_cmp (const char *s1, const char
 #endif
 }
 
+/*
+
+@deftypefn Extension int filename_ncmp (const char *@var{s1}, const char *@var{s2}, size_t @var{n})
+
+Return zero if the two file names @var{s1} and @var{s2} are equivalent
+in range @var{n}.
+If not equivalent, the returned value is similar to what @code{strncmp}
+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 file 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_ncmp (const char *s1, const char *s2, size_t n)
+{
+#ifndef HAVE_DOS_BASED_FILE_SYSTEM
+  return strncmp(s1, s2, n);
+#else
+  if (!n)
+    return 0;
+  for (; n > 0; --n)
+  {
+      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 == '\0' || c1 != c2)
+        return (c1 - c2);
+
+      s1++;
+      s2++;
+  }
+  return 0;
+#endif
+}
Index: src/libiberty/functions.texi
===================================================================
--- src.orig/libiberty/functions.texi	2011-02-26 23:07:15.258909100 +0100
+++ src/libiberty/functions.texi	2011-02-27 12:08:39.618505000 +0100
@@ -296,6 +296,24 @@ and backward slashes are equal.
 
 @end deftypefn
 
+@c filename_cmp.c:81
+@deftypefn Extension int filename_ncmp (const char *@var{s1}, const char *@var{s2}, size_t @var{n})
+
+Return zero if the two file names @var{s1} and @var{s2} are equivalent
+in range @var{n}.
+If not equivalent, the returned value is similar to what @code{strncmp}
+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 file 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: src/bfd/archive.c
===================================================================
--- src.orig/bfd/archive.c	2011-02-26 23:07:15.222909100 +0100
+++ src/bfd/archive.c	2011-02-27 12:08:39.633505800 +0100
@@ -348,7 +348,7 @@ _bfd_find_nested_archive (bfd *arch_bfd,
        abfd != NULL;
        abfd = abfd->archive_next)
     {
-      if (strcmp (filename, abfd->filename) == 0)
+      if (filename_cmp (filename, abfd->filename) == 0)
         return abfd;
     }
   abfd = bfd_openr (filename, NULL);
@@ -1355,7 +1355,7 @@ adjust_relative_path (const char * path,
       while (*e2 && ! IS_DIR_SEPARATOR (*e2))
 	++e2;
       if (*e1 == '\0' || *e2 == '\0' || e1 - pathp != e2 - refp
-	  || strncmp (pathp, refp, e1 - pathp) != 0)
+	  || filename_ncmp (pathp, refp, e1 - pathp) != 0)
 	break;
       pathp = e1 + 1;
       refp = e2 + 1;
@@ -1460,7 +1460,7 @@ _bfd_construct_extended_name_table (bfd
           /* If the path is the same as the previous path seen,
              reuse it.  This can happen when flattening a thin
              archive that contains other archives.  */
-          if (last_filename && strcmp (last_filename, filename) == 0)
+          if (last_filename && filename_cmp (last_filename, filename) == 0)
             continue;
 
           last_filename = filename;
@@ -1506,7 +1506,7 @@ _bfd_construct_extended_name_table (bfd
       else
 	{
 	  struct ar_hdr *hdr = arch_hdr (current);
-	  if (strncmp (normal, hdr->ar_name, thislen) != 0
+	  if (filename_ncmp (normal, hdr->ar_name, thislen) != 0
 	      || (thislen < sizeof hdr->ar_name
 		  && hdr->ar_name[thislen] != ar_padchar (current)))
 	    {
@@ -1554,7 +1554,7 @@ _bfd_construct_extended_name_table (bfd
              archive that contains other archives.
              If the path is relative, adjust it relative to
              the containing archive.  */
-          if (last_filename && strcmp (last_filename, filename) == 0)
+          if (last_filename && filename_cmp (last_filename, filename) == 0)
             normal = last_filename;
           else if (! IS_ABSOLUTE_PATH (filename)
                    && ! IS_ABSOLUTE_PATH (abfd->filename))
Index: src/bfd/corefile.c
===================================================================
--- src.orig/bfd/corefile.c	2011-02-26 23:07:15.224909100 +0100
+++ src/bfd/corefile.c	2011-02-27 12:08:39.647506600 +0100
@@ -186,6 +186,6 @@ generic_core_file_matches_executable_p (
   if (last_slash != NULL)
     exec = last_slash + 1;
   
-  return strcmp (exec, core) == 0;
+  return filename_cmp (exec, core) == 0;
 }
 
Index: src/bfd/elf32-bfin.c
===================================================================
--- src.orig/bfd/elf32-bfin.c	2011-02-26 23:07:15.225909100 +0100
+++ src/bfd/elf32-bfin.c	2011-02-27 12:08:39.653507000 +0100
@@ -3103,10 +3103,10 @@ bfinfdpic_relocate_section (bfd * output
 	  if (silence_segment_error == 1)
 	    silence_segment_error =
 	      (strlen (input_bfd->filename) == 6
-	       && strcmp (input_bfd->filename, "crt0.o") == 0)
+	       && filename_cmp (input_bfd->filename, "crt0.o") == 0)
 	      || (strlen (input_bfd->filename) > 6
-		  && strcmp (input_bfd->filename
-			     + strlen (input_bfd->filename) - 7,
+		  && filename_cmp (input_bfd->filename
+				   + strlen (input_bfd->filename) - 7,
 			     "/crt0.o") == 0)
 	      ? -1 : 0;
 #endif
Index: src/bfd/elf32-frv.c
===================================================================
--- src.orig/bfd/elf32-frv.c	2011-02-26 23:07:15.226909100 +0100
+++ src/bfd/elf32-frv.c	2011-02-27 12:08:39.678508400 +0100
@@ -3957,10 +3957,10 @@ elf32_frv_relocate_section (output_bfd,
 	  if (silence_segment_error == 1)
 	    silence_segment_error =
 	      (strlen (input_bfd->filename) == 6
-	       && strcmp (input_bfd->filename, "crt0.o") == 0)
+	       && filename_cmp (input_bfd->filename, "crt0.o") == 0)
 	      || (strlen (input_bfd->filename) > 6
-		  && strcmp (input_bfd->filename
-			     + strlen (input_bfd->filename) - 7,
+		  && filename_cmp (input_bfd->filename
+				   + strlen (input_bfd->filename) - 7,
 			     "/crt0.o") == 0)
 	      ? -1 : 0;
 	  if (!silence_segment_error
Index: src/bfd/elf32-spu.c
===================================================================
--- src.orig/bfd/elf32-spu.c	2011-02-26 23:07:15.227909100 +0100
+++ src/bfd/elf32-spu.c	2011-02-27 12:08:39.704509900 +0100
@@ -4067,7 +4067,7 @@ sort_bfds (const void *a, const void *b)
   bfd *const *abfd1 = a;
   bfd *const *abfd2 = b;
 
-  return strcmp ((*abfd1)->filename, (*abfd2)->filename);
+  return filename_cmp ((*abfd1)->filename, (*abfd2)->filename);
 }
 
 static unsigned int
@@ -4299,7 +4299,7 @@ spu_elf_auto_overlay (struct bfd_link_in
 
       qsort (bfd_arr, bfd_count, sizeof (*bfd_arr), sort_bfds);
       for (i = 1; i < bfd_count; ++i)
-	if (strcmp (bfd_arr[i - 1]->filename, bfd_arr[i]->filename) == 0)
+	if (filename_cmp (bfd_arr[i - 1]->filename, bfd_arr[i]->filename) == 0)
 	  {
 	    if (bfd_arr[i - 1]->my_archive == bfd_arr[i]->my_archive)
 	      {
Index: src/bfd/syms.c
===================================================================
--- src.orig/bfd/syms.c	2011-02-26 23:07:15.229909100 +0100
+++ src/bfd/syms.c	2011-02-27 12:08:39.726511200 +0100
@@ -1386,8 +1386,8 @@ _bfd_stab_section_find_nearest_line (bfd
 
       dirlen = strlen (directory_name);
       if (info->filename == NULL
-	  || strncmp (info->filename, directory_name, dirlen) != 0
-	  || strcmp (info->filename + dirlen, file_name) != 0)
+	  || filename_ncmp (info->filename, directory_name, dirlen) != 0
+	  || filename_cmp (info->filename + dirlen, file_name) != 0)
 	{
 	  size_t len;
 
Index: src/bfd/xcofflink.c
===================================================================
--- src.orig/bfd/xcofflink.c	2011-02-26 23:07:15.230909100 +0100
+++ src/bfd/xcofflink.c	2011-02-27 12:08:39.737511800 +0100
@@ -758,9 +758,9 @@ xcoff_set_import_path (struct bfd_link_i
 	   *pp != NULL;
 	   pp = &(*pp)->next, ++c)
 	{
-	  if (strcmp ((*pp)->path, imppath) == 0
-	      && strcmp ((*pp)->file, impfile) == 0
-	      && strcmp ((*pp)->member, impmember) == 0)
+	  if (filename_cmp ((*pp)->path, imppath) == 0
+	      && filename_cmp ((*pp)->file, impfile) == 0
+	      && filename_cmp ((*pp)->member, impmember) == 0)
 	    break;
 	}
 
Index: src/bfd/xtensa-isa.c
===================================================================
--- src.orig/bfd/xtensa-isa.c	2011-02-26 23:07:15.238909100 +0100
+++ src/bfd/xtensa-isa.c	2011-02-27 12:08:39.763513300 +0100
@@ -1364,7 +1364,7 @@ xtensa_regfile_lookup (xtensa_isa isa, c
   /* The expected number of regfiles is small; use a linear search.  */
   for (n = 0; n < intisa->num_regfiles; n++)
     {
-      if (!strcmp (intisa->regfiles[n].name, name))
+      if (!filename_cmp (intisa->regfiles[n].name, name))
 	return n;
     }
 
@@ -1394,7 +1394,7 @@ xtensa_regfile_lookup_shortname (xtensa_
 	 as their parents.  */
       if (intisa->regfiles[n].parent != n)
 	continue;
-      if (!strcmp (intisa->regfiles[n].shortname, shortname))
+      if (!filename_cmp (intisa->regfiles[n].shortname, shortname))
 	return n;
     }
 

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [patch bfd libiberty]: Let binutils understand DOS-paths (1 of 4)
  2011-02-28  7:56 [patch bfd libiberty]: Let binutils understand DOS-paths (1 of 4) Kai Tietz
@ 2011-02-28 13:40 ` Nick Clifton
  2011-02-28 18:38   ` Kai Tietz
  0 siblings, 1 reply; 3+ messages in thread
From: Nick Clifton @ 2011-02-28 13:40 UTC (permalink / raw)
  To: Kai Tietz; +Cc: Binutils, DJ Delorie, Dave Korn

Hi Kai,

> ChangeLog bfd/
> 2011-02-28  Kai Tietz
>
> 	* archive.c (_bfd_find_nested_archive): Use filename_(n)cmp.
> 	(adjust_relative_path): Likewise.
> 	(_bfd_construct_extended_name_table): Likewise.
> 	* corefile.c (generic_core_file_matches_executable_p): Likewise.
> 	* elf32-bfin.c (bfinfdpic_relocate_section): Likewise.
> 	* elf32-frv.c (elf32_frv_relocate_section): Likewise.
> 	* elf32-spu.c (sort_bfds): Likewise.
> 	(spu_elf_auto_overlay): Likewise.
> 	* syms.c (_bfd_stab_section_find_nearest_line): Likewise.
> 	* xcofflink.c (xcoff_set_import_path): Likewise.
> 	* xtensa-isa.c (xtensa_regfile_lookup): Likewise.
> 	(xtensa_regfile_lookup_shortname): Likewise.

Approved - please apply.

Cheers
   Nick


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [patch bfd libiberty]: Let binutils understand DOS-paths (1 of 4)
  2011-02-28 13:40 ` Nick Clifton
@ 2011-02-28 18:38   ` Kai Tietz
  0 siblings, 0 replies; 3+ messages in thread
From: Kai Tietz @ 2011-02-28 18:38 UTC (permalink / raw)
  To: Nick Clifton; +Cc: Binutils, DJ Delorie, Dave Korn

2011/2/28 Nick Clifton <nickc@redhat.com>:
> Hi Kai,
>
>> ChangeLog bfd/
>> 2011-02-28  Kai Tietz
>>
>>        * archive.c (_bfd_find_nested_archive): Use filename_(n)cmp.
>>        (adjust_relative_path): Likewise.
>>        (_bfd_construct_extended_name_table): Likewise.
>>        * corefile.c (generic_core_file_matches_executable_p): Likewise.
>>        * elf32-bfin.c (bfinfdpic_relocate_section): Likewise.
>>        * elf32-frv.c (elf32_frv_relocate_section): Likewise.
>>        * elf32-spu.c (sort_bfds): Likewise.
>>        (spu_elf_auto_overlay): Likewise.
>>        * syms.c (_bfd_stab_section_find_nearest_line): Likewise.
>>        * xcofflink.c (xcoff_set_import_path): Likewise.
>>        * xtensa-isa.c (xtensa_regfile_lookup): Likewise.
>>        (xtensa_regfile_lookup_shortname): Likewise.
>
> Approved - please apply.
>
> Cheers
>  Nick
>
>
>

Applied.

Thanks,
Kai

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2011-02-28 18:38 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-02-28  7:56 [patch bfd libiberty]: Let binutils understand DOS-paths (1 of 4) Kai Tietz
2011-02-28 13:40 ` Nick Clifton
2011-02-28 18:38   ` Kai Tietz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).