From 76f17cf2604847b693035f25f57792f07e6651be Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Thu, 18 Apr 2013 14:38:49 +0200 Subject: fdisk: fix list types Signed-off-by: Karel Zak --- fdisks/fdisk.c | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) (limited to 'fdisks/fdisk.c') diff --git a/fdisks/fdisk.c b/fdisks/fdisk.c index 1db4639e6..623f16856 100644 --- a/fdisks/fdisk.c +++ b/fdisks/fdisk.c @@ -192,21 +192,24 @@ void print_menu(struct fdisk_context *cxt, enum menutype menu) void list_partition_types(struct fdisk_context *cxt) { struct fdisk_parttype *types; - int i; + size_t ntypes = 0; if (!cxt || !cxt->label || !cxt->label->parttypes) return; types = cxt->label->parttypes; + ntypes = cxt->label->nparttypes; if (types[0].typestr == NULL) { /* * Prints in 4 columns in format */ - unsigned int last[4], done = 0, next = 0, size; + size_t last[4], done = 0, next = 0, size; + int i; - for (i = 0; types[i].name; i++); - size = i; + size = ntypes; + if (types[ntypes - 1].name == NULL) + size--; for (i = 3; i >= 0; i--) last[3 - i] = done += (size + i - done) / (i + 1); @@ -219,14 +222,16 @@ void list_partition_types(struct fdisk_context *cxt) struct fdisk_parttype *t = &types[next]; size_t ret; - printf("%c%2x ", i ? ' ' : '\n', t->type); - ret = mbsalign(_(t->name), name, sizeof(name), - &width, MBS_ALIGN_LEFT, 0); + if (t->name) { + printf("%c%2x ", i ? ' ' : '\n', t->type); + ret = mbsalign(_(t->name), name, sizeof(name), + &width, MBS_ALIGN_LEFT, 0); - if (ret == (size_t)-1 || ret >= sizeof(name)) - printf("%-15.15s", _(t->name)); - else - fputs(name, stdout); + if (ret == (size_t)-1 || ret >= sizeof(name)) + printf("%-15.15s", _(t->name)); + else + fputs(name, stdout); + } next = last[i++] + done; if (i > 3 || next >= last[i]) { @@ -240,9 +245,13 @@ void list_partition_types(struct fdisk_context *cxt) * Prints 1 column in format */ struct fdisk_parttype *t; + size_t i; - for (i = 0, t = types; t->name; t++, i++) - printf("%3d %-30s %s\n", i + 1, t->name, t->typestr); + for (i = 0, t = types; t && i < ntypes; t++, i++) { + if (t->name) + printf("%3zu %-30s %s\n", i + 1, + t->name, t->typestr); + } } putchar('\n'); } -- cgit v1.2.3-55-g7522