file: write through symlinks on uci commit
[project/uci.git] / file.c
diff --git a/file.c b/file.c
index 35755d83ad8c04dc016d1045e9c3ae4f44b0354c..7e1e4e6f0ddcdbb545c4e83efda52fb33031374a 100644 (file)
--- a/file.c
+++ b/file.c
@@ -800,9 +800,13 @@ done:
        free(name);
        free(path);
        uci_close_stream(f1);
-       if (do_rename && rename(filename, p->path)) {
-               unlink(filename);
-               UCI_THROW(ctx, UCI_ERR_IO);
+       if (do_rename) {
+               path = realpath(p->path, NULL);
+               if (!path || rename(filename, path)) {
+                       unlink(filename);
+                       UCI_THROW(ctx, UCI_ERR_IO);
+               }
+               free(path);
        }
        free(filename);
        if (ctx->err)