diff options
author | Abdoulaye Walsimou Gaye <walsimou@walsimou.com> | 2009-05-12 02:46:17 +0200 |
---|---|---|
committer | Abdoulaye Walsimou Gaye <walsimou@walsimou.com> | 2009-05-12 02:46:17 +0200 |
commit | 8c0ea1194bc0905926fb9e211c3356f2348c7ca7 (patch) | |
tree | ba98e07ed70e19ef2b60b5ae3206bcd2ad5f3b51 /scripts/basic/hash.c | |
download | embtoolkit-8c0ea1194bc0905926fb9e211c3356f2348c7ca7.tar.gz embtoolkit-8c0ea1194bc0905926fb9e211c3356f2348c7ca7.tar.bz2 embtoolkit-8c0ea1194bc0905926fb9e211c3356f2348c7ca7.tar.xz |
Embtoolkit: Fisrt commit
This is the first commit in the embedded system toolkit git repository, formaly
embtoolkit. This porject aims to design a tool which helps on building an
embedded linux system. The goal of this porject is to use EGLIBC as C Library
for linux systems generated.
This initial commit is manely just a backup in order to save work done.
Signed-off-by: Abdoulaye Walsimou Gaye <walsimou@walsimou.com>
Diffstat (limited to 'scripts/basic/hash.c')
-rw-r--r-- | scripts/basic/hash.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/scripts/basic/hash.c b/scripts/basic/hash.c new file mode 100644 index 0000000..3299ad7 --- /dev/null +++ b/scripts/basic/hash.c @@ -0,0 +1,64 @@ +/* + * 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); +} + |