From 574f36e75c13f202baa5324a386ed297e3ffca9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20B=C5=99ezina?= Date: Thu, 2 Jun 2016 11:46:43 +0200 Subject: [PATCH 09/23] sss_tools: tell whether an option was provided --- src/tools/common/sss_tools.c | 28 +++++++++++++++++++--------- src/tools/common/sss_tools.h | 7 ++++--- src/tools/sss_override.c | 9 +++++---- 3 files changed, 28 insertions(+), 16 deletions(-) diff --git a/src/tools/common/sss_tools.c b/src/tools/common/sss_tools.c index 7439522c98079630a8c9d32ab79e446d13beffa8..7a3a38e5d91581a758173ddf3c6c9869641f424d 100644 --- a/src/tools/common/sss_tools.c +++ b/src/tools/common/sss_tools.c @@ -301,7 +301,8 @@ int sss_tool_popt_ex(struct sss_cmdline *cmdline, void *popt_fn_pvt, const char *fopt_name, const char *fopt_help, - const char **_fopt) + const char **_fopt, + bool *_opt_set) { struct poptOption opts_table[] = { {NULL, '\0', POPT_ARG_INCLUDE_TABLE, nonnull_popt_table(options), \ @@ -314,6 +315,7 @@ int sss_tool_popt_ex(struct sss_cmdline *cmdline, const char *fopt; char *help; poptContext pc; + bool opt_set; int ret; /* Create help option string. We always need to append command name since @@ -383,13 +385,21 @@ int sss_tool_popt_ex(struct sss_cmdline *cmdline, goto done; } - /* If at least one option is required and not provided, print error. */ - if (require_option == SSS_TOOL_OPT_REQUIRED - && ((_fopt != NULL && cmdline->argc < 2) || cmdline->argc < 1)) { - fprintf(stderr, _("At least one option is required!\n\n")); - poptPrintHelp(pc, stderr, 0); - ret = EXIT_FAILURE; - goto done; + opt_set = true; + if ((_fopt != NULL && cmdline->argc < 2) || cmdline->argc < 1) { + opt_set = false; + + /* If at least one option is required and not provided, print error. */ + if (require_option == SSS_TOOL_OPT_REQUIRED) { + fprintf(stderr, _("At least one option is required!\n\n")); + poptPrintHelp(pc, stderr, 0); + ret = EXIT_FAILURE; + goto done; + } + } + + if (_opt_set != NULL) { + *_opt_set = opt_set; } ret = EXIT_SUCCESS; @@ -407,7 +417,7 @@ int sss_tool_popt(struct sss_cmdline *cmdline, void *popt_fn_pvt) { return sss_tool_popt_ex(cmdline, options, require_option, - popt_fn, popt_fn_pvt, NULL, NULL, NULL); + popt_fn, popt_fn_pvt, NULL, NULL, NULL, NULL); } int sss_tool_main(int argc, const char **argv, diff --git a/src/tools/common/sss_tools.h b/src/tools/common/sss_tools.h index 77a9645125f0fe6098373130fc83f5e254dd0ddd..1dd83a6fce5c8a3619f2fc7e94072d04b85ced00 100644 --- a/src/tools/common/sss_tools.h +++ b/src/tools/common/sss_tools.h @@ -71,9 +71,10 @@ int sss_tool_popt_ex(struct sss_cmdline *cmdline, enum sss_tool_opt require_option, sss_popt_fn popt_fn, void *popt_fn_pvt, - const char *free_opt_name, - const char *free_opt_help, - const char **_free_opt); + const char *fopt_name, + const char *fopt_help, + const char **_fopt, + bool *_opt_set); int sss_tool_popt(struct sss_cmdline *cmdline, struct poptOption *options, diff --git a/src/tools/sss_override.c b/src/tools/sss_override.c index 572cdf899131a325bd81fb08b6c71b392d1c1eb3..2dea5a7b2b3bee6ac22d159b3915ee6a98745ece 100644 --- a/src/tools/sss_override.c +++ b/src/tools/sss_override.c @@ -68,7 +68,8 @@ static int parse_cmdline(struct sss_cmdline *cmdline, require = options == NULL ? SSS_TOOL_OPT_OPTIONAL : SSS_TOOL_OPT_REQUIRED; ret = sss_tool_popt_ex(cmdline, options, require, - NULL, NULL, "NAME", _("Specify name."), &input_name); + NULL, NULL, "NAME", _("Specify name."), + &input_name, NULL); if (ret != EXIT_SUCCESS) { DEBUG(SSSDBG_CRIT_FAILURE, "Unable to parse command arguments\n"); return ret; @@ -167,7 +168,7 @@ static int parse_cmdline_find(struct sss_cmdline *cmdline, }; ret = sss_tool_popt_ex(cmdline, options, SSS_TOOL_OPT_OPTIONAL, - NULL, NULL, NULL, NULL, NULL); + NULL, NULL, NULL, NULL, NULL, NULL); if (ret != EXIT_SUCCESS) { DEBUG(SSSDBG_CRIT_FAILURE, "Unable to parse command arguments\n"); return ret; @@ -197,7 +198,7 @@ static int parse_cmdline_import(struct sss_cmdline *cmdline, ret = sss_tool_popt_ex(cmdline, NULL, SSS_TOOL_OPT_OPTIONAL, NULL, NULL, "FILE", "File to import the data from.", - _file); + _file, NULL); if (ret != EXIT_SUCCESS) { DEBUG(SSSDBG_CRIT_FAILURE, "Unable to parse command arguments\n"); return ret; @@ -213,7 +214,7 @@ static int parse_cmdline_export(struct sss_cmdline *cmdline, ret = sss_tool_popt_ex(cmdline, NULL, SSS_TOOL_OPT_OPTIONAL, NULL, NULL, "FILE", "File to export the data to.", - _file); + _file, NULL); if (ret != EXIT_SUCCESS) { DEBUG(SSSDBG_CRIT_FAILURE, "Unable to parse command arguments\n"); return ret; -- 2.4.11