[lvm-devel] [PATCH 6/6][devname mangling] Add support for unmangling devnames in "dmsetup ls/deps"

Peter Rajnoha prajnoha at redhat.com
Fri Oct 14 14:59:57 UTC 2011


Well, for dmsetup ls/deps, I have no better idea, just to add --unmanglename
switch (I assume it won't a be a good idea to change the existing output format).
So if --unmanglename is define, the name will be unmangled in the output, if not,
it will be kept as it is in the mangled form.

Peter
---
 tools/dmsetup.c |   27 ++++++++++++++++++++++++---
 1 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/tools/dmsetup.c b/tools/dmsetup.c
index 0339ceb..49d8ebb 100644
--- a/tools/dmsetup.c
+++ b/tools/dmsetup.c
@@ -152,6 +152,7 @@ enum {
 	TREE_ARG,
 	UID_ARG,
 	UNBUFFERED_ARG,
+	UNMANGLENAME_ARG,
 	UNQUOTED_ARG,
 	UUID_ARG,
 	VERBOSE_ARG,
@@ -1786,6 +1787,7 @@ static int _deps(CMD_ARGS)
 	struct dm_task *dmt;
 	struct dm_info info;
 	char *name = NULL;
+	char buf[PATH_MAX];
 
 	if (names)
 		name = names->name;
@@ -1825,6 +1827,10 @@ static int _deps(CMD_ARGS)
 		goto out;
 	}
 
+	if (_switches[UNMANGLENAME_ARG] &&
+	    dm_string_mangle_decode(DM_STRING_MANGLE_HEX, name, buf, PATH_MAX))
+		name = buf;
+
 	if (_switches[VERBOSE_ARG])
 		_display_info(dmt);
 
@@ -1850,7 +1856,14 @@ static int _deps(CMD_ARGS)
 
 static int _display_name(CMD_ARGS)
 {
-	printf("%s\t(%d, %d)\n", names->name,
+	const char *name = names->name;
+	char buf[PATH_MAX];
+
+	if (_switches[UNMANGLENAME_ARG] &&
+	    dm_string_mangle_decode(DM_STRING_MANGLE_HEX, name, buf, PATH_MAX))
+		name = buf;
+
+	printf("%s\t(%d, %d)\n", name,
 	       (int) MAJOR(names->dev), (int) MINOR(names->dev));
 
 	return 1;
@@ -2076,6 +2089,7 @@ static void _display_tree_node(struct dm_tree_node *node, unsigned depth,
 	const char *name;
 	const struct dm_info *info;
 	int first_on_line = 0;
+	char buf[PATH_MAX];
 
 	/* Sub-tree for targets has 2 more depth */
 	if (depth + 2 > MAX_DEPTH)
@@ -2086,6 +2100,10 @@ static void _display_tree_node(struct dm_tree_node *node, unsigned depth,
 	if ((!name || !*name) && !_tree_switches[TR_DEVICE])
 		return;
 
+	if (_switches[UNMANGLENAME_ARG] &&
+	    dm_string_mangle_decode(DM_STRING_MANGLE_HEX, name, buf, PATH_MAX))
+		name = buf;
+
 	/* Indicate whether there are more nodes at this depth */
 	_tree_more[depth] = !last_child;
 	_tree_width[depth] = 0;
@@ -2814,9 +2832,9 @@ static struct command _commands[] = {
 	{"reload", "<device> [<table_file>]", 0, 2, 0, _load},
 	{"rename", "<device> [--setuuid] <new_name_or_uuid>", 1, 2, 0, _rename},
 	{"message", "<device> <sector> <message>", 2, -1, 0, _message},
-	{"ls", "[--target <target_type>] [--exec <command>] [--tree [-o options]]", 0, 0, 0, _ls},
+	{"ls", "[--target <target_type>] [--exec <command>] [--tree [-o options]] [--unmanglename]", 0, 0, 0, _ls},
 	{"info", "[<device>]", 0, -1, 1, _info},
-	{"deps", "[<device>]", 0, -1, 1, _deps},
+	{"deps", "[<device>] [--unmanglename]", 0, -1, 1, _deps},
 	{"status", "[<device>] [--target <target_type>]", 0, -1, 1, _status},
 	{"table", "[<device>] [--target <target_type>] [--showkeys]", 0, -1, 1, _status},
 	{"wait", "<device> [<event_nr>]", 0, 2, 0, _wait},
@@ -3230,6 +3248,7 @@ static int _process_switches(int *argc, char ***argv, const char *dev_dir)
 		{"uid", 1, &ind, UID_ARG},
 		{"uuid", 1, &ind, UUID_ARG},
 		{"unbuffered", 0, &ind, UNBUFFERED_ARG},
+		{"unmanglename", 0, &ind, UNMANGLENAME_ARG},
 		{"unquoted", 0, &ind, UNQUOTED_ARG},
 		{"verbose", 1, &ind, VERBOSE_ARG},
 		{"verifyudev", 0, &ind, VERIFYUDEV_ARG},
@@ -3387,6 +3406,8 @@ static int _process_switches(int *argc, char ***argv, const char *dev_dir)
 			}
 			dm_set_default_name_mangle(_int_args[MANGLENAME_ARG]);
 		}
+		if ((ind == UNMANGLENAME_ARG))
+			_switches[UNMANGLENAME_ARG]++;
 		if ((ind == NAMEPREFIXES_ARG))
 			_switches[NAMEPREFIXES_ARG]++;
 		if ((ind == NOFLUSH_ARG))




More information about the lvm-devel mailing list