debugfs: add the hexdump_block command

Signed-off-by: Theodore Ts'o <tytso@mit.edu>
debian
Theodore Ts'o 2015-06-20 00:10:20 -04:00
parent 83c799dea0
commit 58b0356a25
4 changed files with 44 additions and 0 deletions

View File

@ -145,6 +145,9 @@ request do_set_block_group_descriptor, "Set block group descriptor field",
request do_logdump, "Dump the contents of the journal",
logdump;
request do_hexdump_block, "Dump the contents of a block",
hexdump_block, hexdump;
request do_htree_dump, "Dump a hash-indexed directory",
htree_dump, htree;

View File

@ -392,6 +392,11 @@ is specified, also clear num-1 inodes after the specified inode.
Print a list of commands understood by
.BR debugfs .
.TP
.BI hexdump_block " block"
Dump the contents of
.I block
in hex and ASCII.
.TP
.BI htree_dump " filespec"
Dump the hash-indexed directory
.IR filespec ,

View File

@ -103,6 +103,7 @@ extern void do_dirsearch(int argc, char **argv);
/* logdump.c */
extern void do_logdump(int argc, char **argv);
extern void do_hexdump_block(int argc, char **argv);
/* lsdel.c */
extern void do_lsdel(int argc, char **argv);

View File

@ -714,3 +714,38 @@ static void do_hexdump (FILE *out_file, char *buf, int blocksize)
}
}
void do_hexdump_block(int argc, char **argv)
{
blk64_t block;
char *buf;
errcode_t errcode;
FILE *out;
if (common_args_process(argc, argv, 2, 2, argv[0],
"<block>", 0))
return;
if (strtoblk(argv[0], argv[1], "block number", &block))
return;
buf = malloc(current_fs->blocksize);
if (!buf) {
fprintf(stderr, "Couldn't allocate block buffer.\n");
return;
}
out = open_pager();
errcode = io_channel_read_blk64(current_fs->io, block, 1, buf);
if (errcode) {
com_err("hexdump_block", errcode,
"while reading block %llu\n", block);
goto errout;
}
do_hexdump(out, buf, current_fs->blocksize);
errout:
free(buf);
close_pager(out);
}