diff options
Diffstat (limited to 'src/barebox-state.c')
-rw-r--r-- | src/barebox-state.c | 9 |
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; |