UCI_HANDLE_ERR(ctx);
UCI_ASSERT(ctx, dir != NULL);
+ if (!strcmp(dir, ctx->savedir))
+ return -1;
e = uci_alloc_generic(ctx, UCI_TYPE_PATH, dir, sizeof(struct uci_element));
uci_list_add(&ctx->delta_path, &e->list);
int changes = 0;
UCI_TRAP_SAVE(ctx, done);
- stream = uci_open_stream(ctx, filename, SEEK_SET, flush, false);
+ stream = uci_open_stream(ctx, filename, NULL, SEEK_SET, flush, false);
if (p)
changes = uci_parse_delta(ctx, stream, p);
UCI_TRAP_RESTORE(ctx);
UCI_THROW(ctx, UCI_ERR_MEM);
UCI_TRAP_SAVE(ctx, done);
- f = uci_open_stream(ctx, filename, SEEK_SET, true, false);
+ f = uci_open_stream(ctx, filename, NULL, SEEK_SET, true, false);
pctx->file = f;
while (!feof(f)) {
struct uci_element *e;
ctx->err = 0;
UCI_TRAP_SAVE(ctx, done);
- f = uci_open_stream(ctx, filename, SEEK_END, true, true);
+ f = uci_open_stream(ctx, filename, NULL, SEEK_END, true, true);
UCI_TRAP_RESTORE(ctx);
uci_foreach_element_safe(&p->delta, tmp, e) {
if (h->cmd == UCI_CMD_REMOVE && !h->value)
fprintf(f, "\n");
- else
- fprintf(f, "=%s\n", h->value);
+ else {
+ int i;
+
+ fprintf(f, "='");
+ for (i = 0; h->value[i]; i++) {
+ unsigned char c = h->value[i];
+ if (c != '\'')
+ fputc(c, f);
+ else
+ fprintf(f, "'\\''");
+ }
+ fprintf(f, "'\n");
+ }
uci_free_delta(h);
}