diff options
Diffstat (limited to 'security/selinux/ss/symtab.c')
| -rw-r--r-- | security/selinux/ss/symtab.c | 22 | 
1 files changed, 11 insertions, 11 deletions
diff --git a/security/selinux/ss/symtab.c b/security/selinux/ss/symtab.c index c04f8d447873..832660fd84a9 100644 --- a/security/selinux/ss/symtab.c +++ b/security/selinux/ss/symtab.c @@ -12,17 +12,17 @@  static unsigned int symhash(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; +	/* +	 * djb2a +	 * Public domain from cdb v0.75 +	 */ +	unsigned int hash = 5381; +	unsigned char c; + +	while ((c = *(const unsigned char *)key++)) +		hash = ((hash << 5) + hash) ^ c; + +	return hash;  }  static int symcmp(const void *key1, const void *key2)  |