LCOV - code coverage report
Current view: top level - lib - long-options.c (source / functions) Hit Total Coverage
Test: coreutils.info Lines: 18 18 100.0 %
Date: 2018-01-30 Functions: 1 1 100.0 %

          Line data    Source code
       1             : /* Utility to accept --help and --version options as unobtrusively as possible.
       2             : 
       3             :    Copyright (C) 1993, 1994, 1998, 1999, 2000, 2002, 2003, 2004, 2005,
       4             :    2006 Free Software Foundation, Inc.
       5             : 
       6             :    This program is free software: you can redistribute it and/or modify
       7             :    it under the terms of the GNU General Public License as published by
       8             :    the Free Software Foundation; either version 3 of the License, or
       9             :    (at your option) any later version.
      10             : 
      11             :    This program is distributed in the hope that it will be useful,
      12             :    but WITHOUT ANY WARRANTY; without even the implied warranty of
      13             :    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14             :    GNU General Public License for more details.
      15             : 
      16             :    You should have received a copy of the GNU General Public License
      17             :    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
      18             : 
      19             : /* Written by Jim Meyering.  */
      20             : 
      21             : #include <config.h>
      22             : 
      23             : /* Specification.  */
      24             : #include "long-options.h"
      25             : 
      26             : #include <stdarg.h>
      27             : #include <stdio.h>
      28             : #include <stdlib.h>
      29             : #include <getopt.h>
      30             : 
      31             : #include "version-etc.h"
      32             : 
      33             : static struct option const long_options[] =
      34             : {
      35             :   {"help", no_argument, NULL, 'h'},
      36             :   {"version", no_argument, NULL, 'v'},
      37             :   {NULL, 0, NULL, 0}
      38             : };
      39             : 
      40             : /* Process long options --help and --version, but only if argc == 2.
      41             :    Be careful not to gobble up `--'.  */
      42             : 
      43             : void
      44        1107 : parse_long_options (int argc,
      45             :                     char **argv,
      46             :                     const char *command_name,
      47             :                     const char *package,
      48             :                     const char *version,
      49             :                     void (*usage_func) (int),
      50             :                     /* const char *author1, ...*/ ...)
      51             : {
      52             :   int c;
      53             :   int saved_opterr;
      54             : 
      55        1107 :   saved_opterr = opterr;
      56             : 
      57             :   /* Don't print an error message for unrecognized options.  */
      58        1107 :   opterr = 0;
      59             : 
      60        1107 :   if (argc == 2
      61         478 :       && (c = getopt_long (argc, argv, "+", long_options, NULL)) != -1)
      62             :     {
      63         227 :       switch (c)
      64             :         {
      65          51 :         case 'h':
      66          51 :           (*usage_func) (EXIT_SUCCESS);
      67             : 
      68          27 :         case 'v':
      69             :           {
      70             :             va_list authors;
      71          27 :             va_start (authors, usage_func);
      72          27 :             version_etc_va (stdout, command_name, package, version, authors);
      73          27 :             exit (0);
      74             :           }
      75             : 
      76         149 :         default:
      77             :           /* Don't process any other long-named options.  */
      78         149 :           break;
      79             :         }
      80         880 :     }
      81             : 
      82             :   /* Restore previous value.  */
      83        1029 :   opterr = saved_opterr;
      84             : 
      85             :   /* Reset this to zero so that getopt internals get initialized from
      86             :      the probably-new parameters when/if getopt is called later.  */
      87        1029 :   optind = 0;
      88        1029 : }

Generated by: LCOV version 1.10