cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

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}