root/security/selinux/ss/symtab.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. symhash
  2. symcmp
  3. symtab_init

   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 
  12 static unsigned int symhash(struct hashtab *h, 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 & (h->size - 1);
  24 }
  25 
  26 static int symcmp(struct hashtab *h, 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 
  35 
  36 int symtab_init(struct symtab *s, unsigned int size)
  37 {
  38         s->table = hashtab_create(symhash, symcmp, size);
  39         if (!s->table)
  40                 return -ENOMEM;
  41         s->nprim = 0;
  42         return 0;
  43 }
  44 

/* [<][>][^][v][top][bottom][index][help] */