root/libglibc/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,88,89,90,91,92,93,94,96,97,98,2004
   3      Free Software Foundation, Inc.
   4    This file is part of the GNU C Library.
   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, write to the Free
  18    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  19    02111-1307 USA.  */
  20 
  21 #ifdef HAVE_CONFIG_H
  22 #include <config.h>
  23 #endif
  24 
  25 #ifdef _LIBC
  26 # include <getopt.h>
  27 #else
  28 # include "getopt.h"
  29 #endif
  30 #include "getopt_int.h"
  31 
  32 #include <stdio.h>
  33 
  34 /* Comment out all this code if we are using the GNU C Library, and are not
  35    actually compiling the library itself.  This code is part of the GNU C
  36    Library, but also included in many other GNU distributions.  Compiling
  37    and linking in this code is a waste when using the GNU C library
  38    (especially if it is a shared library).  Rather than having every GNU
  39    program understand `configure --with-gnu-libc' and omit the object files,
  40    it is simpler to just do this in the source for each such file.  */
  41 
  42 #define GETOPT_INTERFACE_VERSION 2
  43 #if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
  44 #include <gnu-versions.h>
  45 #if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
  46 #define ELIDE_CODE
  47 #endif
  48 #endif
  49 
  50 #ifndef ELIDE_CODE
  51 
  52 
  53 /* This needs to come after some library #include
  54    to get __GNU_LIBRARY__ defined.  */
  55 #ifdef __GNU_LIBRARY__
  56 #include <stdlib.h>
  57 #endif
  58 
  59 #ifndef NULL
  60 #define NULL 0
  61 #endif
  62 
  63 int
  64 getopt_long (int argc, char *const *argv, const char *options,
  65              const struct option *long_options, int *opt_index)
  66 {
  67   return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
  68 }
  69 
  70 int
  71 _getopt_long_r (int argc, char *const *argv, const char *options,
  72                 const struct option *long_options, int *opt_index,
  73                 struct _getopt_data *d)
  74 {
  75   return _getopt_internal_r (argc, argv, options, long_options, opt_index,
  76                              0, d);
  77 }
  78 
  79 /* Like getopt_long, but '-' as well as '--' can indicate a long option.
  80    If an option that starts with '-' (not '--') doesn't match a long option,
  81    but does match a short option, it is parsed as a short option
  82    instead.  */
  83 
  84 int
  85 getopt_long_only (int argc, char *const *argv, const char *options,
  86                   const struct option *long_options, int *opt_index)
  87 {
  88   return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
  89 }
  90 
  91 int
  92 _getopt_long_only_r (int argc, char *const *argv, const char *options,
  93                      const struct option *long_options, int *opt_index,
  94                      struct _getopt_data *d)
  95 {
  96   return _getopt_internal_r (argc, argv, options, long_options, opt_index,
  97                              1, d);
  98 }
  99 
 100 #endif  /* Not ELIDE_CODE.  */
 101 
 102 #ifdef TEST
 103 
 104 #include <stdio.h>
 105 
 106 int
 107 main (int argc, char **argv)
 108 {
 109   int c;
 110   int digit_optind = 0;
 111 
 112   while (1)
 113     {
 114       int this_option_optind = optind ? optind : 1;
 115       int option_index = 0;
 116       static struct option long_options[] =
 117       {
 118         {"add", 1, 0, 0},
 119         {"append", 0, 0, 0},
 120         {"delete", 1, 0, 0},
 121         {"verbose", 0, 0, 0},
 122         {"create", 0, 0, 0},
 123         {"file", 1, 0, 0},
 124         {0, 0, 0, 0}
 125       };
 126 
 127       c = getopt_long (argc, argv, "abc:d:0123456789",
 128                        long_options, &option_index);
 129       if (c == -1)
 130         break;
 131 
 132       switch (c)
 133         {
 134         case 0:
 135           printf ("option %s", long_options[option_index].name);
 136           if (optarg)
 137             printf (" with arg %s", optarg);
 138           printf ("\n");
 139           break;
 140 
 141         case '0':
 142         case '1':
 143         case '2':
 144         case '3':
 145         case '4':
 146         case '5':
 147         case '6':
 148         case '7':
 149         case '8':
 150         case '9':
 151           if (digit_optind != 0 && digit_optind != this_option_optind)
 152             printf ("digits occur in two different argv-elements.\n");
 153           digit_optind = this_option_optind;
 154           printf ("option %c\n", c);
 155           break;
 156 
 157         case 'a':
 158           printf ("option a\n");
 159           break;
 160 
 161         case 'b':
 162           printf ("option b\n");
 163           break;
 164 
 165         case 'c':
 166           printf ("option c with value `%s'\n", optarg);
 167           break;
 168 
 169         case 'd':
 170           printf ("option d with value `%s'\n", optarg);
 171           break;
 172 
 173         case '?':
 174           break;
 175 
 176         default:
 177           printf ("?? getopt returned character code 0%o ??\n", c);
 178         }
 179     }
 180 
 181   if (optind < argc)
 182     {
 183       printf ("non-option ARGV-elements: ");
 184       while (optind < argc)
 185         printf ("%s ", argv[optind++]);
 186       printf ("\n");
 187     }
 188 
 189   exit (0);
 190 }
 191 
 192 #endif /* TEST */

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