1 /* 2 * unused.c --- quick and dirty unused space dumper 3 * 4 * Copyright (C) 1997 Theodore Ts'o. This file may be redistributed 5 * under the terms of the GNU Public License. 6 */ 7 8 #include "config.h" 9 #include <stdio.h> 10 #include <unistd.h> 11 #include <stdlib.h> 12 #include <ctype.h> 13 #include <string.h> 14 #include <time.h> 15 #ifdef HAVE_ERRNO_H 16 #include <errno.h> 17 #endif 18 #include <sys/types.h> 19 #ifdef HAVE_GETOPT_H 20 #include <getopt.h> 21 #else 22 extern int optind; 23 extern char *optarg; 24 #endif 25 26 #include "debugfs.h" 27 28 void do_dump_unused(int argc EXT2FS_ATTR((unused)), char **argv) 29 { 30 blk64_t blk; 31 unsigned char buf[EXT2_MAX_BLOCK_SIZE]; 32 unsigned int i; 33 errcode_t retval; 34 35 if (common_args_process(argc, argv, 1, 1, 36 "dump_unused", "", 0)) 37 return; 38 39 for (blk=current_fs->super->s_first_data_block; 40 blk < ext2fs_blocks_count(current_fs->super); blk++) { 41 if (ext2fs_test_block_bitmap2(current_fs->block_map,blk)) 42 continue; 43 retval = io_channel_read_blk64(current_fs->io, blk, 1, buf); 44 if (retval) { 45 com_err(argv[0], retval, "While reading block\n"); 46 return; 47 } 48 for (i=0; i < current_fs->blocksize; i++) 49 if (buf[i]) 50 break; 51 if (i >= current_fs->blocksize) 52 continue; 53 printf("\nUnused block %llu contains non-zero data:\n\n", 54 blk); 55 for (i=0; i < current_fs->blocksize; i++) 56 fputc(buf[i], stdout); 57 } 58 } 59