error:
free(ptr);
- UCI_THROW(ctx, ctx->errno);
+ UCI_THROW(ctx, ctx->err);
done:
return 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_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));
int uci_add_section(struct uci_context *ctx, struct uci_package *p, char *type, struct uci_section **res)
{
+ bool internal = ctx->internal;
struct uci_section *s;
UCI_HANDLE_ERR(ctx);
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;
}