Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/security/selinux/ss/symtab.c
26436 views
1
// SPDX-License-Identifier: GPL-2.0
2
/*
3
* Implementation of the symbol table type.
4
*
5
* Author : Stephen Smalley, <[email protected]>
6
*/
7
8
#include <linux/kernel.h>
9
#include <linux/string.h>
10
#include <linux/errno.h>
11
#include "symtab.h"
12
13
static unsigned int symhash(const void *key)
14
{
15
/*
16
* djb2a
17
* Public domain from cdb v0.75
18
*/
19
unsigned int hash = 5381;
20
unsigned char c;
21
22
while ((c = *(const unsigned char *)key++))
23
hash = ((hash << 5) + hash) ^ c;
24
25
return hash;
26
}
27
28
static int symcmp(const void *key1, const void *key2)
29
{
30
const char *keyp1, *keyp2;
31
32
keyp1 = key1;
33
keyp2 = key2;
34
return strcmp(keyp1, keyp2);
35
}
36
37
static const struct hashtab_key_params symtab_key_params = {
38
.hash = symhash,
39
.cmp = symcmp,
40
};
41
42
int symtab_init(struct symtab *s, u32 size)
43
{
44
s->nprim = 0;
45
return hashtab_init(&s->table, size);
46
}
47
48
int symtab_insert(struct symtab *s, char *name, void *datum)
49
{
50
return hashtab_insert(&s->table, name, datum, symtab_key_params);
51
}
52
53
void *symtab_search(struct symtab *s, const char *name)
54
{
55
return hashtab_search(&s->table, name, symtab_key_params);
56
}
57
58