Commit 94369251 by Kai Tietz Committed by Kai Tietz

re PR debug/28047 (DWARF output_file_names should really understand DOS pathnames)

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
parent 80a832cd
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> 2011-02-28 Bernd Schmidt <bernds@codesourcery.com>
Jakub Jelinek <jakub@redhat.com> Jakub Jelinek <jakub@redhat.com>
......
...@@ -21560,7 +21560,7 @@ file_table_eq (const void *p1_p, const void *p2_p) ...@@ -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 *const p1 =
(const struct dwarf_file_data *) p1_p; (const struct dwarf_file_data *) p1_p;
const char *const p2 = (const char *) p2_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 static hashval_t
...@@ -21591,7 +21591,7 @@ lookup_filename (const char *file_name) ...@@ -21591,7 +21591,7 @@ lookup_filename (const char *file_name)
call matches this file name. If so, return the index. */ call matches this file name. If so, return the index. */
if (file_table_last_lookup if (file_table_last_lookup
&& (file_name == file_table_last_lookup->filename && (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; return file_table_last_lookup;
/* Didn't match the previous lookup, search the table. */ /* Didn't match the previous lookup, search the table. */
......
...@@ -1492,7 +1492,7 @@ remap_debug_filename (const char *filename) ...@@ -1492,7 +1492,7 @@ remap_debug_filename (const char *filename)
size_t name_len; size_t name_len;
for (map = debug_prefix_maps; map; map = map->next) 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; break;
if (!map) if (!map)
return filename; return filename;
......
2011-02-28 Kai Tietz <kai.tietz@onevision.com>
* filenames.h (filename_ncmp): New prototype.
2011-02-23 Kai Tietz <kai.tietz@onevision.com> 2011-02-23 Kai Tietz <kai.tietz@onevision.com>
* dwarf2.h (_ELF_DWARF2_H): Renamed to * dwarf2.h (_ELF_DWARF2_H): Renamed to
......
...@@ -73,6 +73,9 @@ extern "C" { ...@@ -73,6 +73,9 @@ extern "C" {
extern int filename_cmp (const char *s1, const char *s2); extern int filename_cmp (const char *s1, const char *s2);
#define FILENAME_CMP(s1, s2) filename_cmp(s1, 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 #ifdef __cplusplus
} }
#endif #endif
......
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> 2011-02-03 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
* splay-tree.c: Escape wrapping newlines in texinfo markup * splay-tree.c: Escape wrapping newlines in texinfo markup
......
...@@ -76,3 +76,52 @@ filename_cmp (const char *s1, const char *s2) ...@@ -76,3 +76,52 @@ filename_cmp (const char *s1, const char *s2)
#endif #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
}
...@@ -296,6 +296,24 @@ and backward slashes are equal. ...@@ -296,6 +296,24 @@ and backward slashes are equal.
@end deftypefn @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 @c fnmatch.txh:1
@deftypefn Replacement int fnmatch (const char *@var{pattern}, @ @deftypefn Replacement int fnmatch (const char *@var{pattern}, @
const char *@var{string}, int @var{flags}) const char *@var{string}, int @var{flags})
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment