projects
/
project
/
uci.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
don't record a changed value if the new value matches the old one
[project/uci.git]
/
list.c
diff --git
a/list.c
b/list.c
index
fb4d478
..
67bde39
100644
(file)
--- a/
list.c
+++ b/
list.c
@@
-74,7
+74,7
@@
uci_alloc_generic(struct uci_context *ctx, int type, const char *name, int size)
error:
free(ptr);
error:
free(ptr);
- UCI_THROW(ctx, ctx->err
no
);
+ UCI_THROW(ctx, ctx->err);
done:
return e;
done:
return e;
@@
-180,7
+180,7
@@
uci_free_section(struct uci_section *s)
uci_free_element(&s->e);
}
uci_free_element(&s->e);
}
-
static
struct uci_package *
+
__plugin
struct uci_package *
uci_alloc_package(struct uci_context *ctx, const char *name)
{
struct uci_package *p;
uci_alloc_package(struct uci_context *ctx, const char *name)
{
struct uci_package *p;
@@
-228,7
+228,7
@@
static struct uci_element *uci_lookup_list(struct uci_list *list, const char *na
return NULL;
}
return NULL;
}
-int uci_lookup(struct uci_context *ctx, struct uci_element **res, struct uci_package *p, c
har *section,
char *option)
+int uci_lookup(struct uci_context *ctx, struct uci_element **res, struct uci_package *p, c
onst char *section, const
char *option)
{
struct uci_element *e;
struct uci_section *s;
{
struct uci_element *e;
struct uci_section *s;
@@
-236,7
+236,7
@@
int uci_lookup(struct uci_context *ctx, struct uci_element **res, struct uci_pac
UCI_HANDLE_ERR(ctx);
UCI_ASSERT(ctx, res != NULL);
UCI_ASSERT(ctx, p != NULL);
UCI_HANDLE_ERR(ctx);
UCI_ASSERT(ctx, res != NULL);
UCI_ASSERT(ctx, p != NULL);
- UCI_ASSERT(ctx, uci_validate_name(section));
+ UCI_ASSERT(ctx,
section &&
uci_validate_name(section));
if (option)
UCI_ASSERT(ctx, uci_validate_name(option));
if (option)
UCI_ASSERT(ctx, uci_validate_name(option));
@@
-307,7
+307,7
@@
int uci_del_element(struct uci_context *ctx, struct uci_element *e)
return 0;
}
return 0;
}
-int uci_set_element_value(struct uci_context *ctx, struct uci_element **element, char *value)
+int uci_set_element_value(struct uci_context *ctx, struct uci_element **element, c
onst c
har *value)
{
/* NB: UCI_INTERNAL use means without history tracking */
bool internal = ctx->internal;
{
/* NB: UCI_INTERNAL use means without history tracking */
bool internal = ctx->internal;
@@
-341,6
+341,9
@@
int uci_set_element_value(struct uci_context *ctx, struct uci_element **element,
s = uci_to_section(e);
section = e->name;
option = NULL;
s = uci_to_section(e);
section = e->name;
option = NULL;
+ /* matches the currently set value */
+ if (!strcmp(value, s->type))
+ return 0;
break;
case UCI_TYPE_OPTION:
UCI_ASSERT(ctx, value != NULL);
break;
case UCI_TYPE_OPTION:
UCI_ASSERT(ctx, value != NULL);
@@
-348,6
+351,9
@@
int uci_set_element_value(struct uci_context *ctx, struct uci_element **element,
s = uci_to_option(e)->section;
section = s->e.name;
option = e->name;
s = uci_to_option(e)->section;
section = s->e.name;
option = e->name;
+ /* matches the currently set value */
+ if (!strcmp(value, e->name))
+ return 0;
break;
default:
UCI_THROW(ctx, UCI_ERR_INVAL);
break;
default:
UCI_THROW(ctx, UCI_ERR_INVAL);
@@
-399,8
+405,9
@@
int uci_rename(struct uci_context *ctx, struct uci_package *p, char *section, ch
return 0;
}
return 0;
}
-int uci_add_section(struct uci_context *ctx, struct uci_package *p, char *type, struct uci_section **res)
+int uci_add_section(struct uci_context *ctx, struct uci_package *p, c
onst c
har *type, struct uci_section **res)
{
{
+ bool internal = ctx->internal;
struct uci_section *s;
UCI_HANDLE_ERR(ctx);
struct uci_section *s;
UCI_HANDLE_ERR(ctx);
@@
-408,12
+415,13
@@
int uci_add_section(struct uci_context *ctx, struct uci_package *p, char *type,
s = uci_alloc_section(p, type, NULL);
uci_fixup_section(ctx, s);
*res = s;
s = uci_alloc_section(p, type, NULL);
uci_fixup_section(ctx, s);
*res = s;
- uci_add_history(ctx, &p->history, UCI_CMD_ADD, s->e.name, NULL, type);
+ if (!internal && p->has_history)
+ uci_add_history(ctx, &p->history, UCI_CMD_ADD, s->e.name, NULL, type);
return 0;
}
return 0;
}
-int uci_delete(struct uci_context *ctx, struct uci_package *p, c
har *section,
char *option)
+int uci_delete(struct uci_context *ctx, struct uci_package *p, c
onst char *section, const
char *option)
{
/* NB: pass on internal flag to uci_del_element */
bool internal = ctx->internal;
{
/* NB: pass on internal flag to uci_del_element */
bool internal = ctx->internal;
@@
-428,7
+436,7
@@
int uci_delete(struct uci_context *ctx, struct uci_package *p, char *section, ch
return uci_del_element(ctx, e);
}
return uci_del_element(ctx, e);
}
-int uci_set(struct uci_context *ctx, struct uci_package *p, c
har *section, char *option,
char *value, struct uci_element **result)
+int uci_set(struct uci_context *ctx, struct uci_package *p, c
onst char *section, const char *option, const
char *value, struct uci_element **result)
{
/* NB: UCI_INTERNAL use means without history tracking */
bool internal = ctx->internal;
{
/* NB: UCI_INTERNAL use means without history tracking */
bool internal = ctx->internal;