]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[settings] Display canonical setting name in "config" user interface
authorMichael Brown <mcb30@ipxe.org>
Tue, 22 Mar 2011 21:24:54 +0000 (21:24 +0000)
committerMichael Brown <mcb30@ipxe.org>
Tue, 22 Mar 2011 21:26:05 +0000 (21:26 +0000)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/core/settings.c
src/hci/tui/settings_ui.c
src/include/ipxe/settings.h

index 536a68d46589359485247a016608729ce7b00248..acd093f267fbe5b961ce49e62f3eca67ba77d88c 100644 (file)
@@ -1060,6 +1060,27 @@ parse_setting_name ( const char *name,
        return 0;
 }
 
+/**
+ * Return full setting name
+ *
+ * @v settings         Settings block, or NULL
+ * @v setting          Setting
+ * @v buf              Buffer
+ * @v len              Length of buffer
+ * @ret len            Length of setting name, or negative error
+ */
+int setting_name ( struct settings *settings, struct setting *setting,
+                  char *buf, size_t len ) {
+       const char *name;
+
+       if ( ! settings )
+               settings = &settings_root;
+
+       name = settings_name ( settings );
+       return snprintf ( buf, len, "%s%s%s:%s", name, ( name[0] ? "/" : "" ),
+                         setting->name, setting->type->name );
+}
+
 /**
  * Parse and store value of named setting
  *
@@ -1101,7 +1122,6 @@ int fetchf_named_setting ( const char *name,
        struct settings *settings;
        struct setting setting;
        struct settings *origin;
-       const char *origin_name;
        char tmp_name[ strlen ( name ) + 1 ];
        int rc;
 
@@ -1118,10 +1138,7 @@ int fetchf_named_setting ( const char *name,
        /* Construct setting name */
        origin = fetch_setting_origin ( settings, &setting );
        assert ( origin != NULL );
-       origin_name = settings_name ( origin );
-       snprintf ( name_buf, name_len, "%s%s%s:%s",
-                  origin_name, ( origin_name[0] ? "/" : "" ),
-                  setting.name, setting.type->name );
+       setting_name ( origin, &setting, name_buf, name_len );
 
        return 0;
 }
index cf92e93bf1115ee70ccbd9fc5ec0e8d065b28445..859a1daf5b3dbc3fa5a41669eac619d169aaf1b2 100644 (file)
@@ -97,7 +97,8 @@ static void vmsg ( unsigned int row, const char *fmt, va_list args ) __nonnull;
 static void msg ( unsigned int row, const char *fmt, ... ) __nonnull;
 static void valert ( const char *fmt, va_list args ) __nonnull;
 static void alert ( const char *fmt, ... ) __nonnull;
-static void draw_info_row ( struct setting *setting ) __nonnull;
+static void draw_info_row ( struct settings *settings,
+                           struct setting *setting ) __nonnull;
 static int main_loop ( struct settings *settings ) __nonnull;
 
 /**
@@ -313,12 +314,23 @@ static void draw_title_row ( void ) {
 /**
  * Draw information row
  *
+ * @v settings         Settings block
  * @v setting          Current configuration setting
  */
-static void draw_info_row ( struct setting *setting ) {
+static void draw_info_row ( struct settings *settings,
+                           struct setting *setting ) {
+       struct settings *origin;
+       char buf[32];
+
+       /* Determine a suitable setting name */
+       origin = fetch_setting_origin ( settings, setting );
+       if ( ! origin )
+               origin = settings;
+       setting_name ( origin, setting, buf, sizeof ( buf ) );
+
        clearmsg ( INFO_ROW );
        attron ( A_BOLD );
-       msg ( INFO_ROW, "%s - %s", setting->name, setting->description );
+       msg ( INFO_ROW, "%s - %s", buf, setting->description );
        attroff ( A_BOLD );
 }
 
@@ -400,7 +412,7 @@ static int main_loop ( struct settings *settings ) {
        
        while ( 1 ) {
                /* Redraw information and instruction rows */
-               draw_info_row ( widget.setting );
+               draw_info_row ( widget.settings, widget.setting );
                draw_instruction_row ( widget.editing );
 
                /* Redraw current setting */
index d251b46e331eff9a76f64cbabdb68eea5c8c3176..724877fe40b4b509682fa3d55c7db67150c560eb 100644 (file)
@@ -251,6 +251,8 @@ extern const char * settings_name ( struct settings *settings );
 extern struct settings * find_settings ( const char *name );
 extern struct setting * find_setting ( const char *name );
 
+extern int setting_name ( struct settings *settings, struct setting *setting,
+                         char *buf, size_t len );
 extern int storef_setting ( struct settings *settings,
                            struct setting *setting,
                            const char *value );