"Fossies" - the Fresh Open Source Software Archive

Member "libextractor-1.11/src/main/getopt1.c" (30 Jan 2021, 4591 Bytes) of package /linux/privat/libextractor-1.11.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 Copyright (C) 1987,88,89,90,91,92,93,94,96,97 Free Software Foundation, Inc.
    3 
    4 NOTE: The canonical source of this file is maintained with the GNU C Library.
    5 Bugs can be reported to bug-glibc@prep.ai.mit.edu.
    6 
    7 This program is free software; you can redistribute it and/or modify it
    8 under the terms of the GNU General Public License as published by the
    9 Free Software Foundation; either version 2, or (at your option) any
   10 later version.
   11 
   12 This program is distributed in the hope that it will be useful,
   13 but WITHOUT ANY WARRANTY; without even the implied warranty of
   14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   15 GNU General Public License for more details.
   16 
   17 You should have received a copy of the GNU General Public License
   18 along with this program; if not, write to the Free Software
   19 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
   20 USA.  */
   21 #include "config.h"
   22 #include "getopt.h"
   23 
   24 #if ! defined (__STDC__) || ! __STDC__
   25 /* This is a separate conditional since some stdc systems
   26    reject `defined (const)'.  */
   27 #ifndef const
   28 #define const
   29 #endif
   30 #endif
   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 (argc, argv, options, long_options, opt_index)
   65 int argc;
   66 
   67 char *const *argv;
   68 const char *options;
   69 const struct option *long_options;
   70 int *opt_index;
   71 {
   72   return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
   73 }
   74 
   75 /* Like getopt_long, but '-' as well as '--' can indicate a long option.
   76    If an option that starts with '-' (not '--') doesn't match a long option,
   77    but does match a short option, it is parsed as a short option
   78    instead.  */
   79 
   80 int
   81 getopt_long_only (argc, argv, options, long_options, opt_index)
   82 int argc;
   83 
   84 char *const *argv;
   85 const char *options;
   86 const struct option *long_options;
   87 int *opt_index;
   88 {
   89   return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
   90 }
   91 
   92 
   93 #endif /* Not ELIDE_CODE.  */
   94 
   95 #ifdef TEST
   96 
   97 #include <stdio.h>
   98 
   99 int
  100 main (argc, argv)
  101 int argc;
  102 
  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       {"add", 1, 0, 0},
  114       {"append", 0, 0, 0},
  115       {"delete", 1, 0, 0},
  116       {"verbose", 0, 0, 0},
  117       {"create", 0, 0, 0},
  118       {"file", 1, 0, 0},
  119       {0, 0, 0, 0}
  120     };
  121 
  122     c = getopt_long (argc, argv, "abc:d:0123456789",
  123                      long_options, &option_index);
  124     if (c == -1)
  125       break;
  126 
  127     switch (c)
  128     {
  129     case 0:
  130       printf ("option %s", long_options[option_index].name);
  131       if (optarg)
  132         printf (" with arg %s", optarg);
  133       printf ("\n");
  134       break;
  135 
  136     case '0':
  137     case '1':
  138     case '2':
  139     case '3':
  140     case '4':
  141     case '5':
  142     case '6':
  143     case '7':
  144     case '8':
  145     case '9':
  146       if ((digit_optind != 0) && (digit_optind != this_option_optind) )
  147         printf ("digits occur in two different argv-elements.\n");
  148       digit_optind = this_option_optind;
  149       printf ("option %c\n", c);
  150       break;
  151 
  152     case 'a':
  153       printf ("option a\n");
  154       break;
  155 
  156     case 'b':
  157       printf ("option b\n");
  158       break;
  159 
  160     case 'c':
  161       printf ("option c with value `%s'\n", optarg);
  162       break;
  163 
  164     case 'd':
  165       printf ("option d with value `%s'\n", optarg);
  166       break;
  167 
  168     case '?':
  169       break;
  170 
  171     default:
  172       printf ("?? getopt returned character code 0%o ??\n", c);
  173     }
  174   }
  175 
  176   if (optind < argc)
  177   {
  178     printf ("non-option ARGV-elements: ");
  179     while (optind < argc)
  180       printf ("%s ", argv[optind++]);
  181     printf ("\n");
  182   }
  183 
  184   exit (0);
  185 }
  186 
  187 #endif /* TEST */