1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

Some internal renaming.

Add --separator and --sort to dmsetup (unused as yet).
Make alignment flag optional when specifying report fields.
This commit is contained in:
Alasdair Kergon 2007-01-18 17:47:58 +00:00
parent 07473c2be3
commit 03c6979264
4 changed files with 69 additions and 46 deletions

View File

@ -1,5 +1,8 @@
Version 1.02.16 - 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 Version 1.02.15 - 17th January 2007
=================================== ===================================
Add basic reporting functions to libdevmapper. Add basic reporting functions to libdevmapper.

View File

@ -646,11 +646,13 @@ struct dm_report_field;
/* /*
* dm_report_field_type flags * 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_LEFT 0x00000001
#define DM_REPORT_FIELD_ALIGN_RIGHT 0x00000002 #define DM_REPORT_FIELD_ALIGN_RIGHT 0x00000002
#define DM_REPORT_FIELD_STRING 0x00000004 #define DM_REPORT_FIELD_TYPE_MASK 0x000000F0
#define DM_REPORT_FIELD_NUMBER 0x00000008 #define DM_REPORT_FIELD_TYPE_STRING 0x00000010
#define DM_REPORT_FIELD_TYPE_NUMBER 0x00000020
struct dm_report; struct dm_report;
struct dm_report_field_type { struct dm_report_field_type {
@ -668,7 +670,7 @@ struct dm_report_field_type {
/* /*
* dm_report_init output_flags * 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_ALIGNED 0x00000001
#define DM_REPORT_OUTPUT_BUFFERED 0x00000002 #define DM_REPORT_OUTPUT_BUFFERED 0x00000002
#define DM_REPORT_OUTPUT_HEADINGS 0x00000004 #define DM_REPORT_OUTPUT_HEADINGS 0x00000004

View File

@ -672,7 +672,7 @@ static int _row_compare(const void *a, const void *b)
for (cnt = 0; cnt < rowa->rh->keys_count; cnt++) { for (cnt = 0; cnt < rowa->rh->keys_count; cnt++) {
sfa = (*rowa->sort_fields)[cnt]; sfa = (*rowa->sort_fields)[cnt];
sfb = (*rowb->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 numa =
*(const uint64_t *) sfa->sort_value; *(const uint64_t *) sfa->sort_value;
const uint64_t numb = const uint64_t numb =
@ -686,7 +686,7 @@ static int _row_compare(const void *a, const void *b)
} else { /* FLD_DESCENDING */ } else { /* FLD_DESCENDING */
return (numa < numb) ? 1 : -1; 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 *stra = (const char *) sfa->sort_value;
const char *strb = (const char *) sfb->sort_value; const char *strb = (const char *) sfb->sort_value;
int cmp = strcmp(stra, strb); int cmp = strcmp(stra, strb);
@ -740,6 +740,7 @@ int dm_report_output(struct dm_report *rh)
const char *repstr; const char *repstr;
char buf[4096]; char buf[4096];
unsigned width; unsigned width;
uint32_t align;
if (list_empty(&rh->rows)) if (list_empty(&rh->rows))
return 1; return 1;
@ -771,18 +772,23 @@ int dm_report_output(struct dm_report *rh)
if (!dm_pool_grow_object(rh->mem, repstr, if (!dm_pool_grow_object(rh->mem, repstr,
strlen(repstr))) strlen(repstr)))
goto bad_grow; goto bad_grow;
} else if (field->props->flags & DM_REPORT_FIELD_ALIGN_LEFT) { } else {
if (dm_snprintf(buf, sizeof(buf), "%-*.*s", if (!(align = field->props->flags & DM_REPORT_FIELD_ALIGN_MASK))
width, width, repstr) < 0) align = (field->props->flags & DM_REPORT_FIELD_TYPE_NUMBER) ?
goto bad_snprintf; DM_REPORT_FIELD_ALIGN_RIGHT : DM_REPORT_FIELD_ALIGN_LEFT;
if (!dm_pool_grow_object(rh->mem, buf, width)) if (align & DM_REPORT_FIELD_ALIGN_LEFT) {
goto bad_grow; if (dm_snprintf(buf, sizeof(buf), "%-*.*s",
} else if (field->props->flags & DM_REPORT_FIELD_ALIGN_RIGHT) { width, width, repstr) < 0)
if (dm_snprintf(buf, sizeof(buf), "%*.*s", goto bad_snprintf;
width, width, repstr) < 0) if (!dm_pool_grow_object(rh->mem, buf, width))
goto bad_snprintf; goto bad_grow;
if (!dm_pool_grow_object(rh->mem, buf, width)) } else if (field->props->flags & DM_REPORT_FIELD_ALIGN_RIGHT) {
goto bad_grow; 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)) if (!list_end(&row->fields, fh))

View File

@ -1,7 +1,7 @@
/* /*
* Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved. * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.
* Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved. * Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved.
* Copyright (C) 2005 NEC Corperation * Copyright (C) 2005-2007 NEC Corperation
* *
* This file is part of the device-mapper userspace tools. * This file is part of the device-mapper userspace tools.
* *
@ -114,7 +114,9 @@ enum {
NOOPENCOUNT_ARG, NOOPENCOUNT_ARG,
NOTABLE_ARG, NOTABLE_ARG,
OPTIONS_ARG, OPTIONS_ARG,
SEPARATOR_ARG,
SHOWKEYS_ARG, SHOWKEYS_ARG,
SORT_ARG,
TABLE_ARG, TABLE_ARG,
TARGET_ARG, TARGET_ARG,
TREE_ARG, TREE_ARG,
@ -126,10 +128,10 @@ enum {
}; };
static int _switches[NUM_SWITCHES]; 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 int _num_devices;
static char *_uuid; static char *_uuid;
static char *_fields;
static char *_table; static char *_table;
static char *_target; static char *_target;
static char *_command; static char *_command;
@ -348,8 +350,8 @@ static int _set_task_device(struct dm_task *dmt, const char *name, int optional)
if (!dm_task_set_uuid(dmt, _uuid)) if (!dm_task_set_uuid(dmt, _uuid))
return 0; return 0;
} else if (_switches[MAJOR_ARG] && _switches[MINOR_ARG]) { } else if (_switches[MAJOR_ARG] && _switches[MINOR_ARG]) {
if (!dm_task_set_major(dmt, _values[MAJOR_ARG]) || if (!dm_task_set_major(dmt, _int_args[MAJOR_ARG]) ||
!dm_task_set_minor(dmt, _values[MINOR_ARG])) !dm_task_set_minor(dmt, _int_args[MINOR_ARG]))
return 0; return 0;
} else if (!optional) { } else if (!optional) {
fprintf(stderr, "No device specified.\n"); fprintf(stderr, "No device specified.\n");
@ -440,19 +442,19 @@ static int _create(int argc, char **argv, void *data __attribute((unused)))
if (_switches[READ_ONLY] && !dm_task_set_ro(dmt)) if (_switches[READ_ONLY] && !dm_task_set_ro(dmt))
goto out; 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; 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; 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; 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; 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; goto out;
if (_switches[NOOPENCOUNT_ARG] && !dm_task_no_open_count(dmt)) if (_switches[NOOPENCOUNT_ARG] && !dm_task_no_open_count(dmt))
@ -1736,7 +1738,7 @@ static int _loop_table(char *table, size_t tlen, char *file, char *dev, off_t of
#ifdef HAVE_SYS_STATVFS_H #ifdef HAVE_SYS_STATVFS_H
if (fstatvfs(fd, &fsbuf)) if (fstatvfs(fd, &fsbuf))
goto error; goto error;
/* FIXME Fragment size currently unused */ /* FIXME Fragment size currently unused */
blksize = fsbuf.f_frsize; blksize = fsbuf.f_frsize;
@ -1744,7 +1746,7 @@ static int _loop_table(char *table, size_t tlen, char *file, char *dev, off_t of
close(fd); 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) (long long unsigned)sectors, file, off) < 0)
return 0; return 0;
@ -1888,7 +1890,9 @@ static int _process_switches(int *argc, char ***argv)
{"noopencount", 0, &ind, NOOPENCOUNT_ARG}, {"noopencount", 0, &ind, NOOPENCOUNT_ARG},
{"notable", 0, &ind, NOTABLE_ARG}, {"notable", 0, &ind, NOTABLE_ARG},
{"options", 1, &ind, OPTIONS_ARG}, {"options", 1, &ind, OPTIONS_ARG},
{"separator", 1, &ind, SEPARATOR_ARG},
{"showkeys", 0, &ind, SHOWKEYS_ARG}, {"showkeys", 0, &ind, SHOWKEYS_ARG},
{"sort", 1, &ind, SORT_ARG},
{"table", 1, &ind, TABLE_ARG}, {"table", 1, &ind, TABLE_ARG},
{"target", 1, &ind, TARGET_ARG}, {"target", 1, &ind, TARGET_ARG},
{"tree", 0, &ind, TREE_ARG}, {"tree", 0, &ind, TREE_ARG},
@ -1906,7 +1910,7 @@ static int _process_switches(int *argc, char ***argv)
* Zero all the index counts. * Zero all the index counts.
*/ */
memset(&_switches, 0, sizeof(_switches)); memset(&_switches, 0, sizeof(_switches));
memset(&_values, 0, sizeof(_values)); memset(&_int_args, 0, sizeof(_int_args));
namebase = strdup((*argv)[0]); namebase = strdup((*argv)[0]);
base = basename(namebase); base = basename(namebase);
@ -1918,17 +1922,17 @@ static int _process_switches(int *argc, char ***argv)
_switches[OPTIONS_ARG]++; _switches[OPTIONS_ARG]++;
_switches[MAJOR_ARG]++; _switches[MAJOR_ARG]++;
_switches[MINOR_ARG]++; _switches[MINOR_ARG]++;
_fields = (char *) "name"; _string_args[OPTIONS_ARG] = (char *) "name";
if (*argc == 3) { if (*argc == 3) {
_values[MAJOR_ARG] = atoi((*argv)[1]); _int_args[MAJOR_ARG] = atoi((*argv)[1]);
_values[MINOR_ARG] = atoi((*argv)[2]); _int_args[MINOR_ARG] = atoi((*argv)[2]);
*argc -= 2; *argc -= 2;
*argv += 2; *argv += 2;
} else if ((*argc == 2) && } else if ((*argc == 2) &&
(2 == sscanf((*argv)[1], "%i:%i", (2 == sscanf((*argv)[1], "%i:%i",
&_values[MAJOR_ARG], &_int_args[MAJOR_ARG],
&_values[MINOR_ARG]))) { &_int_args[MINOR_ARG]))) {
*argc -= 1; *argc -= 1;
*argv += 1; *argv += 1;
} else { } else {
@ -1950,7 +1954,7 @@ static int _process_switches(int *argc, char ***argv)
optarg = 0; optarg = 0;
optind = OPTIND_INIT; 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) { long_options, NULL)) != -1) {
if (c == ':' || c == '?') if (c == ':' || c == '?')
return 0; return 0;
@ -1962,17 +1966,25 @@ static int _process_switches(int *argc, char ***argv)
_switches[READ_ONLY]++; _switches[READ_ONLY]++;
if (c == 'j' || ind == MAJOR_ARG) { if (c == 'j' || ind == MAJOR_ARG) {
_switches[MAJOR_ARG]++; _switches[MAJOR_ARG]++;
_values[MAJOR_ARG] = atoi(optarg); _int_args[MAJOR_ARG] = atoi(optarg);
} }
if (c == 'm' || ind == MINOR_ARG) { if (c == 'm' || ind == MINOR_ARG) {
_switches[MINOR_ARG]++; _switches[MINOR_ARG]++;
_values[MINOR_ARG] = atoi(optarg); _int_args[MINOR_ARG] = atoi(optarg);
} }
if (c == 'n' || ind == NOTABLE_ARG) if (c == 'n' || ind == NOTABLE_ARG)
_switches[NOTABLE_ARG]++; _switches[NOTABLE_ARG]++;
if (c == 'o' || ind == OPTIONS_ARG) { if (c == 'o' || ind == OPTIONS_ARG) {
_switches[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) if (c == 'v' || ind == VERBOSE_ARG)
_switches[VERBOSE_ARG]++; _switches[VERBOSE_ARG]++;
@ -1982,16 +1994,16 @@ static int _process_switches(int *argc, char ***argv)
} }
if (c == 'G' || ind == GID_ARG) { if (c == 'G' || ind == GID_ARG) {
_switches[GID_ARG]++; _switches[GID_ARG]++;
_values[GID_ARG] = atoi(optarg); _int_args[GID_ARG] = atoi(optarg);
} }
if (c == 'U' || ind == UID_ARG) { if (c == 'U' || ind == UID_ARG) {
_switches[UID_ARG]++; _switches[UID_ARG]++;
_values[UID_ARG] = atoi(optarg); _int_args[UID_ARG] = atoi(optarg);
} }
if (c == 'M' || ind == MODE_ARG) { if (c == 'M' || ind == MODE_ARG) {
_switches[MODE_ARG]++; _switches[MODE_ARG]++;
/* FIXME Accept modes as per chmod */ /* 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)) { if ((ind == EXEC_ARG)) {
_switches[EXEC_ARG]++; _switches[EXEC_ARG]++;
@ -2032,12 +2044,12 @@ static int _process_switches(int *argc, char ***argv)
} }
if (_switches[COLS_ARG] && _switches[OPTIONS_ARG] && 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"); fprintf(stderr, "Only -o name is supported so far.\n");
return 0; return 0;
} }
if (_switches[TREE_ARG] && !_process_tree_options(_fields)) if (_switches[TREE_ARG] && !_process_tree_options(_string_args[OPTIONS_ARG]))
return 0; return 0;
if (_switches[TABLE_ARG] && _switches[NOTABLE_ARG]) { if (_switches[TABLE_ARG] && _switches[NOTABLE_ARG]) {