From e6dfbd70ea43529770fc03bf16dea5e1cd47d76e Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Wed, 4 Jul 2018 15:16:35 +0200 Subject: [PATCH] libfdisk: reduce number of asprintf() calls, check return value Signed-off-by: Karel Zak --- libfdisk/src/utils.c | 33 +++++++++++++++++++-------------- 1 file 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 , 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; }