12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- /*
- * Copyright (C) 2008 Red Hat, Inc., Jason Baron <jbaron@redhat.com>
- *
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define DYNAMIC_DEBUG_HASH_BITS 6
- static const char *program;
- static void usage(void)
- {
- printf("Usage: %s <djb2|r5> <modname>\n", program);
- exit(1);
- }
- /* djb2 hashing algorithm by Dan Bernstein. From:
- * http://www.cse.yorku.ca/~oz/hash.html
- */
- unsigned int djb2_hash(char *str)
- {
- unsigned long hash = 5381;
- int c;
- c = *str;
- while (c) {
- hash = ((hash << 5) + hash) + c;
- c = *++str;
- }
- return (unsigned int)(hash & ((1 << DYNAMIC_DEBUG_HASH_BITS) - 1));
- }
- unsigned int r5_hash(char *str)
- {
- unsigned long hash = 0;
- int c;
- c = *str;
- while (c) {
- hash = (hash + (c << 4) + (c >> 4)) * 11;
- c = *++str;
- }
- return (unsigned int)(hash & ((1 << DYNAMIC_DEBUG_HASH_BITS) - 1));
- }
- int main(int argc, char *argv[])
- {
- program = argv[0];
- if (argc != 3)
- usage();
- if (!strcmp(argv[1], "djb2"))
- printf("%d\n", djb2_hash(argv[2]));
- else if (!strcmp(argv[1], "r5"))
- printf("%d\n", r5_hash(argv[2]));
- else
- usage();
- exit(0);
- }
|