mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
dmsetup: reduce parser code
Switch set upfront. Only add code, which is not common for every switch. Use just 16bit for switch counting.
This commit is contained in:
parent
2f3fcbd245
commit
5561f2a530
@ -253,7 +253,7 @@ typedef enum {
|
|||||||
|
|
||||||
static cmd_name_t _base_command = DMSETUP_CMD; /* Default command is 'dmsetup' */
|
static cmd_name_t _base_command = DMSETUP_CMD; /* Default command is 'dmsetup' */
|
||||||
static cmd_type_t _base_command_type = DMSETUP_TYPE;
|
static cmd_type_t _base_command_type = DMSETUP_TYPE;
|
||||||
static int _switches[NUM_SWITCHES];
|
static uint16_t _switches[NUM_SWITCHES];
|
||||||
static int _int_args[NUM_SWITCHES];
|
static int _int_args[NUM_SWITCHES];
|
||||||
static char *_string_args[NUM_SWITCHES];
|
static char *_string_args[NUM_SWITCHES];
|
||||||
static int _num_devices;
|
static int _num_devices;
|
||||||
@ -7015,202 +7015,69 @@ static int _process_switches(int *argcp, char ***argvp, const char *dev_dir)
|
|||||||
while ((c = GETOPTLONG_FN(*argcp, *argvp, "cCfG:hj:m:M:no:O:rS:u:U:vy",
|
while ((c = GETOPTLONG_FN(*argcp, *argvp, "cCfG:hj:m:M:no:O:rS:u:U:vy",
|
||||||
_long_options, NULL)) != -1) {
|
_long_options, NULL)) != -1) {
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case ALIAS_ARG:
|
|
||||||
_switches[ALIAS_ARG]++;
|
|
||||||
_string_args[ALIAS_ARG] = optarg;
|
|
||||||
break;
|
|
||||||
case ALL_DEVICES_ARG:
|
|
||||||
_switches[ALL_DEVICES_ARG]++;
|
|
||||||
break;
|
|
||||||
case ALL_PROGRAMS_ARG:
|
|
||||||
_switches[ALL_PROGRAMS_ARG]++;
|
|
||||||
break;
|
|
||||||
case ALL_REGIONS_ARG:
|
|
||||||
_switches[ALL_REGIONS_ARG]++;
|
|
||||||
break;
|
|
||||||
case AREA_ARG:
|
|
||||||
_switches[AREA_ARG]++;
|
|
||||||
break;
|
|
||||||
case AREAS_ARG:
|
|
||||||
_switches[AREAS_ARG]++;
|
|
||||||
_int_args[AREAS_ARG] = atoi(optarg);
|
|
||||||
break;
|
|
||||||
case AREA_SIZE_ARG:
|
|
||||||
_switches[AREA_SIZE_ARG]++;
|
|
||||||
_string_args[AREA_SIZE_ARG] = optarg;
|
|
||||||
break;
|
|
||||||
case USER_DATA_ARG:
|
|
||||||
_switches[USER_DATA_ARG]++;
|
|
||||||
_string_args[USER_DATA_ARG] = optarg;
|
|
||||||
break;
|
|
||||||
case ':':
|
case ':':
|
||||||
case '?':
|
case '?':
|
||||||
return_0;
|
return_0;
|
||||||
case HELP_ARG:
|
case 'C': /* 'C' == 'c' COLS_ARG */
|
||||||
_switches[HELP_ARG]++;
|
|
||||||
break;
|
|
||||||
case CONCISE_ARG:
|
|
||||||
_switches[CONCISE_ARG]++;
|
|
||||||
break;
|
|
||||||
case BOUNDS_ARG:
|
|
||||||
_switches[BOUNDS_ARG]++;
|
|
||||||
_string_args[BOUNDS_ARG] = optarg;
|
|
||||||
break;
|
|
||||||
case CLEAR_ARG:
|
|
||||||
_switches[CLEAR_ARG]++;
|
|
||||||
break;
|
|
||||||
case 'C':
|
|
||||||
case COLS_ARG:
|
|
||||||
_switches[COLS_ARG]++;
|
_switches[COLS_ARG]++;
|
||||||
break;
|
break;
|
||||||
case FILEMAP_ARG:
|
default:
|
||||||
_switches[FILEMAP_ARG]++;
|
if (c >= NUM_SWITCHES) {
|
||||||
break;
|
log_error("Unrecognized options %d.", c);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/* plain switch */
|
||||||
|
_switches[c]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (c) {
|
||||||
|
case ALIAS_ARG:
|
||||||
|
case AREA_SIZE_ARG:
|
||||||
|
case BOUNDS_ARG:
|
||||||
case FOLLOW_ARG:
|
case FOLLOW_ARG:
|
||||||
_switches[FOLLOW_ARG]++;
|
|
||||||
_string_args[FOLLOW_ARG] = optarg;
|
|
||||||
break;
|
|
||||||
case FORCE_ARG:
|
|
||||||
_switches[FORCE_ARG]++;
|
|
||||||
break;
|
|
||||||
case FOREGROUND_ARG:
|
|
||||||
_switches[FOREGROUND_ARG]++;
|
|
||||||
break;
|
|
||||||
case READ_ONLY:
|
|
||||||
_switches[READ_ONLY]++;
|
|
||||||
break;
|
|
||||||
case HISTOGRAM_ARG:
|
|
||||||
_switches[HISTOGRAM_ARG]++;
|
|
||||||
break;
|
|
||||||
case LENGTH_ARG:
|
case LENGTH_ARG:
|
||||||
_switches[LENGTH_ARG]++;
|
|
||||||
_string_args[LENGTH_ARG] = optarg;
|
|
||||||
break;
|
|
||||||
case MAJOR_ARG:
|
|
||||||
_switches[MAJOR_ARG]++;
|
|
||||||
_int_args[MAJOR_ARG] = atoi(optarg);
|
|
||||||
break;
|
|
||||||
case REGIONS_ARG:
|
|
||||||
_switches[REGIONS_ARG]++;
|
|
||||||
_string_args[REGIONS_ARG] = optarg;
|
|
||||||
break;
|
|
||||||
case MINOR_ARG:
|
|
||||||
_switches[MINOR_ARG]++;
|
|
||||||
_int_args[MINOR_ARG] = atoi(optarg);
|
|
||||||
break;
|
|
||||||
case NOSUFFIX_ARG:
|
|
||||||
_switches[NOSUFFIX_ARG]++;
|
|
||||||
break;
|
|
||||||
case NOTABLE_ARG:
|
|
||||||
_switches[NOTABLE_ARG]++;
|
|
||||||
break;
|
|
||||||
case NOTIMESUFFIX_ARG:
|
|
||||||
_switches[NOTIMESUFFIX_ARG]++;
|
|
||||||
break;
|
|
||||||
case OPTIONS_ARG:
|
case OPTIONS_ARG:
|
||||||
_switches[OPTIONS_ARG]++;
|
|
||||||
_string_args[OPTIONS_ARG] = optarg;
|
|
||||||
break;
|
|
||||||
case PROGRAM_ID_ARG:
|
case PROGRAM_ID_ARG:
|
||||||
_switches[PROGRAM_ID_ARG]++;
|
case REGIONS_ARG:
|
||||||
_string_args[PROGRAM_ID_ARG] = optarg;
|
|
||||||
break;
|
|
||||||
case PRECISE_ARG:
|
|
||||||
_switches[PRECISE_ARG]++;
|
|
||||||
break;
|
|
||||||
case RAW_ARG:
|
|
||||||
_switches[RAW_ARG]++;
|
|
||||||
break;
|
|
||||||
case REGION_ARG:
|
|
||||||
_switches[REGION_ARG]++;
|
|
||||||
break;
|
|
||||||
case REGION_ID_ARG:
|
|
||||||
_switches[REGION_ID_ARG]++;
|
|
||||||
_int_args[REGION_ID_ARG] = atoi(optarg);
|
|
||||||
break;
|
|
||||||
case RELATIVE_ARG:
|
|
||||||
_switches[RELATIVE_ARG]++;
|
|
||||||
break;
|
|
||||||
case SEPARATOR_ARG:
|
|
||||||
_switches[SEPARATOR_ARG]++;
|
|
||||||
_string_args[SEPARATOR_ARG] = optarg;
|
|
||||||
break;
|
|
||||||
case UNITS_ARG:
|
|
||||||
_switches[UNITS_ARG]++;
|
|
||||||
_string_args[UNITS_ARG] = optarg;
|
|
||||||
break;
|
|
||||||
case SORT_ARG:
|
|
||||||
_switches[SORT_ARG]++;
|
|
||||||
_string_args[SORT_ARG] = optarg;
|
|
||||||
break;
|
|
||||||
case SELECT_ARG:
|
case SELECT_ARG:
|
||||||
_switches[SELECT_ARG]++;
|
case SEPARATOR_ARG:
|
||||||
_string_args[SELECT_ARG] = optarg;
|
case SORT_ARG:
|
||||||
break;
|
|
||||||
case START_ARG:
|
case START_ARG:
|
||||||
_switches[START_ARG]++;
|
case UNITS_ARG:
|
||||||
_string_args[START_ARG] = optarg;
|
case USER_DATA_ARG:
|
||||||
|
/* with string arg */
|
||||||
|
_string_args[c] = optarg;
|
||||||
break;
|
break;
|
||||||
case VERBOSE_ARG:
|
case AREAS_ARG:
|
||||||
_switches[VERBOSE_ARG]++;
|
case GID_ARG:
|
||||||
|
case GROUP_ID_ARG:
|
||||||
|
case MAJOR_ARG:
|
||||||
|
case MINOR_ARG:
|
||||||
|
case REGION_ID_ARG:
|
||||||
|
case UID_ARG:
|
||||||
|
/* with int arg */
|
||||||
|
_int_args[c] = atoi(optarg);
|
||||||
|
break;
|
||||||
|
case EXEC_ARG:
|
||||||
|
_command_to_exec = optarg;
|
||||||
|
break;
|
||||||
|
case TARGET_ARG:
|
||||||
|
_target = optarg;
|
||||||
break;
|
break;
|
||||||
case UUID_ARG:
|
case UUID_ARG:
|
||||||
_switches[UUID_ARG]++;
|
|
||||||
_uuid = optarg;
|
_uuid = optarg;
|
||||||
break;
|
break;
|
||||||
case YES_ARG:
|
case UDEVCOOKIE_ARG:
|
||||||
_switches[YES_ARG]++;
|
_udev_cookie = _get_cookie_value(optarg);
|
||||||
break;
|
|
||||||
case ADD_NODE_ON_RESUME_ARG:
|
|
||||||
_switches[ADD_NODE_ON_RESUME_ARG]++;
|
|
||||||
break;
|
|
||||||
case ADD_NODE_ON_CREATE_ARG:
|
|
||||||
_switches[ADD_NODE_ON_CREATE_ARG]++;
|
|
||||||
break;
|
|
||||||
case CHECKS_ARG:
|
|
||||||
_switches[CHECKS_ARG]++;
|
|
||||||
break;
|
break;
|
||||||
case COUNT_ARG:
|
case COUNT_ARG:
|
||||||
_switches[COUNT_ARG]++;
|
|
||||||
_int_args[COUNT_ARG] = atoi(optarg);
|
_int_args[COUNT_ARG] = atoi(optarg);
|
||||||
if (_int_args[COUNT_ARG] < 0) {
|
if (_int_args[COUNT_ARG] < 0) {
|
||||||
log_error("Count must be zero or greater.");
|
log_error("Count must be zero or greater.");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case UDEVCOOKIE_ARG:
|
|
||||||
_switches[UDEVCOOKIE_ARG]++;
|
|
||||||
_udev_cookie = _get_cookie_value(optarg);
|
|
||||||
break;
|
|
||||||
case NOMONITOR_ARG:
|
|
||||||
_switches[NOMONITOR_ARG]++;
|
|
||||||
break;
|
|
||||||
case NOUDEVRULES_ARG:
|
|
||||||
_switches[NOUDEVRULES_ARG]++;
|
|
||||||
break;
|
|
||||||
case NOUDEVSYNC_ARG:
|
|
||||||
_switches[NOUDEVSYNC_ARG]++;
|
|
||||||
break;
|
|
||||||
case VERIFYUDEV_ARG:
|
|
||||||
_switches[VERIFYUDEV_ARG]++;
|
|
||||||
break;
|
|
||||||
case GID_ARG:
|
|
||||||
_switches[GID_ARG]++;
|
|
||||||
_int_args[GID_ARG] = atoi(optarg);
|
|
||||||
break;
|
|
||||||
case GROUP_ARG:
|
|
||||||
_switches[GROUP_ARG]++;
|
|
||||||
break;
|
|
||||||
case GROUP_ID_ARG:
|
|
||||||
_switches[GROUP_ID_ARG]++;
|
|
||||||
_int_args[GROUP_ID_ARG] = atoi(optarg);
|
|
||||||
break;
|
|
||||||
case UID_ARG:
|
|
||||||
_switches[UID_ARG]++;
|
|
||||||
_int_args[UID_ARG] = atoi(optarg);
|
|
||||||
break;
|
|
||||||
case MODE_ARG:
|
case MODE_ARG:
|
||||||
_switches[MODE_ARG]++;
|
|
||||||
/* FIXME Accept modes as per chmod */
|
/* FIXME Accept modes as per chmod */
|
||||||
errno = 0;
|
errno = 0;
|
||||||
_int_args[MODE_ARG] = (int) strtol(optarg, &s, 8);
|
_int_args[MODE_ARG] = (int) strtol(optarg, &s, 8);
|
||||||
@ -7220,15 +7087,7 @@ static int _process_switches(int *argcp, char ***argvp, const char *dev_dir)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DEFERRED_ARG:
|
|
||||||
_switches[DEFERRED_ARG]++;
|
|
||||||
break;
|
|
||||||
case EXEC_ARG:
|
|
||||||
_switches[EXEC_ARG]++;
|
|
||||||
_command_to_exec = optarg;
|
|
||||||
break;
|
|
||||||
case HEADINGS_ARG:
|
case HEADINGS_ARG:
|
||||||
_switches[HEADINGS_ARG]++;
|
|
||||||
if (!strcasecmp(optarg, "none") || !strcmp(optarg, "0"))
|
if (!strcasecmp(optarg, "none") || !strcmp(optarg, "0"))
|
||||||
_int_args[HEADINGS_ARG] = 0;
|
_int_args[HEADINGS_ARG] = 0;
|
||||||
else if (!strcasecmp(optarg, "abbrev") || !strcmp(optarg, "1"))
|
else if (!strcasecmp(optarg, "abbrev") || !strcmp(optarg, "1"))
|
||||||
@ -7240,18 +7099,7 @@ static int _process_switches(int *argcp, char ***argvp, const char *dev_dir)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TARGET_ARG:
|
|
||||||
_switches[TARGET_ARG]++;
|
|
||||||
_target = optarg;
|
|
||||||
break;
|
|
||||||
case SEGMENTS_ARG:
|
|
||||||
_switches[SEGMENTS_ARG]++;
|
|
||||||
break;
|
|
||||||
case INACTIVE_ARG:
|
|
||||||
_switches[INACTIVE_ARG]++;
|
|
||||||
break;
|
|
||||||
case INTERVAL_ARG:
|
case INTERVAL_ARG:
|
||||||
_switches[INTERVAL_ARG]++;
|
|
||||||
_int_args[INTERVAL_ARG] = atoi(optarg);
|
_int_args[INTERVAL_ARG] = atoi(optarg);
|
||||||
if (_int_args[INTERVAL_ARG] <= 0) {
|
if (_int_args[INTERVAL_ARG] <= 0) {
|
||||||
log_error("Interval must be a positive integer.");
|
log_error("Interval must be a positive integer.");
|
||||||
@ -7259,7 +7107,6 @@ static int _process_switches(int *argcp, char ***argvp, const char *dev_dir)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MANGLENAME_ARG:
|
case MANGLENAME_ARG:
|
||||||
_switches[MANGLENAME_ARG]++;
|
|
||||||
if (!strcasecmp(optarg, "none"))
|
if (!strcasecmp(optarg, "none"))
|
||||||
_int_args[MANGLENAME_ARG] = DM_STRING_MANGLING_NONE;
|
_int_args[MANGLENAME_ARG] = DM_STRING_MANGLING_NONE;
|
||||||
else if (!strcasecmp(optarg, "auto"))
|
else if (!strcasecmp(optarg, "auto"))
|
||||||
@ -7272,26 +7119,7 @@ static int _process_switches(int *argcp, char ***argvp, const char *dev_dir)
|
|||||||
}
|
}
|
||||||
dm_set_name_mangling_mode((dm_string_mangling_t) _int_args[MANGLENAME_ARG]);
|
dm_set_name_mangling_mode((dm_string_mangling_t) _int_args[MANGLENAME_ARG]);
|
||||||
break;
|
break;
|
||||||
case NAMEPREFIXES_ARG:
|
|
||||||
_switches[NAMEPREFIXES_ARG]++;
|
|
||||||
break;
|
|
||||||
case NOFLUSH_ARG:
|
|
||||||
_switches[NOFLUSH_ARG]++;
|
|
||||||
break;
|
|
||||||
case NOGROUP_ARG:
|
|
||||||
_switches[NOGROUP_ARG]++;
|
|
||||||
break;
|
|
||||||
case NOHEADINGS_ARG:
|
|
||||||
_switches[NOHEADINGS_ARG]++;
|
|
||||||
break;
|
|
||||||
case NOLOCKFS_ARG:
|
|
||||||
_switches[NOLOCKFS_ARG]++;
|
|
||||||
break;
|
|
||||||
case NOOPENCOUNT_ARG:
|
|
||||||
_switches[NOOPENCOUNT_ARG]++;
|
|
||||||
break;
|
|
||||||
case READAHEAD_ARG:
|
case READAHEAD_ARG:
|
||||||
_switches[READAHEAD_ARG]++;
|
|
||||||
if (!strcasecmp(optarg, "auto"))
|
if (!strcasecmp(optarg, "auto"))
|
||||||
_int_args[READAHEAD_ARG] = DM_READ_AHEAD_AUTO;
|
_int_args[READAHEAD_ARG] = DM_READ_AHEAD_AUTO;
|
||||||
else if (!strcasecmp(optarg, "none"))
|
else if (!strcasecmp(optarg, "none"))
|
||||||
@ -7310,34 +7138,12 @@ static int _process_switches(int *argcp, char ***argvp, const char *dev_dir)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case RETRY_ARG:
|
|
||||||
_switches[RETRY_ARG]++;
|
|
||||||
break;
|
|
||||||
case ROWS_ARG:
|
|
||||||
_switches[ROWS_ARG]++;
|
|
||||||
break;
|
|
||||||
case SETUUID_ARG:
|
|
||||||
_switches[SETUUID_ARG]++;
|
|
||||||
break;
|
|
||||||
case SHOWKEYS_ARG:
|
|
||||||
_switches[SHOWKEYS_ARG]++;
|
|
||||||
break;
|
|
||||||
case TABLE_ARG:
|
case TABLE_ARG:
|
||||||
_switches[TABLE_ARG]++;
|
|
||||||
if (!(_table = strdup(optarg))) {
|
if (!(_table = strdup(optarg))) {
|
||||||
log_error("Could not allocate memory for table string.");
|
log_error("Could not allocate memory for table string.");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TREE_ARG:
|
|
||||||
_switches[TREE_ARG]++;
|
|
||||||
break;
|
|
||||||
case UNQUOTED_ARG:
|
|
||||||
_switches[UNQUOTED_ARG]++;
|
|
||||||
break;
|
|
||||||
case VERSION_ARG:
|
|
||||||
_switches[VERSION_ARG]++;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user