[settings] Split fetching and storing out of setting type handlers

Refactor setting type handlers to parse and format values, rather than
storing and fetching formatted values.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown
2012-04-16 21:47:35 +01:00
parent 46409231ba
commit 831b16adde
4 changed files with 351 additions and 271 deletions

View File

@@ -161,25 +161,24 @@ struct setting_type {
* This is the name exposed to the user (e.g. "string").
*/
const char *name;
/** Parse and set value of setting
/** Parse formatted setting value
*
* @v settings Settings block
* @v setting Setting to store
* @v value Formatted setting data
* @ret rc Return status code
* @v value Formatted setting value
* @v buf Buffer to contain raw value
* @v len Length of buffer
* @ret len Length of raw value, or negative error
*/
int ( * storef ) ( struct settings *settings, struct setting *setting,
const char *value );
/** Fetch and format value of setting
int ( * parse ) ( const char *value, void *buf, size_t len );
/** Format setting value
*
* @v settings Settings block
* @v setting Setting to fetch
* @v raw Raw setting value
* @v raw_len Length of raw setting value
* @v buf Buffer to contain formatted value
* @v len Length of buffer
* @ret len Length of formatted value, or negative error
*/
int ( * fetchf ) ( struct settings *settings, struct setting *setting,
char *buf, size_t len );
int ( * format ) ( const void *raw, size_t raw_len, char *buf,
size_t len );
};
/** Configuration setting type table */
@@ -273,6 +272,8 @@ extern struct setting * find_setting ( const char *name );
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,
char *buf, size_t len );
extern int storef_setting ( struct settings *settings,
struct setting *setting,
const char *value );
@@ -354,22 +355,6 @@ static inline int delete_setting ( struct settings *settings,
return store_setting ( settings, setting, NULL, 0 );
}
/**
* Fetch and format value of setting
*
* @v settings Settings block, or NULL to search all blocks
* @v setting Setting to fetch
* @v type Settings type
* @v buf Buffer to contain formatted value
* @v len Length of buffer
* @ret len Length of formatted value, or negative error
*/
static inline int fetchf_setting ( struct settings *settings,
struct setting *setting,
char *buf, size_t len ) {
return setting->type->fetchf ( settings, setting, buf, len );
}
/**
* Delete named setting
*

View File

@@ -28,6 +28,6 @@ union uuid {
uint8_t raw[16];
};
extern char * uuid_ntoa ( union uuid *uuid );
extern char * uuid_ntoa ( const union uuid *uuid );
#endif /* _IPXE_UUID_H */