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)