hash.c (50476) | hash.c (90779) |
---|---|
1/* 2 * Copyright (c) 1995 3 * Bill Paul <wpaul@ctr.columbia.edu>. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 24 unchanged lines hidden (view full) --- 33#include <stdio.h> 34#include <stdlib.h> 35#include <string.h> 36#include <sys/types.h> 37#include "hash.h" 38 39#ifndef lint 40static const char rcsid[] = | 1/* 2 * Copyright (c) 1995 3 * Bill Paul <wpaul@ctr.columbia.edu>. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 24 unchanged lines hidden (view full) --- 33#include <stdio.h> 34#include <stdlib.h> 35#include <string.h> 36#include <sys/types.h> 37#include "hash.h" 38 39#ifndef lint 40static const char rcsid[] = |
41 "$FreeBSD: head/libexec/mknetid/hash.c 50476 1999-08-28 00:22:10Z peter $"; | 41 "$FreeBSD: head/libexec/mknetid/hash.c 90779 2002-02-17 19:09:20Z imp $"; |
42#endif /* not lint */ 43 44/* 45 * This hash function is stolen directly from the 46 * Berkeley DB package. It already exists inside libc, but 47 * it's declared static which prevents us from calling it 48 * from here. 49 */ 50/* 51 * OZ's original sdbm hash 52 */ 53u_int32_t | 42#endif /* not lint */ 43 44/* 45 * This hash function is stolen directly from the 46 * Berkeley DB package. It already exists inside libc, but 47 * it's declared static which prevents us from calling it 48 * from here. 49 */ 50/* 51 * OZ's original sdbm hash 52 */ 53u_int32_t |
54hash(keyarg, len) 55 const void *keyarg; 56 register size_t len; | 54hash(const void *keyarg, size_t len) |
57{ | 55{ |
58 register const u_char *key; 59 register size_t loop; 60 register u_int32_t h; | 56 const u_char *key; 57 size_t loop; 58 u_int32_t h; |
61 62#define HASHC h = *key++ + 65599 * h 63 64 h = 0; 65 key = keyarg; 66 if (len > 0) { 67 loop = (len + 8 - 1) >> 3; 68 --- 28 unchanged lines hidden (view full) --- 97 return (h); 98} 99 100/* 101 * Generate a hash value for a given key (character string). 102 * We mask off all but the lower 8 bits since our table array 103 * can only hole 256 elements. 104 */ | 59 60#define HASHC h = *key++ + 65599 * h 61 62 h = 0; 63 key = keyarg; 64 if (len > 0) { 65 loop = (len + 8 - 1) >> 3; 66 --- 28 unchanged lines hidden (view full) --- 95 return (h); 96} 97 98/* 99 * Generate a hash value for a given key (character string). 100 * We mask off all but the lower 8 bits since our table array 101 * can only hole 256 elements. 102 */ |
105u_int32_t hashkey(key) 106 char *key; | 103u_int32_t hashkey(char *key) |
107{ 108 109 if (key == NULL) 110 return (-1); 111 return(hash((void *)key, strlen(key)) & HASH_MASK); 112} 113 114/* Find an entry in the hash table (may be hanging off a linked list). */ | 104{ 105 106 if (key == NULL) 107 return (-1); 108 return(hash((void *)key, strlen(key)) & HASH_MASK); 109} 110 111/* Find an entry in the hash table (may be hanging off a linked list). */ |
115struct grouplist *lookup(table, key) 116 struct member_entry *table[]; 117 char *key; | 112struct grouplist *lookup(struct member_entry *table[], char *key) |
118{ 119 struct member_entry *cur; 120 121 cur = table[hashkey(key)]; 122 123 while (cur) { 124 if (!strcmp(cur->key, key)) 125 return(cur->groups); 126 cur = cur->next; 127 } 128 129 return(NULL); 130} 131 132struct grouplist dummy = { 99999, NULL }; 133 134/* 135 * Store an group member entry and/or update its grouplist. 136 */ | 113{ 114 struct member_entry *cur; 115 116 cur = table[hashkey(key)]; 117 118 while (cur) { 119 if (!strcmp(cur->key, key)) 120 return(cur->groups); 121 cur = cur->next; 122 } 123 124 return(NULL); 125} 126 127struct grouplist dummy = { 99999, NULL }; 128 129/* 130 * Store an group member entry and/or update its grouplist. 131 */ |
137void mstore (table, key, gid, dup) 138 struct member_entry *table[]; 139 char *key; 140 int gid; 141 int dup; | 132void mstore (struct member_entry *table[], char *key, int gid, int dup) |
142{ 143 struct member_entry *cur, *new; 144 struct grouplist *tmp; 145 u_int32_t i; 146 147 i = hashkey(key); 148 cur = table[i]; 149 --- 28 unchanged lines hidden --- | 133{ 134 struct member_entry *cur, *new; 135 struct grouplist *tmp; 136 u_int32_t i; 137 138 i = hashkey(key); 139 cur = table[i]; 140 --- 28 unchanged lines hidden --- |