aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>2011-02-28 18:23:25 +0000
committerktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>2011-02-28 18:23:25 +0000
commit875ffd1d934c038e3651f6d67b9a37a5c8a809f8 (patch)
tree07ad443dd995197f3280e34b7b9dce263c7e22f2
parent943d87235ae515aac8c081a29997c022429b78af (diff)
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@170570 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/dwarf2out.c4
-rw-r--r--gcc/final.c2
-rw-r--r--include/ChangeLog4
-rw-r--r--include/filenames.h3
-rw-r--r--libiberty/ChangeLog5
-rw-r--r--libiberty/filename_cmp.c49
-rw-r--r--libiberty/functions.texi18
8 files changed, 90 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c4c7a13052c..b50ed6f2ab3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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>
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index fea820967f9..1450e806556 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -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. */
diff --git a/gcc/final.c b/gcc/final.c
index ceb79744c41..1e1424feabc 100644
--- a/gcc/final.c
+++ b/gcc/final.c
@@ -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;
diff --git a/include/ChangeLog b/include/ChangeLog
index 709d9c60998..c4ec00efe6d 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -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
diff --git a/include/filenames.h b/include/filenames.h
index ca23d325314..d4955df661c 100644
--- a/include/filenames.h
+++ b/include/filenames.h
@@ -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
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index da4b2be6b9d..dc926382a8e 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -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
diff --git a/libiberty/filename_cmp.c b/libiberty/filename_cmp.c
index 0a4d0d85091..0eed12086bf 100644
--- a/libiberty/filename_cmp.c
+++ b/libiberty/filename_cmp.c
@@ -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
+}
diff --git a/libiberty/functions.texi b/libiberty/functions.texi
index f6d0a23f1e6..c9df186be0f 100644
--- a/libiberty/functions.texi
+++ b/libiberty/functions.texi
@@ -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})