LCOV - code coverage report
Current view: top level - Python - getopt.c (source / functions) Hit Total Coverage
Test: CPython lcov report Lines: 22 47 46.8 %
Date: 2017-04-19 Functions: 2 2 100.0 %

          Line data    Source code
       1             : /*---------------------------------------------------------------------------*
       2             :  * <RCS keywords>
       3             :  *
       4             :  * C++ Library
       5             :  *
       6             :  * Copyright 1992-1994, David Gottner
       7             :  *
       8             :  *                    All Rights Reserved
       9             :  *
      10             :  * Permission to use, copy, modify, and distribute this software and its
      11             :  * documentation for any purpose and without fee is hereby granted,
      12             :  * provided that the above copyright notice, this permission notice and
      13             :  * the following disclaimer notice appear unmodified in all copies.
      14             :  *
      15             :  * I DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
      16             :  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL I
      17             :  * BE LIABLE FOR ANY SPECIAL, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
      18             :  * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER
      19             :  * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
      20             :  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
      21             :  *
      22             :  * Nevertheless, I would like to know about bugs in this library or
      23             :  * suggestions for improvment.  Send bug reports and feedback to
      24             :  * davegottner@delphi.com.
      25             :  *---------------------------------------------------------------------------*/
      26             : 
      27             : /* Modified to support --help and --version, as well as /? on Windows
      28             :  * by Georg Brandl. */
      29             : 
      30             : #include <stdio.h>
      31             : #include <string.h>
      32             : 
      33             : #ifdef __cplusplus
      34             : extern "C" {
      35             : #endif
      36             : 
      37             : int _PyOS_opterr = 1;          /* generate error messages */
      38             : int _PyOS_optind = 1;          /* index into argv array   */
      39             : char *_PyOS_optarg = NULL;     /* optional argument       */
      40             : static char *opt_ptr = "";
      41             : 
      42           3 : void _PyOS_ResetGetOpt(void)
      43             : {
      44           3 :     _PyOS_opterr = 1;
      45           3 :     _PyOS_optind = 1;
      46           3 :     _PyOS_optarg = NULL;
      47           3 :     opt_ptr = "";
      48           3 : }
      49             : 
      50          12 : int _PyOS_GetOpt(int argc, char **argv, char *optstring)
      51             : {
      52             :     char *ptr;
      53             :     int option;
      54             : 
      55          12 :     if (*opt_ptr == '\0') {
      56             : 
      57          12 :         if (_PyOS_optind >= argc)
      58           0 :             return -1;
      59             : #ifdef MS_WINDOWS
      60             :         else if (strcmp(argv[_PyOS_optind], "/?") == 0) {
      61             :             ++_PyOS_optind;
      62             :             return 'h';
      63             :         }
      64             : #endif
      65             : 
      66          18 :         else if (argv[_PyOS_optind][0] != '-' ||
      67           6 :                  argv[_PyOS_optind][1] == '\0' /* lone dash */ )
      68           6 :             return -1;
      69             : 
      70           6 :         else if (strcmp(argv[_PyOS_optind], "--") == 0) {
      71           0 :             ++_PyOS_optind;
      72           0 :             return -1;
      73             :         }
      74             : 
      75           6 :         else if (strcmp(argv[_PyOS_optind], "--help") == 0) {
      76           0 :             ++_PyOS_optind;
      77           0 :             return 'h';
      78             :         }
      79             : 
      80           6 :         else if (strcmp(argv[_PyOS_optind], "--version") == 0) {
      81           0 :             ++_PyOS_optind;
      82           0 :             return 'V';
      83             :         }
      84             : 
      85             : 
      86           6 :         opt_ptr = &argv[_PyOS_optind++][1];
      87             :     }
      88             : 
      89           6 :     if ((option = *opt_ptr++) == '\0')
      90           0 :         return -1;
      91             : 
      92           6 :     if (option == 'J') {
      93           0 :         if (_PyOS_opterr)
      94           0 :             fprintf(stderr, "-J is reserved for Jython\n");
      95           0 :         return '_';
      96             :     }
      97             : 
      98           6 :     if (option == 'X') {
      99           0 :         if (_PyOS_opterr)
     100           0 :             fprintf(stderr,
     101             :                 "-X is reserved for implementation-specific arguments\n");
     102           0 :         return '_';
     103             :     }
     104             : 
     105           6 :     if ((ptr = strchr(optstring, option)) == NULL) {
     106           0 :         if (_PyOS_opterr)
     107           0 :             fprintf(stderr, "Unknown option: -%c\n", option);
     108             : 
     109           0 :         return '_';
     110             :     }
     111             : 
     112           6 :     if (*(ptr + 1) == ':') {
     113           0 :         if (*opt_ptr != '\0') {
     114           0 :             _PyOS_optarg  = opt_ptr;
     115           0 :             opt_ptr = "";
     116             :         }
     117             : 
     118             :         else {
     119           0 :             if (_PyOS_optind >= argc) {
     120           0 :                 if (_PyOS_opterr)
     121           0 :                     fprintf(stderr,
     122             :                         "Argument expected for the -%c option\n", option);
     123           0 :                 return '_';
     124             :             }
     125             : 
     126           0 :             _PyOS_optarg = argv[_PyOS_optind++];
     127             :         }
     128             :     }
     129             : 
     130           6 :     return option;
     131             : }
     132             : 
     133             : #ifdef __cplusplus
     134             : }
     135             : #endif
     136             : 

Generated by: LCOV version 1.10