summaryrefslogtreecommitdiffstats
path: root/src/include/ipxe/settings.h
diff options
context:
space:
mode:
authorMichael Brown2013-08-01 15:39:58 +0200
committerMichael Brown2013-08-01 15:39:58 +0200
commitc70d4cb1b39eae7b026d34575431fe8a54c65998 (patch)
treed7105390abdf7e2ba972c5f0c21aa4a63ef3f42b /src/include/ipxe/settings.h
parent[script] Allow commands following a script label (diff)
downloadipxe-c70d4cb1b39eae7b026d34575431fe8a54c65998.tar.gz
ipxe-c70d4cb1b39eae7b026d34575431fe8a54c65998.tar.xz
ipxe-c70d4cb1b39eae7b026d34575431fe8a54c65998.zip
[settings] Introduce the generalised concept of a numeric setting
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/include/ipxe/settings.h')
-rw-r--r--src/include/ipxe/settings.h45
1 files changed, 40 insertions, 5 deletions
diff --git a/src/include/ipxe/settings.h b/src/include/ipxe/settings.h
index c7287ebb..d1666e1d 100644
--- a/src/include/ipxe/settings.h
+++ b/src/include/ipxe/settings.h
@@ -185,24 +185,47 @@ struct setting_type {
* This is the name exposed to the user (e.g. "string").
*/
const char *name;
- /** Parse formatted setting value
+ /** Parse formatted string to setting value
*
+ * @v type Setting type
* @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 ( * parse ) ( const char *value, void *buf, size_t len );
- /** Format setting value
+ int ( * parse ) ( struct setting_type *type, const char *value,
+ void *buf, size_t len );
+ /** Format setting value as a string
*
+ * @v type Setting type
* @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 ( * format ) ( const void *raw, size_t raw_len, char *buf,
- size_t len );
+ int ( * format ) ( struct setting_type *type, const void *raw,
+ size_t raw_len, char *buf, size_t len );
+ /** Convert number to setting value
+ *
+ * @v type Setting type
+ * @v value Numeric value
+ * @v buf Buffer to contain raw value
+ * @v len Length of buffer
+ * @ret len Length of raw value, or negative error
+ */
+ int ( * denumerate ) ( struct setting_type *type, unsigned long value,
+ void *buf, size_t len );
+ /** Convert setting value to number
+ *
+ * @v type Setting type
+ * @v raw Raw setting value
+ * @v raw_len Length of raw setting value
+ * @v value Numeric value to fill in
+ * @ret rc Return status code
+ */
+ int ( * numerate ) ( struct setting_type *type, const void *raw,
+ size_t raw_len, unsigned long *value );
};
/** Configuration setting type table */
@@ -308,6 +331,14 @@ extern int parse_setting_name ( char *name, get_child_settings_t get_child,
struct setting *setting );
extern int setting_name ( struct settings *settings, struct setting *setting,
char *buf, size_t len );
+extern int setting_format ( struct setting_type *type, const void *raw,
+ size_t raw_len, char *buf, size_t len );
+extern int setting_parse ( struct setting_type *type, const char *value,
+ void *buf, size_t len );
+extern int setting_numerate ( struct setting_type *type, const void *raw,
+ size_t raw_len, unsigned long *value );
+extern int setting_denumerate ( struct setting_type *type, unsigned long value,
+ void *buf, size_t len );
extern int fetchf_setting ( struct settings *settings, struct setting *setting,
char *buf, size_t len );
extern int fetchf_setting_copy ( struct settings *settings,
@@ -315,6 +346,10 @@ extern int fetchf_setting_copy ( struct settings *settings,
extern int storef_setting ( struct settings *settings,
struct setting *setting,
const char *value );
+extern int fetchn_setting ( struct settings *settings, struct setting *setting,
+ unsigned long *value );
+extern int storen_setting ( struct settings *settings, struct setting *setting,
+ unsigned long value );
extern char * expand_settings ( const char *string );
extern struct setting_type setting_type_string __setting_type;