diff options
author | Marc Kleine-Budde <mkl@pengutronix.de> | 2015-06-15 17:55:29 +0200 |
---|---|---|
committer | Marc Kleine-Budde <mkl@pengutronix.de> | 2015-06-15 23:11:22 +0200 |
commit | a68cd59174365c9e24fc3fae0855dee714dd8851 (patch) | |
tree | 2418794ac91da2a23ff7a1c889476ae08c528861 /src | |
parent | d9e755e1597491ba08184028bd11d81043bd3221 (diff) | |
download | dt-utils-a68cd59174365c9e24fc3fae0855dee714dd8851.tar.gz dt-utils-a68cd59174365c9e24fc3fae0855dee714dd8851.tar.xz |
barebox-state: adopt u8 and string support
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Diffstat (limited to 'src')
-rw-r--r-- | src/barebox-state.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/barebox-state.c b/src/barebox-state.c index 73b33cb..68ec60d 100644 --- a/src/barebox-state.c +++ b/src/barebox-state.c @@ -42,6 +42,8 @@ static int verbose; struct state_variable; +static int __state_uint8_set(struct state_variable *var, const char *val); +static char *__state_uint8_get(struct state_variable *var); static int __state_uint32_set(struct state_variable *var, const char *val); static char *__state_uint32_get(struct state_variable *var); static int __state_enum32_set(struct state_variable *sv, const char *val); @@ -49,6 +51,8 @@ static char *__state_enum32_get(struct state_variable *var); static void __state_enum32_info(struct state_variable *var); static int __state_mac_set(struct state_variable *var, const char *val); static char *__state_mac_get(struct state_variable *var); +static int __state_string_set(struct state_variable *var, const char *val); +static char *__state_string_get(struct state_variable *var); #define asprintf(fmt, arg...) barebox_asprintf(fmt, ##arg) @@ -583,6 +587,8 @@ static struct variable_type types[] = { .export = state_uint32_export, .import = state_uint32_import, .create = state_uint8_create, + .set = __state_uint8_set, + .get = __state_uint32_get, }, { .type = STATE_TYPE_U32, .type_name = "uint32", @@ -614,6 +620,8 @@ static struct variable_type types[] = { .export = state_string_export, .import = state_string_import, .create = state_string_create, + .set = __state_string_set, + .get = __state_string_get, }, }; @@ -1722,6 +1730,20 @@ static int __state_uint32_set(struct state_variable *var, const char *val) return 0; } +static int __state_uint8_set(struct state_variable *var, const char *val) +{ + struct state_uint32 *su32 = to_state_uint32(var); + unsigned long num; + + num = strtoul(val, NULL, 0); + if (num > UINT8_MAX) + return -ERANGE; + + su32->value = num; + + return 0; +} + static char *__state_uint32_get(struct state_variable *var) { struct state_uint32 *su32 = to_state_uint32(var); @@ -1829,6 +1851,33 @@ static char *__state_mac_get(struct state_variable *var) return str; } +static int __state_string_set(struct state_variable *sv, const char *val) +{ + struct state_string *string = to_state_string(sv); + int ret; + + ret = state_string_copy_to_raw(string, val); + if (ret) + return ret; + free(string->value); + string->value = xstrdup(val); + + return 0; +} + +static char *__state_string_get(struct state_variable *var) +{ + struct state_string *string = to_state_string(var); + char *str; + int ret; + + ret = asprintf(&str, "%s", string->raw); + if (ret < 0) + return ERR_PTR(-ENOMEM); + + return str; +} + static char *state_get_var(struct state *state, const char *var) { struct state_variable *sv; |