(root)/
xz-5.4.5/
lib/
getopt.in.h
       1  /* Declarations for getopt.
       2     Copyright (C) 1989-1994,1996-1999,2001,2003,2004,2005,2006,2007
       3     Free Software Foundation, Inc.
       4     This file is part of the GNU C Library.
       5  
       6     This program is free software; you can redistribute it and/or modify
       7     it under the terms of the GNU Lesser General Public License as published by
       8     the Free Software Foundation; either version 2.1, or (at your option)
       9     any later version.
      10  
      11     This program 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
      14     GNU Lesser General Public License for more details.
      15  
      16     You should have received a copy of the GNU Lesser General Public License along
      17     with this program; if not, write to the Free Software Foundation,
      18     Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
      19  
      20  #ifndef _GETOPT_H
      21  
      22  #ifndef __need_getopt
      23  # define _GETOPT_H 1
      24  #endif
      25  
      26  /* Standalone applications should #define __GETOPT_PREFIX to an
      27     identifier that prefixes the external functions and variables
      28     defined in this header.  When this happens, include the
      29     headers that might declare getopt so that they will not cause
      30     confusion if included after this file.  Then systematically rename
      31     identifiers so that they do not collide with the system functions
      32     and variables.  Renaming avoids problems with some compilers and
      33     linkers.  */
      34  #if defined __GETOPT_PREFIX && !defined __need_getopt
      35  # include <stdlib.h>
      36  # include <stdio.h>
      37  # include <unistd.h>
      38  # undef __need_getopt
      39  # undef getopt
      40  # undef getopt_long
      41  # undef getopt_long_only
      42  # undef optarg
      43  # undef opterr
      44  # undef optind
      45  # undef optopt
      46  # define __GETOPT_CONCAT(x, y) x ## y
      47  # define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y)
      48  # define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y)
      49  # define getopt __GETOPT_ID (getopt)
      50  # define getopt_long __GETOPT_ID (getopt_long)
      51  # define getopt_long_only __GETOPT_ID (getopt_long_only)
      52  # define optarg __GETOPT_ID (optarg)
      53  # define opterr __GETOPT_ID (opterr)
      54  # define optind __GETOPT_ID (optind)
      55  # define optopt __GETOPT_ID (optopt)
      56  #endif
      57  
      58  /* Standalone applications get correct prototypes for getopt_long and
      59     getopt_long_only; they declare "char **argv".  libc uses prototypes
      60     with "char *const *argv" that are incorrect because getopt_long and
      61     getopt_long_only can permute argv; this is required for backward
      62     compatibility (e.g., for LSB 2.0.1).
      63  
      64     This used to be `#if defined __GETOPT_PREFIX && !defined __need_getopt',
      65     but it caused redefinition warnings if both unistd.h and getopt.h were
      66     included, since unistd.h includes getopt.h having previously defined
      67     __need_getopt.
      68  
      69     The only place where __getopt_argv_const is used is in definitions
      70     of getopt_long and getopt_long_only below, but these are visible
      71     only if __need_getopt is not defined, so it is quite safe to rewrite
      72     the conditional as follows:
      73  */
      74  #if !defined __need_getopt
      75  # if defined __GETOPT_PREFIX
      76  #  define __getopt_argv_const /* empty */
      77  # else
      78  #  define __getopt_argv_const const
      79  # endif
      80  #endif
      81  
      82  /* If __GNU_LIBRARY__ is not already defined, either we are being used
      83     standalone, or this is the first header included in the source file.
      84     If we are being used with glibc, we need to include <features.h>, but
      85     that does not exist if we are standalone.  So: if __GNU_LIBRARY__ is
      86     not defined, include <ctype.h>, which will pull in <features.h> for us
      87     if it's from glibc.  (Why ctype.h?  It's guaranteed to exist and it
      88     doesn't flood the namespace with stuff the way some other headers do.)  */
      89  #if !defined __GNU_LIBRARY__
      90  # include <ctype.h>
      91  #endif
      92  
      93  #ifndef __THROW
      94  # ifndef __GNUC_PREREQ
      95  #  define __GNUC_PREREQ(maj, min) (0)
      96  # endif
      97  # if defined __cplusplus && __GNUC_PREREQ (2,8)
      98  #  define __THROW	throw ()
      99  # else
     100  #  define __THROW
     101  # endif
     102  #endif
     103  
     104  #ifdef __cplusplus
     105  extern "C" {
     106  #endif
     107  
     108  /* For communication from `getopt' to the caller.
     109     When `getopt' finds an option that takes an argument,
     110     the argument value is returned here.
     111     Also, when `ordering' is RETURN_IN_ORDER,
     112     each non-option ARGV-element is returned here.  */
     113  
     114  extern char *optarg;
     115  
     116  /* Index in ARGV of the next element to be scanned.
     117     This is used for communication to and from the caller
     118     and for communication between successive calls to `getopt'.
     119  
     120     On entry to `getopt', zero means this is the first call; initialize.
     121  
     122     When `getopt' returns -1, this is the index of the first of the
     123     non-option elements that the caller should itself scan.
     124  
     125     Otherwise, `optind' communicates from one call to the next
     126     how much of ARGV has been scanned so far.  */
     127  
     128  extern int optind;
     129  
     130  /* Callers store zero here to inhibit the error message `getopt' prints
     131     for unrecognized options.  */
     132  
     133  extern int opterr;
     134  
     135  /* Set to an option character which was unrecognized.  */
     136  
     137  extern int optopt;
     138  
     139  #ifndef __need_getopt
     140  /* Describe the long-named options requested by the application.
     141     The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
     142     of `struct option' terminated by an element containing a name which is
     143     zero.
     144  
     145     The field `has_arg' is:
     146     no_argument		(or 0) if the option does not take an argument,
     147     required_argument	(or 1) if the option requires an argument,
     148     optional_argument	(or 2) if the option takes an optional argument.
     149  
     150     If the field `flag' is not NULL, it points to a variable that is set
     151     to the value given in the field `val' when the option is found, but
     152     left unchanged if the option is not found.
     153  
     154     To have a long-named option do something other than set an `int' to
     155     a compiled-in constant, such as set a value from `optarg', set the
     156     option's `flag' field to zero and its `val' field to a nonzero
     157     value (the equivalent single-letter option character, if there is
     158     one).  For long options that have a zero `flag' field, `getopt'
     159     returns the contents of the `val' field.  */
     160  
     161  struct option
     162  {
     163    const char *name;
     164    /* has_arg can't be an enum because some compilers complain about
     165       type mismatches in all the code that assumes it is an int.  */
     166    int has_arg;
     167    int *flag;
     168    int val;
     169  };
     170  
     171  /* Names for the values of the `has_arg' field of `struct option'.  */
     172  
     173  # define no_argument		0
     174  # define required_argument	1
     175  # define optional_argument	2
     176  #endif	/* need getopt */
     177  
     178  
     179  /* Get definitions and prototypes for functions to process the
     180     arguments in ARGV (ARGC of them, minus the program name) for
     181     options given in OPTS.
     182  
     183     Return the option character from OPTS just read.  Return -1 when
     184     there are no more options.  For unrecognized options, or options
     185     missing arguments, `optopt' is set to the option letter, and '?' is
     186     returned.
     187  
     188     The OPTS string is a list of characters which are recognized option
     189     letters, optionally followed by colons, specifying that that letter
     190     takes an argument, to be placed in `optarg'.
     191  
     192     If a letter in OPTS is followed by two colons, its argument is
     193     optional.  This behavior is specific to the GNU `getopt'.
     194  
     195     The argument `--' causes premature termination of argument
     196     scanning, explicitly telling `getopt' that there are no more
     197     options.
     198  
     199     If OPTS begins with `-', then non-option arguments are treated as
     200     arguments to the option '\1'.  This behavior is specific to the GNU
     201     `getopt'.  If OPTS begins with `+', or POSIXLY_CORRECT is set in
     202     the environment, then do not permute arguments.  */
     203  
     204  extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
     205         __THROW;
     206  
     207  #ifndef __need_getopt
     208  extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv,
     209  			const char *__shortopts,
     210  		        const struct option *__longopts, int *__longind)
     211         __THROW;
     212  extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv,
     213  			     const char *__shortopts,
     214  		             const struct option *__longopts, int *__longind)
     215         __THROW;
     216  
     217  #endif
     218  
     219  #ifdef __cplusplus
     220  }
     221  #endif
     222  
     223  /* Make sure we later can get all the definitions and declarations.  */
     224  #undef __need_getopt
     225  
     226  #endif /* getopt.h */