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
This commit is contained in:
Kai Tietz 2011-02-28 18:23:25 +00:00 committed by Kai Tietz
parent 80a832cd25
commit 9436925165
8 changed files with 90 additions and 3 deletions

View 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>

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

View 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;

View 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

View 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

View 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

View 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
}

View 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})