david/ipxe
david
/
ipxe
Archived
1
0
Fork 0

Add string configuration type

This commit is contained in:
Michael Brown 2006-08-11 18:16:57 +00:00
parent db0ff1731f
commit 7029fb8eff
2 changed files with 62 additions and 10 deletions

View File

@ -116,17 +116,19 @@ find_or_build_config_setting ( const char *name,
* *
* @v context Configuration context * @v context Configuration context
* @v name Configuration setting name * @v name Configuration setting name
* @ret value Setting value (as a string), or NULL * @v buf Buffer to contain value
* @v len Length of buffer
* @ret rc Return status code
*/ */
const char * ( show_setting ) ( struct config_context *context, int ( show_setting ) ( struct config_context *context, const char *name,
const char *name ) { char *buf, size_t len ) {
struct config_setting *setting; struct config_setting *setting;
struct config_setting tmp_setting; struct config_setting tmp_setting;
setting = find_or_build_config_setting ( name, &tmp_setting ); setting = find_or_build_config_setting ( name, &tmp_setting );
if ( ! setting ) if ( ! setting )
return NULL; return -ENOENT;
return setting->type->show ( context, setting ); return setting->type->show ( context, setting, buf, len );
} }
/** Set value of setting /** Set value of setting
@ -146,3 +148,50 @@ int ( set_setting ) ( struct config_context *context, const char *name,
return -ENOENT; return -ENOENT;
return setting->type->set ( context, setting, value ); return setting->type->set ( context, setting, value );
} }
/**
* Show value of string setting
*
* @v context Configuration context
* @v setting Configuration setting
* @v buf Buffer to contain value
* @v len Length of buffer
* @ret rc Return status code
*/
static int show_string ( struct config_context *context,
struct config_setting *setting,
char *buf, size_t len ) {
struct dhcp_option *option;
option = find_dhcp_option ( context->options, setting->tag );
if ( ! option )
return -ENOENT;
dhcp_snprintf ( buf, len, option );
return 0;
}
/** Set value of string setting
*
* @v context Configuration context
* @v setting Configuration setting
* @v value Setting value (as a string)
* @ret rc Return status code
*/
static int set_string ( struct config_context *context,
struct config_setting *setting,
const char *value ) {
struct dhcp_option *option;
option = set_dhcp_option ( context->options, setting->tag,
value, strlen ( value ) );
if ( ! option )
return -ENOMEM;
return 0;
}
/** A string configuration setting */
struct config_setting_type config_setting_type_string __config_setting_type = {
.name = "string",
.show = show_string,
.set = set_string,
};

View File

@ -44,10 +44,13 @@ struct config_setting_type {
* *
* @v context Configuration context * @v context Configuration context
* @v setting Configuration setting * @v setting Configuration setting
* @ret value Setting value (as a string), or NULL * @v buf Buffer to contain value
* @v len Length of buffer
* @ret rc Return status code
*/ */
const char * ( * show ) ( struct config_context *context, int ( * show ) ( struct config_context *context,
struct config_setting *setting ); struct config_setting *setting,
char *buf, size_t len );
/** Set value of setting /** Set value of setting
* *
* @v context Configuration context * @v context Configuration context
@ -95,8 +98,8 @@ struct config_setting {
/* Function prototypes */ /* Function prototypes */
extern const char * ( show_setting ) ( struct config_context *context, extern int ( show_setting ) ( struct config_context *context, const char *name,
const char *name ); char *buf, size_t len );
extern int ( set_setting ) ( struct config_context *context, const char *name, extern int ( set_setting ) ( struct config_context *context, const char *name,
const char *value ); const char *value );