source: bootcd/isolinux/syslinux-6.03/gpxe/src/include/getopt.h @ dd1be7c

Last change on this file since dd1be7c was e16e8f2, checked in by Edwin Eefting <edwin@datux.nl>, 3 years ago

bootstuff

  • Property mode set to 100644
File size: 2.3 KB
Line 
1#ifndef _GETOPT_H
2#define _GETOPT_H
3
4/** @file
5 *
6 * Parse command-line options
7 *
8 */
9
10FILE_LICENCE ( GPL2_OR_LATER );
11
12#include <stddef.h>
13
14enum getopt_argument_requirement {
15        /** Option does not take an argument */
16        no_argument = 0,
17        /** Option requires an argument */
18        required_argument = 1,
19        /** Option may have an argument */
20        optional_argument = 2,
21};
22
23/** A long option, as used for getopt_long() */
24struct option {
25        /** Long name of this option */
26        const char *name;
27        /** Option takes an argument
28         *
29         * Must be one of @c no_argument, @c required_argument, or @c
30         * optional_argument.
31         */
32        int has_arg;
33        /** Location into which to store @c val, or NULL.
34         *
35         * See the description for @c val for more details.
36         */
37        int *flag;
38        /** Value to return
39         *
40         * If @c flag is NULL, then this is the value that will be
41         * returned by getopt_long() when this option is found, and
42         * should therefore be set to the equivalent short option
43         * character.
44         *
45         * If @c flag is non-NULL, then this value will be written to
46         * the location pointed to by @flag, and getopt_long() will
47         * return 0.
48         */
49        int val;
50};
51
52extern char *optarg;
53extern int optind;
54extern int nextchar;
55extern int optopt;
56
57extern int getopt_long ( int argc, char * const argv[], const char *optstring,
58                         const struct option *longopts, int *longindex );
59
60/**
61 * Parse command-line options
62 *
63 * @v argv              Argument count
64 * @v argv              Argument list
65 * @v optstring         Option specification string
66 * @ret option          Option found, or -1 for no more options
67 *
68 * See getopt_long() for full details.
69 */
70static inline int getopt ( int argc, char * const argv[],
71                           const char *optstring ) {
72        static const struct option no_options[] = {
73                { NULL, 0, NULL, 0 }
74        };
75        return getopt_long ( argc, argv, optstring, no_options, NULL );
76}
77
78/**
79 * Reset getopt() internal state
80 *
81 * Due to a limitation of the POSIX getopt() API, it is necessary to
82 * add a call to reset_getopt() before each set of calls to getopt()
83 * or getopt_long().  This arises because POSIX assumes that each
84 * process will parse command line arguments no more than once; this
85 * assumption is not valid within Etherboot.  We work around the
86 * limitation by arranging for execv() to call reset_getopt() before
87 * executing the command.
88 */
89static inline void reset_getopt ( void ) {
90        optind = 1;
91        nextchar = 0;
92}
93
94#endif /* _GETOPT_H */
Note: See TracBrowser for help on using the repository browser.