Annotation of qemu/roms/ipxe/src/include/getopt.h, revision 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.