Annotation of qemu/roms/ipxe/src/include/getopt.h, revision 1.1.1.1

1.1       root        1: #ifndef _GETOPT_H
                      2: #define _GETOPT_H
                      3: 
                      4: /** @file
                      5:  *
                      6:  * Parse command-line options
                      7:  *
                      8:  */
                      9: 
                     10: FILE_LICENCE ( GPL2_OR_LATER );
                     11: 
                     12: #include <stddef.h>
                     13: 
                     14: enum 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() */
                     24: struct 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: 
                     52: extern char *optarg;
                     53: extern int optind;
                     54: extern int nextchar;
                     55: extern int optopt;
                     56: 
                     57: extern 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:  */
                     70: static 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:  */
                     89: static inline void reset_getopt ( void ) {
                     90:        optind = 1;
                     91:        nextchar = 0;
                     92: }
                     93: 
                     94: #endif /* _GETOPT_H */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.