windows-compatible os_rename function
windows libc rename() requires destination file path to not existmaster
parent
2eede35577
commit
9f5c0b6e60
11
src/os.cpp
11
src/os.cpp
|
@ -794,7 +794,18 @@ int os_delete_file(Buf *path) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int os_rename(Buf *src_path, Buf *dest_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) {
|
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 ErrorFileSystem;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue