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>
Jakub Jelinek <jakub@redhat.com>
......
......@@ -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. */
......
......@@ -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;
......
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
......
......@@ -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
......
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
......
......@@ -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
}
......@@ -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})
......
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