From: Zheng Liu Date: Tue, 1 Jan 2013 12:30:14 +0000 (+0800) Subject: debugfs: fixup the hard-coded buffer length in dump_file X-Git-Tag: v1.42.7~48 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d3b4de412c7710b7d5f05774dedd1e298d2c750b;p=thirdparty%2Fe2fsprogs.git debugfs: fixup the hard-coded buffer length in dump_file Allocate the block buffer in dump_file() instead of assuming that the block size is no more than 8k. CC: George Spelvin Signed-off-by: Zheng Liu Signed-off-by: "Theodore Ts'o" --- diff --git a/debugfs/dump.c b/debugfs/dump.c index a15a0b730..9409ab656 100644 --- a/debugfs/dump.c +++ b/debugfs/dump.c @@ -105,10 +105,10 @@ static void dump_file(const char *cmdname, ext2_ino_t ino, int fd, { errcode_t retval; struct ext2_inode inode; - char buf[8192]; + char *buf = 0; ext2_file_t e2_file; int nbytes; - unsigned int got; + unsigned int got, blocksize = current_fs->blocksize; if (debugfs_read_inode(ino, &inode, cmdname)) return; @@ -118,8 +118,13 @@ static void dump_file(const char *cmdname, ext2_ino_t ino, int fd, com_err(cmdname, retval, "while opening ext2 file"); return; } + retval = ext2fs_get_mem(blocksize, &buf); + if (retval) { + com_err(cmdname, retval, "while allocating memory"); + return; + } while (1) { - retval = ext2fs_file_read(e2_file, buf, sizeof(buf), &got); + retval = ext2fs_file_read(e2_file, buf, blocksize, &got); if (retval) com_err(cmdname, retval, "while reading ext2 file"); if (got == 0) @@ -128,6 +133,8 @@ static void dump_file(const char *cmdname, ext2_ino_t ino, int fd, if ((unsigned) nbytes != got) com_err(cmdname, errno, "while writing file"); } + if (buf) + ext2fs_free_mem(&buf); retval = ext2fs_file_close(e2_file); if (retval) { com_err(cmdname, retval, "while closing ext2 file");