implement std.os.rename for windows
This commit is contained in:
parent
61d715d784
commit
531f3344dc
|
@ -674,6 +674,15 @@ pub fn rename(allocator: &Allocator, old_path: []const u8, new_path: []const u8)
|
||||||
mem.copy(u8, new_buf, new_path);
|
mem.copy(u8, new_buf, new_path);
|
||||||
new_buf[new_path.len] = 0;
|
new_buf[new_path.len] = 0;
|
||||||
|
|
||||||
|
if (is_windows) {
|
||||||
|
const flags = windows.MOVEFILE_REPLACE_EXISTING|windows.MOVEFILE_WRITE_THROUGH;
|
||||||
|
if (!windows.MoveFileExA(old_buf.ptr, new_buf.ptr, flags)) {
|
||||||
|
const err = windows.GetLastError();
|
||||||
|
return switch (err) {
|
||||||
|
else => return error.Unexpected,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
} else {
|
||||||
const err = posix.getErrno(posix.rename(old_buf.ptr, new_buf.ptr));
|
const err = posix.getErrno(posix.rename(old_buf.ptr, new_buf.ptr));
|
||||||
if (err > 0) {
|
if (err > 0) {
|
||||||
return switch (err) {
|
return switch (err) {
|
||||||
|
@ -696,6 +705,7 @@ pub fn rename(allocator: &Allocator, old_path: []const u8, new_path: []const u8)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn makeDir(allocator: &Allocator, dir_path: []const u8) -> %void {
|
pub fn makeDir(allocator: &Allocator, dir_path: []const u8) -> %void {
|
||||||
if (is_windows) {
|
if (is_windows) {
|
||||||
|
|
|
@ -57,6 +57,9 @@ pub extern "kernel32" stdcallcc fn HeapAlloc(hHeap: HANDLE, dwFlags: DWORD, dwBy
|
||||||
|
|
||||||
pub extern "kernel32" stdcallcc fn HeapFree(hHeap: HANDLE, dwFlags: DWORD, lpMem: LPVOID) -> BOOL;
|
pub extern "kernel32" stdcallcc fn HeapFree(hHeap: HANDLE, dwFlags: DWORD, lpMem: LPVOID) -> BOOL;
|
||||||
|
|
||||||
|
pub extern "kernel32" stdcallcc fn MoveFileExA(lpExistingFileName: LPCSTR, lpNewFileName: LPCSTR,
|
||||||
|
dwFlags: DWORD) -> BOOL;
|
||||||
|
|
||||||
pub extern "kernel32" stdcallcc fn ReadFile(in_hFile: HANDLE, out_lpBuffer: LPVOID,
|
pub extern "kernel32" stdcallcc fn ReadFile(in_hFile: HANDLE, out_lpBuffer: LPVOID,
|
||||||
in_nNumberOfBytesToRead: DWORD, out_lpNumberOfBytesRead: &DWORD,
|
in_nNumberOfBytesToRead: DWORD, out_lpNumberOfBytesRead: &DWORD,
|
||||||
in_out_lpOverlapped: ?&OVERLAPPED) -> BOOL;
|
in_out_lpOverlapped: ?&OVERLAPPED) -> BOOL;
|
||||||
|
@ -258,3 +261,10 @@ pub const WAIT_FAILED = 0xFFFFFFFF;
|
||||||
|
|
||||||
pub const HANDLE_FLAG_INHERIT = 0x00000001;
|
pub const HANDLE_FLAG_INHERIT = 0x00000001;
|
||||||
pub const HANDLE_FLAG_PROTECT_FROM_CLOSE = 0x00000002;
|
pub const HANDLE_FLAG_PROTECT_FROM_CLOSE = 0x00000002;
|
||||||
|
|
||||||
|
pub const MOVEFILE_COPY_ALLOWED = 2;
|
||||||
|
pub const MOVEFILE_CREATE_HARDLINK = 16;
|
||||||
|
pub const MOVEFILE_DELAY_UNTIL_REBOOT = 4;
|
||||||
|
pub const MOVEFILE_FAIL_IF_NOT_TRACKABLE = 32;
|
||||||
|
pub const MOVEFILE_REPLACE_EXISTING = 1;
|
||||||
|
pub const MOVEFILE_WRITE_THROUGH = 8;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user