]>
Commit | Line | Data |
---|---|---|
a2b2ff61 TT |
1 | /* |
2 | * This testing program makes sure superblock size is 1024 bytes long | |
3 | * | |
4 | * Copyright (C) 2007 by Theodore Ts'o. | |
efc6f628 | 5 | * |
a2b2ff61 | 6 | * %Begin-Header% |
543547a5 TT |
7 | * This file may be redistributed under the terms of the GNU Library |
8 | * General Public License, version 2. | |
a2b2ff61 TT |
9 | * %End-Header% |
10 | */ | |
11 | ||
d1154eb4 | 12 | #include "config.h" |
a2b2ff61 TT |
13 | #include <stdio.h> |
14 | #include <unistd.h> | |
15 | #include <stdlib.h> | |
16 | ||
17 | #include "ext2_fs.h" | |
18 | ||
c5726f1a TT |
19 | #define sb_struct ext2_super_block |
20 | #define sb_struct_name "ext2_super_block" | |
21 | ||
22 | struct sb_struct sb; | |
23 | ||
ab3f5c5a | 24 | #ifndef offsetof |
c5726f1a | 25 | #define offsetof(type, member) __builtin_offsetof (type, member) |
ab3f5c5a TT |
26 | #endif |
27 | ||
963d0f1a AD |
28 | #define check_field(x, s) cur_offset = do_field(#x, s, sizeof(sb.x), \ |
29 | offsetof(struct sb_struct, x), \ | |
30 | cur_offset) | |
c5726f1a | 31 | |
963d0f1a AD |
32 | static int do_field(const char *field, unsigned size, unsigned cur_size, |
33 | unsigned offset, unsigned cur_offset) | |
c5726f1a | 34 | { |
963d0f1a AD |
35 | if (size != cur_size) { |
36 | printf("error: %s size %u should be %u\n", | |
37 | field, cur_size, size); | |
38 | exit(1); | |
39 | } | |
c5726f1a | 40 | if (offset != cur_offset) { |
963d0f1a AD |
41 | printf("error: %s offset %u should be %u\n", |
42 | field, cur_offset, offset); | |
c5726f1a TT |
43 | exit(1); |
44 | } | |
963d0f1a | 45 | printf("%8d %-30s %3u\n", offset, field, size); |
c5726f1a TT |
46 | return offset + size; |
47 | } | |
48 | ||
963d0f1a | 49 | int main(int argc, char **argv) |
c5726f1a TT |
50 | { |
51 | #if (__GNUC__ >= 4) | |
52 | int cur_offset = 0; | |
53 | ||
54 | printf("%8s %-30s %3s\n", "offset", "field", "size"); | |
963d0f1a AD |
55 | check_field(s_inodes_count, 4); |
56 | check_field(s_blocks_count, 4); | |
57 | check_field(s_r_blocks_count, 4); | |
58 | check_field(s_free_blocks_count, 4); | |
59 | check_field(s_free_inodes_count, 4); | |
60 | check_field(s_first_data_block, 4); | |
61 | check_field(s_log_block_size, 4); | |
62 | check_field(s_log_cluster_size, 4); | |
63 | check_field(s_blocks_per_group, 4); | |
64 | check_field(s_clusters_per_group, 4); | |
65 | check_field(s_inodes_per_group, 4); | |
66 | check_field(s_mtime, 4); | |
67 | check_field(s_wtime, 4); | |
68 | check_field(s_mnt_count, 2); | |
69 | check_field(s_max_mnt_count, 2); | |
70 | check_field(s_magic, 2); | |
71 | check_field(s_state, 2); | |
72 | check_field(s_errors, 2); | |
73 | check_field(s_minor_rev_level, 2); | |
74 | check_field(s_lastcheck, 4); | |
75 | check_field(s_checkinterval, 4); | |
76 | check_field(s_creator_os, 4); | |
77 | check_field(s_rev_level, 4); | |
78 | check_field(s_def_resuid, 2); | |
79 | check_field(s_def_resgid, 2); | |
80 | check_field(s_first_ino, 4); | |
81 | check_field(s_inode_size, 2); | |
82 | check_field(s_block_group_nr, 2); | |
83 | check_field(s_feature_compat, 4); | |
84 | check_field(s_feature_incompat, 4); | |
85 | check_field(s_feature_ro_compat, 4); | |
86 | check_field(s_uuid, 16); | |
87 | check_field(s_volume_name, 16); | |
88 | check_field(s_last_mounted, 64); | |
89 | check_field(s_algorithm_usage_bitmap, 4); | |
90 | check_field(s_prealloc_blocks, 1); | |
91 | check_field(s_prealloc_dir_blocks, 1); | |
92 | check_field(s_reserved_gdt_blocks, 2); | |
93 | check_field(s_journal_uuid, 16); | |
94 | check_field(s_journal_inum, 4); | |
95 | check_field(s_journal_dev, 4); | |
96 | check_field(s_last_orphan, 4); | |
97 | check_field(s_hash_seed, 4 * 4); | |
98 | check_field(s_def_hash_version, 1); | |
99 | check_field(s_jnl_backup_type, 1); | |
100 | check_field(s_desc_size, 2); | |
101 | check_field(s_default_mount_opts, 4); | |
102 | check_field(s_first_meta_bg, 4); | |
103 | check_field(s_mkfs_time, 4); | |
104 | check_field(s_jnl_blocks, 17 * 4); | |
105 | check_field(s_blocks_count_hi, 4); | |
106 | check_field(s_r_blocks_count_hi, 4); | |
107 | check_field(s_free_blocks_hi, 4); | |
108 | check_field(s_min_extra_isize, 2); | |
109 | check_field(s_want_extra_isize, 2); | |
110 | check_field(s_flags, 4); | |
111 | check_field(s_raid_stride, 2); | |
112 | check_field(s_mmp_update_interval, 2); | |
113 | check_field(s_mmp_block, 8); | |
114 | check_field(s_raid_stripe_width, 4); | |
115 | check_field(s_log_groups_per_flex, 1); | |
5d914d72 | 116 | check_field(s_checksum_type, 1); |
fc898cb9 TT |
117 | check_field(s_encryption_level, 1); |
118 | check_field(s_reserved_pad, 1); | |
963d0f1a AD |
119 | check_field(s_kbytes_written, 8); |
120 | check_field(s_snapshot_inum, 4); | |
121 | check_field(s_snapshot_id, 4); | |
122 | check_field(s_snapshot_r_blocks_count, 8); | |
123 | check_field(s_snapshot_list, 4); | |
124 | check_field(s_error_count, 4); | |
125 | check_field(s_first_error_time, 4); | |
126 | check_field(s_first_error_ino, 4); | |
127 | check_field(s_first_error_block, 8); | |
128 | check_field(s_first_error_func, 32); | |
129 | check_field(s_first_error_line, 4); | |
130 | check_field(s_last_error_time, 4); | |
131 | check_field(s_last_error_ino, 4); | |
132 | check_field(s_last_error_line, 4); | |
133 | check_field(s_last_error_block, 8); | |
134 | check_field(s_last_error_func, 32); | |
135 | check_field(s_mount_opts, 64); | |
136 | check_field(s_usr_quota_inum, 4); | |
137 | check_field(s_grp_quota_inum, 4); | |
138 | check_field(s_overhead_blocks, 4); | |
65c6c3e0 | 139 | check_field(s_backup_bgs, 8); |
22f22ab1 | 140 | check_field(s_encrypt_algos, 4); |
41f22101 | 141 | check_field(s_encrypt_pw_salt, 16); |
fc898cb9 | 142 | check_field(s_lpf_ino, 4); |
080e09b4 | 143 | check_field(s_prj_quota_inum, 4); |
2ed0adbc DW |
144 | check_field(s_checksum_seed, 4); |
145 | check_field(s_reserved, 98 * 4); | |
963d0f1a AD |
146 | check_field(s_checksum, 4); |
147 | do_field("Superblock end", 0, 0, cur_offset, 1024); | |
c5726f1a | 148 | #endif |
963d0f1a | 149 | return 0; |
a2b2ff61 | 150 | } |