diff --git a/src/os.cpp b/src/os.cpp index ef12464c8c..48512a273d 100644 --- a/src/os.cpp +++ b/src/os.cpp @@ -794,7 +794,18 @@ int os_delete_file(Buf *path) { } int os_rename(Buf *src_path, Buf *dest_path) { + if (buf_eql_buf(src_path, dest_path)) { + return 0; + } if (rename(buf_ptr(src_path), buf_ptr(dest_path)) == -1) { + // Windows requires the dest path to be missing + if (errno == EACCES) { + remove(buf_ptr(dest_path)); + if (rename(buf_ptr(src_path), buf_ptr(dest_path)) == -1) { + return ErrorFileSystem; + } + return 0; + } return ErrorFileSystem; } return 0;