From 97c68d42041bb8761568f988b27cbfc470f6fb7d Mon Sep 17 00:00:00 2001 From: Stanislav Brabec Date: Tue, 26 May 2015 17:59:29 +0200 Subject: [PATCH] libfdisk: Use predictable /dev/mapper partition names for /dev/dm-N It is impossible to predict /dev/dm-N partition names. Use predictable and better readable /dev/mapper names instead. [kzak@redhat.com: - remove if-before-free] Signed-off-by: Stanislav Brabec Signed-off-by: Karel Zak --- libfdisk/src/utils.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/libfdisk/src/utils.c b/libfdisk/src/utils.c index 4789dbd226..5feea53f60 100644 --- a/libfdisk/src/utils.c +++ b/libfdisk/src/utils.c @@ -1,6 +1,7 @@ #include "fdiskP.h" #include "pathnames.h" +#include "canonicalize.h" #include @@ -115,6 +116,7 @@ char *fdisk_partname(const char *dev, size_t partno) { char *res = NULL; const char *p = ""; + char *dev_mapped = NULL; int w = 0; if (!dev || !*dev) { @@ -123,6 +125,13 @@ char *fdisk_partname(const char *dev, size_t partno) return NULL; } + /* It is impossible to predict /dev/dm-N partition names. */ + if (strncmp(dev, "/dev/dm-", sizeof("/dev/dm-") - 1) == 0) { + dev_mapped = canonicalize_dm_name (dev + 5); + if (dev_mapped) + dev = dev_mapped; + } + w = strlen(dev); if (isdigit(dev[w - 1])) #ifdef __GNU__ @@ -147,10 +156,11 @@ char *fdisk_partname(const char *dev, size_t partno) p = "-part"; } - if (asprintf(&res, "%.*s%s%zu", w, dev, p, partno) > 0) - return res; + if (asprintf(&res, "%.*s%s%zu", w, dev, p, partno) <= 0) + res = NULL; - return NULL; + free(dev_mapped); + return res; } #ifdef TEST_PROGRAM -- 2.47.2