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;
if (!buf[0])
continue;
- /* NB: need to allocate the element before the call to
- * uci_parse_delta_tuple, otherwise the original string
+ /* NB: need to allocate the element before the call to
+ * uci_parse_delta_tuple, otherwise the original string
* gets modified before it is saved */
e = uci_alloc_generic(ctx, UCI_TYPE_DELTA, pctx->buf, sizeof(struct uci_element));
uci_list_add(&list, &e->list);
uci_expand_ptr(ctx, ptr, false);
UCI_ASSERT(ctx, ptr->p->has_delta);
- /*
+ /*
* - flush unwritten changes
* - save the package name
* - unload the package
UCI_TRAP_SAVE(ctx, error);
UCI_INTERNAL(uci_save, ctx, ptr->p);
- /* NB: need to clone package, section and option names,
+ /* NB: need to clone package, section and option names,
* as they may get freed on uci_free_package() */
package = uci_strdup(ctx, ptr->p->e.name);
if (ptr->section)
UCI_HANDLE_ERR(ctx);
UCI_ASSERT(ctx, p != NULL);
- /*
+ /*
* if the config file was outside of the /etc/config path,
* don't save the delta to a file, update the real file
* directly.
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);
}