summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Kleine-Budde <mkl@pengutronix.de>2015-06-15 17:55:29 +0200
committerMarc Kleine-Budde <mkl@pengutronix.de>2015-06-15 23:11:22 +0200
commita68cd59174365c9e24fc3fae0855dee714dd8851 (patch)
tree2418794ac91da2a23ff7a1c889476ae08c528861
parentd9e755e1597491ba08184028bd11d81043bd3221 (diff)
downloaddt-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>
-rw-r--r--src/barebox-state.c49
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;