root/maint/gnulib/lib/getopt1.c

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. getopt_long
  2. _getopt_long_r
  3. getopt_long_only
  4. _getopt_long_only_r
  5. main

   1 /* getopt_long and getopt_long_only entry points for GNU getopt.
   2    Copyright (C) 1987-2021 Free Software Foundation, Inc.
   3    This file is part of the GNU C Library and is also part of gnulib.
   4    Patches to this file should be submitted to both projects.
   5 
   6    The GNU C Library is free software; you can redistribute it and/or
   7    modify it under the terms of the GNU Lesser General Public
   8    License as published by the Free Software Foundation; either
   9    version 2.1 of the License, or (at your option) any later version.
  10 
  11    The GNU C Library 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 GNU
  14    Lesser General Public License for more details.
  15 
  16    You should have received a copy of the GNU Lesser General Public
  17    License along with the GNU C Library; if not, see
  18    <https://www.gnu.org/licenses/>.  */
  19 
  20 #ifndef _LIBC
  21 # include <config.h>
  22 #endif
  23 
  24 #include "getopt.h"
  25 #include "getopt_int.h"
  26 
  27 int
  28 getopt_long (int argc, char *__getopt_argv_const *argv, const char *options,
     /* [previous][next][first][last][top][bottom][index][help] */
  29              const struct option *long_options, int *opt_index)
  30 {
  31   return _getopt_internal (argc, (char **) argv, options, long_options,
  32                            opt_index, 0, 0);
  33 }
  34 
  35 int
  36 _getopt_long_r (int argc, char **argv, const char *options,
     /* [previous][next][first][last][top][bottom][index][help] */
  37                 const struct option *long_options, int *opt_index,
  38                 struct _getopt_data *d)
  39 {
  40   return _getopt_internal_r (argc, argv, options, long_options, opt_index,
  41                              0, d, 0);
  42 }
  43 
  44 /* Like getopt_long, but '-' as well as '--' can indicate a long option.
  45    If an option that starts with '-' (not '--') doesn't match a long option,
  46    but does match a short option, it is parsed as a short option
  47    instead.  */
  48 
  49 int
  50 getopt_long_only (int argc, char *__getopt_argv_const *argv,
     /* [previous][next][first][last][top][bottom][index][help] */
  51                   const char *options,
  52                   const struct option *long_options, int *opt_index)
  53 {
  54   return _getopt_internal (argc, (char **) argv, options, long_options,
  55                            opt_index, 1, 0);
  56 }
  57 
  58 int
  59 _getopt_long_only_r (int argc, char **argv, const char *options,
     /* [previous][next][first][last][top][bottom][index][help] */
  60                      const struct option *long_options, int *opt_index,
  61                      struct _getopt_data *d)
  62 {
  63   return _getopt_internal_r (argc, argv, options, long_options, opt_index,
  64                              1, d, 0);
  65 }
  66 
  67 
  68 #ifdef TEST
  69 
  70 #include <stdio.h>
  71 #include <stdlib.h>
  72 
  73 int
  74 main (int argc, char **argv)
     /* [previous][next][first][last][top][bottom][index][help] */
  75 {
  76   int c;
  77   int digit_optind = 0;
  78 
  79   while (1)
  80     {
  81       int this_option_optind = optind ? optind : 1;
  82       int option_index = 0;
  83       static const struct option long_options[] =
  84       {
  85         {"add", 1, 0, 0},
  86         {"append", 0, 0, 0},
  87         {"delete", 1, 0, 0},
  88         {"verbose", 0, 0, 0},
  89         {"create", 0, 0, 0},
  90         {"file", 1, 0, 0},
  91         {0, 0, 0, 0}
  92       };
  93 
  94       c = getopt_long (argc, argv, "abc:d:0123456789",
  95                        long_options, &option_index);
  96       if (c == -1)
  97         break;
  98 
  99       switch (c)
 100         {
 101         case 0:
 102           printf ("option %s", long_options[option_index].name);
 103           if (optarg)
 104             printf (" with arg %s", optarg);
 105           printf ("\n");
 106           break;
 107 
 108         case '0':
 109         case '1':
 110         case '2':
 111         case '3':
 112         case '4':
 113         case '5':
 114         case '6':
 115         case '7':
 116         case '8':
 117         case '9':
 118           if (digit_optind != 0 && digit_optind != this_option_optind)
 119             printf ("digits occur in two different argv-elements.\n");
 120           digit_optind = this_option_optind;
 121           printf ("option %c\n", c);
 122           break;
 123 
 124         case 'a':
 125           printf ("option a\n");
 126           break;
 127 
 128         case 'b':
 129           printf ("option b\n");
 130           break;
 131 
 132         case 'c':
 133           printf ("option c with value '%s'\n", optarg);
 134           break;
 135 
 136         case 'd':
 137           printf ("option d with value '%s'\n", optarg);
 138           break;
 139 
 140         case '?':
 141           break;
 142 
 143         default:
 144           printf ("?? getopt returned character code 0%o ??\n", c);
 145         }
 146     }
 147 
 148   if (optind < argc)
 149     {
 150       printf ("non-option ARGV-elements: ");
 151       while (optind < argc)
 152         printf ("%s ", argv[optind++]);
 153       printf ("\n");
 154     }
 155 
 156   exit (0);
 157 }
 158 
 159 #endif /* TEST */

/* [previous][next][first][last][top][bottom][index][help] */