/[groff]/groff/src/include/getopt.h
ViewVC logotype

Diff of /groff/src/include/getopt.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.8 by wl, Thu Jun 16 09:47:48 2005 UTC revision 1.9 by wl, Thu Jun 23 11:33:00 2005 UTC
# Line 3  Line 3 
3     Free Software Foundation, Inc.     Free Software Foundation, Inc.
4     This file is part of the GNU C Library.     This file is part of the GNU C Library.
5    
6     The GNU C Library is free software; you can redistribute it and/or     This program is free software; you can redistribute it and/or modify
7     modify it under the terms of the GNU Lesser General Public     it under the terms of the GNU General Public License as published by
8     License as published by the Free Software Foundation; either     the Free Software Foundation; either version 2, or (at your option)
9     version 2.1 of the License, or (at your option) any later version.     any later version.
10    
11     The GNU C Library is distributed in the hope that it will be useful,     This program is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     Lesser General Public License for more details.     GNU General Public License for more details.
15    
16     You should have received a copy of the GNU Lesser General Public     You should have received a copy of the GNU General Public License along
17     License along with the GNU C Library; if not, write to the Free     with this program; if not, write to the Free Software Foundation,
18     Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA     Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
    02111-1307 USA.  */  
19    
20  #ifndef _GETOPT_H  #ifndef _GETOPT_H
21    
# Line 24  Line 23 
23  # define _GETOPT_H 1  # define _GETOPT_H 1
24  #endif  #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    # if HAVE_UNISTD_H
38    #  include <unistd.h>
39    # endif
40    # undef __need_getopt
41    # undef getopt
42    # undef getopt_long
43    # undef getopt_long_only
44    # undef optarg
45    # undef opterr
46    # undef optind
47    # undef optopt
48    # define __GETOPT_CONCAT(x, y) x ## y
49    # define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y)
50    # define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y)
51    # define getopt __GETOPT_ID (getopt)
52    # define getopt_long __GETOPT_ID (getopt_long)
53    # define getopt_long_only __GETOPT_ID (getopt_long_only)
54    # define optarg __GETOPT_ID (optarg)
55    # define opterr __GETOPT_ID (opterr)
56    # define optind __GETOPT_ID (optind)
57    # define optopt __GETOPT_ID (optopt)
58    #endif
59    
60    /* Standalone applications get correct prototypes for getopt_long and
61       getopt_long_only; they declare "char **argv".  libc uses prototypes
62       with "char *const *argv" that are incorrect because getopt_long and
63       getopt_long_only can permute argv; this is required for backward
64       compatibility (e.g., for LSB 2.0.1).
65    
66       This used to be `#if defined __GETOPT_PREFIX && !defined __need_getopt',
67       but it caused redefinition warnings if both unistd.h and getopt.h were
68       included, since unistd.h includes getopt.h having previously defined
69       __need_getopt.
70    
71       The only place where __getopt_argv_const is used is in definitions
72       of getopt_long and getopt_long_only below, but these are visible
73       only if __need_getopt is not defined, so it is quite safe to rewrite
74       the conditional as follows:
75    */
76    #if !defined __need_getopt
77    # if defined __GETOPT_PREFIX
78    #  define __getopt_argv_const /* empty */
79    # else
80    #  define __getopt_argv_const const
81    # endif
82    #endif
83    
84  /* If __GNU_LIBRARY__ is not already defined, either we are being used  /* If __GNU_LIBRARY__ is not already defined, either we are being used
85     standalone, or this is the first header included in the source file.     standalone, or this is the first header included in the source file.
86     If we are being used with glibc, we need to include <features.h>, but     If we are being used with glibc, we need to include <features.h>, but
# Line 90  extern int optopt; Line 147  extern int optopt;
147     The field `has_arg' is:     The field `has_arg' is:
148     no_argument          (or 0) if the option does not take an argument,     no_argument          (or 0) if the option does not take an argument,
149     required_argument    (or 1) if the option requires an argument,     required_argument    (or 1) if the option requires an argument,
150     optional_argument    (or 2) if the option takes an optional argument.     optional_argument    (or 2) if the option takes an optional argument.
151    
152     If the field `flag' is not NULL, it points to a variable that is set     If the field `flag' is not NULL, it points to a variable that is set
153     to the value given in the field `val' when the option is found, but     to the value given in the field `val' when the option is found, but
# Line 145  struct option Line 202  struct option
202     arguments to the option '\0'.  This behavior is specific to the GNU     arguments to the option '\0'.  This behavior is specific to the GNU
203     `getopt'.  */     `getopt'.  */
204    
 #ifdef __GNU_LIBRARY__  
 /* Many other libraries have conflicting prototypes for getopt, with  
    differences in the consts, in stdlib.h.  To avoid compilation  
    errors, only prototype getopt for the GNU C library.  */  
205  extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)  extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
206         __THROW;         __THROW;
 #else /* not __GNU_LIBRARY__ */  
 extern int getopt ();  
 #endif /* __GNU_LIBRARY__ */  
207    
208  #ifndef __need_getopt  #ifndef __need_getopt
209  extern int getopt_long (int ___argc, char *const *___argv,  extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv,
210                          const char *__shortopts,                          const char *__shortopts,
211                          const struct option *__longopts, int *__longind)                          const struct option *__longopts, int *__longind)
212         __THROW;         __THROW;
213  extern int getopt_long_only (int ___argc, char *const *___argv,  extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv,
214                               const char *__shortopts,                               const char *__shortopts,
215                               const struct option *__longopts, int *__longind)                               const struct option *__longopts, int *__longind)
216         __THROW;         __THROW;

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.9

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26