]> sjero.net Git - wget/blobdiff - src/hash.c
[svn] Remove K&R support.
[wget] / src / hash.c
index 195e23eaeb4e36b22a362882d4cb09e688f2956e..e344092e5e5b61876b58c7e96185c8ea06364a21 100644 (file)
@@ -30,26 +30,15 @@ so, delete this exception statement from your version.  */
 /* With -DSTANDALONE, this file can be compiled outside Wget source
    tree.  To test, also use -DTEST.  */
 
-#ifndef STANDALONE
+#ifdef HAVE_CONFIG_H
 # include <config.h>
-# ifdef HAVE_STRING_H
-#  include <string.h>
-# else
-#  include <strings.h>
-# endif
-# ifdef HAVE_LIMITS_H
-#  include <limits.h>
-# endif
-#else
-/* If running without Autoconf, go ahead and assume presence of
-   standard C89 headers.  */
-# include <string.h>
-# include <limits.h>
 #endif
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <assert.h>
+#include <string.h>
+#include <limits.h>
 
 #ifndef STANDALONE
 /* Get Wget's utility headers. */
@@ -64,7 +53,6 @@ so, delete this exception statement from your version.  */
 # define xfree free
 # define countof(x) (sizeof (x) / sizeof ((x)[0]))
 # define TOLOWER(x) ('A' <= (x) && (x) <= 'Z' ? (x) - 32 : (x))
-# define PARAMS(x) x
 #endif
 
 #include "hash.h"
@@ -152,8 +140,8 @@ struct mapping {
   void *value;
 };
 
-typedef unsigned long (*hashfun_t) PARAMS ((const void *));
-typedef int (*testfun_t) PARAMS ((const void *, const void *));
+typedef unsigned long (*hashfun_t) (const void *);
+typedef int (*testfun_t) (const void *, const void *);
 
 struct hash_table {
   hashfun_t hash_function;
@@ -180,7 +168,7 @@ struct hash_table {
    -1.  This is acceptable because it still allows the use of
    nonnegative integer keys.  */
 
-#define INVALID_PTR ((void *) ~(unsigned long)0)
+#define INVALID_PTR ((void *) ~0UL)
 #ifndef UCHAR_MAX
 # define UCHAR_MAX 0xff
 #endif
@@ -214,7 +202,7 @@ struct hash_table {
 static int
 prime_size (int size, int *prime_offset)
 {
-  static const unsigned long primes [] = {
+  static const int primes[] = {
     13, 19, 29, 41, 59, 79, 107, 149, 197, 263, 347, 457, 599, 787, 1031,
     1361, 1777, 2333, 3037, 3967, 5167, 6719, 8737, 11369, 14783,
     19219, 24989, 32491, 42257, 54941, 71429, 92861, 120721, 156941,
@@ -223,8 +211,7 @@ prime_size (int size, int *prime_offset)
     10445899, 13579681, 17653589, 22949669, 29834603, 38784989,
     50420551, 65546729, 85210757, 110774011, 144006217, 187208107,
     243370577, 316381771, 411296309, 534685237, 695090819, 903618083,
-    1174703521, 1527114613, 1985248999,
-    (unsigned long)0x99d43ea5, (unsigned long)0xc7fa5177
+    1174703521, 1527114613, 1837299131, 2147483647
   };
   int i;
 
@@ -241,11 +228,9 @@ prime_size (int size, int *prime_offset)
       }
 
   abort ();
-  return 0;
 }
 
-static unsigned long ptrhash PARAMS ((const void *));
-static int ptrcmp PARAMS ((const void *, const void *));
+static int cmp_pointer (const void *, const void *);
 
 /* Create a hash table with hash function HASH_FUNCTION and test
    function TEST_FUNCTION.  The table is empty (its count is 0), but
@@ -279,8 +264,8 @@ hash_table_new (int items,
   int size;
   struct hash_table *ht = xnew (struct hash_table);
 
-  ht->hash_function = hash_function ? hash_function : ptrhash;
-  ht->test_function = test_function ? test_function : ptrcmp;
+  ht->hash_function = hash_function ? hash_function : hash_pointer;
+  ht->test_function = test_function ? test_function : cmp_pointer;
 
   /* If the size of struct hash_table ever becomes a concern, this
      field can go.  (Wget doesn't create many hashes.)  */
@@ -553,7 +538,7 @@ hash_table_count (const struct hash_table *ht)
    don't strictly belong to this file.  However, this is as good a
    place for them as any.  */
 
-/* Rules for creating custom hash and test functions:
+/* Guidelines for creating custom hash and test functions:
 
    - The test function returns non-zero for keys that are considered
      "equal", zero otherwise.
@@ -596,8 +581,8 @@ hash_table_count (const struct hash_table *ht)
    We used to use the popular hash function from the Dragon Book, but
    this one seems to perform much better.  */
 
-unsigned long
-string_hash (const void *key)
+static unsigned long
+hash_string (const void *key)
 {
   const char *p = key;
   unsigned int h = *p;
@@ -611,8 +596,8 @@ string_hash (const void *key)
 
 /* Frontend for strcmp usable for hash tables. */
 
-int
-string_cmp (const void *s1, const void *s2)
+static int
+cmp_string (const void *s1, const void *s2)
 {
   return !strcmp ((const char *)s1, (const char *)s2);
 }
@@ -623,7 +608,7 @@ string_cmp (const void *s1, const void *s2)
 struct hash_table *
 make_string_hash_table (int items)
 {
-  return hash_table_new (items, string_hash, string_cmp);
+  return hash_table_new (items, hash_string, cmp_string);
 }
 
 /*
@@ -632,10 +617,10 @@ make_string_hash_table (int items)
  *
  */
 
-/* Like string_hash, but produce the same hash regardless of the case. */
+/* Like hash_string, but produce the same hash regardless of the case. */
 
 static unsigned long
-string_hash_nocase (const void *key)
+hash_string_nocase (const void *key)
 {
   const char *p = key;
   unsigned int h = TOLOWER (*p);
@@ -661,7 +646,7 @@ string_cmp_nocase (const void *s1, const void *s2)
 struct hash_table *
 make_nocase_string_hash_table (int items)
 {
-  return hash_table_new (items, string_hash_nocase, string_cmp_nocase);
+  return hash_table_new (items, hash_string_nocase, string_cmp_nocase);
 }
 
 /* Hashing of numeric values, such as pointers and integers.
@@ -671,8 +656,8 @@ make_nocase_string_hash_table (int items)
    spreading of values and doesn't need to know the hash table size to
    work (unlike the very popular Knuth's multiplication hash).  */
 
-static unsigned long
-ptrhash (const void *ptr)
+unsigned long
+hash_pointer (const void *ptr)
 {
   unsigned long key = (unsigned long)ptr;
   key += (key << 12);
@@ -697,7 +682,7 @@ ptrhash (const void *ptr)
 }
 
 static int
-ptrcmp (const void *ptr1, const void *ptr2)
+cmp_pointer (const void *ptr1, const void *ptr2)
 {
   return ptr1 == ptr2;
 }