int file_test(badblocks_list bb) { badblocks_list new_bb = 0; errcode_t retval; FILE *f; f = tmpfile(); if (!f) { fprintf(stderr, "Error opening temp file: %s\n", error_message(errno)); return 1; } retval = ext2fs_write_bb_FILE(bb, 0, f); if (retval) { com_err("file_test", retval, "while writing bad blocks"); return 1; } rewind(f); retval = ext2fs_read_bb_FILE2(0, f, &new_bb, 0, 0); if (retval) { com_err("file_test", retval, "while reading bad blocks"); return 1; } fclose(f); if (ext2fs_badblocks_equal(bb, new_bb)) { printf("Block bitmap matched after reading and writing.\n"); } else { printf("Block bitmap NOT matched.\n"); test_fail++; } return 0; }
int file_test_invalid(badblocks_list bb) { badblocks_list new_bb = 0; errcode_t retval; ext2_filsys fs; FILE *f; fs = malloc(sizeof(struct struct_ext2_filsys)); memset(fs, 0, sizeof(struct struct_ext2_filsys)); fs->magic = EXT2_ET_MAGIC_EXT2FS_FILSYS; fs->super = malloc(SUPERBLOCK_SIZE); memset(fs->super, 0, SUPERBLOCK_SIZE); fs->super->s_first_data_block = 1; fs->super->s_blocks_count = 100; f = tmpfile(); if (!f) { fprintf(stderr, "Error opening temp file: %s\n", error_message(errno)); return 1; } retval = ext2fs_write_bb_FILE(bb, 0, f); if (retval) { com_err("file_test", retval, "while writing bad blocks"); return 1; } fprintf(f, "34500\n"); rewind(f); test_expected_fail = 0; retval = ext2fs_read_bb_FILE(fs, f, &new_bb, invalid_proc); if (retval) { com_err("file_test", retval, "while reading bad blocks"); return 1; } fclose(f); if (!test_expected_fail) { printf("Expected test failure didn't happen!\n"); test_fail++; } if (ext2fs_badblocks_equal(bb, new_bb)) { printf("Block bitmap matched after reading and writing.\n"); } else { printf("Block bitmap NOT matched.\n"); test_fail++; } return 0; }
int file_test(badblocks_list bb) { char tmp_filename[20] = "#testXXXXXX"; badblocks_list new_bb = 0; errcode_t retval; FILE *f; mktemp(tmp_filename); unlink(tmp_filename); f = fopen(tmp_filename, "w"); if (!f) { fprintf(stderr, "Error opening temp file %s: %s\n", tmp_filename, error_message(errno)); return 1; } retval = ext2fs_write_bb_FILE(bb, 0, f); if (retval) { com_err("file_test", retval, "while writing bad blocks"); return 1; } fclose(f); f = fopen(tmp_filename, "r"); if (!f) { fprintf(stderr, "Error re-opening temp file %s: %s\n", tmp_filename, error_message(errno)); return 1; } retval = ext2fs_read_bb_FILE2(0, f, &new_bb, 0, 0); if (retval) { com_err("file_test", retval, "while reading bad blocks"); return 1; } fclose(f); if (ext2fs_badblocks_equal(bb, new_bb)) { printf("Block bitmap matched after reading and writing.\n"); } else { printf("Block bitmap NOT matched.\n"); test_fail++; } return 0; }
int main(int argc, char **argv) { badblocks_list bb1, bb2, bb3, bb4, bb5; int equal; errcode_t retval; bb1 = bb2 = bb3 = bb4 = bb5 = 0; printf("test1: "); retval = create_test_list(test1, &bb1); if (retval == 0) print_list(bb1, 1); printf("\n"); printf("test2: "); retval = create_test_list(test2, &bb2); if (retval == 0) print_list(bb2, 1); printf("\n"); printf("test3: "); retval = create_test_list(test3, &bb3); if (retval == 0) print_list(bb3, 1); printf("\n"); printf("test4: "); retval = create_test_list(test4, &bb4); if (retval == 0) { print_list(bb4, 0); printf("\n"); validate_test_seq(bb4, test4a); } printf("\n"); printf("test5: "); retval = create_test_list(test5, &bb5); if (retval == 0) { print_list(bb5, 0); printf("\n"); do_test_seq(bb5, test5a); printf("After test5 sequence: "); print_list(bb5, 0); printf("\n"); } printf("\n"); if (bb1 && bb2 && bb3 && bb4 && bb5) { printf("Comparison tests:\n"); equal = ext2fs_badblocks_equal(bb1, bb2); printf("bb1 and bb2 are %sequal.\n", equal ? "" : "NOT "); if (equal) test_fail++; equal = ext2fs_badblocks_equal(bb1, bb3); printf("bb1 and bb3 are %sequal.\n", equal ? "" : "NOT "); if (!equal) test_fail++; equal = ext2fs_badblocks_equal(bb1, bb4); printf("bb1 and bb4 are %sequal.\n", equal ? "" : "NOT "); if (equal) test_fail++; equal = ext2fs_badblocks_equal(bb4, bb5); printf("bb4 and bb5 are %sequal.\n", equal ? "" : "NOT "); if (!equal) test_fail++; printf("\n"); } file_test(bb4); if (test_fail == 0) printf("ext2fs library badblocks tests checks out OK!\n"); if (bb1) ext2fs_badblocks_list_free(bb1); if (bb2) ext2fs_badblocks_list_free(bb2); if (bb3) ext2fs_badblocks_list_free(bb3); if (bb4) ext2fs_badblocks_list_free(bb4); return test_fail; }