goto err_exists;
}
+ /* Sanity check */
+ assert ( setting->type != NULL );
+ assert ( setting->type->format != NULL );
+
/* Format setting */
if ( ( ret = setting->type->format ( raw, raw_len, buf, len ) ) < 0 )
goto err_format;
if ( ( ! value ) || ( ! value[0] ) )
return delete_setting ( settings, setting );
+ /* Sanity check */
+ assert ( setting->type != NULL );
+ assert ( setting->type->parse != NULL );
+
/* Get raw value length */
raw_len = setting->type->parse ( value, NULL, 0 );
if ( raw_len < 0 ) {
* @v get_child Function to find or create child settings block
* @v settings Settings block to fill in
* @v setting Setting to fill in
- * @v default_type Default type to use, if none specified
* @ret rc Return status code
*
* Interprets a name of the form
struct settings * ( * get_child )
( struct settings *settings,
const char *name ),
- struct settings **settings, struct setting *setting,
- struct setting_type *default_type ) {
+ struct settings **settings, struct setting *setting ) {
char *settings_name;
char *setting_name;
char *type_name;
*settings = &settings_root;
memset ( setting, 0, sizeof ( *setting ) );
setting->name = "";
- setting->type = default_type;
/* Split name into "[settings_name/]setting_name[:type_name]" */
if ( ( setting_name = strchr ( name, '/' ) ) != NULL ) {
/* Parse setting name */
if ( ( rc = parse_setting_name ( tmp_name, autovivify_child_settings,
- &settings, &setting,
- default_type ) ) != 0 )
+ &settings, &setting ) ) != 0 )
return rc;
+ /* Apply default type if necessary */
+ if ( ! setting.type )
+ setting.type = default_type;
+
/* Store setting */
if ( ( rc = store_setting ( settings, &setting, data, len ) ) != 0 )
return rc;
/* Parse setting name */
if ( ( rc = parse_setting_name ( tmp_name, autovivify_child_settings,
- &settings, &setting,
- default_type ) ) != 0 )
+ &settings, &setting ) ) != 0 )
return rc;
+ /* Apply default type if necessary */
+ if ( ! setting.type )
+ setting.type = default_type;
+
/* Store setting */
if ( ( rc = storef_setting ( settings, &setting, value ) ) != 0 )
return rc;
/* Parse setting name */
if ( ( rc = parse_setting_name ( tmp_name, find_child_settings,
- &settings, &setting, NULL ) ) != 0 )
+ &settings, &setting ) ) != 0 )
return rc;
/* Fetch setting */