exchange

Base system with REST service to issue digital coins, run by the payment service provider
Log | Files | Refs | Submodules | README | LICENSE

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 }