]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[settings] Eliminate call to storef_named_setting() in choose_exec()
authorMichael Brown <mcb30@ipxe.org>
Thu, 18 Jul 2013 14:49:32 +0000 (15:49 +0100)
committerMichael Brown <mcb30@ipxe.org>
Mon, 22 Jul 2013 15:39:20 +0000 (16:39 +0100)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/hci/commands/menu_cmd.c

index 844ad7039aec5e4c55871329c52774f1ece1b8cf..0ad53dbd4c843f5b0f0e0b637577d21182b89e93 100644 (file)
@@ -228,9 +228,9 @@ static struct command_descriptor choose_cmd =
  */
 static int choose_exec ( int argc, char **argv ) {
        struct choose_options opts;
+       struct named_setting setting;
        struct menu *menu;
        struct menu_item *item;
-       const char *setting;
        int rc;
 
        /* Parse options */
@@ -238,7 +238,9 @@ static int choose_exec ( int argc, char **argv ) {
                goto err_parse_options;
 
        /* Parse setting name */
-       setting = argv[optind];
+       if ( ( rc = parse_autovivified_setting ( argv[optind],
+                                                &setting ) ) != 0 )
+               goto err_parse_setting;
 
        /* Identify menu */
        if ( ( rc = parse_menu ( opts.menu, &menu ) ) != 0 )
@@ -248,11 +250,15 @@ static int choose_exec ( int argc, char **argv ) {
        if ( ( rc = show_menu ( menu, opts.timeout, opts.select, &item ) ) != 0)
                goto err_show_menu;
 
+       /* Apply default type if necessary */
+       if ( ! setting.setting.type )
+               setting.setting.type = &setting_type_string;
+
        /* Store setting */
-       if ( ( rc = storef_named_setting ( setting, &setting_type_string,
-                                          item->label ) ) != 0 ) {
+       if ( ( rc = storef_setting ( setting.settings, &setting.setting,
+                                    item->label ) ) != 0 ) {
                printf ( "Could not store \"%s\": %s\n",
-                        setting, strerror ( rc ) );
+                        setting.setting.name, strerror ( rc ) );
                goto err_store;
        }
 
@@ -265,6 +271,7 @@ static int choose_exec ( int argc, char **argv ) {
        if ( ! opts.keep )
                destroy_menu ( menu );
  err_parse_menu:
+ err_parse_setting:
  err_parse_options:
        return rc;
 }