sbin/hammer: Cleanup blocks with a single statement
[dragonfly.git] / sbin / hammer / test_dupkey.c
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.
4  *
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
7  *
8  * $DragonFly: src/sbin/hammer/test_dupkey.c,v 1.1 2008/06/26 04:07:57 dillon Exp $
9  */
10
11 #include "hammer_util.h"
12
13 static uint32_t namekey(const char *name);
14 static void randomname(char *name);
15
16 uint32_t bitmap[0x80000000U / 32];
17
18 int
19 main(int ac, char **av)
20 {
21         char name[32];
22         uint32_t key;
23         uint32_t *ptr;
24         uint32_t mask;
25         uint32_t count;
26         uint32_t saved;
27
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;
39         }
40         printf("duplicate found at count %d key %08x\n", count, key);
41         printf("'%s' and", name);
42         saved = key;
43
44         srandom(0);
45         count = 0;
46         for (;;) {
47                 randomname(name);
48                 key = namekey(name);
49                 if (saved == key)
50                         break;
51                 ++count;
52         }
53         printf(" '%s'\n", name);
54 }
55
56 static
57 uint32_t
58 namekey(const char *name)
59 {
60         uint32_t key;
61
62         key = crc32(name, strlen(name)) & 0x7FFFFFFF;
63         if (key == 0)
64                 key = 1;
65         return(key);
66 }
67
68 static
69 void
70 randomname(char *name)
71 {
72         int len = random() % 16 + 8;
73         int i;
74
75         for (i = 0; i < len; ++i)
76                 name[i] = random() % 26 + 'a';
77         name[i] = 0;
78 }
79
80