"Fossies" - the Fresh Open Source Software Archive

Member "httperf-0.9.0/src/lib/getopt1.c" (8 Dec 2006, 4477 Bytes) of package /linux/www/old/httperf-0.9.0.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "getopt1.c" see the Fossies "Dox" file reference documentation.

    1 /* getopt_long and getopt_long_only entry points for GNU getopt.
    2    Copyright (C) 1987, 88, 89, 90, 91, 92, 1993, 1994
    3     Free Software Foundation, Inc.
    4 
    5 This file is part of the GNU C Library.  Its master source is NOT part of
    6 the C library, however.  The master source lives in /gd/gnu/lib.
    7 
    8 The GNU C Library is free software; you can redistribute it and/or
    9 modify it under the terms of the GNU Library General Public License as
   10 published by the Free Software Foundation; either version 2 of the
   11 License, or (at your option) any later version.
   12 
   13 The GNU C Library is distributed in the hope that it will be useful,
   14 but WITHOUT ANY WARRANTY; without even the implied warranty of
   15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   16 Library General Public License for more details.
   17 
   18 You should have received a copy of the GNU Library General Public
   19 License along with the GNU C Library; see the file COPYING.LIB.  If
   20 not, write to the Free Software Foundation, Inc., 675 Mass Ave,
   21 Cambridge, MA 02139, USA.  */
   22 
   23 #include "config.h"
   24 
   25 #ifndef HAVE_GETOPT_LONG
   26 
   27 #include "getopt.h"
   28 
   29 #if !defined (__STDC__) || !__STDC__
   30 /* This is a separate conditional since some stdc systems
   31    reject `defined (const)'.  */
   32 #ifndef const
   33 #define const
   34 #endif
   35 #endif
   36 
   37 #include <stdio.h>
   38 
   39 /* Comment out all this code if we are using the GNU C Library, and are not
   40    actually compiling the library itself.  This code is part of the GNU C
   41    Library, but also included in many other GNU distributions.  Compiling
   42    and linking in this code is a waste when using the GNU C library
   43    (especially if it is a shared library).  Rather than having every GNU
   44    program understand `configure --with-gnu-libc' and omit the object files,
   45    it is simpler to just do this in the source for each such file.  */
   46 
   47 #if defined (_LIBC) || !defined (__GNU_LIBRARY__)
   48 
   49 
   50 /* This needs to come after some library #include
   51    to get __GNU_LIBRARY__ defined.  */
   52 #ifdef __GNU_LIBRARY__
   53 #include <stdlib.h>
   54 #else
   55 char *getenv ();
   56 #endif
   57 
   58 #ifndef NULL
   59 #define NULL 0
   60 #endif
   61 
   62 int
   63 getopt_long (argc, argv, options, long_options, opt_index)
   64      int argc;
   65      char *const *argv;
   66      const char *options;
   67      const struct option *long_options;
   68      int *opt_index;
   69 {
   70   return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
   71 }
   72 
   73 /* Like getopt_long, but '-' as well as '--' can indicate a long option.
   74    If an option that starts with '-' (not '--') doesn't match a long option,
   75    but does match a short option, it is parsed as a short option
   76    instead.  */
   77 
   78 int
   79 getopt_long_only (argc, argv, options, long_options, opt_index)
   80      int argc;
   81      char *const *argv;
   82      const char *options;
   83      const struct option *long_options;
   84      int *opt_index;
   85 {
   86   return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
   87 }
   88 
   89 
   90 #endif  /* _LIBC or not __GNU_LIBRARY__.  */
   91 
   92 #ifdef TEST
   93 
   94 #include <stdio.h>
   95 
   96 int
   97 main (argc, argv)
   98      int argc;
   99      char **argv;
  100 {
  101   int c;
  102   int digit_optind = 0;
  103 
  104   while (1)
  105     {
  106       int this_option_optind = optind ? optind : 1;
  107       int option_index = 0;
  108       static struct option long_options[] =
  109       {
  110     {"add", 1, 0, 0},
  111     {"append", 0, 0, 0},
  112     {"delete", 1, 0, 0},
  113     {"verbose", 0, 0, 0},
  114     {"create", 0, 0, 0},
  115     {"file", 1, 0, 0},
  116     {0, 0, 0, 0}
  117       };
  118 
  119       c = getopt_long (argc, argv, "abc:d:0123456789",
  120                long_options, &option_index);
  121       if (c == EOF)
  122     break;
  123 
  124       switch (c)
  125     {
  126     case 0:
  127       printf ("option %s", long_options[option_index].name);
  128       if (optarg)
  129         printf (" with arg %s", optarg);
  130       printf ("\n");
  131       break;
  132 
  133     case '0':
  134     case '1':
  135     case '2':
  136     case '3':
  137     case '4':
  138     case '5':
  139     case '6':
  140     case '7':
  141     case '8':
  142     case '9':
  143       if (digit_optind != 0 && digit_optind != this_option_optind)
  144         printf ("digits occur in two different argv-elements.\n");
  145       digit_optind = this_option_optind;
  146       printf ("option %c\n", c);
  147       break;
  148 
  149     case 'a':
  150       printf ("option a\n");
  151       break;
  152 
  153     case 'b':
  154       printf ("option b\n");
  155       break;
  156 
  157     case 'c':
  158       printf ("option c with value `%s'\n", optarg);
  159       break;
  160 
  161     case 'd':
  162       printf ("option d with value `%s'\n", optarg);
  163       break;
  164 
  165     case '?':
  166       break;
  167 
  168     default:
  169       printf ("?? getopt returned character code 0%o ??\n", c);
  170     }
  171     }
  172 
  173   if (optind < argc)
  174     {
  175       printf ("non-option ARGV-elements: ");
  176       while (optind < argc)
  177     printf ("%s ", argv[optind++]);
  178       printf ("\n");
  179     }
  180 
  181   exit (0);
  182 }
  183 
  184 #endif /* TEST */
  185 #endif /* !HAVE_GETOPT_LONG */