diff --git a/src/core/settings.c b/src/core/settings.c index c85ea61d..a0a09d4e 100644 --- a/src/core/settings.c +++ b/src/core/settings.c @@ -295,8 +295,8 @@ struct settings * find_child_settings ( struct settings *parent, * @v name Name within this parent * @ret settings Settings block, or NULL */ -static struct settings * autovivify_child_settings ( struct settings *parent, - const char *name ) { +struct settings * autovivify_child_settings ( struct settings *parent, + const char *name ) { struct { struct autovivified_settings autovivified; char name[ strlen ( name ) + 1 /* NUL */ ]; @@ -356,9 +356,7 @@ const char * settings_name ( struct settings *settings ) { * @ret settings Settings block, or NULL */ static struct settings * -parse_settings_name ( const char *name, - struct settings * ( * get_child ) ( struct settings *, - const char * ) ) { +parse_settings_name ( const char *name, get_child_settings_t get_child ) { struct settings *settings = &settings_root; char name_copy[ strlen ( name ) + 1 ]; char *subname; @@ -1205,12 +1203,8 @@ static struct setting_type * find_setting_type ( const char *name ) { * Note that on success, this function will have modified the original * setting @c name. */ -static int -parse_setting_name ( char *name, - struct settings * ( * get_child ) - ( struct settings *settings, - const char *name ), - struct settings **settings, struct setting *setting ) { +int parse_setting_name ( char *name, get_child_settings_t get_child, + struct settings **settings, struct setting *setting ) { char *settings_name; char *setting_name; char *type_name; diff --git a/src/include/ipxe/settings.h b/src/include/ipxe/settings.h index 6e75251c..81ee90f3 100644 --- a/src/include/ipxe/settings.h +++ b/src/include/ipxe/settings.h @@ -241,6 +241,9 @@ struct generic_settings { struct list_head list; }; +/** A child settings block locator function */ +typedef struct settings * ( *get_child_settings_t ) ( struct settings *settings, + const char *name ); extern struct settings_operations generic_settings_operations; extern int generic_settings_store ( struct settings *settings, struct setting *setting, @@ -295,10 +298,14 @@ extern int setting_cmp ( struct setting *a, struct setting *b ); extern struct settings * find_child_settings ( struct settings *parent, const char *name ); +extern struct settings * autovivify_child_settings ( struct settings *parent, + const char *name ); 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 parse_setting_name ( char *name, get_child_settings_t get_child, + struct settings **settings, + struct setting *setting ); extern int setting_name ( struct settings *settings, struct setting *setting, char *buf, size_t len ); extern int fetchf_setting ( struct settings *settings, struct setting *setting,