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