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 @@ 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 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 @@ .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 @@ .export = state_string_export, .import = state_string_import, .create = state_string_create, + .set = __state_string_set, + .get = __state_string_get, }, }; @@ -1722,6 +1730,20 @@ 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 @@ 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;