Export libwireshark symbols using WS_DLL_PUBLIC define
[metze/wireshark/wip.git] / wsutil / wsgetopt.h
1 /* Declarations for getopt.
2    Copyright (C) 1989-1994,1996-1999,2001,2003,2004,2009,2010
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 Lesser General Public
8    License as published by the Free Software Foundation; either
9    version 2.1 of the 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    Lesser General Public License for more details.
15
16    You should have received a copy of the GNU Lesser General Public
17    License along with the GNU C Library; if not, write to the Free
18    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19    02111-1307 USA.  */
20
21 #ifndef _GETOPT_H
22
23 #ifndef __need_getopt
24 # define _GETOPT_H 1
25 #endif
26
27 #include "ws_symbol_export.h"
28
29 /* If __GNU_LIBRARY__ is not already defined, either we are being used
30    standalone, or this is the first header included in the source file.
31    If we are being used with glibc, we need to include <features.h>, but
32    that does not exist if we are standalone.  So: if __GNU_LIBRARY__ is
33    not defined, include <ctype.h>, which will pull in <features.h> for us
34    if it's from glibc.  (Why ctype.h?  It's guaranteed to exist and it
35    doesn't flood the namespace with stuff the way some other headers do.)  */
36 #if !defined __GNU_LIBRARY__
37 # include <ctype.h>
38 #endif
39
40 #ifndef __THROW
41 # ifndef __GNUC_PREREQ
42 #  define __GNUC_PREREQ(maj, min) (0)
43 # endif
44 # if defined __cplusplus && __GNUC_PREREQ (2,8)
45 #  define __THROW       throw ()
46 # else
47 #  define __THROW
48 # endif
49 #endif
50
51 #ifdef  __cplusplus
52 extern "C" {
53 #endif
54
55 /* For communication from `getopt' to the caller.
56    When `getopt' finds an option that takes an argument,
57    the argument value is returned here.
58    Also, when `ordering' is RETURN_IN_ORDER,
59    each non-option ARGV-element is returned here.  */
60
61 WS_DLL_PUBLIC char *optarg;
62
63 /* Index in ARGV of the next element to be scanned.
64    This is used for communication to and from the caller
65    and for communication between successive calls to `getopt'.
66
67    On entry to `getopt', zero means this is the first call; initialize.
68
69    When `getopt' returns -1, this is the index of the first of the
70    non-option elements that the caller should itself scan.
71
72    Otherwise, `optind' communicates from one call to the next
73    how much of ARGV has been scanned so far.  */
74
75 WS_DLL_PUBLIC int optind;
76
77 /* Callers store zero here to inhibit the error message `getopt' prints
78    for unrecognized options.  */
79
80 WS_DLL_PUBLIC int opterr;
81
82 /* Set to an option character which was unrecognized.  */
83
84 WS_DLL_PUBLIC int optopt;
85
86 #ifndef __need_getopt
87 /* Describe the long-named options requested by the application.
88    The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
89    of `struct option' terminated by an element containing a name which is
90    zero.
91
92    The field `has_arg' is:
93    no_argument          (or 0) if the option does not take an argument,
94    required_argument    (or 1) if the option requires an argument,
95    optional_argument    (or 2) if the option takes an optional argument.
96
97    If the field `flag' is not NULL, it points to a variable that is set
98    to the value given in the field `val' when the option is found, but
99    left unchanged if the option is not found.
100
101    To have a long-named option do something other than set an `int' to
102    a compiled-in constant, such as set a value from `optarg', set the
103    option's `flag' field to zero and its `val' field to a nonzero
104    value (the equivalent single-letter option character, if there is
105    one).  For long options that have a zero `flag' field, `getopt'
106    returns the contents of the `val' field.  */
107
108 struct option
109 {
110   const char *name;
111   /* has_arg can't be an enum because some compilers complain about
112      type mismatches in all the code that assumes it is an int.  */
113   int has_arg;
114   int *flag;
115   int val;
116 };
117
118 /* Names for the values of the `has_arg' field of `struct option'.  */
119
120 # define no_argument            0
121 # define required_argument      1
122 # define optional_argument      2
123 #endif  /* need getopt */
124
125
126 /* Get definitions and prototypes for functions to process the
127    arguments in ARGV (ARGC of them, minus the program name) for
128    options given in OPTS.
129
130    Return the option character from OPTS just read.  Return -1 when
131    there are no more options.  For unrecognized options, or options
132    missing arguments, `optopt' is set to the option letter, and '?' is
133    returned.
134
135    The OPTS string is a list of characters which are recognized option
136    letters, optionally followed by colons, specifying that that letter
137    takes an argument, to be placed in `optarg'.
138
139    If a letter in OPTS is followed by two colons, its argument is
140    optional.  This behavior is specific to the GNU `getopt'.
141
142    The argument `--' causes premature termination of argument
143    scanning, explicitly telling `getopt' that there are no more
144    options.
145
146    If OPTS begins with `--', then non-option arguments are treated as
147    arguments to the option '\0'.  This behavior is specific to the GNU
148    `getopt'.  */
149
150 #ifdef __GNU_LIBRARY__
151 /* Many other libraries have conflicting prototypes for getopt, with
152    differences in the consts, in stdlib.h.  To avoid compilation
153    errors, only prototype getopt for the GNU C library.  */
154 WS_DLL_PUBLIC int getopt (int ___argc, char *const *___argv, const char *__shortopts)
155        __THROW;
156
157 # if defined __need_getopt && defined __USE_POSIX2 \
158   && !defined __USE_POSIX_IMPLICITLY && !defined __USE_GNU
159 /* The GNU getopt has more functionality than the standard version.  The
160    additional functionality can be disable at runtime.  This redirection
161    helps to also do this at runtime.  */
162 #  ifdef __REDIRECT
163   extern int __REDIRECT_NTH (getopt, (int ___argc, char *const *___argv,
164                                       const char *__shortopts),
165                              __posix_getopt);
166 #  else
167 extern int __posix_getopt (int ___argc, char *const *___argv,
168                            const char *__shortopts) __THROW;
169 #   define getopt __posix_getopt
170 #  endif
171 # endif
172 #else /* not __GNU_LIBRARY__ */
173 WS_DLL_PUBLIC int getopt (int ___argc, char *const *___argv,
174                    const char *__shortopts);
175 #endif /* __GNU_LIBRARY__ */
176
177 #ifndef __need_getopt
178 extern int getopt_long (int ___argc, char *const *___argv,
179                         const char *__shortopts,
180                         const struct option *__longopts, int *__longind)
181        __THROW;
182 extern int getopt_long_only (int ___argc, char *const *___argv,
183                              const char *__shortopts,
184                              const struct option *__longopts, int *__longind)
185        __THROW;
186
187 #endif
188
189 #ifdef  __cplusplus
190 }
191 #endif
192
193 /* Make sure we later can get all the definitions and declarations.  */
194 #undef __need_getopt
195
196 #endif /* getopt.h */