Hi,
I've cooked up this patch (submitted upstream). It's even less
intrusive. Please apply.
Cheers,
 -- Guido
diff --git a/dmsetup/Makefile.in b/dmsetup/Makefile.in
diff --git a/dmsetup/dmsetup.c b/dmsetup/dmsetup.c
index a86fed2..5116d7e 100644
--- a/dmsetup/dmsetup.c
+++ b/dmsetup/dmsetup.c
@@ -108,6 +108,7 @@ enum {
 	READ_ONLY = 0,
 	COLS_ARG,
 	EXEC_ARG,
+	EXPORT_ARG,
 	FORCE_ARG,
 	GID_ARG,
 	MAJOR_ARG,
@@ -320,8 +321,34 @@ static int _display_info_cols(struct dm_task *dmt, struct dm_info *info)
 	return r;
 }
 
+
 static void _display_info_long(struct dm_task *dmt, struct dm_info *info)
 {
+	const char* info_names[] = {
+		"Name:              %s\n",
+		"State:             %s%s\n",
+		"Tables present:    %s%s%s\n",
+		"Open count:        %d\n",
+		"Event number:      %" PRIu32 "\n",
+		"Major, minor:      %d, %d\n",
+		"Number of targets: %d\n",
+		"UUID: %s\n",
+		"DM_NAME=%s\n",
+		"DM_STATE=\"%s%s\"\n",
+		"DM_TABLE_STATE=\"%s%s%s\"\n",
+		"DM_OPENCOUNT=%d\n",
+		"DM_LAST_EVENT_NR=%" PRIu32 "\n",
+		"DM_MAJOR=%d\nDM_MINOR=%d\n",
+		"DM_TARGET_COUNT=%d\n",
+		"DM_UUID=%s\n",
+ 	};
+	const int info_elems = sizeof(info_names)/sizeof(info_names[0])/2;
+#define FORMAT(x) (info_names[info_elems*mode+x])
+#define MODE_LONG   0
+#define MODE_EXPORT 1
+	int mode = _switches[EXPORT_ARG] ? MODE_EXPORT : MODE_LONG;
+	enum info_fields { name = 0, state, tablestate, opencount,
+	                   eventnumber, devno, numtargets, uuidname };
 	const char *uuid;
 
 	if (!info->exists) {
@@ -329,31 +356,31 @@ static void _display_info_long(struct dm_task *dmt, struct dm_info *info)
 		return;
 	}
 
-	printf("Name:              %s\n", dm_task_get_name(dmt));
+	printf(FORMAT(name), dm_task_get_name(dmt));
 
-	printf("State:             %s%s\n",
+	printf(FORMAT(state),
 	       info->suspended ? "SUSPENDED" : "ACTIVE",
 	       info->read_only ? " (READ-ONLY)" : "");
 
 	if (!info->live_table && !info->inactive_table)
-		printf("Tables present:    None\n");
+		printf(FORMAT(tablestate), "", "", "None\n");
 	else
-		printf("Tables present:    %s%s%s\n",
+		printf(FORMAT(tablestate),
 		       info->live_table ? "LIVE" : "",
 		       info->live_table && info->inactive_table ? " & " : "",
 		       info->inactive_table ? "INACTIVE" : "");
 
 	if (info->open_count != -1)
-		printf("Open count:        %d\n", info->open_count);
+		printf(FORMAT(opencount), info->open_count);
 
-	printf("Event number:      %" PRIu32 "\n", info->event_nr);
-	printf("Major, minor:      %d, %d\n", info->major, info->minor);
+	printf(FORMAT(eventnumber), info->event_nr);
+	printf(FORMAT(devno), info->major, info->minor);
 
 	if (info->target_count != -1)
-		printf("Number of targets: %d\n", info->target_count);
+		printf(FORMAT(numtargets), info->target_count);
 
 	if ((uuid = dm_task_get_uuid(dmt)) && *uuid)
-		printf("UUID: %s\n", uuid);
+		printf(FORMAT(uuidname), uuid);
 
 	printf("\n");
 }
@@ -2355,6 +2382,7 @@ static int _process_switches(int *argc, char ***argv)
 		{"readonly", 0, &ind, READ_ONLY},
 		{"columns", 0, &ind, COLS_ARG},
 		{"exec", 1, &ind, EXEC_ARG},
+		{"export", 0, &ind, EXPORT_ARG},
 		{"force", 0, &ind, FORCE_ARG},
 		{"gid", 1, &ind, GID_ARG},
 		{"major", 1, &ind, MAJOR_ARG},
@@ -2431,12 +2459,14 @@ static int _process_switches(int *argc, char ***argv)
 
 	optarg = 0;
 	optind = OPTIND_INIT;
-	while ((ind = -1, c = GETOPTLONG_FN(*argc, *argv, "cCfG:j:m:M:no:O:ru:U:v",
+	while ((ind = -1, c = GETOPTLONG_FN(*argc, *argv, "cCefG:j:m:M:no:O:ru:U:v",
 					    long_options, NULL)) != -1) {
 		if (c == ':' || c == '?')
 			return 0;
 		if (c == 'c' || c == 'C' || ind == COLS_ARG)
 			_switches[COLS_ARG]++;
+		if (c == 'e' || ind == EXPORT_ARG)
+			_switches[EXPORT_ARG]++;
 		if (c == 'f' || ind == FORCE_ARG)
 			_switches[FORCE_ARG]++;
 		if (c == 'r' || ind == READ_ONLY)

Reply via email to