diff --git a/core/os/os2/file_linux.odin b/core/os/os2/file_linux.odin index 20f179f77..a1e3c4afd 100644 --- a/core/os/os2/file_linux.odin +++ b/core/os/os2/file_linux.odin @@ -275,7 +275,7 @@ _remove :: proc(name: string) -> Error { TEMP_ALLOCATOR_GUARD() name_cstr := temp_cstring(name) or_return - if fd, errno := linux.open(name_cstr, _OPENDIR_FLAGS); errno == .NONE { + if fd, errno := linux.open(name_cstr, _OPENDIR_FLAGS + {.NOFOLLOW}); errno == .NONE { linux.close(fd) return _get_platform_error(linux.rmdir(name_cstr)) } diff --git a/core/os/os2/path_linux.odin b/core/os/os2/path_linux.odin index 7be4121ae..bfdb645ef 100644 --- a/core/os/os2/path_linux.odin +++ b/core/os/os2/path_linux.odin @@ -77,8 +77,6 @@ _mkdir_all :: proc(path: string, perm: int) -> Error { } _remove_all :: proc(path: string) -> Error { - DT_DIR :: 4 - remove_all_dir :: proc(dfd: linux.Fd) -> Error { n := 64 buf := make([]u8, n) diff --git a/core/sys/linux/helpers.odin b/core/sys/linux/helpers.odin index aefc1179e..5273426d8 100644 --- a/core/sys/linux/helpers.odin +++ b/core/sys/linux/helpers.odin @@ -139,7 +139,7 @@ when size_of(int) == 4 { // xxx64 system calls take some parameters as pairs of ulongs rather than a single pointer @(private) compat64_arg_pair :: #force_inline proc "contextless" (a: i64) -> (hi: uint, lo: uint) { - no_sign := uint(a) + no_sign := u64(a) hi = uint(no_sign >> 32) lo = uint(no_sign & 0xffff_ffff) return diff --git a/core/sys/linux/sys.odin b/core/sys/linux/sys.odin index 690902f07..88753a788 100644 --- a/core/sys/linux/sys.odin +++ b/core/sys/linux/sys.odin @@ -1952,10 +1952,10 @@ sigaltstack :: proc "contextless" (stack: ^Sig_Stack, old_stack: ^Sig_Stack) -> */ mknod :: proc "contextless" (name: cstring, mode: Mode, dev: Dev) -> (Errno) { when ODIN_ARCH == .arm64 || ODIN_ARCH == .riscv64 { - ret := syscall(SYS_mknodat, AT_FDCWD, cast(rawptr) name, transmute(u32) mode, dev) + ret := syscall(SYS_mknodat, AT_FDCWD, cast(rawptr) name, transmute(u32) mode, cast(uint) dev) return Errno(-ret) } else { - ret := syscall(SYS_mknod, cast(rawptr) name, transmute(u32) mode, dev) + ret := syscall(SYS_mknod, cast(rawptr) name, transmute(u32) mode, cast(uint) dev) return Errno(-ret) } } @@ -2586,7 +2586,7 @@ mkdirat :: proc "contextless" (dirfd: Fd, name: cstring, mode: Mode) -> (Errno) Available since Linux 2.6.16. */ mknodat :: proc "contextless" (dirfd: Fd, name: cstring, mode: Mode, dev: Dev) -> (Errno) { - ret := syscall(SYS_mknodat, dirfd, cast(rawptr) name, transmute(u32) mode, dev) + ret := syscall(SYS_mknodat, dirfd, cast(rawptr) name, transmute(u32) mode, cast(uint) dev) return Errno(-ret) } diff --git a/core/sys/linux/types.odin b/core/sys/linux/types.odin index 08a443bcc..2c01d072d 100644 --- a/core/sys/linux/types.odin +++ b/core/sys/linux/types.odin @@ -3,7 +3,7 @@ package linux /* Type for storage device handle. */ -Dev :: distinct int +Dev :: distinct u64 /* Type for 32-bit User IDs. @@ -153,6 +153,7 @@ when ODIN_ARCH == .amd64 { uid: Uid, gid: Gid, rdev: Dev, + _: [4]u8, size: i64, blksize: uint, blocks: u64,