1 #include <stdio.h>
2 #include <string.h>
3 
4 int
main()5 main() {
6 	struct foo {
7 		char	dummy[3];
8 		int	gnu:4;
9 		int	empty:4;
10 	} f;
11 	f.dummy[0] = 1;
12 	f.dummy[1] = 2;
13 	f.dummy[2] = 3;
14 
15 	f.empty = 4;
16 	f.gnu = 5;
17 	printf("%d %d %d\n", f.dummy[0], f.dummy[1], f.dummy[2]);
18 	printf("%d\n", f.empty);
19 	printf("%d\n", f.gnu);
20 
21 	{
22 		struct foo	f;
23 		printf("locations:\n");
24 
25 		memset(&f, 0, sizeof f);
26 		f.gnu = 0xf;
27 		printf("%d ", find_loc(&f, sizeof f));
28 		memset(&f, 0, sizeof f);
29 		f.empty = 0xf;
30 		printf("%d\n", find_loc(&f, sizeof f));
31 	}
32 	return 0;
33 }
34 
35 int
find_loc(void * buf,int size)36 find_loc(void *buf, int size) {
37         unsigned char   *cp;
38 
39         for (cp = buf; cp < (unsigned char *)buf + size; ++cp) {
40                 printf("%02x ", *cp);
41         }
42         putchar('\n');
43         for (cp = buf; cp < (unsigned char *)buf + size; ++cp) {
44                 if (*cp != 0) {
45                         int     mask;
46                         int     i = 0;
47 
48                         for (mask = 1; mask <= 0x80; mask <<= 1) {
49                                 if (*cp & mask) {
50                                         break;
51                                 }
52                                 ++i;
53                         }
54                         return (cp - (unsigned char *)buf) * 8 + i;
55                 }
56         }
57         return -1;
58 }
59 
60