From dc15a5a77942abf2c39f2de4ee5a2b7150ea89e1 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Fri, 24 Apr 2015 13:54:40 +0100 Subject: [settings] Add "base64" setting type Signed-off-by: Michael Brown --- src/core/settings.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'src/core') diff --git a/src/core/settings.c b/src/core/settings.c index be48ea7a7..12e6c7d61 100644 --- a/src/core/settings.c +++ b/src/core/settings.c @@ -39,6 +39,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #include #include #include +#include #include #include #include @@ -2120,6 +2121,46 @@ const struct setting_type setting_type_hexraw __setting_type = { .format = format_hex_raw_setting, }; +/** + * Parse Base64-encoded setting value + * + * @v type Setting type + * @v value Formatted setting value + * @v buf Buffer to contain raw value + * @v len Length of buffer + * @v size Integer size, in bytes + * @ret len Length of raw value, or negative error + */ +static int parse_base64_setting ( const struct setting_type *type __unused, + const char *value, void *buf, size_t len ) { + + return base64_decode ( value, buf, len ); +} + +/** + * Format Base64-encoded setting value + * + * @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 + */ +static int format_base64_setting ( const struct setting_type *type __unused, + const void *raw, size_t raw_len, + char *buf, size_t len ) { + + return base64_encode ( raw, raw_len, buf, len ); +} + +/** A Base64-encoded setting */ +const struct setting_type setting_type_base64 __setting_type = { + .name = "base64", + .parse = parse_base64_setting, + .format = format_base64_setting, +}; + /** * Format UUID setting value * -- cgit v1.2.3-55-g7522