delta: add a simple duplication check when adding delta path.
[project/uci.git] / delta.c
diff --git a/delta.c b/delta.c
index 32628dc..b56df5b 100644 (file)
--- a/delta.c
+++ b/delta.c
@@ -87,6 +87,8 @@ int uci_add_delta_path(struct uci_context *ctx, const char *dir)
 
        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);
 
@@ -471,8 +473,19 @@ int uci_save(struct uci_context *ctx, struct uci_package *p)
 
                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);
        }