ChangeLog libiberty/
authorKai Tietz <kai.tietz@onevision.com>
Mon, 28 Feb 2011 18:30:16 +0000 (18:30 +0000)
committerKai Tietz <kai.tietz@onevision.com>
Mon, 28 Feb 2011 18:30:16 +0000 (18:30 +0000)
2011-02-28  Kai Tietz  <kai.tietz@onevision.com>

* filename_cmp.c (filename_ncmp): New function.
* functions.texi: Regenerated.

ChangeLog include/
2011-02-28  Kai Tietz  <kai.tietz@onevision.com>

* filenames.h (filename_ncmp): New prototype.

ChangeLog bfd/
2011-02-28  Kai Tietz  <kai.tietz@onevision.com>

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

14 files changed:
bfd/ChangeLog
bfd/archive.c
bfd/corefile.c
bfd/elf32-bfin.c
bfd/elf32-frv.c
bfd/elf32-spu.c
bfd/syms.c
bfd/xcofflink.c
bfd/xtensa-isa.c
include/ChangeLog
include/filenames.h
libiberty/ChangeLog
libiberty/filename_cmp.c
libiberty/functions.texi

index 53bf1cf13e2b711d255dcb0a89aefa88053ac446..e99450e20775d9e9607d12437dd2c027cefa83ef 100644 (file)
@@ -1,3 +1,18 @@
+2011-02-28  Kai Tietz  <kai.tietz@onevision.com>
+
+       * 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.
+
 2011-02-28  Alan Modra  <amodra@gmail.com>
 
        PR 12513
index c3aaffc59f5d3b2ffd0cb3446cd671f323788533..5abb25af5b0c93cf6806fed5325a9187126e1c2e 100644 (file)
@@ -348,7 +348,7 @@ _bfd_find_nested_archive (bfd *arch_bfd, const char *filename)
        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);
@@ -1359,7 +1359,7 @@ adjust_relative_path (const char * path, const char * ref_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;
@@ -1464,7 +1464,7 @@ _bfd_construct_extended_name_table (bfd *abfd,
           /* 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;
@@ -1510,7 +1510,7 @@ _bfd_construct_extended_name_table (bfd *abfd,
       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)))
            {
@@ -1558,7 +1558,7 @@ _bfd_construct_extended_name_table (bfd *abfd,
              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 605be8d33da1569edab9c2abc9b0bfa9cc7b58dc..bba0d1ca4f48c13d5e158f0a1ec61197394ad904 100644 (file)
@@ -186,6 +186,6 @@ generic_core_file_matches_executable_p (bfd *core_bfd, bfd *exec_bfd)
   if (last_slash != NULL)
     exec = last_slash + 1;
   
-  return strcmp (exec, core) == 0;
+  return filename_cmp (exec, core) == 0;
 }
 
index 8aba7edfe408969e5f3c34683ceb1572e866a4f4..40c2c0446b06e40612e0f1a99e2e5710c67b4e9d 100644 (file)
@@ -3103,10 +3103,10 @@ bfinfdpic_relocate_section (bfd * 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;
 #endif
index bce05403af99314ce2239f5c462afbf8b40d65ac..8cd26f14b5b9ab42bfed48fe07de3b109e3a3b02 100644 (file)
@@ -3957,10 +3957,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
          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 bcee155fddaf642de57466a7f7bde176a73f7a16..ae3ed10c4ed1b066d7f1d21f17c755abc201046c 100644 (file)
@@ -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_info *info)
 
       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 1f25d33815cda43c3d0315f37e68f9fa4eabefd4..e819eae16d6e1abb33c38837fec8ec01fde8d9b7 100644 (file)
@@ -1386,8 +1386,8 @@ _bfd_stab_section_find_nearest_line (bfd *abfd,
 
       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 d3e9043dc3f147b869aaae7ffb2236e92381a131..7ff920aeaaf0a6d441722f310d65510bff3c4194 100644 (file)
@@ -758,9 +758,9 @@ xcoff_set_import_path (struct bfd_link_info *info,
           *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 26deaaa7eac342ad20d8164a6b5ab69c3bab96c5..ba7408f6a15f430adb9bd46fd5461e7ffb877efd 100644 (file)
@@ -1364,7 +1364,7 @@ xtensa_regfile_lookup (xtensa_isa isa, const char *name)
   /* 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_isa isa, const char *shortname)
         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;
     }
 
index bbba38768188f5a03382ce9f56d08680511be6d5..fa904c7ed91414604655a0355f5baa6c3b2b4835 100644 (file)
@@ -1,3 +1,7 @@
+2011-02-28  Kai Tietz  <kai.tietz@onevision.com>
+
+       * filenames.h (filename_ncmp): New prototype.
+
 2011-02-23  Kai Tietz  <kai.tietz@onevision.com>
 
        * dwarf2.h (_ELF_DWARF2_H): Renamed to
index ca23d3253142436585bfb1c0c3d9793287fb0c61..d4955df661cf4f965a4e22806eeb350acccc4a79 100644 (file)
@@ -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 da4b2be6b9d6e3b795ed27f86f26481a0375c201..dc926382a8eaef38a8cd0e79c03d7733fdf189bc 100644 (file)
@@ -1,3 +1,8 @@
+2011-02-28  Kai Tietz  <kai.tietz@onevision.com>
+
+       * filename_cmp.c (filename_ncmp): New function.
+       * functions.texi: Regenerated.
+
 2011-02-03  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
 
        * splay-tree.c: Escape wrapping newlines in texinfo markup
index 0a4d0d85091709f6d15d15ba1fb3e608fa6e5413..0eed12086bfe41d00d9a593b3a60b7008b3d758f 100644 (file)
@@ -76,3 +76,52 @@ filename_cmp (const char *s1, const char *s2)
 #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 f6d0a23f1e642309d1404f5080e3b29825b3bc6c..c9df186be0f87df701ea02893e1f06d3801aa3d2 100644 (file)
@@ -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})