/** Parsed subcommand options. */
static struct lls_parse_result *cmdline_sublpr, *sublpr;
+/* The executing subcommand (NULL at startup). */
+static const struct lls_command *subcmd;
/** Wether daemon_init() was called. */
static bool daemonized;
/** Non-NULL if we log to a file. */
return ret;
}
-static int check_config(const struct lls_command *cmd)
+static int check_config(void)
{
int ret;
uint32_t unit_interval = OPT_UINT32_VAL(DSS, UNIT_INTERVAL);
DSS_ERROR_LOG(("bad number of intervals: %i\n", num_intervals));
return -E_INVALID_NUMBER;
}
- if (cmd == CMD_PTR(RUN) || cmd == CMD_PTR(CREATE))
+ if (subcmd == CMD_PTR(RUN) || subcmd == CMD_PTR(CREATE))
if (!OPT_GIVEN(DSS, SOURCE_DIR)) {
DSS_ERROR_LOG(("--source-dir required\n"));
return -E_SYNTAX;
}
- if (cmd == CMD_PTR(RUN) || cmd == CMD_PTR(CREATE)
- || cmd == CMD_PTR(LS) || cmd == CMD_PTR(PRUNE)) {
+ if (subcmd == CMD_PTR(RUN) || subcmd == CMD_PTR(CREATE)
+ || subcmd == CMD_PTR(LS) || subcmd == CMD_PTR(PRUNE)) {
if (!OPT_GIVEN(DSS, DEST_DIR)) {
DSS_ERROR_LOG(("--dest-dir required\n"));
return -E_SYNTAX;
ret = parse_config_file(true /* SIGHUP */, CMD_PTR(RUN));
if (ret < 0)
return ret;
- ret = check_config(CMD_PTR(RUN));
+ ret = check_config();
if (ret < 0)
return ret;
close_log(logfile);
int main(int argc, char **argv)
{
int ret;
- const struct lls_command *cmd = CMD_PTR(DSS);
char *errctx = NULL;
unsigned num_inputs;
const struct dss_user_data *ud;
- ret = lls_parse(argc, argv, cmd, &cmdline_lpr, &errctx);
+ ret = lls_parse(argc, argv, CMD_PTR(DSS), &cmdline_lpr, &errctx);
if (ret < 0) {
ret = lopsub_error(ret, &errctx);
goto out;
}
lpr = cmdline_lpr;
- ret = parse_config_file(false /* no SIGHUP */, cmd);
+ ret = parse_config_file(false /* no SIGHUP */, CMD_PTR(DSS));
if (ret < 0)
goto out;
handle_version_and_help();
ret = lopsub_error(ret, &errctx);
goto out;
}
- cmd = lls_cmd(ret, dss_suite);
- ret = lls_parse(num_inputs, argv + argc - num_inputs, cmd,
+ subcmd = lls_cmd(ret, dss_suite);
+ ret = lls_parse(num_inputs, argv + argc - num_inputs, subcmd,
&cmdline_sublpr, &errctx);
if (ret < 0) {
ret = lopsub_error(ret, &errctx);
goto out;
}
sublpr = cmdline_sublpr;
- ret = parse_config_file(false /* no SIGHUP */, cmd);
+ ret = parse_config_file(false /* no SIGHUP */, subcmd);
if (ret < 0)
goto out;
- ret = check_config(cmd);
+ ret = check_config();
if (ret < 0)
goto out;
ret = setup_signal_handling();
if (ret < 0)
goto out;
- ud = lls_user_data(cmd);
+ ud = lls_user_data(subcmd);
ret = ud->handler();
signal_shutdown();
out:
lls_free_parse_result(lpr, CMD_PTR(DSS));
if (lpr != cmdline_lpr)
lls_free_parse_result(cmdline_lpr, CMD_PTR(DSS));
- lls_free_parse_result(sublpr, cmd);
+ lls_free_parse_result(sublpr, subcmd);
if (sublpr != cmdline_sublpr)
- lls_free_parse_result(cmdline_sublpr, cmd);
+ lls_free_parse_result(cmdline_sublpr, subcmd);
exit(ret >= 0? EXIT_SUCCESS : EXIT_FAILURE);
}