char *tmp_stderr2;
tmp_stderr2 = format("%s.tmp.stderr2.%s", cached_obj, tmp_string());
- unlink(tmp_stderr2);
- if (rename(tmp_stderr, tmp_stderr2)) {
+ if (x_rename(tmp_stderr, tmp_stderr2)) {
cc_log("Failed to rename %s to %s", tmp_stderr, tmp_stderr2);
failed();
}
void update_mtime(const char *path);
void *x_fmmap(const char *fname, off_t *size, const char *errstr);
int x_munmap(void *addr, size_t length);
+int x_rename(const char *oldpath, const char *newpath);
/* ------------------------------------------------------------------------- */
/* stats.c */
if (write_manifest(f2, mf)) {
gzclose(f2);
f2 = NULL;
- unlink(manifest_path);
- if (rename(tmp_file, manifest_path) == 0) {
+ if (x_rename(tmp_file, manifest_path) == 0) {
ret = 1;
} else {
cc_log("Failed to rename %s to %s",
goto error;
}
- unlink(dest);
-
- if (rename(tmp_name, dest) == -1) {
+ if (x_rename(tmp_name, dest) == -1) {
cc_log("rename error: %s", strerror(errno));
goto error;
}
if (compress_dest) {
return move_file(src, dest, compress_dest);
} else {
- unlink(dest);
- return rename(src, dest);
+ return x_rename(src, dest);
}
}
return munmap(addr, length);
#endif
}
+
+/*
+ * Rename oldpath to newpath (deleting newpath).
+ */
+int x_rename(const char *oldpath, const char *newpath)
+{
+#ifdef _WIN32
+ /* Windows' rename() refuses to overwrite an existing file. */
+ unlink(newpath);
+#endif
+ return rename(oldpath, newpath);
+}