diff options
author | Karel Zak | 2015-04-22 11:08:05 +0200 |
---|---|---|
committer | Karel Zak | 2015-04-22 11:08:05 +0200 |
commit | 40b175084ff4c57468fb67600c8c66703e17cd75 (patch) | |
tree | 25ed8dc26b4afc906bfcc1e58c6be37b687f6eea /misc-utils/lsblk.c | |
parent | fdisk, sfdisk: fix -o <list> backend (diff) | |
download | kernel-qcow2-util-linux-40b175084ff4c57468fb67600c8c66703e17cd75.tar.gz kernel-qcow2-util-linux-40b175084ff4c57468fb67600c8c66703e17cd75.tar.xz kernel-qcow2-util-linux-40b175084ff4c57468fb67600c8c66703e17cd75.zip |
lib/strutils: fix string_add_to_idarray() int vs. size_t
The function uses "int" as argument, but for array size (and index) is better
to use unsigned type (size_t). If we mix "size_t" in util (e.g. fdisk)
and "int" in lib/strutils.c then result is unexpected behavior on
ppc64.
# sfdisk --list -o DEVICE,START,SIZE /dev/sdb
Disk /dev/sdb: 50 MiB, 52428800 bytes, 102400 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 32768 bytes
Disklabel type: gpt
Disk identifier: 3B8559DB-33AF-43E9-BEFC-C331D829B539
lt-sfdisk: libfdisk/src/label.c:178: fdisk_label_get_field: Assertion `id > 0' failed.
The patch cleanup all code to use size_t everywhere.
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'misc-utils/lsblk.c')
-rw-r--r-- | misc-utils/lsblk.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/misc-utils/lsblk.c b/misc-utils/lsblk.c index 6c716ea95..1b4ffc128 100644 --- a/misc-utils/lsblk.c +++ b/misc-utils/lsblk.c @@ -222,7 +222,7 @@ struct lsblk *lsblk; /* global handler */ * column twice. That's enough, dynamically allocated array of the columns is * unnecessary overkill and over-engineering in this case */ static int columns[ARRAY_SIZE(infos) * 2]; -static int ncolumns; +static size_t ncolumns; static inline size_t err_columns_index(size_t arysz, size_t idx) { @@ -329,7 +329,8 @@ static int is_maj_included(int maj) /* array with IDs of enabled columns */ static int get_column_id(int num) { - assert(num < ncolumns); + assert(num >= 0); + assert((size_t) num < ncolumns); assert(columns[num] < (int) ARRAY_SIZE(infos)); return columns[num]; } @@ -357,7 +358,7 @@ static int column_id_to_number(int id) { size_t i; - for (i = 0; i < (size_t) ncolumns; i++) + for (i = 0; i < ncolumns; i++) if (columns[i] == id) return i; return -1; @@ -1127,7 +1128,7 @@ static void set_scols_data(struct blkdev_cxt *cxt, int col, int id, struct libsc static void fill_table_line(struct blkdev_cxt *cxt, struct libscols_line *scols_parent) { - int i; + size_t i; cxt->scols_line = scols_table_new_line(lsblk->table, scols_parent); if (!cxt->scols_line) @@ -1642,8 +1643,9 @@ int main(int argc, char *argv[]) { struct lsblk _ls = { .sort_id = -1 }; int scols_flags = LSBLK_TREE; - int i, c, status = EXIT_FAILURE; + int c, status = EXIT_FAILURE; char *outarg = NULL; + size_t i; static const struct option longopts[] = { { "all", 0, 0, 'a' }, @@ -1730,7 +1732,7 @@ int main(int argc, char *argv[]) outarg = optarg; break; case 'O': - for (ncolumns = 0 ; ncolumns < (int) ARRAY_SIZE(infos); ncolumns++) + for (ncolumns = 0 ; ncolumns < ARRAY_SIZE(infos); ncolumns++) columns[ncolumns] = ncolumns; break; case 'p': |