From 3ca5656208d532b74d7ceecae1760d118e96a172 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Sun, 24 Apr 2011 15:19:31 +0100 Subject: [parseopt] Allow for pre-initialised option sets Signed-off-by: Michael Brown --- src/core/parseopt.c | 29 ++++++++++++++++++++++------- src/include/ipxe/parseopt.h | 2 ++ 2 files changed, 24 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/core/parseopt.c b/src/core/parseopt.c index 24a576244..a399d221d 100644 --- a/src/core/parseopt.c +++ b/src/core/parseopt.c @@ -152,16 +152,16 @@ void print_usage ( struct command_descriptor *cmd, char **argv ) { } /** - * Parse command-line options + * Reparse command-line options * * @v argc Argument count * @v argv Argument list * @v cmd Command descriptor - * @v opts Options + * @v opts Options (already initialised with default values) * @ret rc Return status code */ -int parse_options ( int argc, char **argv, struct command_descriptor *cmd, - void *opts ) { +int reparse_options ( int argc, char **argv, struct command_descriptor *cmd, + void *opts ) { struct option longopts[ cmd->num_options + 1 /* help */ + 1 /* end */ ]; char shortopts[ cmd->num_options * 3 /* possible "::" */ + 1 /* "h" */ + 1 /* NUL */ ]; @@ -193,9 +193,6 @@ int parse_options ( int argc, char **argv, struct command_descriptor *cmd, DBGC ( cmd, "Command \"%s\" has options \"%s\", %d-%d args, len %d\n", argv[0], shortopts, cmd->min_args, cmd->max_args, cmd->len ); - /* Clear options */ - memset ( opts, 0, cmd->len ); - /* Parse options */ while ( ( c = getopt_long ( argc, argv, shortopts, longopts, NULL ) ) >= 0 ) { @@ -233,3 +230,21 @@ int parse_options ( int argc, char **argv, struct command_descriptor *cmd, return 0; } + +/** + * Parse command-line options + * + * @v argc Argument count + * @v argv Argument list + * @v cmd Command descriptor + * @v opts Options (may be uninitialised) + * @ret rc Return status code + */ +int parse_options ( int argc, char **argv, struct command_descriptor *cmd, + void *opts ) { + + /* Clear options */ + memset ( opts, 0, cmd->len ); + + return reparse_options ( argc, argv, cmd, opts ); +} diff --git a/src/include/ipxe/parseopt.h b/src/include/ipxe/parseopt.h index eed40b769..8c456a647 100644 --- a/src/include/ipxe/parseopt.h +++ b/src/include/ipxe/parseopt.h @@ -120,6 +120,8 @@ extern int parse_netdev ( const char *text, struct net_device **netdev ); extern int parse_image ( const char *text, struct image **image ); extern int parse_flag ( const char *text __unused, int *flag ); extern void print_usage ( struct command_descriptor *cmd, char **argv ); +extern int reparse_options ( int argc, char **argv, + struct command_descriptor *cmd, void *opts ); extern int parse_options ( int argc, char **argv, struct command_descriptor *cmd, void *opts ); -- cgit v1.2.3-55-g7522