* locale/hashval.h (compute_hashval): Use prototype defn.
(hashval_t): New macro, defined to unsigned long int
if not already defined.
(compute_hashval): Return hashval_t instead of unsigned long int.
* locale/loadarchive.c (hashval_t): New macro.
* locale/programs/locarchive.c: Include hashval.h directly instead
of simple-hash.h.
(compute_hashval, hashval_t): Define these macros first.
(insert_name): Use archive_hashval instead of compute_hashval.
(add_locale, delete_locales_from_archive): Likewise.
2002-08-28 Jakub Jelinek <jakub@redhat.com>
2002-08-28 Jakub Jelinek <jakub@redhat.com>
+ Roland McGrath <roland@redhat.com>
+
+ * locale/hashval.h (compute_hashval): Use prototype defn.
+ (hashval_t): New macro, defined to unsigned long int
+ if not already defined.
+ (compute_hashval): Return hashval_t instead of unsigned long int.
+ * locale/loadarchive.c (hashval_t): New macro.
+ * locale/programs/locarchive.c: Include hashval.h directly instead
+ of simple-hash.h.
+ (compute_hashval, hashval_t): Define these macros first.
+ (insert_name): Use archive_hashval instead of compute_hashval.
+ (add_locale, delete_locales_from_archive): Likewise.
+
+2002-08-28 Jakub Jelinek <jakub@redhat.com>
* locale/programs/locarchive.c (insert_name): Suppress warnings about
hash collisions if be_quiet.
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
-#ifndef LONGBITS
-# include <limits.h>
-# define LONGBITS (sizeof (long int) * CHAR_BIT)
+#ifndef hashval_t
+# define hashval_t unsigned long int
#endif
+#include <limits.h> /* For CHAR_BIT. */
-unsigned long int compute_hashval (const void *key, size_t keylen);
-
-unsigned long int
-compute_hashval (key, keylen)
- const void *key;
- size_t keylen;
+hashval_t
+compute_hashval (const void *key, size_t keylen)
{
size_t cnt;
- unsigned long int hval;
+ hashval_t hval;
/* Compute the hash value for the given string. The algorithm
is taken from [Aho,Sethi,Ullman], modified to reduce the number of
hval = keylen;
while (cnt < keylen)
{
- hval = (hval << 9) | (hval >> (LONGBITS - 9));
- hval += (unsigned long int) *(((char *) key) + cnt++);
+ hval = (hval << 9) | (hval >> (sizeof hval * CHAR_BIT - 9));
+ hval += (hashval_t) *(((char *) key) + cnt++);
}
- return hval != 0 ? hval : ~((unsigned long int) 0);
+ return hval != 0 ? hval : ~((hashval_t) 0);
}
/* Define the hash function. We define the function as static inline. */
#define compute_hashval static inline compute_hashval
+#define hashval_t uint32_t
#include "hashval.h"
#undef compute_hashval
#include "../../crypt/md5.h"
#include "../localeinfo.h"
#include "../locarchive.h"
-#include "simple-hash.h"
#include "localedef.h"
+/* Define the hash function. We define the function as static inline.
+ We must change the name so as not to conflict with simple-hash.h. */
+#define compute_hashval static inline archive_hashval
+#define hashval_t uint32_t
+#include "hashval.h"
+#undef compute_hashval
+
extern const char *output_prefix;
#define ARCHIVE_NAME LOCALEDIR "/locale-archive"
unsigned int insert_idx, idx, incr;
/* Hash value of the locale name. */
- uint32_t hval = compute_hashval (name, name_len);
+ uint32_t hval = archive_hashval (name, name_len);
insert_idx = -1;
idx = hval % head->namehash_size;
/* Compute the hash value of the checksum to determine a
starting point for the search in the MD5 hash value
table. */
- hval = compute_hashval (data[cnt].sum, 16);
+ hval = archive_hashval (data[cnt].sum, 16);
idx = hval % head->sumhash_size;
incr = 1 + hval % (head->sumhash_size - 2);
error (EXIT_FAILURE, errno, _("cannot add to locale archive"));
/* Add the hash value to the hash table. */
- md5hval = compute_hashval (data[cnt].sum, 16);
+ md5hval = archive_hashval (data[cnt].sum, 16);
idx = md5hval % head->sumhash_size;
incr = 1 + md5hval % (head->sumhash_size - 2);
unsigned int incr;
/* Search for this locale in the archive. */
- hval = compute_hashval (locname, strlen (locname));
+ hval = archive_hashval (locname, strlen (locname));
idx = hval % head->namehash_size;
incr = 1 + hval % (head->namehash_size - 2);