Skip to content
Snippets Groups Projects
Select Git revision
  • f79e7aa61a41ca10fc248ef9bb1f344efe4b1a3d
  • master default protected
  • streebog
  • gost28147
  • master-updates
  • ed448
  • shake256
  • curve448
  • ecc-sqrt
  • gosthash94cp
  • cmac64
  • block16-refactor
  • siv-mode
  • cmac-layout
  • delete-des-compat
  • delete-rsa_blind
  • aes-struct-layout
  • release-3.4-fixes
  • struct-layout
  • attribute-deprecated
  • rename-data-symbols
  • nettle_3.5.1_release_20190627
  • nettle_3.5_release_20190626
  • nettle_3.5rc1
  • nettle_3.4.1_release_20181204
  • nettle_3.4.1rc1
  • nettle_3.4_release_20171119
  • nettle_3.4rc2
  • nettle_3.4rc1
  • nettle_3.3_release_20161001
  • nettle_3.2_release_20160128
  • nettle_3.1.1_release_20150424
  • nettle_3.1_release_20150407
  • nettle_3.1rc3
  • nettle_3.1rc2
  • nettle_3.1rc1
  • nettle_3.0_release_20140607
  • nettle_2.7.1_release_20130528
  • nettle_2.7_release_20130424
  • nettle_2.6_release_20130116
  • nettle_2.5_release_20120707
41 results

md5-test.c

Blame
  • Forked from Nettle / nettle
    Source project has a limited visibility.
    hashtable.c 3.60 KiB
    /*\
    ||| This file a part of Pike, and is copyright by Fredrik Hubinette
    ||| Pike is distributed as GPL (General Public License)
    ||| See the files COPYING and DISCLAIMER for more information.
    \*/
    #include "global.h"
    #include "hashtable.h"
    #include "stralloc.h"
    #include "stuff.h"
    #include "error.h"
    
    RCSID("$Id: hashtable.c,v 1.4 1998/03/28 15:14:56 grubba Exp $");
    
    static unsigned INT32 gobble(struct pike_string *s)
    {
      unsigned INT32 i;
      i=my_hash_string(s);
      i+=i >> 3;
      i+=i >> 7;
      i+=i >> 12;
      return i;
    }
    
    /*
     * Search hash for a specific string.
     */
    struct hash_entry *hash_lookup(struct hash_table *h, struct pike_string *s)
    {
      struct hash_entry *e, **prev, **base;
    
      if(!h) return 0;
      base = prev = h->htable + (gobble(s) & h->mask);
      for( ;(e = *prev); prev= &e->next)
      {
        if(s == e->s)
        {
          /* Teleport entry to beginning of line */
          *prev = e->next;
          e->next = *base;
          *base = e;
          /* Entry arrives in a puff of smoke. */
    
          return e;
        }
      }
      return 0;
    }
    
    /*
     * We want to keep the order of the hash chain, as it has been carefully
     * built up to be fast.
     */
    static void rehash_list_backwards(struct hash_table *h,
    				  struct hash_entry *n)
    {
      struct hash_entry **base;
      if(!n) return;
      rehash_list_backwards(h,n->next);
      base=h->htable + (gobble(n->s) & h->mask);
      n->next = *base;
      *base=n;
    }
    
    /*
     * create a new, empty hashable
    */
    struct hash_table *create_hash_table(void)
    {
      struct hash_table *new;
      new=(struct hash_table *)calloc(1,sizeof(struct hash_table)+