[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bash minor code cleanup for 'long' in hashlib.c
From: |
Paul Eggert |
Subject: |
bash minor code cleanup for 'long' in hashlib.c |
Date: |
Thu, 12 Apr 2001 14:48:12 -0700 (PDT) |
Configuration Information [Automatically generated, do not change]:
Machine: sparc
OS: solaris2.8
Compiler: gcc
Compilation CFLAGS: -DPROGRAM='bash' -DCONF_HOSTTYPE='sparc'
-DCONF_OSTYPE='solaris2.8' -DCONF_MACHTYPE='sparc-sun-solaris2.8'
-DCONF_VENDOR='sun' -DSHELL -DHAVE_CONFIG_H -I. -I. -I./include -I./lib
-I/opt/reb/include -g -O2 -Wall
uname output: SunOS shade.twinsun.com 5.8 Generic_108528-06 sun4u sparc
SUNW,Ultra-1
Machine Type: sparc-sun-solaris2.8
Bash Version: 2.05
Patch Level: 0
Release Status: release
Description:
This patch doesn't fix any bugs; it's just a minor coding cleanup.
hash_string uses 'unsigned long' and discards information,
where plain 'unsigned' would work, would be simpler, and would
discard less info.
Perhaps the code is written the way it is to avoid an old compiler
bug? In that case, perhaps it should be commented that way.
Repeat-By:
Fix:
2001-04-12 Paul Eggert <eggert@twinsun.com>
* hashlib.c (ALL_ONES, BITS): Remove.
(hash_string): Don't discard information above the bottom 31 bits.
===================================================================
RCS file: RCS/hashlib.c,v
retrieving revision 2.5
retrieving revision 2.5.0.1
diff -pu -r2.5 -r2.5.0.1
--- hashlib.c 2001/02/14 21:58:55 2.5
+++ hashlib.c 2001/04/12 21:44:05 2.5.0.1
@@ -68,10 +68,7 @@ make_hash_table (buckets)
for STRING. TABLE is a pointer to a HASH_TABLE. */
/* A possibly better distribution may be obtained by initializing i to
- ~0UL and using i = (i * 31) + *string++ as the step */
-
-#define ALL_ONES (~((unsigned long) 0))
-#define BITS(h, n) ((unsigned long)(h) & ~(ALL_ONES << (n)))
+ -1 and using i = (i * 31) + *string++ as the step */
int
hash_string (string, table)
@@ -83,7 +80,8 @@ hash_string (string, table)
while (*string)
i = (i << 2) + *string++;
- return (BITS (i, 31) % table->nbuckets);
+ /* unsigned%int uses unsigned division, so the result can't be negative. */
+ return (i % table->nbuckets);
}
/* Return a pointer to the hashed item, or NULL if the item
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- bash minor code cleanup for 'long' in hashlib.c,
Paul Eggert <=