diff options
author | Christian Grothoff <christian@grothoff.org> | 2020-01-19 20:33:07 +0100 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2020-01-19 20:33:07 +0100 |
commit | 59398cfd76ed01df0ba5f33022727047afd6b270 (patch) | |
tree | 0da425ba9a3e0aeaff94d058f653d59f73f46dcc /src/util/getopt.c | |
parent | 600592dbf6aced50a92cced8ab9d773d06f0f4f4 (diff) |
separate util.c and url.c
Diffstat (limited to 'src/util/getopt.c')
-rw-r--r-- | src/util/getopt.c | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/src/util/getopt.c b/src/util/getopt.c new file mode 100644 index 000000000..b8948bbb2 --- /dev/null +++ b/src/util/getopt.c @@ -0,0 +1,87 @@ +/* + This file is part of TALER + Copyright (C) 2014-2020 Taler Systems SA + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> +*/ +/** + * @file getopt.c + * @brief Helper functions for parsing Taler-specific command-line arguments + * @author Florian Dold + */ +#include "platform.h" +#include "taler_util.h" + + +/** + * Set an option with an amount from the command line. A pointer to + * this function should be passed as part of the 'struct + * GNUNET_GETOPT_CommandLineOption' array to initialize options of + * this type. + * + * @param ctx command line processing context + * @param scls additional closure (will point to the `struct TALER_Amount`) + * @param option name of the option + * @param value actual value of the option as a string. + * @return #GNUNET_OK if parsing the value worked + */ +static int +set_amount (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, + void *scls, + const char *option, + const char *value) +{ + struct TALER_Amount *amount = scls; + + (void) ctx; + if (GNUNET_OK != + TALER_string_to_amount (value, + amount)) + { + fprintf (stderr, + _ ("Failed to parse amount in option `%s'\n"), + option); + return GNUNET_SYSERR; + } + + return GNUNET_OK; +} + + +/** + * Allow user to specify an amount on the command line. + * + * @param shortName short name of the option + * @param name long name of the option + * @param argumentHelp help text for the option argument + * @param description long help text for the option + * @param[out] amount set to the amount specified at the command line + */ +struct GNUNET_GETOPT_CommandLineOption +TALER_getopt_get_amount (char shortName, + const char *name, + const char *argumentHelp, + const char *description, + struct TALER_Amount *amount) +{ + struct GNUNET_GETOPT_CommandLineOption clo = { + .shortName = shortName, + .name = name, + .argumentHelp = argumentHelp, + .description = description, + .require_argument = 1, + .processor = &set_amount, + .scls = (void *) amount + }; + + return clo; +} |