diff options
author | Karel Zak | 2018-07-04 15:16:35 +0200 |
---|---|---|
committer | Karel Zak | 2018-07-04 15:16:35 +0200 |
commit | e6dfbd70ea43529770fc03bf16dea5e1cd47d76e (patch) | |
tree | a5611dc08b8d8e229ce4fe592df4061dd2881308 /libfdisk/src | |
parent | libfdisk: Fix multipath partition seperators for user-friendly names (diff) | |
download | kernel-qcow2-util-linux-e6dfbd70ea43529770fc03bf16dea5e1cd47d76e.tar.gz kernel-qcow2-util-linux-e6dfbd70ea43529770fc03bf16dea5e1cd47d76e.tar.xz kernel-qcow2-util-linux-e6dfbd70ea43529770fc03bf16dea5e1cd47d76e.zip |
libfdisk: reduce number of asprintf() calls, check return value
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'libfdisk/src')
-rw-r--r-- | libfdisk/src/utils.c | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/libfdisk/src/utils.c b/libfdisk/src/utils.c index 54e28b2fa..115409065 100644 --- a/libfdisk/src/utils.c +++ b/libfdisk/src/utils.c @@ -153,25 +153,30 @@ char *fdisk_partname(const char *dev, size_t partno) if ((strncmp(dev, _PATH_DEV_BYID, sizeof(_PATH_DEV_BYID) - 1) == 0) || strncmp(dev, _PATH_DEV_BYPATH, sizeof(_PATH_DEV_BYPATH) - 1) == 0 || strncmp(dev, "/dev/mapper", sizeof("/dev/mapper") - 1) == 0) { - asprintf(&res, "%.*s%zu", w, dev, partno); - if (access(res, F_OK) == 0){ - p = ""; - } else { - /* check for partition seperator "p" */ - p = "p"; - free(res); - asprintf(&res, "%.*s%s%zu", w, dev, p, partno); - if (access(res, F_OK) != 0){ - /* otherwise, default to "-path" */ - p = "-part"; - } - } + + /* check for <name><partno>, e.g. mpatha1 */ + if (asprintf(&res, "%.*s%zu", w, dev, partno) <= 0) + res = NULL; + if (res && access(res, F_OK) == 0) + goto done; + free(res); + + /* check for partition seperator "p" */ + if (asprintf(&res, "%.*sp%zu", w, dev, partno) <= 0) + res = NULL; + if (res && access(res, F_OK) == 0) + goto done; + + free(res); + + /* otherwise, default to "-path" */ + p = "-part"; } if (asprintf(&res, "%.*s%s%zu", w, dev, p, partno) <= 0) res = NULL; - +done: free(dev_mapped); return res; } |