xref: /aosp_15_r20/external/e2fsprogs/lib/ext2fs/tst_badblocks.c (revision 6a54128f25917bfc36a8a6e9d722c04a0b4641b6)
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