X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Fhash.c;h=129ead1a830b478ec8f27c8cc662611068d1a971;hp=b5acfc2238aeb699349fb06d27b1762ca48b7509;hb=38a7829dcb4eb5dba28dbf0f05c6a80fea9217f8;hpb=86395b297b58c8c9b43d7ca8c42b831d4926dac6 diff --git a/src/hash.c b/src/hash.c index b5acfc22..129ead1a 100644 --- a/src/hash.c +++ b/src/hash.c @@ -1,6 +1,6 @@ /* Hash tables. - Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free - Software Foundation, Inc. + Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, + 2009, 2010, 2011 Free Software Foundation, Inc. This file is part of GNU Wget. @@ -31,8 +31,8 @@ as that of the covered work. */ /* With -DSTANDALONE, this file can be compiled outside Wget source tree. To test, also use -DTEST. */ -#ifdef HAVE_CONFIG_H -# include +#ifndef STANDALONE +# include "wget.h" #endif #include @@ -43,7 +43,6 @@ as that of the covered work. */ #ifndef STANDALONE /* Get Wget's utility headers. */ -# include "wget.h" # include "utils.h" #else /* Make do without them. */ @@ -55,9 +54,9 @@ as that of the covered work. */ # define countof(x) (sizeof (x) / sizeof ((x)[0])) # endif # include -# define TOLOWER(x) tolower ((unsigned char) (x)) -# if __STDC_VERSION__ >= 199901L -# include /* for uintptr_t */ +# define c_tolower(x) tolower ((unsigned char) (x)) +# ifdef HAVE_STDINT_H +# include # else typedef unsigned long uintptr_t; # endif @@ -227,7 +226,7 @@ prime_size (int size, int *prime_offset) 243370577, 316381771, 411296309, 534685237, 695090819, 903618083, 1174703521, 1527114613, 1837299131, 2147483647 }; - int i; + size_t i; for (i = *prime_offset; i < countof (primes); i++) if (primes[i] >= size) @@ -424,14 +423,14 @@ grow_hash_table (struct hash_table *ht) table if necessary. */ void -hash_table_put (struct hash_table *ht, const void *key, void *value) +hash_table_put (struct hash_table *ht, const void *key, const void *value) { struct cell *c = find_cell (ht, key); if (CELL_OCCUPIED (c)) { /* update existing item */ c->key = (void *)key; /* const? */ - c->value = value; + c->value = (void *)value; return; } @@ -446,7 +445,7 @@ hash_table_put (struct hash_table *ht, const void *key, void *value) /* add new item */ ++ht->count; c->key = (void *)key; /* const? */ - c->value = value; + c->value = (void *)value; } /* Remove KEY->value mapping from HT. Return 0 if there was no such @@ -631,7 +630,7 @@ hash_table_count (const struct hash_table *ht) * Support for hash tables whose keys are strings. * */ - + /* Base 31 hash function. Taken from Gnome's glib, modified to use standard C types. @@ -644,11 +643,11 @@ hash_string (const void *key) { const char *p = key; unsigned int h = *p; - + if (h) for (p += 1; *p != '\0'; p++) h = (h << 5) - h + *p; - + return h; } @@ -681,12 +680,12 @@ static unsigned long hash_string_nocase (const void *key) { const char *p = key; - unsigned int h = TOLOWER (*p); - + unsigned int h = c_tolower (*p); + if (h) for (p += 1; *p != '\0'; p++) - h = (h << 5) - h + TOLOWER (*p); - + h = (h << 5) - h + c_tolower (*p); + return h; }