"Fossies" - the Fresh Open Source Software Archive

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