"Fossies" - the Fresh Open Source Software Archive

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