getopt.c (2717B)
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 set_amount (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, 39 void *scls, 40 const char *option, 41 const char *value) 42 { 43 struct TALER_Amount *amount = scls; 44 45 (void) ctx; 46 if (GNUNET_OK != 47 TALER_string_to_amount (value, 48 amount)) 49 { 50 fprintf (stderr, 51 _ ("Failed to parse amount in option `%s'\n"), 52 option); 53 return GNUNET_SYSERR; 54 } 55 56 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 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 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 return clo; 87 }