diff options
author | Kai Tietz <kai.tietz@onevision.com> | 2011-02-28 18:30:16 +0000 |
---|---|---|
committer | Kai Tietz <kai.tietz@onevision.com> | 2011-02-28 18:30:16 +0000 |
commit | 007d618909cb8e7f1c51f296a52f9729e85bf781 (patch) | |
tree | cf2bea1986860227cebbe8b356e4b0a714a20722 /libiberty/filename_cmp.c | |
parent | 92e961922ae75933555e2230ff8ec35e437cb95d (diff) | |
download | gdb-007d618909cb8e7f1c51f296a52f9729e85bf781.zip gdb-007d618909cb8e7f1c51f296a52f9729e85bf781.tar.gz gdb-007d618909cb8e7f1c51f296a52f9729e85bf781.tar.bz2 |
ChangeLog libiberty/
2011-02-28 Kai Tietz <kai.tietz@onevision.com>
* filename_cmp.c (filename_ncmp): New function.
* functions.texi: Regenerated.
ChangeLog include/
2011-02-28 Kai Tietz <kai.tietz@onevision.com>
* filenames.h (filename_ncmp): New prototype.
ChangeLog bfd/
2011-02-28 Kai Tietz <kai.tietz@onevision.com>
* archive.c (_bfd_find_nested_archive): Use filename_(n)cmp.
(adjust_relative_path): Likewise.
(_bfd_construct_extended_name_table): Likewise.
* corefile.c (generic_core_file_matches_executable_p): Likewise.
* elf32-bfin.c (bfinfdpic_relocate_section): Likewise.
* elf32-frv.c (elf32_frv_relocate_section): Likewise.
* elf32-spu.c (sort_bfds): Likewise.
(spu_elf_auto_overlay): Likewise.
* syms.c (_bfd_stab_section_find_nearest_line): Likewise.
* xcofflink.c (xcoff_set_import_path): Likewise.
* xtensa-isa.c (xtensa_regfile_lookup): Likewise.
(xtensa_regfile_lookup_shortname): Likewise.
Diffstat (limited to 'libiberty/filename_cmp.c')
-rw-r--r-- | libiberty/filename_cmp.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/libiberty/filename_cmp.c b/libiberty/filename_cmp.c index 0a4d0d8..0eed120 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 +} |