1*6a54128fSAndroid Build Coastguard Worker /*
2*6a54128fSAndroid Build Coastguard Worker * This testing program makes sure the badblocks implementation works.
3*6a54128fSAndroid Build Coastguard Worker *
4*6a54128fSAndroid Build Coastguard Worker * Copyright (C) 1996 by Theodore Ts'o.
5*6a54128fSAndroid Build Coastguard Worker *
6*6a54128fSAndroid Build Coastguard Worker * %Begin-Header%
7*6a54128fSAndroid Build Coastguard Worker * This file may be redistributed under the terms of the GNU Library
8*6a54128fSAndroid Build Coastguard Worker * General Public License, version 2.
9*6a54128fSAndroid Build Coastguard Worker * %End-Header%
10*6a54128fSAndroid Build Coastguard Worker */
11*6a54128fSAndroid Build Coastguard Worker
12*6a54128fSAndroid Build Coastguard Worker #include "config.h"
13*6a54128fSAndroid Build Coastguard Worker #include <stdio.h>
14*6a54128fSAndroid Build Coastguard Worker #include <string.h>
15*6a54128fSAndroid Build Coastguard Worker #if HAVE_UNISTD_H
16*6a54128fSAndroid Build Coastguard Worker #include <unistd.h>
17*6a54128fSAndroid Build Coastguard Worker #endif
18*6a54128fSAndroid Build Coastguard Worker #include <fcntl.h>
19*6a54128fSAndroid Build Coastguard Worker #include <time.h>
20*6a54128fSAndroid Build Coastguard Worker #include <sys/stat.h>
21*6a54128fSAndroid Build Coastguard Worker #include <sys/types.h>
22*6a54128fSAndroid Build Coastguard Worker #if HAVE_ERRNO_H
23*6a54128fSAndroid Build Coastguard Worker #include <errno.h>
24*6a54128fSAndroid Build Coastguard Worker #endif
25*6a54128fSAndroid Build Coastguard Worker
26*6a54128fSAndroid Build Coastguard Worker #include "ext2_fs.h"
27*6a54128fSAndroid Build Coastguard Worker #include "ext2fs.h"
28*6a54128fSAndroid Build Coastguard Worker
29*6a54128fSAndroid Build Coastguard Worker #define ADD_BLK 0x0001
30*6a54128fSAndroid Build Coastguard Worker #define DEL_BLK 0x0002
31*6a54128fSAndroid Build Coastguard Worker
32*6a54128fSAndroid Build Coastguard Worker blk_t test1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0 };
33*6a54128fSAndroid Build Coastguard Worker blk_t test2[] = { 11, 10, 9, 8, 7, 6, 5, 4, 3, 3, 2, 1, 0 };
34*6a54128fSAndroid Build Coastguard Worker blk_t test3[] = { 3, 1, 4, 5, 9, 2, 7, 10, 5, 6, 10, 8, 0 };
35*6a54128fSAndroid Build Coastguard Worker blk_t test4[] = { 20, 50, 12, 17, 13, 2, 66, 23, 56, 0 };
36*6a54128fSAndroid Build Coastguard Worker blk_t test4a[] = {
37*6a54128fSAndroid Build Coastguard Worker 20, 1,
38*6a54128fSAndroid Build Coastguard Worker 50, 1,
39*6a54128fSAndroid Build Coastguard Worker 3, 0,
40*6a54128fSAndroid Build Coastguard Worker 17, 1,
41*6a54128fSAndroid Build Coastguard Worker 18, 0,
42*6a54128fSAndroid Build Coastguard Worker 16, 0,
43*6a54128fSAndroid Build Coastguard Worker 11, 0,
44*6a54128fSAndroid Build Coastguard Worker 12, 1,
45*6a54128fSAndroid Build Coastguard Worker 13, 1,
46*6a54128fSAndroid Build Coastguard Worker 14, 0,
47*6a54128fSAndroid Build Coastguard Worker 80, 0,
48*6a54128fSAndroid Build Coastguard Worker 45, 0,
49*6a54128fSAndroid Build Coastguard Worker 66, 1,
50*6a54128fSAndroid Build Coastguard Worker 0 };
51*6a54128fSAndroid Build Coastguard Worker blk_t test5[] = { 31, 20, 17, 51, 23, 1, 56, 57, 0 };
52*6a54128fSAndroid Build Coastguard Worker blk_t test5a[] = {
53*6a54128fSAndroid Build Coastguard Worker 50, ADD_BLK,
54*6a54128fSAndroid Build Coastguard Worker 51, DEL_BLK,
55*6a54128fSAndroid Build Coastguard Worker 57, DEL_BLK,
56*6a54128fSAndroid Build Coastguard Worker 66, ADD_BLK,
57*6a54128fSAndroid Build Coastguard Worker 31, DEL_BLK,
58*6a54128fSAndroid Build Coastguard Worker 12, ADD_BLK,
59*6a54128fSAndroid Build Coastguard Worker 2, ADD_BLK,
60*6a54128fSAndroid Build Coastguard Worker 13, ADD_BLK,
61*6a54128fSAndroid Build Coastguard Worker 1, DEL_BLK,
62*6a54128fSAndroid Build Coastguard Worker 0
63*6a54128fSAndroid Build Coastguard Worker };
64*6a54128fSAndroid Build Coastguard Worker
65*6a54128fSAndroid Build Coastguard Worker
66*6a54128fSAndroid Build Coastguard Worker static int test_fail = 0;
67*6a54128fSAndroid Build Coastguard Worker static int test_expected_fail = 0;
68*6a54128fSAndroid Build Coastguard Worker
create_test_list(blk_t * vec,badblocks_list * ret)69*6a54128fSAndroid Build Coastguard Worker static errcode_t create_test_list(blk_t *vec, badblocks_list *ret)
70*6a54128fSAndroid Build Coastguard Worker {
71*6a54128fSAndroid Build Coastguard Worker errcode_t retval;
72*6a54128fSAndroid Build Coastguard Worker badblocks_list bb;
73*6a54128fSAndroid Build Coastguard Worker int i;
74*6a54128fSAndroid Build Coastguard Worker
75*6a54128fSAndroid Build Coastguard Worker retval = ext2fs_badblocks_list_create(&bb, 5);
76*6a54128fSAndroid Build Coastguard Worker if (retval) {
77*6a54128fSAndroid Build Coastguard Worker com_err("create_test_list", retval, "while creating list");
78*6a54128fSAndroid Build Coastguard Worker return retval;
79*6a54128fSAndroid Build Coastguard Worker }
80*6a54128fSAndroid Build Coastguard Worker for (i=0; vec[i]; i++) {
81*6a54128fSAndroid Build Coastguard Worker retval = ext2fs_badblocks_list_add(bb, vec[i]);
82*6a54128fSAndroid Build Coastguard Worker if (retval) {
83*6a54128fSAndroid Build Coastguard Worker com_err("create_test_list", retval,
84*6a54128fSAndroid Build Coastguard Worker "while adding test vector %d", i);
85*6a54128fSAndroid Build Coastguard Worker ext2fs_badblocks_list_free(bb);
86*6a54128fSAndroid Build Coastguard Worker return retval;
87*6a54128fSAndroid Build Coastguard Worker }
88*6a54128fSAndroid Build Coastguard Worker }
89*6a54128fSAndroid Build Coastguard Worker *ret = bb;
90*6a54128fSAndroid Build Coastguard Worker return 0;
91*6a54128fSAndroid Build Coastguard Worker }
92*6a54128fSAndroid Build Coastguard Worker
print_list(badblocks_list bb,int verify)93*6a54128fSAndroid Build Coastguard Worker static void print_list(badblocks_list bb, int verify)
94*6a54128fSAndroid Build Coastguard Worker {
95*6a54128fSAndroid Build Coastguard Worker errcode_t retval;
96*6a54128fSAndroid Build Coastguard Worker badblocks_iterate iter;
97*6a54128fSAndroid Build Coastguard Worker blk_t blk;
98*6a54128fSAndroid Build Coastguard Worker int i, ok;
99*6a54128fSAndroid Build Coastguard Worker
100*6a54128fSAndroid Build Coastguard Worker retval = ext2fs_badblocks_list_iterate_begin(bb, &iter);
101*6a54128fSAndroid Build Coastguard Worker if (retval) {
102*6a54128fSAndroid Build Coastguard Worker com_err("print_list", retval, "while setting up iterator");
103*6a54128fSAndroid Build Coastguard Worker return;
104*6a54128fSAndroid Build Coastguard Worker }
105*6a54128fSAndroid Build Coastguard Worker ok = i = 1;
106*6a54128fSAndroid Build Coastguard Worker while (ext2fs_badblocks_list_iterate(iter, &blk)) {
107*6a54128fSAndroid Build Coastguard Worker printf("%u ", blk);
108*6a54128fSAndroid Build Coastguard Worker if (i++ != blk)
109*6a54128fSAndroid Build Coastguard Worker ok = 0;
110*6a54128fSAndroid Build Coastguard Worker }
111*6a54128fSAndroid Build Coastguard Worker ext2fs_badblocks_list_iterate_end(iter);
112*6a54128fSAndroid Build Coastguard Worker if (verify) {
113*6a54128fSAndroid Build Coastguard Worker if (ok)
114*6a54128fSAndroid Build Coastguard Worker printf("--- OK");
115*6a54128fSAndroid Build Coastguard Worker else {
116*6a54128fSAndroid Build Coastguard Worker printf("--- NOT OK");
117*6a54128fSAndroid Build Coastguard Worker test_fail++;
118*6a54128fSAndroid Build Coastguard Worker }
119*6a54128fSAndroid Build Coastguard Worker }
120*6a54128fSAndroid Build Coastguard Worker }
121*6a54128fSAndroid Build Coastguard Worker
validate_test_seq(badblocks_list bb,blk_t * vec)122*6a54128fSAndroid Build Coastguard Worker static void validate_test_seq(badblocks_list bb, blk_t *vec)
123*6a54128fSAndroid Build Coastguard Worker {
124*6a54128fSAndroid Build Coastguard Worker int i, match, ok;
125*6a54128fSAndroid Build Coastguard Worker
126*6a54128fSAndroid Build Coastguard Worker for (i = 0; vec[i]; i += 2) {
127*6a54128fSAndroid Build Coastguard Worker match = ext2fs_badblocks_list_test(bb, vec[i]);
128*6a54128fSAndroid Build Coastguard Worker if (match == vec[i+1])
129*6a54128fSAndroid Build Coastguard Worker ok = 1;
130*6a54128fSAndroid Build Coastguard Worker else {
131*6a54128fSAndroid Build Coastguard Worker ok = 0;
132*6a54128fSAndroid Build Coastguard Worker test_fail++;
133*6a54128fSAndroid Build Coastguard Worker }
134*6a54128fSAndroid Build Coastguard Worker printf("\tblock %u is %s --- %s\n", vec[i],
135*6a54128fSAndroid Build Coastguard Worker match ? "present" : "absent",
136*6a54128fSAndroid Build Coastguard Worker ok ? "OK" : "NOT OK");
137*6a54128fSAndroid Build Coastguard Worker }
138*6a54128fSAndroid Build Coastguard Worker }
139*6a54128fSAndroid Build Coastguard Worker
do_test_seq(badblocks_list bb,blk_t * vec)140*6a54128fSAndroid Build Coastguard Worker static void do_test_seq(badblocks_list bb, blk_t *vec)
141*6a54128fSAndroid Build Coastguard Worker {
142*6a54128fSAndroid Build Coastguard Worker int i, match;
143*6a54128fSAndroid Build Coastguard Worker
144*6a54128fSAndroid Build Coastguard Worker for (i = 0; vec[i]; i += 2) {
145*6a54128fSAndroid Build Coastguard Worker switch (vec[i+1]) {
146*6a54128fSAndroid Build Coastguard Worker case ADD_BLK:
147*6a54128fSAndroid Build Coastguard Worker ext2fs_badblocks_list_add(bb, vec[i]);
148*6a54128fSAndroid Build Coastguard Worker match = ext2fs_badblocks_list_test(bb, vec[i]);
149*6a54128fSAndroid Build Coastguard Worker printf("Adding block %u --- now %s\n", vec[i],
150*6a54128fSAndroid Build Coastguard Worker match ? "present" : "absent");
151*6a54128fSAndroid Build Coastguard Worker if (!match) {
152*6a54128fSAndroid Build Coastguard Worker printf("FAILURE!\n");
153*6a54128fSAndroid Build Coastguard Worker test_fail++;
154*6a54128fSAndroid Build Coastguard Worker }
155*6a54128fSAndroid Build Coastguard Worker break;
156*6a54128fSAndroid Build Coastguard Worker case DEL_BLK:
157*6a54128fSAndroid Build Coastguard Worker ext2fs_badblocks_list_del(bb, vec[i]);
158*6a54128fSAndroid Build Coastguard Worker match = ext2fs_badblocks_list_test(bb, vec[i]);
159*6a54128fSAndroid Build Coastguard Worker printf("Removing block %u --- now %s\n", vec[i],
160*6a54128fSAndroid Build Coastguard Worker ext2fs_badblocks_list_test(bb, vec[i]) ?
161*6a54128fSAndroid Build Coastguard Worker "present" : "absent");
162*6a54128fSAndroid Build Coastguard Worker if (match) {
163*6a54128fSAndroid Build Coastguard Worker printf("FAILURE!\n");
164*6a54128fSAndroid Build Coastguard Worker test_fail++;
165*6a54128fSAndroid Build Coastguard Worker }
166*6a54128fSAndroid Build Coastguard Worker break;
167*6a54128fSAndroid Build Coastguard Worker }
168*6a54128fSAndroid Build Coastguard Worker }
169*6a54128fSAndroid Build Coastguard Worker }
170*6a54128fSAndroid Build Coastguard Worker
171*6a54128fSAndroid Build Coastguard Worker
file_test(badblocks_list bb)172*6a54128fSAndroid Build Coastguard Worker int file_test(badblocks_list bb)
173*6a54128fSAndroid Build Coastguard Worker {
174*6a54128fSAndroid Build Coastguard Worker badblocks_list new_bb = 0;
175*6a54128fSAndroid Build Coastguard Worker errcode_t retval;
176*6a54128fSAndroid Build Coastguard Worker FILE *f;
177*6a54128fSAndroid Build Coastguard Worker
178*6a54128fSAndroid Build Coastguard Worker f = tmpfile();
179*6a54128fSAndroid Build Coastguard Worker if (!f) {
180*6a54128fSAndroid Build Coastguard Worker fprintf(stderr, "Error opening temp file: %s\n",
181*6a54128fSAndroid Build Coastguard Worker error_message(errno));
182*6a54128fSAndroid Build Coastguard Worker return 1;
183*6a54128fSAndroid Build Coastguard Worker }
184*6a54128fSAndroid Build Coastguard Worker retval = ext2fs_write_bb_FILE(bb, 0, f);
185*6a54128fSAndroid Build Coastguard Worker if (retval) {
186*6a54128fSAndroid Build Coastguard Worker com_err("file_test", retval, "while writing bad blocks");
187*6a54128fSAndroid Build Coastguard Worker return 1;
188*6a54128fSAndroid Build Coastguard Worker }
189*6a54128fSAndroid Build Coastguard Worker
190*6a54128fSAndroid Build Coastguard Worker rewind(f);
191*6a54128fSAndroid Build Coastguard Worker retval = ext2fs_read_bb_FILE2(0, f, &new_bb, 0, 0);
192*6a54128fSAndroid Build Coastguard Worker if (retval) {
193*6a54128fSAndroid Build Coastguard Worker com_err("file_test", retval, "while reading bad blocks");
194*6a54128fSAndroid Build Coastguard Worker return 1;
195*6a54128fSAndroid Build Coastguard Worker }
196*6a54128fSAndroid Build Coastguard Worker fclose(f);
197*6a54128fSAndroid Build Coastguard Worker
198*6a54128fSAndroid Build Coastguard Worker if (ext2fs_badblocks_equal(bb, new_bb)) {
199*6a54128fSAndroid Build Coastguard Worker printf("Block bitmap matched after reading and writing.\n");
200*6a54128fSAndroid Build Coastguard Worker } else {
201*6a54128fSAndroid Build Coastguard Worker printf("Block bitmap NOT matched.\n");
202*6a54128fSAndroid Build Coastguard Worker test_fail++;
203*6a54128fSAndroid Build Coastguard Worker }
204*6a54128fSAndroid Build Coastguard Worker ext2fs_badblocks_list_free(new_bb);
205*6a54128fSAndroid Build Coastguard Worker return 0;
206*6a54128fSAndroid Build Coastguard Worker }
207*6a54128fSAndroid Build Coastguard Worker
invalid_proc(ext2_filsys fs,blk_t blk)208*6a54128fSAndroid Build Coastguard Worker static void invalid_proc(ext2_filsys fs, blk_t blk)
209*6a54128fSAndroid Build Coastguard Worker {
210*6a54128fSAndroid Build Coastguard Worker if (blk == 34500) {
211*6a54128fSAndroid Build Coastguard Worker printf("Expected invalid block\n");
212*6a54128fSAndroid Build Coastguard Worker test_expected_fail++;
213*6a54128fSAndroid Build Coastguard Worker } else {
214*6a54128fSAndroid Build Coastguard Worker printf("Invalid block #: %u\n", blk);
215*6a54128fSAndroid Build Coastguard Worker test_fail++;
216*6a54128fSAndroid Build Coastguard Worker }
217*6a54128fSAndroid Build Coastguard Worker }
218*6a54128fSAndroid Build Coastguard Worker
file_test_invalid(badblocks_list bb)219*6a54128fSAndroid Build Coastguard Worker void file_test_invalid(badblocks_list bb)
220*6a54128fSAndroid Build Coastguard Worker {
221*6a54128fSAndroid Build Coastguard Worker badblocks_list new_bb = 0;
222*6a54128fSAndroid Build Coastguard Worker errcode_t retval;
223*6a54128fSAndroid Build Coastguard Worker ext2_filsys fs;
224*6a54128fSAndroid Build Coastguard Worker FILE *f;
225*6a54128fSAndroid Build Coastguard Worker
226*6a54128fSAndroid Build Coastguard Worker fs = malloc(sizeof(struct struct_ext2_filsys));
227*6a54128fSAndroid Build Coastguard Worker memset(fs, 0, sizeof(struct struct_ext2_filsys));
228*6a54128fSAndroid Build Coastguard Worker fs->magic = EXT2_ET_MAGIC_EXT2FS_FILSYS;
229*6a54128fSAndroid Build Coastguard Worker fs->super = malloc(SUPERBLOCK_SIZE);
230*6a54128fSAndroid Build Coastguard Worker memset(fs->super, 0, SUPERBLOCK_SIZE);
231*6a54128fSAndroid Build Coastguard Worker fs->super->s_first_data_block = 1;
232*6a54128fSAndroid Build Coastguard Worker ext2fs_blocks_count_set(fs->super, 100);
233*6a54128fSAndroid Build Coastguard Worker
234*6a54128fSAndroid Build Coastguard Worker f = tmpfile();
235*6a54128fSAndroid Build Coastguard Worker if (!f) {
236*6a54128fSAndroid Build Coastguard Worker fprintf(stderr, "Error opening temp file: %s\n",
237*6a54128fSAndroid Build Coastguard Worker error_message(errno));
238*6a54128fSAndroid Build Coastguard Worker test_fail++;
239*6a54128fSAndroid Build Coastguard Worker goto out;
240*6a54128fSAndroid Build Coastguard Worker }
241*6a54128fSAndroid Build Coastguard Worker retval = ext2fs_write_bb_FILE(bb, 0, f);
242*6a54128fSAndroid Build Coastguard Worker if (retval) {
243*6a54128fSAndroid Build Coastguard Worker com_err("file_test", retval, "while writing bad blocks");
244*6a54128fSAndroid Build Coastguard Worker test_fail++;
245*6a54128fSAndroid Build Coastguard Worker goto out;
246*6a54128fSAndroid Build Coastguard Worker }
247*6a54128fSAndroid Build Coastguard Worker fprintf(f, "34500\n");
248*6a54128fSAndroid Build Coastguard Worker
249*6a54128fSAndroid Build Coastguard Worker rewind(f);
250*6a54128fSAndroid Build Coastguard Worker test_expected_fail = 0;
251*6a54128fSAndroid Build Coastguard Worker retval = ext2fs_read_bb_FILE(fs, f, &new_bb, invalid_proc);
252*6a54128fSAndroid Build Coastguard Worker if (retval) {
253*6a54128fSAndroid Build Coastguard Worker com_err("file_test", retval, "while reading bad blocks");
254*6a54128fSAndroid Build Coastguard Worker test_fail++;
255*6a54128fSAndroid Build Coastguard Worker goto out;
256*6a54128fSAndroid Build Coastguard Worker }
257*6a54128fSAndroid Build Coastguard Worker fclose(f);
258*6a54128fSAndroid Build Coastguard Worker if (!test_expected_fail) {
259*6a54128fSAndroid Build Coastguard Worker printf("Expected test failure didn't happen!\n");
260*6a54128fSAndroid Build Coastguard Worker test_fail++;
261*6a54128fSAndroid Build Coastguard Worker }
262*6a54128fSAndroid Build Coastguard Worker
263*6a54128fSAndroid Build Coastguard Worker
264*6a54128fSAndroid Build Coastguard Worker if (ext2fs_badblocks_equal(bb, new_bb)) {
265*6a54128fSAndroid Build Coastguard Worker printf("Block bitmap matched after reading and writing.\n");
266*6a54128fSAndroid Build Coastguard Worker } else {
267*6a54128fSAndroid Build Coastguard Worker printf("Block bitmap NOT matched.\n");
268*6a54128fSAndroid Build Coastguard Worker test_fail++;
269*6a54128fSAndroid Build Coastguard Worker }
270*6a54128fSAndroid Build Coastguard Worker ext2fs_badblocks_list_free(new_bb);
271*6a54128fSAndroid Build Coastguard Worker out:
272*6a54128fSAndroid Build Coastguard Worker free(fs->super);
273*6a54128fSAndroid Build Coastguard Worker free(fs);
274*6a54128fSAndroid Build Coastguard Worker }
275*6a54128fSAndroid Build Coastguard Worker
main(int argc,char ** argv)276*6a54128fSAndroid Build Coastguard Worker int main(int argc, char **argv)
277*6a54128fSAndroid Build Coastguard Worker {
278*6a54128fSAndroid Build Coastguard Worker badblocks_list bb1, bb2, bb3, bb4, bb5;
279*6a54128fSAndroid Build Coastguard Worker int equal;
280*6a54128fSAndroid Build Coastguard Worker errcode_t retval;
281*6a54128fSAndroid Build Coastguard Worker
282*6a54128fSAndroid Build Coastguard Worker add_error_table(&et_ext2_error_table);
283*6a54128fSAndroid Build Coastguard Worker
284*6a54128fSAndroid Build Coastguard Worker bb1 = bb2 = bb3 = bb4 = bb5 = 0;
285*6a54128fSAndroid Build Coastguard Worker
286*6a54128fSAndroid Build Coastguard Worker printf("test1: ");
287*6a54128fSAndroid Build Coastguard Worker retval = create_test_list(test1, &bb1);
288*6a54128fSAndroid Build Coastguard Worker if (retval == 0)
289*6a54128fSAndroid Build Coastguard Worker print_list(bb1, 1);
290*6a54128fSAndroid Build Coastguard Worker printf("\n");
291*6a54128fSAndroid Build Coastguard Worker
292*6a54128fSAndroid Build Coastguard Worker printf("test2: ");
293*6a54128fSAndroid Build Coastguard Worker retval = create_test_list(test2, &bb2);
294*6a54128fSAndroid Build Coastguard Worker if (retval == 0)
295*6a54128fSAndroid Build Coastguard Worker print_list(bb2, 1);
296*6a54128fSAndroid Build Coastguard Worker printf("\n");
297*6a54128fSAndroid Build Coastguard Worker
298*6a54128fSAndroid Build Coastguard Worker printf("test3: ");
299*6a54128fSAndroid Build Coastguard Worker retval = create_test_list(test3, &bb3);
300*6a54128fSAndroid Build Coastguard Worker if (retval == 0)
301*6a54128fSAndroid Build Coastguard Worker print_list(bb3, 1);
302*6a54128fSAndroid Build Coastguard Worker printf("\n");
303*6a54128fSAndroid Build Coastguard Worker
304*6a54128fSAndroid Build Coastguard Worker printf("test4: ");
305*6a54128fSAndroid Build Coastguard Worker retval = create_test_list(test4, &bb4);
306*6a54128fSAndroid Build Coastguard Worker if (retval == 0) {
307*6a54128fSAndroid Build Coastguard Worker print_list(bb4, 0);
308*6a54128fSAndroid Build Coastguard Worker printf("\n");
309*6a54128fSAndroid Build Coastguard Worker validate_test_seq(bb4, test4a);
310*6a54128fSAndroid Build Coastguard Worker }
311*6a54128fSAndroid Build Coastguard Worker printf("\n");
312*6a54128fSAndroid Build Coastguard Worker
313*6a54128fSAndroid Build Coastguard Worker printf("test5: ");
314*6a54128fSAndroid Build Coastguard Worker retval = create_test_list(test5, &bb5);
315*6a54128fSAndroid Build Coastguard Worker if (retval == 0) {
316*6a54128fSAndroid Build Coastguard Worker print_list(bb5, 0);
317*6a54128fSAndroid Build Coastguard Worker printf("\n");
318*6a54128fSAndroid Build Coastguard Worker do_test_seq(bb5, test5a);
319*6a54128fSAndroid Build Coastguard Worker printf("After test5 sequence: ");
320*6a54128fSAndroid Build Coastguard Worker print_list(bb5, 0);
321*6a54128fSAndroid Build Coastguard Worker printf("\n");
322*6a54128fSAndroid Build Coastguard Worker }
323*6a54128fSAndroid Build Coastguard Worker printf("\n");
324*6a54128fSAndroid Build Coastguard Worker
325*6a54128fSAndroid Build Coastguard Worker if (bb1 && bb2 && bb3 && bb4 && bb5) {
326*6a54128fSAndroid Build Coastguard Worker printf("Comparison tests:\n");
327*6a54128fSAndroid Build Coastguard Worker equal = ext2fs_badblocks_equal(bb1, bb2);
328*6a54128fSAndroid Build Coastguard Worker printf("bb1 and bb2 are %sequal.\n", equal ? "" : "NOT ");
329*6a54128fSAndroid Build Coastguard Worker if (equal)
330*6a54128fSAndroid Build Coastguard Worker test_fail++;
331*6a54128fSAndroid Build Coastguard Worker
332*6a54128fSAndroid Build Coastguard Worker equal = ext2fs_badblocks_equal(bb1, bb3);
333*6a54128fSAndroid Build Coastguard Worker printf("bb1 and bb3 are %sequal.\n", equal ? "" : "NOT ");
334*6a54128fSAndroid Build Coastguard Worker if (!equal)
335*6a54128fSAndroid Build Coastguard Worker test_fail++;
336*6a54128fSAndroid Build Coastguard Worker
337*6a54128fSAndroid Build Coastguard Worker equal = ext2fs_badblocks_equal(bb1, bb4);
338*6a54128fSAndroid Build Coastguard Worker printf("bb1 and bb4 are %sequal.\n", equal ? "" : "NOT ");
339*6a54128fSAndroid Build Coastguard Worker if (equal)
340*6a54128fSAndroid Build Coastguard Worker test_fail++;
341*6a54128fSAndroid Build Coastguard Worker
342*6a54128fSAndroid Build Coastguard Worker equal = ext2fs_badblocks_equal(bb4, bb5);
343*6a54128fSAndroid Build Coastguard Worker printf("bb4 and bb5 are %sequal.\n", equal ? "" : "NOT ");
344*6a54128fSAndroid Build Coastguard Worker if (!equal)
345*6a54128fSAndroid Build Coastguard Worker test_fail++;
346*6a54128fSAndroid Build Coastguard Worker printf("\n");
347*6a54128fSAndroid Build Coastguard Worker }
348*6a54128fSAndroid Build Coastguard Worker
349*6a54128fSAndroid Build Coastguard Worker file_test(bb4);
350*6a54128fSAndroid Build Coastguard Worker
351*6a54128fSAndroid Build Coastguard Worker file_test_invalid(bb4);
352*6a54128fSAndroid Build Coastguard Worker
353*6a54128fSAndroid Build Coastguard Worker if (test_fail == 0)
354*6a54128fSAndroid Build Coastguard Worker printf("ext2fs library badblocks tests checks out OK!\n");
355*6a54128fSAndroid Build Coastguard Worker
356*6a54128fSAndroid Build Coastguard Worker if (bb1)
357*6a54128fSAndroid Build Coastguard Worker ext2fs_badblocks_list_free(bb1);
358*6a54128fSAndroid Build Coastguard Worker if (bb2)
359*6a54128fSAndroid Build Coastguard Worker ext2fs_badblocks_list_free(bb2);
360*6a54128fSAndroid Build Coastguard Worker if (bb3)
361*6a54128fSAndroid Build Coastguard Worker ext2fs_badblocks_list_free(bb3);
362*6a54128fSAndroid Build Coastguard Worker if (bb4)
363*6a54128fSAndroid Build Coastguard Worker ext2fs_badblocks_list_free(bb4);
364*6a54128fSAndroid Build Coastguard Worker if (bb5)
365*6a54128fSAndroid Build Coastguard Worker ext2fs_badblocks_list_free(bb5);
366*6a54128fSAndroid Build Coastguard Worker
367*6a54128fSAndroid Build Coastguard Worker return test_fail;
368*6a54128fSAndroid Build Coastguard Worker
369*6a54128fSAndroid Build Coastguard Worker }
370