diff options
Diffstat (limited to 'debugfs/unused.c')
-rw-r--r-- | debugfs/unused.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/debugfs/unused.c b/debugfs/unused.c new file mode 100644 index 00000000..c055db7d --- /dev/null +++ b/debugfs/unused.c @@ -0,0 +1,53 @@ +/* + * unused.c --- quick and dirty unused space dumper + * + * Copyright (C) 1997 Theodore Ts'o. This file may be redistributed + * under the terms of the GNU Public License. + */ + +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <ctype.h> +#include <string.h> +#include <time.h> +#ifdef HAVE_ERRNO_H +#include <errno.h> +#endif +#include <sys/types.h> +#ifdef HAVE_GETOPT_H +#include <getopt.h> +#else +extern int optind; +extern char *optarg; +#endif + +#include "debugfs.h" + +void do_dump_unused(int argc, char **argv) +{ + unsigned long blk; + unsigned char buf[32768]; + int i; + errcode_t retval; + + for (blk=current_fs->super->s_first_data_block; + blk < current_fs->super->s_blocks_count; blk++) { + if (ext2fs_test_block_bitmap(current_fs->block_map,blk)) + continue; + retval = io_channel_read_blk(current_fs->io, blk, 1, buf); + if (retval) { + com_err(argv[0], retval, "While reading block\n"); + return; + } + for (i=0; i < current_fs->blocksize; i++) + if (buf[i]) + break; + if (i >= current_fs->blocksize) + continue; + printf("\nUnused block %ld contains non-zero data:\n\n", + blk); + for (i=0; i < current_fs->blocksize; i++) + fputc(buf[i], stdout); + } +} |