From 93e5ea26d9fc60860ed7d5cf031dc7c32386f6c3 Mon Sep 17 00:00:00 2001 From: Doug Evans Date: Fri, 13 Jul 2012 23:39:45 +0000 Subject: include/ * filenames.h: #include "hashtab.h". (filename_hash, filename_eq): Declare. libiberty/ * filename_cmp.c (filename_hash, filename_eq): New functions. --- libiberty/ChangeLog | 4 ++++ libiberty/filename_cmp.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) (limited to 'libiberty') diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index 9628e2c4ae3..4ece5ab7474 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,7 @@ +2012-07-13 Doug Evans + + * filename_cmp.c (filename_hash, filename_eq): New functions. + 2012-06-29 Andreas Schwab * copying-lib.texi (Library Copying): Don't use @heading inside diff --git a/libiberty/filename_cmp.c b/libiberty/filename_cmp.c index 5179f8dd14f..9e16d242086 100644 --- a/libiberty/filename_cmp.c +++ b/libiberty/filename_cmp.c @@ -141,3 +141,52 @@ filename_ncmp (const char *s1, const char *s2, size_t n) return 0; #endif } + +/* + +@deftypefn Extension hashval_t filename_hash (const void *@var{s}) + +Return the hash value for file name @var{s} that will be compared +using filename_cmp. +This function is for use with hashtab.c hash tables. + +@end deftypefn + +*/ + +hashval_t +filename_hash (const void *s) +{ + /* The cast is for -Wc++-compat. */ + const unsigned char *str = (const unsigned char *) s; + hashval_t r = 0; + unsigned char c; + + while ((c = *str++) != 0) + { + if (c == '\\') + c = '/'; + c = TOLOWER (c); + r = r * 67 + c - 113; + } + + return r; +} + +/* + +@deftypefn Extension int filename_eq (const void *@var{s1}, const void *@var{s2}) + +Return non-zero if file names @var{s1} and @var{s2} are equivalent. +This function is for use with hashtab.c hash tables. + +@end deftypefn + +*/ + +int +filename_eq (const void *s1, const void *s2) +{ + /* The casts are for -Wc++-compat. */ + return filename_cmp ((const char *) s1, (const char *) s2) == 0; +} -- cgit v1.2.1