1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Implementation of the symbol table type. 4 * 5 * Author : Stephen Smalley, <sds@tycho.nsa.gov> 6 */ 7 #include <linux/kernel.h> 8 #include <linux/string.h> 9 #include <linux/errno.h> 10 #include "symtab.h" 11 12 static unsigned int symhash(struct hashtab *h, const void *key) 13 { 14 const char *p, *keyp; 15 unsigned int size; 16 unsigned int val; 17 18 val = 0; 19 keyp = key; 20 size = strlen(keyp); 21 for (p = keyp; (p - keyp) < size; p++) 22 val = (val << 4 | (val >> (8*sizeof(unsigned int)-4))) ^ (*p); 23 return val & (h->size - 1); 24 } 25 26 static int symcmp(struct hashtab *h, const void *key1, const void *key2) 27 { 28 const char *keyp1, *keyp2; 29 30 keyp1 = key1; 31 keyp2 = key2; 32 return strcmp(keyp1, keyp2); 33 } 34 35 36 int symtab_init(struct symtab *s, unsigned int size) 37 { 38 s->nprim = 0; 39 return hashtab_init(&s->table, symhash, symcmp, size); 40 } 41 42