diff options
Diffstat (limited to 'src/hci')
| -rw-r--r-- | src/hci/commands/nvo_cmd.c | 23 | ||||
| -rw-r--r-- | src/hci/commands/pci_cmd.c | 4 | ||||
| -rw-r--r-- | src/hci/tui/settings_ui.c | 59 |
3 files changed, 41 insertions, 45 deletions
diff --git a/src/hci/commands/nvo_cmd.c b/src/hci/commands/nvo_cmd.c index 3fd684d04..e63dab08e 100644 --- a/src/hci/commands/nvo_cmd.c +++ b/src/hci/commands/nvo_cmd.c @@ -58,8 +58,10 @@ static int show_exec ( int argc, char **argv ) { struct show_options opts; struct named_setting setting; struct settings *origin; + struct setting fetched; char name_buf[32]; char *value; + int len; int rc; /* Parse options */ @@ -71,19 +73,16 @@ static int show_exec ( int argc, char **argv ) { goto err_parse_setting; /* Fetch formatted setting value */ - if ( ( rc = fetchf_setting_copy ( setting.settings, &setting.setting, - &value ) ) < 0 ) { + if ( ( len = fetchf_setting_copy ( setting.settings, &setting.setting, + &origin, &fetched, &value ) ) < 0 ) { + rc = len; printf ( "Could not find \"%s\": %s\n", setting.setting.name, strerror ( rc ) ); goto err_fetchf; } - /* Fetch origin and format fully-qualified name */ - origin = fetch_setting_origin ( setting.settings, &setting.setting ); - assert ( origin != NULL ); - setting_name ( origin, &setting.setting, name_buf, sizeof ( name_buf )); - /* Print setting value */ + setting_name ( origin, &fetched, name_buf, sizeof ( name_buf ) ); printf ( "%s = %s\n", name_buf, value ); /* Success */ @@ -234,7 +233,8 @@ static int read_value ( struct named_setting *setting, char **args __unused, /* Read existing value, treating errors as equivalent to an * empty initial setting. */ - fetchf_setting_copy ( setting->settings, &setting->setting, &existing ); + fetchf_setting_copy ( setting->settings, &setting->setting, + NULL, &setting->setting, &existing ); /* Read new value */ if ( ( rc = readline_history ( NULL, existing, NULL, value ) ) != 0 ) @@ -294,12 +294,11 @@ static int inc_exec ( int argc, char **argv ) { ( ( rc = parse_integer ( argv[ optind + 1 ], &increment ) ) != 0)) goto err_parse_increment; - /* Fetch existing setting value, if any, allowing for the fact - * that numeric settings are big-endian and variable-length. + /* Read existing value, treating errors as equivalent to a + * zero-valued :int32 initial setting. */ if ( ( rc = fetchn_setting ( setting.settings, &setting.setting, - &value ) ) != 0 ) { - /* Treat as a non-existent :int32 setting with a zero value */ + NULL, &setting.setting, &value ) ) != 0 ) { value = 0; if ( ! setting.setting.type ) setting.setting.type = &setting_type_int32; diff --git a/src/hci/commands/pci_cmd.c b/src/hci/commands/pci_cmd.c index f2d695697..f5145fb35 100644 --- a/src/hci/commands/pci_cmd.c +++ b/src/hci/commands/pci_cmd.c @@ -68,8 +68,8 @@ static int pciscan_exec ( int argc, char **argv ) { goto err_parse_setting; /* Determine starting bus:dev.fn address */ - if ( ( len = fetch_uint_setting ( setting.settings, &setting.setting, - &prev ) ) < 0 ) { + if ( ( len = fetchn_setting ( setting.settings, &setting.setting, + NULL, &setting.setting, &prev ) ) < 0 ) { /* Setting not yet defined: start searching from 00:00.0 */ prev = 0; } else { diff --git a/src/hci/tui/settings_ui.c b/src/hci/tui/settings_ui.c index 77ef8108e..8fe13ad8b 100644 --- a/src/hci/tui/settings_ui.c +++ b/src/hci/tui/settings_ui.c @@ -72,11 +72,16 @@ struct setting_row_widget { * Valid only for rows that lead to new settings blocks. */ struct settings *settings; + /** Configuration setting origin + * + * Valid only for rows that represent individual settings. + */ + struct settings *origin; /** Configuration setting * * Valid only for rows that represent individual settings. */ - struct setting *setting; + struct setting setting; /** Screen row */ unsigned int row; /** Screen column */ @@ -85,8 +90,6 @@ struct setting_row_widget { struct edit_box editbox; /** Editing in progress flag */ int editing; - /** Setting originates from this block flag */ - int originates_here; /** Buffer for setting's value */ char value[256]; /* enough size for a DHCP string */ }; @@ -115,7 +118,6 @@ struct setting_widget { static unsigned int select_setting_row ( struct setting_widget *widget, unsigned int index ) { struct settings *settings; - struct settings *origin; struct setting *setting; unsigned int count = 0; @@ -147,18 +149,13 @@ static unsigned int select_setting_row ( struct setting_widget *widget, if ( ! setting_applies ( widget->settings, setting ) ) continue; if ( count++ == index ) { - widget->row.setting = setting; - /* Read current setting value */ - fetchf_setting ( widget->settings, widget->row.setting, + /* Read current setting value and origin */ + fetchf_setting ( widget->settings, setting, + &widget->row.origin, + &widget->row.setting, widget->row.value, sizeof ( widget->row.value ) ); - - /* Check setting's origin */ - origin = fetch_setting_origin ( widget->settings, - widget->row.setting ); - widget->row.originates_here = - ( origin == widget->settings ); } } @@ -209,7 +206,7 @@ static void draw_setting_row ( struct setting_widget *widget ) { /* Construct dot-padded name */ memset ( text.name, '.', sizeof ( text.name ) ); - string_copy ( text.name, widget->row.setting->name, + string_copy ( text.name, widget->row.setting.name, sizeof ( text.name ) ); /* Construct space-padded value */ @@ -222,8 +219,10 @@ static void draw_setting_row ( struct setting_widget *widget ) { } /* Print row */ - if ( widget->row.originates_here || widget->row.settings ) + if ( ( widget->row.origin == widget->settings ) || + ( widget->row.settings != NULL ) ) { attron ( A_BOLD ); + } mvprintw ( widget->row.row, widget->row.col, "%s", text.start ); attroff ( A_BOLD ); move ( widget->row.row, widget->row.col + curs_offset ); @@ -237,7 +236,7 @@ static void draw_setting_row ( struct setting_widget *widget ) { * @ret key Key returned to application, or zero */ static int edit_setting ( struct setting_widget *widget, int key ) { - assert ( widget->row.setting != NULL ); + assert ( widget->row.setting.name != NULL ); widget->row.editing = 1; return edit_editbox ( &widget->row.editbox, key ); } @@ -248,8 +247,8 @@ static int edit_setting ( struct setting_widget *widget, int key ) { * @v widget Setting widget */ static int save_setting ( struct setting_widget *widget ) { - assert ( widget->row.setting != NULL ); - return storef_setting ( widget->settings, widget->row.setting, + assert ( widget->row.setting.name != NULL ); + return storef_setting ( widget->settings, &widget->row.setting, widget->row.value ); } @@ -344,28 +343,26 @@ static void draw_title_row ( struct setting_widget *widget ) { * @v widget Setting widget */ static void draw_info_row ( struct setting_widget *widget ) { - struct settings *origin; char buf[32]; /* Draw nothing unless this row represents a setting */ clearmsg ( INFO_ROW ); clearmsg ( INFO_ROW + 1 ); - if ( ! widget->row.setting ) + if ( ! widget->row.setting.name ) return; /* Determine a suitable setting name */ - origin = fetch_setting_origin ( widget->settings, widget->row.setting ); - if ( ! origin ) - origin = widget->settings; - setting_name ( origin, widget->row.setting, buf, sizeof ( buf ) ); + setting_name ( ( widget->row.origin ? + widget->row.origin : widget->settings ), + &widget->row.setting, buf, sizeof ( buf ) ); /* Draw row */ attron ( A_BOLD ); - msg ( INFO_ROW, "%s - %s", buf, widget->row.setting->description ); + msg ( INFO_ROW, "%s - %s", buf, widget->row.setting.description ); attroff ( A_BOLD ); color_set ( CPAIR_URL, NULL ); msg ( ( INFO_ROW + 1 ), "http://ipxe.org/cfg/%s", - widget->row.setting->name ); + widget->row.setting.name ); color_set ( CPAIR_NORMAL, NULL ); } @@ -384,7 +381,7 @@ static void draw_instruction_row ( struct setting_widget *widget ) { } else { msg ( INSTRUCTION_ROW, "%sCtrl-X - exit configuration utility", - ( widget->row.originates_here ? + ( ( widget->row.origin == widget->settings ) ? "Ctrl-D - delete setting" INSTRUCTION_PAD : "" ) ); } } @@ -479,7 +476,7 @@ static int main_loop ( struct settings *settings ) { if ( widget.row.editing ) { /* Sanity check */ - assert ( widget.row.setting != NULL ); + assert ( widget.row.setting.name != NULL ); /* Redraw edit box */ color_set ( CPAIR_EDIT, NULL ); @@ -530,10 +527,10 @@ static int main_loop ( struct settings *settings ) { move = +widget.num_rows; break; case CTRL_D: - if ( ! widget.row.setting ) + if ( ! widget.row.setting.name ) break; if ( ( rc = delete_setting ( widget.settings, - widget.row.setting ) ) != 0 ) { + &widget.row.setting ) ) != 0 ) { alert ( " %s ", strerror ( rc ) ); } select_setting_row ( &widget, widget.current ); @@ -550,7 +547,7 @@ static int main_loop ( struct settings *settings ) { } /* Fall through */ default: - if ( widget.row.setting ) { + if ( widget.row.setting.name ) { edit_setting ( &widget, key ); redraw = 1; } |
