[dm-devel] device-mapper ./WHATS_NEW dmsetup/dmsetup.c li ...
agk at sourceware.org
agk at sourceware.org
Thu Jan 18 17:48:01 UTC 2007
CVSROOT: /cvs/dm
Module name: device-mapper
Changes by: agk at sourceware.org 2007-01-18 17:47:59
Modified files:
. : WHATS_NEW
dmsetup : dmsetup.c
lib : libdevmapper.h libdm-report.c
Log message:
Some internal renaming.
Add --separator and --sort to dmsetup (unused as yet).
Make alignment flag optional when specifying report fields.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/device-mapper/WHATS_NEW.diff?cvsroot=dm&r1=1.151&r2=1.152
http://sourceware.org/cgi-bin/cvsweb.cgi/device-mapper/dmsetup/dmsetup.c.diff?cvsroot=dm&r1=1.76&r2=1.77
http://sourceware.org/cgi-bin/cvsweb.cgi/device-mapper/lib/libdevmapper.h.diff?cvsroot=dm&r1=1.64&r2=1.65
http://sourceware.org/cgi-bin/cvsweb.cgi/device-mapper/lib/libdm-report.c.diff?cvsroot=dm&r1=1.2&r2=1.3
--- device-mapper/WHATS_NEW 2007/01/17 17:50:54 1.151
+++ device-mapper/WHATS_NEW 2007/01/18 17:47:56 1.152
@@ -1,5 +1,8 @@
Version 1.02.16 -
===================================
+ Add --separator and --sort to dmsetup (unused).
+ Make alignment flag optional when specifying report fields.
+
Version 1.02.15 - 17th January 2007
===================================
Add basic reporting functions to libdevmapper.
--- device-mapper/dmsetup/dmsetup.c 2007/01/16 21:13:07 1.76
+++ device-mapper/dmsetup/dmsetup.c 2007/01/18 17:47:57 1.77
@@ -1,7 +1,7 @@
/*
* Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.
- * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved.
- * Copyright (C) 2005 NEC Corperation
+ * Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2005-2007 NEC Corperation
*
* This file is part of the device-mapper userspace tools.
*
@@ -114,7 +114,9 @@
NOOPENCOUNT_ARG,
NOTABLE_ARG,
OPTIONS_ARG,
+ SEPARATOR_ARG,
SHOWKEYS_ARG,
+ SORT_ARG,
TABLE_ARG,
TARGET_ARG,
TREE_ARG,
@@ -126,10 +128,10 @@
};
static int _switches[NUM_SWITCHES];
-static int _values[NUM_SWITCHES];
+static int _int_args[NUM_SWITCHES];
+static char *_string_args[NUM_SWITCHES];
static int _num_devices;
static char *_uuid;
-static char *_fields;
static char *_table;
static char *_target;
static char *_command;
@@ -348,8 +350,8 @@
if (!dm_task_set_uuid(dmt, _uuid))
return 0;
} else if (_switches[MAJOR_ARG] && _switches[MINOR_ARG]) {
- if (!dm_task_set_major(dmt, _values[MAJOR_ARG]) ||
- !dm_task_set_minor(dmt, _values[MINOR_ARG]))
+ if (!dm_task_set_major(dmt, _int_args[MAJOR_ARG]) ||
+ !dm_task_set_minor(dmt, _int_args[MINOR_ARG]))
return 0;
} else if (!optional) {
fprintf(stderr, "No device specified.\n");
@@ -440,19 +442,19 @@
if (_switches[READ_ONLY] && !dm_task_set_ro(dmt))
goto out;
- if (_switches[MAJOR_ARG] && !dm_task_set_major(dmt, _values[MAJOR_ARG]))
+ if (_switches[MAJOR_ARG] && !dm_task_set_major(dmt, _int_args[MAJOR_ARG]))
goto out;
- if (_switches[MINOR_ARG] && !dm_task_set_minor(dmt, _values[MINOR_ARG]))
+ if (_switches[MINOR_ARG] && !dm_task_set_minor(dmt, _int_args[MINOR_ARG]))
goto out;
- if (_switches[UID_ARG] && !dm_task_set_uid(dmt, _values[UID_ARG]))
+ if (_switches[UID_ARG] && !dm_task_set_uid(dmt, _int_args[UID_ARG]))
goto out;
- if (_switches[GID_ARG] && !dm_task_set_gid(dmt, _values[GID_ARG]))
+ if (_switches[GID_ARG] && !dm_task_set_gid(dmt, _int_args[GID_ARG]))
goto out;
- if (_switches[MODE_ARG] && !dm_task_set_mode(dmt, _values[MODE_ARG]))
+ if (_switches[MODE_ARG] && !dm_task_set_mode(dmt, _int_args[MODE_ARG]))
goto out;
if (_switches[NOOPENCOUNT_ARG] && !dm_task_no_open_count(dmt))
@@ -1736,7 +1738,7 @@
#ifdef HAVE_SYS_STATVFS_H
if (fstatvfs(fd, &fsbuf))
- goto error;
+ goto error;
/* FIXME Fragment size currently unused */
blksize = fsbuf.f_frsize;
@@ -1744,7 +1746,7 @@
close(fd);
- if (dm_snprintf(table, tlen, "%llu %llu loop %s %llu\n", 0ULL,
+ if (dm_snprintf(table, tlen, "%llu %llu loop %s %llu\n", 0ULL,
(long long unsigned)sectors, file, off) < 0)
return 0;
@@ -1888,7 +1890,9 @@
{"noopencount", 0, &ind, NOOPENCOUNT_ARG},
{"notable", 0, &ind, NOTABLE_ARG},
{"options", 1, &ind, OPTIONS_ARG},
+ {"separator", 1, &ind, SEPARATOR_ARG},
{"showkeys", 0, &ind, SHOWKEYS_ARG},
+ {"sort", 1, &ind, SORT_ARG},
{"table", 1, &ind, TABLE_ARG},
{"target", 1, &ind, TARGET_ARG},
{"tree", 0, &ind, TREE_ARG},
@@ -1906,7 +1910,7 @@
* Zero all the index counts.
*/
memset(&_switches, 0, sizeof(_switches));
- memset(&_values, 0, sizeof(_values));
+ memset(&_int_args, 0, sizeof(_int_args));
namebase = strdup((*argv)[0]);
base = basename(namebase);
@@ -1918,17 +1922,17 @@
_switches[OPTIONS_ARG]++;
_switches[MAJOR_ARG]++;
_switches[MINOR_ARG]++;
- _fields = (char *) "name";
+ _string_args[OPTIONS_ARG] = (char *) "name";
if (*argc == 3) {
- _values[MAJOR_ARG] = atoi((*argv)[1]);
- _values[MINOR_ARG] = atoi((*argv)[2]);
+ _int_args[MAJOR_ARG] = atoi((*argv)[1]);
+ _int_args[MINOR_ARG] = atoi((*argv)[2]);
*argc -= 2;
*argv += 2;
} else if ((*argc == 2) &&
(2 == sscanf((*argv)[1], "%i:%i",
- &_values[MAJOR_ARG],
- &_values[MINOR_ARG]))) {
+ &_int_args[MAJOR_ARG],
+ &_int_args[MINOR_ARG]))) {
*argc -= 1;
*argv += 1;
} else {
@@ -1950,7 +1954,7 @@
optarg = 0;
optind = OPTIND_INIT;
- while ((ind = -1, c = GETOPTLONG_FN(*argc, *argv, "cCfGj:m:Mno:ru:Uv",
+ while ((ind = -1, c = GETOPTLONG_FN(*argc, *argv, "cCfGj:m:Mno:O:ru:Uv",
long_options, NULL)) != -1) {
if (c == ':' || c == '?')
return 0;
@@ -1962,17 +1966,25 @@
_switches[READ_ONLY]++;
if (c == 'j' || ind == MAJOR_ARG) {
_switches[MAJOR_ARG]++;
- _values[MAJOR_ARG] = atoi(optarg);
+ _int_args[MAJOR_ARG] = atoi(optarg);
}
if (c == 'm' || ind == MINOR_ARG) {
_switches[MINOR_ARG]++;
- _values[MINOR_ARG] = atoi(optarg);
+ _int_args[MINOR_ARG] = atoi(optarg);
}
if (c == 'n' || ind == NOTABLE_ARG)
_switches[NOTABLE_ARG]++;
if (c == 'o' || ind == OPTIONS_ARG) {
_switches[OPTIONS_ARG]++;
- _fields = optarg;
+ _string_args[OPTIONS_ARG] = optarg;
+ }
+ if (ind == SEPARATOR_ARG) {
+ _switches[SEPARATOR_ARG]++;
+ _string_args[SEPARATOR_ARG] = optarg;
+ }
+ if (c == 'O' || ind == SORT_ARG) {
+ _switches[SORT_ARG]++;
+ _string_args[SORT_ARG] = optarg;
}
if (c == 'v' || ind == VERBOSE_ARG)
_switches[VERBOSE_ARG]++;
@@ -1982,16 +1994,16 @@
}
if (c == 'G' || ind == GID_ARG) {
_switches[GID_ARG]++;
- _values[GID_ARG] = atoi(optarg);
+ _int_args[GID_ARG] = atoi(optarg);
}
if (c == 'U' || ind == UID_ARG) {
_switches[UID_ARG]++;
- _values[UID_ARG] = atoi(optarg);
+ _int_args[UID_ARG] = atoi(optarg);
}
if (c == 'M' || ind == MODE_ARG) {
_switches[MODE_ARG]++;
/* FIXME Accept modes as per chmod */
- _values[MODE_ARG] = (int) strtol(optarg, NULL, 8);
+ _int_args[MODE_ARG] = (int) strtol(optarg, NULL, 8);
}
if ((ind == EXEC_ARG)) {
_switches[EXEC_ARG]++;
@@ -2032,12 +2044,12 @@
}
if (_switches[COLS_ARG] && _switches[OPTIONS_ARG] &&
- strcmp(_fields, "name")) {
+ strcmp(_string_args[OPTIONS_ARG], "name")) {
fprintf(stderr, "Only -o name is supported so far.\n");
return 0;
}
- if (_switches[TREE_ARG] && !_process_tree_options(_fields))
+ if (_switches[TREE_ARG] && !_process_tree_options(_string_args[OPTIONS_ARG]))
return 0;
if (_switches[TABLE_ARG] && _switches[NOTABLE_ARG]) {
--- device-mapper/lib/libdevmapper.h 2007/01/16 18:03:40 1.64
+++ device-mapper/lib/libdevmapper.h 2007/01/18 17:47:58 1.65
@@ -646,11 +646,13 @@
/*
* dm_report_field_type flags
*/
-#define DM_REPORT_FIELD_MASK 0x0000000F
+#define DM_REPORT_FIELD_MASK 0x000000FF
+#define DM_REPORT_FIELD_ALIGN_MASK 0x0000000F
#define DM_REPORT_FIELD_ALIGN_LEFT 0x00000001
#define DM_REPORT_FIELD_ALIGN_RIGHT 0x00000002
-#define DM_REPORT_FIELD_STRING 0x00000004
-#define DM_REPORT_FIELD_NUMBER 0x00000008
+#define DM_REPORT_FIELD_TYPE_MASK 0x000000F0
+#define DM_REPORT_FIELD_TYPE_STRING 0x00000010
+#define DM_REPORT_FIELD_TYPE_NUMBER 0x00000020
struct dm_report;
struct dm_report_field_type {
@@ -668,7 +670,7 @@
/*
* dm_report_init output_flags
*/
-#define DM_REPORT_OUTPUT_MASK 0x00000007
+#define DM_REPORT_OUTPUT_MASK 0x000000FF
#define DM_REPORT_OUTPUT_ALIGNED 0x00000001
#define DM_REPORT_OUTPUT_BUFFERED 0x00000002
#define DM_REPORT_OUTPUT_HEADINGS 0x00000004
--- device-mapper/lib/libdm-report.c 2007/01/16 21:13:07 1.2
+++ device-mapper/lib/libdm-report.c 2007/01/18 17:47:58 1.3
@@ -672,7 +672,7 @@
for (cnt = 0; cnt < rowa->rh->keys_count; cnt++) {
sfa = (*rowa->sort_fields)[cnt];
sfb = (*rowb->sort_fields)[cnt];
- if (sfa->props->flags & DM_REPORT_FIELD_NUMBER) {
+ if (sfa->props->flags & DM_REPORT_FIELD_TYPE_NUMBER) {
const uint64_t numa =
*(const uint64_t *) sfa->sort_value;
const uint64_t numb =
@@ -686,7 +686,7 @@
} else { /* FLD_DESCENDING */
return (numa < numb) ? 1 : -1;
}
- } else { /* DM_REPORT_FIELD_STRING */
+ } else { /* DM_REPORT_FIELD_TYPE_STRING */
const char *stra = (const char *) sfa->sort_value;
const char *strb = (const char *) sfb->sort_value;
int cmp = strcmp(stra, strb);
@@ -740,6 +740,7 @@
const char *repstr;
char buf[4096];
unsigned width;
+ uint32_t align;
if (list_empty(&rh->rows))
return 1;
@@ -771,18 +772,23 @@
if (!dm_pool_grow_object(rh->mem, repstr,
strlen(repstr)))
goto bad_grow;
- } else if (field->props->flags & DM_REPORT_FIELD_ALIGN_LEFT) {
- if (dm_snprintf(buf, sizeof(buf), "%-*.*s",
- width, width, repstr) < 0)
- goto bad_snprintf;
- if (!dm_pool_grow_object(rh->mem, buf, width))
- goto bad_grow;
- } else if (field->props->flags & DM_REPORT_FIELD_ALIGN_RIGHT) {
- if (dm_snprintf(buf, sizeof(buf), "%*.*s",
- width, width, repstr) < 0)
- goto bad_snprintf;
- if (!dm_pool_grow_object(rh->mem, buf, width))
- goto bad_grow;
+ } else {
+ if (!(align = field->props->flags & DM_REPORT_FIELD_ALIGN_MASK))
+ align = (field->props->flags & DM_REPORT_FIELD_TYPE_NUMBER) ?
+ DM_REPORT_FIELD_ALIGN_RIGHT : DM_REPORT_FIELD_ALIGN_LEFT;
+ if (align & DM_REPORT_FIELD_ALIGN_LEFT) {
+ if (dm_snprintf(buf, sizeof(buf), "%-*.*s",
+ width, width, repstr) < 0)
+ goto bad_snprintf;
+ if (!dm_pool_grow_object(rh->mem, buf, width))
+ goto bad_grow;
+ } else if (field->props->flags & DM_REPORT_FIELD_ALIGN_RIGHT) {
+ if (dm_snprintf(buf, sizeof(buf), "%*.*s",
+ width, width, repstr) < 0)
+ goto bad_snprintf;
+ if (!dm_pool_grow_object(rh->mem, buf, width))
+ goto bad_grow;
+ }
}
if (!list_end(&row->fields, fh))
More information about the dm-devel
mailing list