fdisk: always skips zeros in dumps

The expert command 'D'ump skips zeros when print label hexdump on
terminal, but for non-terminal it prints all buffer. It seems
better to use the same semantic everywhere and skip zeros.

Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
Karel Zak 2021-04-08 12:42:36 +02:00
parent 22a900a90f
commit a970c2dd51
1 changed files with 6 additions and 9 deletions

View File

@ -729,7 +729,7 @@ static size_t skip_empty(const unsigned char *buf, size_t i, size_t sz)
return next == i + 16 ? i : next; return next == i + 16 ? i : next;
} }
static void dump_buffer(off_t base, unsigned char *buf, size_t sz, int all) static void dump_buffer(off_t base, unsigned char *buf, size_t sz)
{ {
size_t i, l, next = 0; size_t i, l, next = 0;
@ -737,7 +737,7 @@ static void dump_buffer(off_t base, unsigned char *buf, size_t sz, int all)
return; return;
for (i = 0, l = 0; i < sz; i++, l++) { for (i = 0, l = 0; i < sz; i++, l++) {
if (l == 0) { if (l == 0) {
if (all == 0 && !next) if (!next)
next = skip_empty(buf, i, sz); next = skip_empty(buf, i, sz);
printf("%08jx ", (intmax_t)base + i); printf("%08jx ", (intmax_t)base + i);
} }
@ -759,7 +759,7 @@ static void dump_buffer(off_t base, unsigned char *buf, size_t sz, int all)
} }
static void dump_blkdev(struct fdisk_context *cxt, const char *name, static void dump_blkdev(struct fdisk_context *cxt, const char *name,
uint64_t offset, size_t size, int all) uint64_t offset, size_t size)
{ {
int fd = fdisk_get_devfd(cxt); int fd = fdisk_get_devfd(cxt);
@ -776,23 +776,20 @@ static void dump_blkdev(struct fdisk_context *cxt, const char *name,
if (read_all(fd, (char *) buf, size) != (ssize_t) size) if (read_all(fd, (char *) buf, size) != (ssize_t) size)
fdisk_warn(cxt, _("cannot read")); fdisk_warn(cxt, _("cannot read"));
else else
dump_buffer(offset, buf, size, all); dump_buffer(offset, buf, size);
free(buf); free(buf);
} }
} }
void dump_firstsector(struct fdisk_context *cxt) void dump_firstsector(struct fdisk_context *cxt)
{ {
int all = !isatty(STDOUT_FILENO);
assert(cxt); assert(cxt);
dump_blkdev(cxt, _("First sector"), 0, fdisk_get_sector_size(cxt), all); dump_blkdev(cxt, _("First sector"), 0, fdisk_get_sector_size(cxt));
} }
void dump_disklabel(struct fdisk_context *cxt) void dump_disklabel(struct fdisk_context *cxt)
{ {
int all = !isatty(STDOUT_FILENO);
int i = 0; int i = 0;
const char *name = NULL; const char *name = NULL;
uint64_t offset = 0; uint64_t offset = 0;
@ -801,7 +798,7 @@ void dump_disklabel(struct fdisk_context *cxt)
assert(cxt); assert(cxt);
while (fdisk_locate_disklabel(cxt, i++, &name, &offset, &size) == 0 && size) while (fdisk_locate_disklabel(cxt, i++, &name, &offset, &size) == 0 && size)
dump_blkdev(cxt, name, offset, size, all); dump_blkdev(cxt, name, offset, size);
} }
static fdisk_sector_t get_dev_blocks(char *dev) static fdisk_sector_t get_dev_blocks(char *dev)