re PR debug/28047 (DWARF output_file_names should really understand DOS pathnames)
authorKai Tietz <kai.tietz@onevision.com>
Mon, 28 Feb 2011 18:23:25 +0000 (18:23 +0000)
committerKai Tietz <ktietz@gcc.gnu.org>
Mon, 28 Feb 2011 18:23:25 +0000 (19:23 +0100)
2011-02-28  Kai Tietz  <kai.tietz@onevision.com>

PR debug/28047
* dwarf2out.c (file_table_eq): Use filename_cmp instead of strcmp.
(lookup_filename): Likewise.
* final.c (remap_debug_filename): Use filename_ncmp instead of
strncmp.

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

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

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

* filenames.h (filename_ncmp): New prototype.

From-SVN: r170570

gcc/ChangeLog
gcc/dwarf2out.c
gcc/final.c
include/ChangeLog
include/filenames.h
libiberty/ChangeLog
libiberty/filename_cmp.c
libiberty/functions.texi

index c4c7a13052c4473f5ea8d9476fdc2cdba487eb45..b50ed6f2ab301ac87754fd2f990bad15bcd0534c 100644 (file)
@@ -1,3 +1,11 @@
+2011-02-28  Kai Tietz  <kai.tietz@onevision.com>
+
+       PR debug/28047
+       * dwarf2out.c (file_table_eq): Use filename_cmp instead of strcmp.
+       (lookup_filename): Likewise.
+       * final.c (remap_debug_filename): Use filename_ncmp instead of
+       strncmp.
+
 2011-02-28  Bernd Schmidt  <bernds@codesourcery.com>
            Jakub Jelinek  <jakub@redhat.com>
 
index fea820967f9ed1cec3dad4f6a3fa731661508b7c..1450e806556c0e65ad5926bf2ca0ae1e886c2b20 100644 (file)
@@ -21560,7 +21560,7 @@ file_table_eq (const void *p1_p, const void *p2_p)
   const struct dwarf_file_data *const p1 =
     (const struct dwarf_file_data *) p1_p;
   const char *const p2 = (const char *) p2_p;
-  return strcmp (p1->filename, p2) == 0;
+  return filename_cmp (p1->filename, p2) == 0;
 }
 
 static hashval_t
@@ -21591,7 +21591,7 @@ lookup_filename (const char *file_name)
      call matches this file name.  If so, return the index.  */
   if (file_table_last_lookup
       && (file_name == file_table_last_lookup->filename
-         || strcmp (file_table_last_lookup->filename, file_name) == 0))
+         || filename_cmp (file_table_last_lookup->filename, file_name) == 0))
     return file_table_last_lookup;
 
   /* Didn't match the previous lookup, search the table.  */
index ceb79744c414f8f4ed58d3774c5ba2c9e7609b6a..1e1424feabc28fbb2965e660efde3fed9c7320d8 100644 (file)
@@ -1492,7 +1492,7 @@ remap_debug_filename (const char *filename)
   size_t name_len;
 
   for (map = debug_prefix_maps; map; map = map->next)
-    if (strncmp (filename, map->old_prefix, map->old_len) == 0)
+    if (filename_ncmp (filename, map->old_prefix, map->old_len) == 0)
       break;
   if (!map)
     return filename;
index 709d9c60998e39b9169ae2db54643bc45471b102..c4ec00efe6d6edb1c6867e8c9466d778009a0f35 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})