~darkmuggle-deactivatedaccount/ubuntu/quantal/grub2/fix-872244

« back to all changes in this revision

Viewing changes to grub-core/gnulib/argp.h

  • Committer: Bazaar Package Importer
  • Author(s): Colin Watson, Colin Watson, Evan Broder, Mario Limonciello
  • Date: 2010-11-24 13:59:55 UTC
  • mfrom: (1.17.6 upstream) (17.6.15 experimental)
  • Revision ID: james.westby@ubuntu.com-20101124135955-r6ii5sepayr7jt53
Tags: 1.99~20101124-1ubuntu1
[ Colin Watson ]
* Resynchronise with Debian experimental.  Remaining changes:
  - Adjust for default Ubuntu boot options ("quiet splash").
  - Default to hiding the menu; holding down Shift at boot will show it.
  - Set a monochromatic theme for Ubuntu.
  - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title,
    recovery mode, quiet option, tweak how memtest86+ is displayed, and
    use UUIDs where appropriate.
  - Fix backslash-escaping in merge_debconf_into_conf.
  - Remove "GNU/Linux" from default distributor string.
  - Add crashkernel= options if kdump and makedumpfile are available.
  - If other operating systems are installed, then automatically unhide
    the menu.  Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus
    if available to check whether Shift is pressed.  If it is, show the
    menu, otherwise boot immediately.  If keystatus is not available, then
    fall back to a short delay interruptible with Escape.
  - Allow Shift to interrupt 'sleep --interruptible'.
  - Don't display introductory message about line editing unless we're
    actually offering a shell prompt.  Don't clear the screen just before
    booting if we never drew the menu in the first place.
  - Remove some verbose messages printed before reading the configuration
    file.
  - Suppress progress messages as the kernel and initrd load for
    non-recovery kernel menu entries.
  - Change prepare_grub_to_access_device to handle filesystems
    loop-mounted on file images.
  - Ignore devices loop-mounted from files in 10_linux.
  - Show the boot menu if the previous boot failed, that is if it failed
    to get to the end of one of the normal runlevels.
  - Don't generate /boot/grub/device.map during grub-install or
    grub-mkconfig by default.
  - Adjust upgrade version checks for Ubuntu.
  - Don't display "GRUB loading" unless Shift is held down.
  - Adjust versions of grub-doc and grub-legacy-doc conflicts to tolerate
    our backport of the grub-doc split.
  - Fix LVM/RAID probing in the absence of /boot/grub/device.map.
  - Look for .mo files in /usr/share/locale-langpack as well, in
    preference.
  - Make sure GRUB_TIMEOUT isn't quoted unnecessarily.
  - Probe all devices in 'grub-probe --target=drive' if
    /boot/grub/device.map is missing.
  - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests.
  - Use qemu rather than qemu-system-i386.
  - Program vesafb on BIOS systems rather than efifb.
  - Add a grub-rescue-efi-amd64 package containing a rescue CD-ROM image
    for EFI-AMD64.
  - On Wubi, don't ask for an install device, but just update wubildr
    using the diverted grub-install.
  - When embedding the core image in a post-MBR gap, check for and avoid
    sectors matching any of a list of known signatures.
  - Disable video_bochs and video_cirrus on PC BIOS systems, as probing
    PCI space seems to break on some systems.
* Downgrade "ACPI shutdown failed" error to a debug message, since it can
  cause spurious test failures.

[ Evan Broder ]
* Enable lua from grub-extras.
* Incorporate the bitop library into lua.
* Add enum_pci function to grub module in lua.
* Switch back to gfxpayload=keep by default, unless the video hardware
  is known to not support it.

[ Mario Limonciello ]
* Built part_msdos and vfat into bootx64.efi (LP: #677758)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Hierarchial argument parsing, layered over getopt.
 
2
   Copyright (C) 1995-1999, 2003-2010 Free Software Foundation, Inc.
 
3
   This file is part of the GNU C Library.
 
4
   Written by Miles Bader <miles@gnu.ai.mit.edu>.
 
5
 
 
6
   This program is free software: you can redistribute it and/or modify
 
7
   it under the terms of the GNU General Public License as published by
 
8
   the Free Software Foundation; either version 3 of the License, or
 
9
   (at your option) 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 General Public License for more details.
 
15
 
 
16
   You should have received a copy of the GNU General Public License
 
17
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
18
 
 
19
#ifndef _ARGP_H
 
20
#define _ARGP_H
 
21
 
 
22
#include <stdio.h>
 
23
#include <ctype.h>
 
24
#include <getopt.h>
 
25
#include <limits.h>
 
26
 
 
27
#define __need_error_t
 
28
#include <errno.h>
 
29
 
 
30
#ifndef __THROW
 
31
# define __THROW
 
32
#endif
 
33
#ifndef __NTH
 
34
# define __NTH(fct) fct __THROW
 
35
#endif
 
36
 
 
37
#ifndef __attribute__
 
38
/* The __attribute__ feature is available in gcc versions 2.5 and later.
 
39
   The __-protected variants of the attributes 'format' and 'printf' are
 
40
   accepted by gcc versions 2.6.4 (effectively 2.7) and later.
 
41
   We enable __attribute__ only if these are supported too, because
 
42
   gnulib and libintl do '#define printf __printf__' when they override
 
43
   the 'printf' function.  */
 
44
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
 
45
#  define __attribute__(Spec)   /* empty */
 
46
# endif
 
47
#endif
 
48
 
 
49
/* GCC 2.95 and later have "__restrict"; C99 compilers have
 
50
   "restrict", and "configure" may have defined "restrict".
 
51
   Other compilers use __restrict, __restrict__, and _Restrict, and
 
52
   'configure' might #define 'restrict' to those words.  */
 
53
#ifndef __restrict
 
54
# if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__))
 
55
#  if 199901L <= __STDC_VERSION__
 
56
#   define __restrict restrict
 
57
#  else
 
58
#   define __restrict
 
59
#  endif
 
60
# endif
 
61
#endif
 
62
 
 
63
#ifndef __error_t_defined
 
64
typedef int error_t;
 
65
# define __error_t_defined
 
66
#endif
 
67
 
 
68
#ifdef  __cplusplus
 
69
extern "C" {
 
70
#endif
 
71
 
 
72
/* A description of a particular option.  A pointer to an array of
 
73
   these is passed in the OPTIONS field of an argp structure.  Each option
 
74
   entry can correspond to one long option and/or one short option; more
 
75
   names for the same option can be added by following an entry in an option
 
76
   array with options having the OPTION_ALIAS flag set.  */
 
77
struct argp_option
 
78
{
 
79
  /* The long option name.  For more than one name for the same option, you
 
80
     can use following options with the OPTION_ALIAS flag set.  */
 
81
  const char *name;
 
82
 
 
83
  /* What key is returned for this option.  If > 0 and printable, then it's
 
84
     also accepted as a short option.  */
 
85
  int key;
 
86
 
 
87
  /* If non-NULL, this is the name of the argument associated with this
 
88
     option, which is required unless the OPTION_ARG_OPTIONAL flag is set. */
 
89
  const char *arg;
 
90
 
 
91
  /* OPTION_ flags.  */
 
92
  int flags;
 
93
 
 
94
  /* The doc string for this option.  If both NAME and KEY are 0, This string
 
95
     will be printed outdented from the normal option column, making it
 
96
     useful as a group header (it will be the first thing printed in its
 
97
     group); in this usage, it's conventional to end the string with a `:'.
 
98
 
 
99
     Write the initial value as N_("TEXT") if you want xgettext to collect
 
100
     it into a POT file.  */
 
101
  const char *doc;
 
102
 
 
103
  /* The group this option is in.  In a long help message, options are sorted
 
104
     alphabetically within each group, and the groups presented in the order
 
105
     0, 1, 2, ..., n, -m, ..., -2, -1.  Every entry in an options array with
 
106
     if this field 0 will inherit the group number of the previous entry, or
 
107
     zero if it's the first one, unless its a group header (NAME and KEY both
 
108
     0), in which case, the previous entry + 1 is the default.  Automagic
 
109
     options such as --help are put into group -1.  */
 
110
  int group;
 
111
};
 
112
 
 
113
/* The argument associated with this option is optional.  */
 
114
#define OPTION_ARG_OPTIONAL     0x1
 
115
 
 
116
/* This option isn't displayed in any help messages.  */
 
117
#define OPTION_HIDDEN           0x2
 
118
 
 
119
/* This option is an alias for the closest previous non-alias option.  This
 
120
   means that it will be displayed in the same help entry, and will inherit
 
121
   fields other than NAME and KEY from the aliased option.  */
 
122
#define OPTION_ALIAS            0x4
 
123
 
 
124
/* This option isn't actually an option (and so should be ignored by the
 
125
   actual option parser), but rather an arbitrary piece of documentation that
 
126
   should be displayed in much the same manner as the options.  If this flag
 
127
   is set, then the option NAME field is displayed unmodified (e.g., no `--'
 
128
   prefix is added) at the left-margin (where a *short* option would normally
 
129
   be displayed), and the documentation string in the normal place. The NAME
 
130
   field will be translated using gettext, unless OPTION_NO_TRANS is set (see
 
131
   below). For purposes of sorting, any leading whitespace and punctuation is
 
132
   ignored, except that if the first non-whitespace character is not `-', this
 
133
   entry is displayed after all options (and OPTION_DOC entries with a leading
 
134
   `-') in the same group.  */
 
135
#define OPTION_DOC              0x8
 
136
 
 
137
/* This option shouldn't be included in `long' usage messages (but is still
 
138
   included in help messages).  This is mainly intended for options that are
 
139
   completely documented in an argp's ARGS_DOC field, in which case including
 
140
   the option in the generic usage list would be redundant.  For instance,
 
141
   if ARGS_DOC is "FOO BAR\n-x BLAH", and the `-x' option's purpose is to
 
142
   distinguish these two cases, -x should probably be marked
 
143
   OPTION_NO_USAGE.  */
 
144
#define OPTION_NO_USAGE         0x10
 
145
 
 
146
/* Valid only in conjunction with OPTION_DOC. This option disables translation
 
147
   of option name. */
 
148
#define OPTION_NO_TRANS         0x20
 
149
 
 
150
 
 
151
struct argp;                    /* fwd declare this type */
 
152
struct argp_state;              /* " */
 
153
struct argp_child;              /* " */
 
154
 
 
155
/* The type of a pointer to an argp parsing function.  */
 
156
typedef error_t (*argp_parser_t) (int key, char *arg,
 
157
                                  struct argp_state *state);
 
158
 
 
159
/* What to return for unrecognized keys.  For special ARGP_KEY_ keys, such
 
160
   returns will simply be ignored.  For user keys, this error will be turned
 
161
   into EINVAL (if the call to argp_parse is such that errors are propagated
 
162
   back to the user instead of exiting); returning EINVAL itself would result
 
163
   in an immediate stop to parsing in *all* cases.  */
 
164
#define ARGP_ERR_UNKNOWN        E2BIG /* Hurd should never need E2BIG.  XXX */
 
165
 
 
166
/* Special values for the KEY argument to an argument parsing function.
 
167
   ARGP_ERR_UNKNOWN should be returned if they aren't understood.
 
168
 
 
169
   The sequence of keys to a parsing function is either (where each
 
170
   uppercased word should be prefixed by `ARGP_KEY_' and opt is a user key):
 
171
 
 
172
       INIT opt... NO_ARGS END SUCCESS  -- No non-option arguments at all
 
173
   or  INIT (opt | ARG)... END SUCCESS  -- All non-option args parsed
 
174
   or  INIT (opt | ARG)... SUCCESS      -- Some non-option arg unrecognized
 
175
 
 
176
   The third case is where every parser returned ARGP_KEY_UNKNOWN for an
 
177
   argument, in which case parsing stops at that argument (returning the
 
178
   unparsed arguments to the caller of argp_parse if requested, or stopping
 
179
   with an error message if not).
 
180
 
 
181
   If an error occurs (either detected by argp, or because the parsing
 
182
   function returned an error value), then the parser is called with
 
183
   ARGP_KEY_ERROR, and no further calls are made.  */
 
184
 
 
185
/* This is not an option at all, but rather a command line argument.  If a
 
186
   parser receiving this key returns success, the fact is recorded, and the
 
187
   ARGP_KEY_NO_ARGS case won't be used.  HOWEVER, if while processing the
 
188
   argument, a parser function decrements the NEXT field of the state it's
 
189
   passed, the option won't be considered processed; this is to allow you to
 
190
   actually modify the argument (perhaps into an option), and have it
 
191
   processed again.  */
 
192
#define ARGP_KEY_ARG            0
 
193
/* There are remaining arguments not parsed by any parser, which may be found
 
194
   starting at (STATE->argv + STATE->next).  If success is returned, but
 
195
   STATE->next left untouched, it's assumed that all arguments were consume,
 
196
   otherwise, the parser should adjust STATE->next to reflect any arguments
 
197
   consumed.  */
 
198
#define ARGP_KEY_ARGS           0x1000006
 
199
/* There are no more command line arguments at all.  */
 
200
#define ARGP_KEY_END            0x1000001
 
201
/* Because it's common to want to do some special processing if there aren't
 
202
   any non-option args, user parsers are called with this key if they didn't
 
203
   successfully process any non-option arguments.  Called just before
 
204
   ARGP_KEY_END (where more general validity checks on previously parsed
 
205
   arguments can take place).  */
 
206
#define ARGP_KEY_NO_ARGS        0x1000002
 
207
/* Passed in before any parsing is done.  Afterwards, the values of each
 
208
   element of the CHILD_INPUT field, if any, in the state structure is
 
209
   copied to each child's state to be the initial value of the INPUT field.  */
 
210
#define ARGP_KEY_INIT           0x1000003
 
211
/* Use after all other keys, including SUCCESS & END.  */
 
212
#define ARGP_KEY_FINI           0x1000007
 
213
/* Passed in when parsing has successfully been completed (even if there are
 
214
   still arguments remaining).  */
 
215
#define ARGP_KEY_SUCCESS        0x1000004
 
216
/* Passed in if an error occurs.  */
 
217
#define ARGP_KEY_ERROR          0x1000005
 
218
 
 
219
/* An argp structure contains a set of options declarations, a function to
 
220
   deal with parsing one, documentation string, a possible vector of child
 
221
   argp's, and perhaps a function to filter help output.  When actually
 
222
   parsing options, getopt is called with the union of all the argp
 
223
   structures chained together through their CHILD pointers, with conflicts
 
224
   being resolved in favor of the first occurrence in the chain.  */
 
225
struct argp
 
226
{
 
227
  /* An array of argp_option structures, terminated by an entry with both
 
228
     NAME and KEY having a value of 0.  */
 
229
  const struct argp_option *options;
 
230
 
 
231
  /* What to do with an option from this structure.  KEY is the key
 
232
     associated with the option, and ARG is any associated argument (NULL if
 
233
     none was supplied).  If KEY isn't understood, ARGP_ERR_UNKNOWN should be
 
234
     returned.  If a non-zero, non-ARGP_ERR_UNKNOWN value is returned, then
 
235
     parsing is stopped immediately, and that value is returned from
 
236
     argp_parse().  For special (non-user-supplied) values of KEY, see the
 
237
     ARGP_KEY_ definitions below.  */
 
238
  argp_parser_t parser;
 
239
 
 
240
  /* A string describing what other arguments are wanted by this program.  It
 
241
     is only used by argp_usage to print the `Usage:' message.  If it
 
242
     contains newlines, the strings separated by them are considered
 
243
     alternative usage patterns, and printed on separate lines (lines after
 
244
     the first are prefix by `  or: ' instead of `Usage:').  */
 
245
  const char *args_doc;
 
246
 
 
247
  /* If non-NULL, a string containing extra text to be printed before and
 
248
     after the options in a long help message (separated by a vertical tab
 
249
     `\v' character).
 
250
     Write the initial value as N_("BEFORE-TEXT") "\v" N_("AFTER-TEXT") if
 
251
     you want xgettext to collect the two pieces of text into a POT file.  */
 
252
  const char *doc;
 
253
 
 
254
  /* A vector of argp_children structures, terminated by a member with a 0
 
255
     argp field, pointing to child argps should be parsed with this one.  Any
 
256
     conflicts are resolved in favor of this argp, or early argps in the
 
257
     CHILDREN list.  This field is useful if you use libraries that supply
 
258
     their own argp structure, which you want to use in conjunction with your
 
259
     own.  */
 
260
  const struct argp_child *children;
 
261
 
 
262
  /* If non-zero, this should be a function to filter the output of help
 
263
     messages.  KEY is either a key from an option, in which case TEXT is
 
264
     that option's help text, or a special key from the ARGP_KEY_HELP_
 
265
     defines, below, describing which other help text TEXT is.  The function
 
266
     should return either TEXT, if it should be used as-is, a replacement
 
267
     string, which should be malloced, and will be freed by argp, or NULL,
 
268
     meaning `print nothing'.  The value for TEXT is *after* any translation
 
269
     has been done, so if any of the replacement text also needs translation,
 
270
     that should be done by the filter function.  INPUT is either the input
 
271
     supplied to argp_parse, or NULL, if argp_help was called directly.  */
 
272
  char *(*help_filter) (int __key, const char *__text, void *__input);
 
273
 
 
274
  /* If non-zero the strings used in the argp library are translated using
 
275
     the domain described by this string.  Otherwise the currently installed
 
276
     default domain is used.  */
 
277
  const char *argp_domain;
 
278
};
 
279
 
 
280
/* Possible KEY arguments to a help filter function.  */
 
281
#define ARGP_KEY_HELP_PRE_DOC   0x2000001 /* Help text preceeding options. */
 
282
#define ARGP_KEY_HELP_POST_DOC  0x2000002 /* Help text following options. */
 
283
#define ARGP_KEY_HELP_HEADER    0x2000003 /* Option header string. */
 
284
#define ARGP_KEY_HELP_EXTRA     0x2000004 /* After all other documentation;
 
285
                                             TEXT is NULL for this key.  */
 
286
/* Explanatory note emitted when duplicate option arguments have been
 
287
   suppressed.  */
 
288
#define ARGP_KEY_HELP_DUP_ARGS_NOTE 0x2000005
 
289
#define ARGP_KEY_HELP_ARGS_DOC  0x2000006 /* Argument doc string.  */
 
290
 
 
291
/* When an argp has a non-zero CHILDREN field, it should point to a vector of
 
292
   argp_child structures, each of which describes a subsidiary argp.  */
 
293
struct argp_child
 
294
{
 
295
  /* The child parser.  */
 
296
  const struct argp *argp;
 
297
 
 
298
  /* Flags for this child.  */
 
299
  int flags;
 
300
 
 
301
  /* If non-zero, an optional header to be printed in help output before the
 
302
     child options.  As a side-effect, a non-zero value forces the child
 
303
     options to be grouped together; to achieve this effect without actually
 
304
     printing a header string, use a value of "".  */
 
305
  const char *header;
 
306
 
 
307
  /* Where to group the child options relative to the other (`consolidated')
 
308
     options in the parent argp; the values are the same as the GROUP field
 
309
     in argp_option structs, but all child-groupings follow parent options at
 
310
     a particular group level.  If both this field and HEADER are zero, then
 
311
     they aren't grouped at all, but rather merged with the parent options
 
312
     (merging the child's grouping levels with the parents).  */
 
313
  int group;
 
314
};
 
315
 
 
316
/* Parsing state.  This is provided to parsing functions called by argp,
 
317
   which may examine and, as noted, modify fields.  */
 
318
struct argp_state
 
319
{
 
320
  /* The top level ARGP being parsed.  */
 
321
  const struct argp *root_argp;
 
322
 
 
323
  /* The argument vector being parsed.  May be modified.  */
 
324
  int argc;
 
325
  char **argv;
 
326
 
 
327
  /* The index in ARGV of the next arg that to be parsed.  May be modified. */
 
328
  int next;
 
329
 
 
330
  /* The flags supplied to argp_parse.  May be modified.  */
 
331
  unsigned flags;
 
332
 
 
333
  /* While calling a parsing function with a key of ARGP_KEY_ARG, this is the
 
334
     number of the current arg, starting at zero, and incremented after each
 
335
     such call returns.  At all other times, this is the number of such
 
336
     arguments that have been processed.  */
 
337
  unsigned arg_num;
 
338
 
 
339
  /* If non-zero, the index in ARGV of the first argument following a special
 
340
     `--' argument (which prevents anything following being interpreted as an
 
341
     option).  Only set once argument parsing has proceeded past this point. */
 
342
  int quoted;
 
343
 
 
344
  /* An arbitrary pointer passed in from the user.  */
 
345
  void *input;
 
346
  /* Values to pass to child parsers.  This vector will be the same length as
 
347
     the number of children for the current parser.  */
 
348
  void **child_inputs;
 
349
 
 
350
  /* For the parser's use.  Initialized to 0.  */
 
351
  void *hook;
 
352
 
 
353
  /* The name used when printing messages.  This is initialized to ARGV[0],
 
354
     or PROGRAM_INVOCATION_NAME if that is unavailable.  */
 
355
  char *name;
 
356
 
 
357
  /* Streams used when argp prints something.  */
 
358
  FILE *err_stream;             /* For errors; initialized to stderr. */
 
359
  FILE *out_stream;             /* For information; initialized to stdout. */
 
360
 
 
361
  void *pstate;                 /* Private, for use by argp.  */
 
362
};
 
363
 
 
364
/* Flags for argp_parse (note that the defaults are those that are
 
365
   convenient for program command line parsing): */
 
366
 
 
367
/* Don't ignore the first element of ARGV.  Normally (and always unless
 
368
   ARGP_NO_ERRS is set) the first element of the argument vector is
 
369
   skipped for option parsing purposes, as it corresponds to the program name
 
370
   in a command line.  */
 
371
#define ARGP_PARSE_ARGV0  0x01
 
372
 
 
373
/* Don't print error messages for unknown options to stderr; unless this flag
 
374
   is set, ARGP_PARSE_ARGV0 is ignored, as ARGV[0] is used as the program
 
375
   name in the error messages.  This flag implies ARGP_NO_EXIT (on the
 
376
   assumption that silent exiting upon errors is bad behaviour).  */
 
377
#define ARGP_NO_ERRS    0x02
 
378
 
 
379
/* Don't parse any non-option args.  Normally non-option args are parsed by
 
380
   calling the parse functions with a key of ARGP_KEY_ARG, and the actual arg
 
381
   as the value.  Since it's impossible to know which parse function wants to
 
382
   handle it, each one is called in turn, until one returns 0 or an error
 
383
   other than ARGP_ERR_UNKNOWN; if an argument is handled by no one, the
 
384
   argp_parse returns prematurely (but with a return value of 0).  If all
 
385
   args have been parsed without error, all parsing functions are called one
 
386
   last time with a key of ARGP_KEY_END.  This flag needn't normally be set,
 
387
   as the normal behavior is to stop parsing as soon as some argument can't
 
388
   be handled.  */
 
389
#define ARGP_NO_ARGS    0x04
 
390
 
 
391
/* Parse options and arguments in the same order they occur on the command
 
392
   line -- normally they're rearranged so that all options come first. */
 
393
#define ARGP_IN_ORDER   0x08
 
394
 
 
395
/* Don't provide the standard long option --help, which causes usage and
 
396
      option help information to be output to stdout, and exit (0) called. */
 
397
#define ARGP_NO_HELP    0x10
 
398
 
 
399
/* Don't exit on errors (they may still result in error messages).  */
 
400
#define ARGP_NO_EXIT    0x20
 
401
 
 
402
/* Use the gnu getopt `long-only' rules for parsing arguments.  */
 
403
#define ARGP_LONG_ONLY  0x40
 
404
 
 
405
/* Turns off any message-printing/exiting options.  */
 
406
#define ARGP_SILENT    (ARGP_NO_EXIT | ARGP_NO_ERRS | ARGP_NO_HELP)
 
407
 
 
408
/* Parse the options strings in ARGC & ARGV according to the options in ARGP.
 
409
   FLAGS is one of the ARGP_ flags above.  If ARG_INDEX is non-NULL, the
 
410
   index in ARGV of the first unparsed option is returned in it.  If an
 
411
   unknown option is present, ARGP_ERR_UNKNOWN is returned; if some parser
 
412
   routine returned a non-zero value, it is returned; otherwise 0 is
 
413
   returned.  This function may also call exit unless the ARGP_NO_HELP flag
 
414
   is set.  INPUT is a pointer to a value to be passed in to the parser.  */
 
415
extern error_t argp_parse (const struct argp *__restrict __argp,
 
416
                           int /*argc*/, char **__restrict /*argv*/,
 
417
                           unsigned __flags, int *__restrict __arg_index,
 
418
                           void *__restrict __input);
 
419
extern error_t __argp_parse (const struct argp *__restrict __argp,
 
420
                             int /*argc*/, char **__restrict /*argv*/,
 
421
                             unsigned __flags, int *__restrict __arg_index,
 
422
                             void *__restrict __input);
 
423
 
 
424
/* Global variables.  */
 
425
 
 
426
/* GNULIB makes sure both program_invocation_name and
 
427
   program_invocation_short_name are available */
 
428
#ifdef GNULIB_PROGRAM_INVOCATION_NAME
 
429
extern char *program_invocation_name;
 
430
# undef HAVE_DECL_PROGRAM_INVOCATION_NAME
 
431
# define HAVE_DECL_PROGRAM_INVOCATION_NAME 1
 
432
#endif
 
433
 
 
434
#ifdef GNULIB_PROGRAM_INVOCATION_SHORT_NAME
 
435
extern char *program_invocation_short_name;
 
436
# undef HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME
 
437
# define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1
 
438
#endif
 
439
 
 
440
/* If defined or set by the user program to a non-zero value, then a default
 
441
   option --version is added (unless the ARGP_NO_HELP flag is used), which
 
442
   will print this string followed by a newline and exit (unless the
 
443
   ARGP_NO_EXIT flag is used).  Overridden by ARGP_PROGRAM_VERSION_HOOK.  */
 
444
extern const char *argp_program_version;
 
445
 
 
446
/* If defined or set by the user program to a non-zero value, then a default
 
447
   option --version is added (unless the ARGP_NO_HELP flag is used), which
 
448
   calls this function with a stream to print the version to and a pointer to
 
449
   the current parsing state, and then exits (unless the ARGP_NO_EXIT flag is
 
450
   used).  This variable takes precedent over ARGP_PROGRAM_VERSION.  */
 
451
extern void (*argp_program_version_hook) (FILE *__restrict __stream,
 
452
                                          struct argp_state *__restrict
 
453
                                          __state);
 
454
 
 
455
/* If defined or set by the user program, it should point to string that is
 
456
   the bug-reporting address for the program.  It will be printed by
 
457
   argp_help if the ARGP_HELP_BUG_ADDR flag is set (as it is by various
 
458
   standard help messages), embedded in a sentence that says something like
 
459
   `Report bugs to ADDR.'.  */
 
460
extern const char *argp_program_bug_address;
 
461
 
 
462
/* The exit status that argp will use when exiting due to a parsing error.
 
463
   If not defined or set by the user program, this defaults to EX_USAGE from
 
464
   <sysexits.h>.  */
 
465
extern error_t argp_err_exit_status;
 
466
 
 
467
/* Flags for argp_help.  */
 
468
#define ARGP_HELP_USAGE         0x01 /* a Usage: message. */
 
469
#define ARGP_HELP_SHORT_USAGE   0x02 /*  " but don't actually print options. */
 
470
#define ARGP_HELP_SEE           0x04 /* a `Try ... for more help' message. */
 
471
#define ARGP_HELP_LONG          0x08 /* a long help message. */
 
472
#define ARGP_HELP_PRE_DOC       0x10 /* doc string preceding long help.  */
 
473
#define ARGP_HELP_POST_DOC      0x20 /* doc string following long help.  */
 
474
#define ARGP_HELP_DOC           (ARGP_HELP_PRE_DOC | ARGP_HELP_POST_DOC)
 
475
#define ARGP_HELP_BUG_ADDR      0x40 /* bug report address */
 
476
#define ARGP_HELP_LONG_ONLY     0x80 /* modify output appropriately to
 
477
                                        reflect ARGP_LONG_ONLY mode.  */
 
478
 
 
479
/* These ARGP_HELP flags are only understood by argp_state_help.  */
 
480
#define ARGP_HELP_EXIT_ERR      0x100 /* Call exit(1) instead of returning.  */
 
481
#define ARGP_HELP_EXIT_OK       0x200 /* Call exit(0) instead of returning.  */
 
482
 
 
483
/* The standard thing to do after a program command line parsing error, if an
 
484
   error message has already been printed.  */
 
485
#define ARGP_HELP_STD_ERR \
 
486
  (ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR)
 
487
/* The standard thing to do after a program command line parsing error, if no
 
488
   more specific error message has been printed.  */
 
489
#define ARGP_HELP_STD_USAGE \
 
490
  (ARGP_HELP_SHORT_USAGE | ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR)
 
491
/* The standard thing to do in response to a --help option.  */
 
492
#define ARGP_HELP_STD_HELP \
 
493
  (ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG | ARGP_HELP_EXIT_OK \
 
494
   | ARGP_HELP_DOC | ARGP_HELP_BUG_ADDR)
 
495
 
 
496
/* Output a usage message for ARGP to STREAM.  FLAGS are from the set
 
497
   ARGP_HELP_*.  */
 
498
extern void argp_help (const struct argp *__restrict __argp,
 
499
                       FILE *__restrict __stream,
 
500
                       unsigned __flags, char *__restrict __name);
 
501
extern void __argp_help (const struct argp *__restrict __argp,
 
502
                         FILE *__restrict __stream, unsigned __flags,
 
503
                         char *__name);
 
504
 
 
505
/* The following routines are intended to be called from within an argp
 
506
   parsing routine (thus taking an argp_state structure as the first
 
507
   argument).  They may or may not print an error message and exit, depending
 
508
   on the flags in STATE -- in any case, the caller should be prepared for
 
509
   them *not* to exit, and should return an appropiate error after calling
 
510
   them.  [argp_usage & argp_error should probably be called argp_state_...,
 
511
   but they're used often enough that they should be short]  */
 
512
 
 
513
/* Output, if appropriate, a usage message for STATE to STREAM.  FLAGS are
 
514
   from the set ARGP_HELP_*.  */
 
515
extern void argp_state_help (const struct argp_state *__restrict __state,
 
516
                             FILE *__restrict __stream,
 
517
                             unsigned int __flags);
 
518
extern void __argp_state_help (const struct argp_state *__restrict __state,
 
519
                               FILE *__restrict __stream,
 
520
                               unsigned int __flags);
 
521
 
 
522
#if _LIBC || !defined __USE_EXTERN_INLINES
 
523
/* Possibly output the standard usage message for ARGP to stderr and exit.  */
 
524
extern void argp_usage (const struct argp_state *__state);
 
525
extern void __argp_usage (const struct argp_state *__state);
 
526
#endif
 
527
 
 
528
/* If appropriate, print the printf string FMT and following args, preceded
 
529
   by the program name and `:', to stderr, and followed by a `Try ... --help'
 
530
   message, then exit (1).  */
 
531
extern void argp_error (const struct argp_state *__restrict __state,
 
532
                        const char *__restrict __fmt, ...)
 
533
     __attribute__ ((__format__ (__printf__, 2, 3)));
 
534
extern void __argp_error (const struct argp_state *__restrict __state,
 
535
                          const char *__restrict __fmt, ...)
 
536
     __attribute__ ((__format__ (__printf__, 2, 3)));
 
537
 
 
538
/* Similar to the standard gnu error-reporting function error(), but will
 
539
   respect the ARGP_NO_EXIT and ARGP_NO_ERRS flags in STATE, and will print
 
540
   to STATE->err_stream.  This is useful for argument parsing code that is
 
541
   shared between program startup (when exiting is desired) and runtime
 
542
   option parsing (when typically an error code is returned instead).  The
 
543
   difference between this function and argp_error is that the latter is for
 
544
   *parsing errors*, and the former is for other problems that occur during
 
545
   parsing but don't reflect a (syntactic) problem with the input.  */
 
546
extern void argp_failure (const struct argp_state *__restrict __state,
 
547
                          int __status, int __errnum,
 
548
                          const char *__restrict __fmt, ...)
 
549
     __attribute__ ((__format__ (__printf__, 4, 5)));
 
550
extern void __argp_failure (const struct argp_state *__restrict __state,
 
551
                            int __status, int __errnum,
 
552
                            const char *__restrict __fmt, ...)
 
553
     __attribute__ ((__format__ (__printf__, 4, 5)));
 
554
 
 
555
#if _LIBC || !defined __USE_EXTERN_INLINES
 
556
/* Returns true if the option OPT is a valid short option.  */
 
557
extern int _option_is_short (const struct argp_option *__opt) __THROW;
 
558
extern int __option_is_short (const struct argp_option *__opt) __THROW;
 
559
 
 
560
/* Returns true if the option OPT is in fact the last (unused) entry in an
 
561
   options array.  */
 
562
extern int _option_is_end (const struct argp_option *__opt) __THROW;
 
563
extern int __option_is_end (const struct argp_option *__opt) __THROW;
 
564
#endif
 
565
 
 
566
/* Return the input field for ARGP in the parser corresponding to STATE; used
 
567
   by the help routines.  */
 
568
extern void *_argp_input (const struct argp *__restrict __argp,
 
569
                          const struct argp_state *__restrict __state)
 
570
     __THROW;
 
571
extern void *__argp_input (const struct argp *__restrict __argp,
 
572
                           const struct argp_state *__restrict __state)
 
573
     __THROW;
 
574
 
 
575
#ifdef __USE_EXTERN_INLINES
 
576
 
 
577
# if !_LIBC
 
578
#  define __argp_usage argp_usage
 
579
#  define __argp_state_help argp_state_help
 
580
#  define __option_is_short _option_is_short
 
581
#  define __option_is_end _option_is_end
 
582
# endif
 
583
 
 
584
# ifndef ARGP_EI
 
585
#  ifdef __GNUC__
 
586
    /* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
 
587
       inline semantics, unless -fgnu89-inline is used.  It defines a macro
 
588
       __GNUC_STDC_INLINE__ to indicate this situation or a macro
 
589
       __GNUC_GNU_INLINE__ to indicate the opposite situation.
 
590
       GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline
 
591
       semantics but warns, unless -fgnu89-inline is used:
 
592
         warning: C99 inline functions are not supported; using GNU89
 
593
         warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute
 
594
       It defines a macro __GNUC_GNU_INLINE__ to indicate this situation.  */
 
595
#   if defined __GNUC_STDC_INLINE__
 
596
#    define ARGP_EI __inline__
 
597
#   elif defined __GNUC_GNU_INLINE__
 
598
#    define ARGP_EI extern __inline__ __attribute__ ((__gnu_inline__))
 
599
#   else
 
600
#    define ARGP_EI extern __inline__
 
601
#   endif
 
602
#  else
 
603
    /* With other compilers, assume the ISO C99 meaning of 'inline', if
 
604
       the compiler supports 'inline' at all.  */
 
605
#   define ARGP_EI inline
 
606
#  endif
 
607
# endif
 
608
 
 
609
ARGP_EI void
 
610
__argp_usage (const struct argp_state *__state)
 
611
{
 
612
  __argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE);
 
613
}
 
614
 
 
615
ARGP_EI int
 
616
__NTH (__option_is_short (const struct argp_option *__opt))
 
617
{
 
618
  if (__opt->flags & OPTION_DOC)
 
619
    return 0;
 
620
  else
 
621
    {
 
622
      int __key = __opt->key;
 
623
      return __key > 0 && __key <= UCHAR_MAX && isprint (__key);
 
624
    }
 
625
}
 
626
 
 
627
ARGP_EI int
 
628
__NTH (__option_is_end (const struct argp_option *__opt))
 
629
{
 
630
  return !__opt->key && !__opt->name && !__opt->doc && !__opt->group;
 
631
}
 
632
 
 
633
# if !_LIBC
 
634
#  undef __argp_usage
 
635
#  undef __argp_state_help
 
636
#  undef __option_is_short
 
637
#  undef __option_is_end
 
638
# endif
 
639
#endif /* Use extern inlines.  */
 
640
 
 
641
#ifdef  __cplusplus
 
642
}
 
643
#endif
 
644
 
 
645
#endif /* argp.h */