Line data Source code
1 : /*
2 : This file is part of TALER
3 : Copyright (C) 2014-2020 Taler Systems SA
4 :
5 : TALER is free software; you can redistribute it and/or modify it under the
6 : terms of the GNU General Public License as published by the Free Software
7 : Foundation; either version 3, or (at your option) any later version.
8 :
9 : TALER is distributed in the hope that it will be useful, but WITHOUT ANY
10 : WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
11 : A PARTICULAR PURPOSE. See the GNU General Public License for more details.
12 :
13 : You should have received a copy of the GNU General Public License along with
14 : TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
15 : */
16 : /**
17 : * @file getopt.c
18 : * @brief Helper functions for parsing Taler-specific command-line arguments
19 : * @author Florian Dold
20 : */
21 : #include "taler/platform.h"
22 : #include "taler/taler_util.h"
23 :
24 :
25 : /**
26 : * Set an option with an amount from the command line. A pointer to
27 : * this function should be passed as part of the 'struct
28 : * GNUNET_GETOPT_CommandLineOption' array to initialize options of
29 : * this type.
30 : *
31 : * @param ctx command line processing context
32 : * @param scls additional closure (will point to the `struct TALER_Amount`)
33 : * @param option name of the option
34 : * @param value actual value of the option as a string.
35 : * @return #GNUNET_OK if parsing the value worked
36 : */
37 : static int
38 2 : set_amount (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx,
39 : void *scls,
40 : const char *option,
41 : const char *value)
42 : {
43 2 : struct TALER_Amount *amount = scls;
44 :
45 : (void) ctx;
46 2 : if (GNUNET_OK !=
47 2 : TALER_string_to_amount (value,
48 : amount))
49 : {
50 0 : fprintf (stderr,
51 : _ ("Failed to parse amount in option `%s'\n"),
52 : option);
53 0 : return GNUNET_SYSERR;
54 : }
55 :
56 2 : return GNUNET_OK;
57 : }
58 :
59 :
60 : /**
61 : * Allow user to specify an amount on the command line.
62 : *
63 : * @param shortName short name of the option
64 : * @param name long name of the option
65 : * @param argumentHelp help text for the option argument
66 : * @param description long help text for the option
67 : * @param[out] amount set to the amount specified at the command line
68 : */
69 : struct GNUNET_GETOPT_CommandLineOption
70 7 : TALER_getopt_get_amount (char shortName,
71 : const char *name,
72 : const char *argumentHelp,
73 : const char *description,
74 : struct TALER_Amount *amount)
75 : {
76 7 : struct GNUNET_GETOPT_CommandLineOption clo = {
77 : .shortName = shortName,
78 : .name = name,
79 : .argumentHelp = argumentHelp,
80 : .description = description,
81 : .require_argument = 1,
82 : .processor = &set_amount,
83 : .scls = (void *) amount
84 : };
85 :
86 7 : return clo;
87 : }
|