symtab.c (1125B)
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 12static unsigned int symhash(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; 24} 25 26static int symcmp(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 35static const struct hashtab_key_params symtab_key_params = { 36 .hash = symhash, 37 .cmp = symcmp, 38}; 39 40int symtab_init(struct symtab *s, unsigned int size) 41{ 42 s->nprim = 0; 43 return hashtab_init(&s->table, size); 44} 45 46int symtab_insert(struct symtab *s, char *name, void *datum) 47{ 48 return hashtab_insert(&s->table, name, datum, symtab_key_params); 49} 50 51void *symtab_search(struct symtab *s, const char *name) 52{ 53 return hashtab_search(&s->table, name, symtab_key_params); 54}