summaryrefslogtreecommitdiffstats
path: root/misc-utils
diff options
context:
space:
mode:
authorKarel Zak2015-04-22 11:08:05 +0200
committerKarel Zak2015-04-22 11:08:05 +0200
commit40b175084ff4c57468fb67600c8c66703e17cd75 (patch)
tree25ed8dc26b4afc906bfcc1e58c6be37b687f6eea /misc-utils
parentfdisk, sfdisk: fix -o <list> backend (diff)
downloadkernel-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')
-rw-r--r--misc-utils/findmnt.c12
-rw-r--r--misc-utils/lsblk.c14
-rw-r--r--misc-utils/lslocks.c10
3 files changed, 21 insertions, 15 deletions
diff --git a/misc-utils/findmnt.c b/misc-utils/findmnt.c
index f76ac2e04..afeaa2a3f 100644
--- a/misc-utils/findmnt.c
+++ b/misc-utils/findmnt.c
@@ -151,7 +151,7 @@ static struct colinfo infos[] = {
* 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)
{
@@ -186,7 +186,8 @@ static int match_func(struct libmnt_fs *fs, void *data __attribute__ ((__unused_
static int get_column_id(int num)
{
- assert(num < ncolumns);
+ assert(num >= 0);
+ assert((size_t) num < ncolumns);
assert((size_t) columns[num] < ARRAY_SIZE(infos));
return columns[num];
}
@@ -704,7 +705,7 @@ static char *get_tabdiff_data(struct libmnt_fs *old_fs,
static struct libscols_line *add_line(struct libscols_table *table, struct libmnt_fs *fs,
struct libscols_line *parent)
{
- int i;
+ size_t i;
struct libscols_line *line = scols_table_new_line(table, parent);
if (!line) {
@@ -721,7 +722,7 @@ static struct libscols_line *add_line(struct libscols_table *table, struct libmn
static struct libscols_line *add_tabdiff_line(struct libscols_table *table, struct libmnt_fs *new_fs,
struct libmnt_fs *old_fs, int change)
{
- int i;
+ size_t i;
struct libscols_line *line = scols_table_new_line(table, NULL);
if (!line) {
@@ -1271,9 +1272,10 @@ int main(int argc, char *argv[])
struct libmnt_table *tb = NULL;
char **tabfiles = NULL;
int direction = MNT_ITER_FORWARD;
- int i, c, rc = -1, timeout = -1;
+ int c, rc = -1, timeout = -1;
int ntabfiles = 0, tabtype = 0;
char *outarg = NULL;
+ size_t i;
struct libscols_table *table = NULL;
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':
diff --git a/misc-utils/lslocks.c b/misc-utils/lslocks.c
index 9072d6027..e2229adc3 100644
--- a/misc-utils/lslocks.c
+++ b/misc-utils/lslocks.c
@@ -82,7 +82,7 @@ static struct colinfo infos[] = {
};
static int columns[ARRAY_SIZE(infos) * 2];
-static int ncolumns;
+static size_t ncolumns;
static pid_t pid = 0;
@@ -343,7 +343,8 @@ static int column_name_to_id(const char *name, size_t namesz)
static inline 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];
@@ -385,7 +386,7 @@ static pid_t get_blocker(int id, struct list_head *locks)
static void add_scols_line(struct libscols_table *table, struct lock *l, struct list_head *locks)
{
- int i;
+ size_t i;
struct libscols_line *line;
/*
* Whenever cmdname or filename is NULL it is most
@@ -452,7 +453,8 @@ static void add_scols_line(struct libscols_table *table, struct lock *l, struct
static int show_locks(struct list_head *locks)
{
- int i, rc = 0;
+ int rc = 0;
+ size_t i;
struct list_head *p, *pnext;
struct libscols_table *table;