mirror of
https://github.com/ipxe/ipxe
synced 2025-12-22 13:00:39 +03:00
[settings] Allow for multiple definitions of each predefined setting
Allow for multiple setting definitions with the same name but different scopes and tags. For example, allow for a "filename" setting with default scope and tag value 67 (for DHCPv4) and a corresponding "filename" setting with IPv6 scope and tag value 59 (for DHCPv6). Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -119,6 +119,7 @@ static unsigned int select_setting_row ( struct setting_widget *widget,
|
||||
unsigned int index ) {
|
||||
struct settings *settings;
|
||||
struct setting *setting;
|
||||
struct setting *previous = NULL;
|
||||
unsigned int count = 0;
|
||||
|
||||
/* Initialise structure */
|
||||
@@ -146,11 +147,18 @@ static unsigned int select_setting_row ( struct setting_widget *widget,
|
||||
|
||||
/* Include any applicable settings */
|
||||
for_each_table_entry ( setting, SETTINGS ) {
|
||||
|
||||
/* Skip inapplicable settings */
|
||||
if ( ! setting_applies ( widget->settings, setting ) )
|
||||
continue;
|
||||
if ( count++ == index ) {
|
||||
|
||||
/* Read current setting value and origin */
|
||||
/* Skip duplicate settings */
|
||||
if ( previous && ( setting_cmp ( setting, previous ) == 0 ) )
|
||||
continue;
|
||||
previous = setting;
|
||||
|
||||
/* Read current setting value and origin */
|
||||
if ( count++ == index ) {
|
||||
fetchf_setting ( widget->settings, setting,
|
||||
&widget->row.origin,
|
||||
&widget->row.setting,
|
||||
|
||||
Reference in New Issue
Block a user