2011-02-28 Kai Tietz <kai.tietz@onevision.com>
authorktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 28 Feb 2011 18:23:25 +0000 (18:23 +0000)
committerktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 28 Feb 2011 18:23:25 +0000 (18:23 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@170570 138bc75d-0d04-0410-961f-82ee72b054a4

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

index c4c7a13..b50ed6f 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 fea8209..1450e80 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 ceb7974..1e1424f 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 709d9c6..c4ec00e 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 ca23d32..d4955df 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 da4b2be..dc92638 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 0a4d0d8..0eed120 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 f6d0a23..c9df186 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})