]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[parseopt] Allow for pre-initialised option sets
authorMichael Brown <mcb30@ipxe.org>
Sun, 24 Apr 2011 14:19:31 +0000 (15:19 +0100)
committerMichael Brown <mcb30@ipxe.org>
Sun, 24 Apr 2011 14:32:06 +0000 (15:32 +0100)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/core/parseopt.c
src/include/ipxe/parseopt.h

index 24a57624466b18ac290e432fcde385b2e9d21879..a399d221dac2f5cd062d8bad383352b6f1f0b9bd 100644 (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 );
+}
index eed40b76999011aa37559696a8792f800f2bc7c8..8c456a6471502eb8910581cfbc3e1ccba588f229 100644 (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 );