summaryrefslogtreecommitdiffstats
path: root/src/barebox-state.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/barebox-state.c')
-rw-r--r--src/barebox-state.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/barebox-state.c b/src/barebox-state.c
index 7ac90c6..afd18c6 100644
--- a/src/barebox-state.c
+++ b/src/barebox-state.c
@@ -283,6 +283,7 @@ static int state_set_var(struct state *state, const char *var, const char *val)
{
struct state_variable *sv;
struct variable_str_type *vtype;
+ char *oldval;
int ret;
sv = state_find_var(state, var);
@@ -296,6 +297,14 @@ static int state_set_var(struct state *state, const char *var, const char *val)
if (!vtype->set)
return -EPERM;
+ oldval = vtype->get(sv);
+ if (!IS_ERR(oldval)) {
+ bool equal = strcmp(oldval, val) == 0;
+ free(oldval);
+ if (equal)
+ return 0;
+ }
+
ret = vtype->set(sv, val);
if (ret)
return ret;