inet6: only mark autoconf addresses tentative if detached
[dragonfly.git] / sbin / hammer / test_dupkey.c
blobfc5feadbc91fe906c72c4a2513d29f49e5508dac
1 /*
2 * This is a really simple stupid standalone program which will find two
3 * filenames with the same CRC, used to test the directory iterator.
5 * cc -I /usr/src/sys test_dupkey.c /usr/src/sys/libkern/crc32.c \
6 * /usr/src/sys/libkern/icrc32.c -o test_dupkey
8 * $DragonFly: src/sbin/hammer/test_dupkey.c,v 1.1 2008/06/26 04:07:57 dillon Exp $
9 */
11 #include "hammer_util.h"
13 static uint32_t namekey(const char *name);
14 static void randomname(char *name);
16 uint32_t bitmap[0x80000000U / 32];
18 int
19 main(int ac, char **av)
21 char name[32];
22 uint32_t key;
23 uint32_t *ptr;
24 uint32_t mask;
25 uint32_t count;
26 uint32_t saved;
28 srandom(0); /* reproducable random sequence number */
29 count = 0;
30 for (;;) {
31 randomname(name);
32 key = namekey(name);
33 ptr = &bitmap[key / 32];
34 mask = 1 << (key & 31);
35 if (*ptr & mask)
36 break;
37 *ptr |= mask;
38 ++count;
40 printf("duplicate found at count %d key %08x\n", count, key);
41 printf("'%s' and", name);
42 saved = key;
44 srandom(0);
45 count = 0;
46 for (;;) {
47 randomname(name);
48 key = namekey(name);
49 if (saved == key)
50 break;
51 ++count;
53 printf(" '%s'\n", name);
55 return(0);
58 static
59 uint32_t
60 namekey(const char *name)
62 uint32_t key;
64 key = crc32(name, strlen(name)) & 0x7FFFFFFF;
65 if (key == 0)
66 key = 1;
67 return(key);
70 static
71 void
72 randomname(char *name)
74 int len = random() % 16 + 8;
75 int i;
77 for (i = 0; i < len; ++i)
78 name[i] = random() % 26 + 'a';
79 name[i] = 0;