- f2 = uci_open_stream(ctx, filename, p->path, SEEK_SET, true, true);
+ fd = mkstemp(filename);
+ if (fd == -1)
+ UCI_THROW(ctx, UCI_ERR_IO);
+
+ if ((flock(fd, LOCK_EX) < 0) && (errno != ENOSYS))
+ UCI_THROW(ctx, UCI_ERR_IO);
+
+ if (lseek(fd, 0, SEEK_SET) < 0)
+ UCI_THROW(ctx, UCI_ERR_IO);
+
+ f2 = fdopen(fd, "w+");
+ if (!f2)
+ UCI_THROW(ctx, UCI_ERR_IO);
+