[parseopt] Allow for pre-initialised option sets

Signed-off-by: Michael Brown <mcb30@ipxe.org>
pull/5/head
Michael Brown 2011-04-24 15:19:31 +01:00
parent 8e984f35e0
commit 3ca5656208
2 changed files with 24 additions and 7 deletions

View File

@ -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 );
}

View File

@ -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 );