Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at for-next 56 lines 1.1 kB view raw
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Implementation of the symbol table type. 4 * 5 * Author : Stephen Smalley, <stephen.smalley.work@gmail.com> 6 */ 7 8#include <linux/kernel.h> 9#include <linux/string.h> 10#include <linux/errno.h> 11#include "symtab.h" 12 13static unsigned int symhash(const void *key) 14{ 15 /* 16 * djb2a 17 * Public domain from cdb v0.75 18 */ 19 unsigned int hash = 5381; 20 unsigned char c; 21 22 while ((c = *(const unsigned char *)key++)) 23 hash = ((hash << 5) + hash) ^ c; 24 25 return hash; 26} 27 28static int symcmp(const void *key1, const void *key2) 29{ 30 const char *keyp1, *keyp2; 31 32 keyp1 = key1; 33 keyp2 = key2; 34 return strcmp(keyp1, keyp2); 35} 36 37static const struct hashtab_key_params symtab_key_params = { 38 .hash = symhash, 39 .cmp = symcmp, 40}; 41 42int symtab_init(struct symtab *s, u32 size) 43{ 44 s->nprim = 0; 45 return hashtab_init(&s->table, size); 46} 47 48int symtab_insert(struct symtab *s, char *name, void *datum) 49{ 50 return hashtab_insert(&s->table, name, datum, symtab_key_params); 51} 52 53void *symtab_search(struct symtab *s, const char *name) 54{ 55 return hashtab_search(&s->table, name, symtab_key_params); 56}