params->plog_buffers_bitset = 0;
bool dump = true;
+#define SET_ACTION(x) do { \
+ if (params->action != x && params->action != ACTION_NONE) \
+ goto failure; \
+ params->action = x; \
+} while (false)
+
for (;;) {
static const struct option long_options[] = {
switch (opt) {
case 0:
- params->action = ACTION_PLOG;
+ SET_ACTION(ACTION_PLOG);
params->plog_enable = (long_index == 6);
break;
case 'b': {
*exit_value = EXIT_SUCCESS;
goto print_help;
case 'g':
- params->action = ACTION_GET;
+ SET_ACTION(ACTION_GET);
break;
case 's': {
const int value_num = atoi(optarg);
if (strcmp(optarg, "allow") && strcmp(optarg, "deny") && (value_num <= 0 || value_num >= __LOG_LIMITER_LIMIT_MAX))
goto failure;
params->value = optarg;
- params->action = ACTION_SET;
+ SET_ACTION(ACTION_SET);
break;
} case 't': {
params->tag = optarg;
dump = false;
break;
case ':':
- if (optopt == 's')
- params->action = ACTION_SET;
+ if (optopt != 's')
+ goto failure;
+ SET_ACTION(ACTION_SET);
break;
default:
}
}
+#undef SET_ACTION
+
if (params->plog_buffers_bitset != 0 && params->action != ACTION_PLOG)
goto failure;