1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- /*
- * Implementation of the symbol table type.
- *
- * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
- */
- #include <linux/kernel.h>
- #include <linux/string.h>
- #include <linux/errno.h>
- #include "symtab.h"
- static unsigned int symhash(struct hashtab *h, const void *key)
- {
- const char *p, *keyp;
- unsigned int size;
- unsigned int val;
- val = 0;
- keyp = key;
- size = strlen(keyp);
- for (p = keyp; (p - keyp) < size; p++)
- val = (val << 4 | (val >> (8*sizeof(unsigned int)-4))) ^ (*p);
- return val & (h->size - 1);
- }
- static int symcmp(struct hashtab *h, const void *key1, const void *key2)
- {
- const char *keyp1, *keyp2;
- keyp1 = key1;
- keyp2 = key2;
- return strcmp(keyp1, keyp2);
- }
- int symtab_init(struct symtab *s, unsigned int size)
- {
- s->table = hashtab_create(symhash, symcmp, size);
- if (!s->table)
- return -ENOMEM;
- s->nprim = 0;
- return 0;
- }
|