#ifndef _GETOPT_H #define _GETOPT_H /** @file * * Parse command-line options * */ #include enum getopt_argument_requirement { /** Option does not take an argument */ no_argument = 0, /** Option requires an argument */ required_argument = 1, /** Option may have an argument */ optional_argument = 2, }; /** A long option, as used for getopt_long() */ struct option { /** Long name of this option */ const char *name; /** Option takes an argument * * Must be one of @c no_argument, @c required_argument, or @c * optional_argument. */ int has_arg; /** Location into which to store @c val, or NULL. * * See the description for @c val for more details. */ int *flag; /** Value to return * * If @c flag is NULL, then this is the value that will be * returned by getopt_long() when this option is found, and * should therefore be set to the equivalent short option * character. * * If @c flag is non-NULL, then this value will be written to * the location pointed to by @flag, and getopt_long() will * return 0. */ int val; }; extern char *optarg; extern int optind; extern int optopt; extern void reset_getopt(); extern int getopt_long ( int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex ); /** * Parse command-line options * * @v argv Argument count * @v argv Argument list * @v optstring Option specification string * @ret option Option found, or -1 for no more options * * See getopt_long() for full details. */ static inline int getopt ( int argc, char * const argv[], const char *optstring ) { static const struct option no_options[] = { { NULL, 0, NULL, 0 } }; return getopt_long ( argc, argv, optstring, no_options, NULL ); } #endif /* _GETOPT_H */