Whamcloud - gitweb
build: fix compile warnings on OSX
[tools/e2fsprogs.git] / lib / ext2fs / tst_inode_size.c
1 /*
2  * This testing program makes sure the ext2_inode structure is 1024 bytes long
3  *
4  * Copyright (C) 2007 by Theodore Ts'o.
5  *
6  * %Begin-Header%
7  * This file may be redistributed under the terms of the GNU Library
8  * General Public License, version 2.
9  * %End-Header%
10  */
11
12 #include "config.h"
13 #include <stdio.h>
14 #include <unistd.h>
15 #include <stdlib.h>
16
17 #include "ext2_fs.h"
18
19 struct ext2_inode inode;
20
21 int verbose = 0;
22
23 #define offsetof(type, member)  __builtin_offsetof (type, member)
24 #define check_field(x) cur_offset = do_field(#x, sizeof(inode.x),       \
25                                 offsetof(struct ext2_inode, x), \
26                                 cur_offset)
27
28 static int do_field(const char *field, size_t size, int offset, int cur_offset)
29 {
30         if (offset != cur_offset) {
31                 printf("Warning!  Unexpected offset at %s\n", field);
32                 exit(1);
33         }
34         printf("%8d %-30s %3u\n", offset, field, (unsigned) size);
35         return offset + size;
36 }
37
38 void check_structure_fields()
39 {
40 #if (__GNUC__ >= 4)
41         int cur_offset = 0;
42
43         printf("%8s %-30s %3s\n", "offset", "field", "size");
44         check_field(i_mode);
45         check_field(i_uid);
46         check_field(i_size);
47         check_field(i_atime);
48         check_field(i_ctime);
49         check_field(i_mtime);
50         check_field(i_dtime);
51         check_field(i_gid);
52         check_field(i_links_count);
53         check_field(i_blocks);
54         check_field(i_flags);
55         check_field(osd1.linux1.l_i_version);
56         check_field(i_block);
57         check_field(i_generation);
58         check_field(i_file_acl);
59         check_field(i_size_high);
60         check_field(i_faddr);
61         check_field(osd2.linux2.l_i_blocks_hi);
62         check_field(osd2.linux2.l_i_file_acl_high);
63         check_field(osd2.linux2.l_i_uid_high);
64         check_field(osd2.linux2.l_i_gid_high);
65         check_field(osd2.linux2.l_i_checksum_lo);
66         check_field(osd2.linux2.l_i_reserved);
67         printf("Ending offset is %d\n\n", cur_offset);
68 #endif
69 }
70
71
72 int main(int argc, char **argv)
73 {
74         int l = sizeof(struct ext2_inode);
75
76         check_structure_fields();
77         printf("Size of struct ext2_inode is %d\n", l);
78         if (l != 128) {
79                 exit(1);
80         }
81         exit(0);
82 }