~ubuntu-branches/ubuntu/precise/linux-lowlatency/precise

« back to all changes in this revision

Viewing changes to security/selinux/ss/symtab.c

  • Committer: Package Import Robot
  • Author(s): Alessio Igor Bogani
  • Date: 2011-10-26 11:13:05 UTC
  • Revision ID: package-import@ubuntu.com-20111026111305-tz023xykf0i6eosh
Tags: upstream-3.2.0
ImportĀ upstreamĀ versionĀ 3.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
 
 
11
static 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
 
 
25
static 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
 
 
35
int 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