LCOV - code coverage report
Current view: top level - src/fe_utils - option_utils.c (source / functions) Hit Total Coverage
Test: PostgreSQL 15devel Lines: 23 23 100.0 %
Date: 2021-09-17 16:07:28 Functions: 2 2 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*-------------------------------------------------------------------------
       2             :  *
       3             :  * Command line option processing facilities for frontend code
       4             :  *
       5             :  * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
       6             :  * Portions Copyright (c) 1994, Regents of the University of California
       7             :  *
       8             :  * src/fe_utils/option_utils.c
       9             :  *
      10             :  *-------------------------------------------------------------------------
      11             :  */
      12             : 
      13             : #include "postgres_fe.h"
      14             : 
      15             : #include "common/logging.h"
      16             : #include "common/string.h"
      17             : #include "fe_utils/option_utils.h"
      18             : 
      19             : /*
      20             :  * Provide strictly harmonized handling of --help and --version
      21             :  * options.
      22             :  */
      23             : void
      24         366 : handle_help_version_opts(int argc, char *argv[],
      25             :                          const char *fixed_progname, help_handler hlp)
      26             : {
      27         366 :     if (argc > 1)
      28             :     {
      29         362 :         if (strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-?") == 0)
      30             :         {
      31          18 :             hlp(get_progname(argv[0]));
      32          18 :             exit(0);
      33             :         }
      34         344 :         if (strcmp(argv[1], "--version") == 0 || strcmp(argv[1], "-V") == 0)
      35             :         {
      36          20 :             printf("%s (PostgreSQL) " PG_VERSION "\n", fixed_progname);
      37          20 :             exit(0);
      38             :         }
      39             :     }
      40         328 : }
      41             : 
      42             : /*
      43             :  * option_parse_int
      44             :  *
      45             :  * Parse integer value for an option.  If the parsing is successful, returns
      46             :  * true and stores the result in *result if that's given; if parsing fails,
      47             :  * returns false.
      48             :  */
      49             : bool
      50         332 : option_parse_int(const char *optarg, const char *optname,
      51             :                  int min_range, int max_range,
      52             :                  int *result)
      53             : {
      54             :     char       *endptr;
      55             :     int         val;
      56             : 
      57         332 :     errno = 0;
      58         332 :     val = strtoint(optarg, &endptr, 10);
      59             : 
      60             :     /*
      61             :      * Skip any trailing whitespace; if anything but whitespace remains before
      62             :      * the terminating character, fail.
      63             :      */
      64         336 :     while (*endptr != '\0' && isspace((unsigned char) *endptr))
      65           4 :         endptr++;
      66             : 
      67         332 :     if (*endptr != '\0')
      68             :     {
      69          10 :         pg_log_error("invalid value \"%s\" for option %s",
      70             :                      optarg, optname);
      71          10 :         return false;
      72             :     }
      73             : 
      74         322 :     if (errno == ERANGE || val < min_range || val > max_range)
      75             :     {
      76          24 :         pg_log_error("%s must be in range %d..%d",
      77             :                      optname, min_range, max_range);
      78          24 :         return false;
      79             :     }
      80             : 
      81         298 :     if (result)
      82         286 :         *result = val;
      83         298 :     return true;
      84             : }

Generated by: LCOV version 1.13