This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.

Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Move hash collision warnings undef ! be_quiet


On Wed, Aug 28, 2002 at 12:00:21AM -0700, Roland McGrath wrote:
> The fix is trivial (uint32_t in hashval.h).  I'll do it.

This is what I wrote (not tested yet though):

2002-08-28  Jakub Jelinek  <jakub@redhat.com>

	* locale/hashval.h: Allow using hash types other than unsigned long.
	* locale/loadarchive.c (hashval_t): Define.
	* locale/programs/locarchive.c: Include hashval.h directly instead
	of simple-hash.h.
	(compute_hashval, hashval_t): Define.

--- libc/locale/programs/locarchive.c.jj	Wed Aug 28 02:37:27 2002
+++ libc/locale/programs/locarchive.c	Wed Aug 28 03:09:24 2002
@@ -43,9 +43,14 @@
 #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.  */
+#define compute_hashval static inline compute_hashval
+#define hashval_t uint32_t
+#include "hashval.h"
+#undef compute_hashval
+
 extern const char *output_prefix;
 
 #define ARCHIVE_NAME LOCALEDIR "/locale-archive"
--- libc/locale/hashval.h.jj	Tue Aug 13 02:01:50 2002
+++ libc/locale/hashval.h	Wed Aug 28 03:06:25 2002
@@ -18,20 +18,27 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
-#ifndef	LONGBITS
+#ifndef hashval_t
+# define hashval_t unsigned long int
+# ifndef LONGBITS
+#  include <limits.h>
+#  define LONGBITS (sizeof (long int) * CHAR_BIT)
+# endif
+# define HASHVAL_T_BITS LONGBITS
+#elif !defined HASHVAL_T_BITS
 # include <limits.h>
-# define LONGBITS (sizeof (long int) * CHAR_BIT)
+# define HASHVAL_T_BITS (sizeof (hashval_t) * CHAR_BIT)
 #endif
 
-unsigned long int compute_hashval (const void *key, size_t keylen);
+hashval_t compute_hashval (const void *key, size_t keylen);
 
-unsigned long int
+hashval_t
 compute_hashval (key, keylen)
      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
@@ -41,8 +48,8 @@ compute_hashval (key, keylen)
   hval = keylen;
   while (cnt < keylen)
     {
-      hval = (hval << 9) | (hval >> (LONGBITS - 9));
-      hval += (unsigned long int) *(((char *) key) + cnt++);
+      hval = (hval << 9) | (hval >> (HASHVAL_T_BITS - 9));
+      hval += (hashval_t) *(((char *) key) + cnt++);
     }
-  return hval != 0 ? hval : ~((unsigned long int) 0);
+  return hval != 0 ? hval : ~((hashval_t) 0);
 }
--- libc/locale/loadarchive.c.jj	Sun Aug 25 16:58:57 2002
+++ libc/locale/loadarchive.c	Wed Aug 28 03:07:22 2002
@@ -35,6 +35,7 @@
 
 /* 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
 


	Jakub


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]