URI:
       tmk: fix hash function (#315) - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 26cae02da740b05da97868b517c58b05f0e37e07
   DIR parent 6bddb06b710066a4086dbe77822d02cafecb935b
  HTML Author: Neven Sajko <nsajko@gmail.com>
       Date:   Tue, 14 Jan 2020 04:05:03 +0100
       
       mk: fix hash function (#315)
       
       Avoid signed integer overflow using ulong instead of long h.
       
       Diffstat:
         M src/cmd/mk/symtab.c                 |      10 +++-------
       
       1 file changed, 3 insertions(+), 7 deletions(-)
       ---
   DIR diff --git a/src/cmd/mk/symtab.c b/src/cmd/mk/symtab.c
       t@@ -1,7 +1,7 @@
        #include        "mk.h"
        
        #define        NHASH        4099
       -#define        HASHMUL        79L        /* this is a good value */
       +#define        HASHMUL        79UL        /* this is a good value */
        static Symtab *hash[NHASH];
        
        void
       t@@ -21,14 +21,12 @@ syminit(void)
        Symtab *
        symlook(char *sym, int space, void *install)
        {
       -        long h;
       +        ulong h;
                char *p;
                Symtab *s;
        
                for(p = sym, h = space; *p; h += *p++)
                        h *= HASHMUL;
       -        if(h < 0)
       -                h = ~h;
                h %= NHASH;
                for(s = hash[h]; s; s = s->next)
                        if((s->space == space) && (strcmp(s->name, sym) == 0))
       t@@ -47,7 +45,7 @@ symlook(char *sym, int space, void *install)
        void
        symdel(char *sym, int space)
        {
       -        long h;
       +        ulong h;
                char *p;
                Symtab *s, *ls;
        
       t@@ -55,8 +53,6 @@ symdel(char *sym, int space)
        
                for(p = sym, h = space; *p; h += *p++)
                        h *= HASHMUL;
       -        if(h < 0)
       -                h = ~h;
                h %= NHASH;
                for(s = hash[h], ls = 0; s; ls = s, s = s->next)
                        if((s->space == space) && (strcmp(s->name, sym) == 0)){