File util-linux-fdisk-dm-partname.patch of Package util-linux
From 97c68d42041bb8761568f988b27cbfc470f6fb7d Mon Sep 17 00:00:00 2001
From: Stanislav Brabec <sbrabec@suse.cz>
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 <sbrabec@suse.cz>
Signed-off-by: Karel Zak <kzak@redhat.com>
---
libfdisk/src/utils.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
Index: util-linux-2.25/libfdisk/src/utils.c
===================================================================
--- util-linux-2.25.orig/libfdisk/src/utils.c
+++ util-linux-2.25/libfdisk/src/utils.c
@@ -1,6 +1,7 @@
#include "fdiskP.h"
#include "pathnames.h"
+#include "canonicalize.h"
#include <ctype.h>
@@ -68,6 +69,7 @@ char *fdisk_partname(const char *dev, si
{
char *res = NULL;
const char *p = "";
+ char *dev_mapped = NULL;
int w = 0;
if (!dev || !*dev) {
@@ -76,6 +78,13 @@ char *fdisk_partname(const char *dev, si
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]))
p = "p";
@@ -96,10 +105,11 @@ char *fdisk_partname(const char *dev, si
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