]>
Commit | Line | Data |
---|---|---|
346e15be JB |
1 | /* |
2 | * Copyright (C) 2008 Red Hat, Inc., Jason Baron <jbaron@redhat.com> | |
3 | * | |
4 | */ | |
5 | ||
6 | #include <stdio.h> | |
7 | #include <stdlib.h> | |
8 | #include <string.h> | |
9 | ||
10 | #define DYNAMIC_DEBUG_HASH_BITS 6 | |
11 | ||
12 | static const char *program; | |
13 | ||
14 | static void usage(void) | |
15 | { | |
16 | printf("Usage: %s <djb2|r5> <modname>\n", program); | |
17 | exit(1); | |
18 | } | |
19 | ||
20 | /* djb2 hashing algorithm by Dan Bernstein. From: | |
21 | * http://www.cse.yorku.ca/~oz/hash.html | |
22 | */ | |
23 | ||
4356f489 | 24 | static unsigned int djb2_hash(char *str) |
346e15be JB |
25 | { |
26 | unsigned long hash = 5381; | |
27 | int c; | |
28 | ||
29 | c = *str; | |
30 | while (c) { | |
31 | hash = ((hash << 5) + hash) + c; | |
32 | c = *++str; | |
33 | } | |
34 | return (unsigned int)(hash & ((1 << DYNAMIC_DEBUG_HASH_BITS) - 1)); | |
35 | } | |
36 | ||
4356f489 | 37 | static unsigned int r5_hash(char *str) |
346e15be JB |
38 | { |
39 | unsigned long hash = 0; | |
40 | int c; | |
41 | ||
42 | c = *str; | |
43 | while (c) { | |
44 | hash = (hash + (c << 4) + (c >> 4)) * 11; | |
45 | c = *++str; | |
46 | } | |
47 | return (unsigned int)(hash & ((1 << DYNAMIC_DEBUG_HASH_BITS) - 1)); | |
48 | } | |
49 | ||
50 | int main(int argc, char *argv[]) | |
51 | { | |
52 | program = argv[0]; | |
53 | ||
54 | if (argc != 3) | |
55 | usage(); | |
56 | if (!strcmp(argv[1], "djb2")) | |
57 | printf("%d\n", djb2_hash(argv[2])); | |
58 | else if (!strcmp(argv[1], "r5")) | |
59 | printf("%d\n", r5_hash(argv[2])); | |
60 | else | |
61 | usage(); | |
62 | exit(0); | |
63 | } | |
64 |