[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:
Michael Brown
2013-11-19 15:34:58 +00:00
parent b0942534eb
commit eaa8615648
3 changed files with 44 additions and 6 deletions

View File

@@ -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,