From 0190f909799f51762d49c41980ad4718c324b5eb Mon Sep 17 00:00:00 2001 From: Tetralux Date: Fri, 28 Feb 2020 12:22:30 +0000 Subject: [PATCH 1/4] Fix mem.align_backward when pointer is already aligned --- core/mem/mem.odin | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/core/mem/mem.odin b/core/mem/mem.odin index 6dd4e9c27..36313e95b 100644 --- a/core/mem/mem.odin +++ b/core/mem/mem.odin @@ -186,9 +186,7 @@ align_backward :: inline proc(ptr: rawptr, align: uintptr) -> rawptr { align_backward_uintptr :: proc(ptr, align: uintptr) -> uintptr { assert(is_power_of_two(align)); - - ptr := rawptr(ptr - align); - return uintptr(align_forward(ptr, align)); + return align_forward_uintptr(ptr - align + 1, align); } align_backward_int :: inline proc(ptr, align: int) -> int { From 85f2f4aa88a22130c3e261da388addf3a880c0af Mon Sep 17 00:00:00 2001 From: Clay Murray Date: Tue, 3 Mar 2020 19:42:20 -0700 Subject: [PATCH 2/4] Fix issues with stat struct. The stat struct was the format for the 64 bit version of stat. So we need to call stat64 to get the proper data. Also we need to use _File_Time instead of File_Time because it is a compound value. These changes were tested and work on my computer, MacOS 64 bit. --- core/os/os_darwin.odin | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/core/os/os_darwin.odin b/core/os/os_darwin.odin index d70a2d1c7..c3e41f90e 100644 --- a/core/os/os_darwin.odin +++ b/core/os/os_darwin.odin @@ -202,10 +202,10 @@ Stat :: struct { gid: u32, // Group ID of the file's group rdev: i32, // Device ID, if device - last_access: File_Time, // Time of last access - modified: File_Time, // Time of last modification - status_change: File_Time, // Time of last status change - created: File_Time, // Time of creation + last_access: _File_Time, // Time of last access + modified: _File_Time, // Time of last modification + status_change: _File_Time, // Time of last status change + created: _File_Time, // Time of creation size: i64, // Size of the file, in bytes blocks: i64, // Number of blocks allocated for the file @@ -273,7 +273,7 @@ foreign libc { @(link_name="lseek") _unix_lseek :: proc(fs: Handle, offset: int, whence: int) -> int ---; @(link_name="gettid") _unix_gettid :: proc() -> u64 ---; @(link_name="getpagesize") _unix_getpagesize :: proc() -> i32 ---; - @(link_name="stat") _unix_stat :: proc(path: cstring, stat: ^Stat) -> int ---; + @(link_name="stat64") _unix_stat :: proc(path: cstring, stat: ^Stat) -> int ---; @(link_name="access") _unix_access :: proc(path: cstring, mask: int) -> int ---; @(link_name="malloc") _unix_malloc :: proc(size: int) -> rawptr ---; From 2817bab494a093b861b33cba982d87d178e80501 Mon Sep 17 00:00:00 2001 From: Tyler Erickson Date: Thu, 5 Mar 2020 12:13:22 -0800 Subject: [PATCH 3/4] Fix os_linux stat --- core/os/os_linux.odin | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/core/os/os_linux.odin b/core/os/os_linux.odin index 0f244c526..3b66bfd82 100644 --- a/core/os/os_linux.odin +++ b/core/os/os_linux.odin @@ -197,9 +197,9 @@ Stat :: struct { block_size: i64, // Optimal bllocksize for I/O blocks: i64, // Number of 512-byte blocks allocated - last_access: _File_Time, // Time of last access - modified: _File_Time, // Time of last modification - status_change: _File_Time, // Time of last status change + last_access: File_Time, // Time of last access + status_change: File_Time, // Time of last status change + modified: File_Time, // Time of last modification _reserve1, _reserve2, @@ -266,7 +266,7 @@ foreign libc { @(link_name="lseek64") _unix_seek :: proc(fd: Handle, offset: i64, whence: i32) -> i64 ---; @(link_name="gettid") _unix_gettid :: proc() -> u64 ---; @(link_name="getpagesize") _unix_getpagesize :: proc() -> i32 ---; - @(link_name="stat") _unix_stat :: proc(path: cstring, stat: ^Stat) -> int ---; + @(link_name="stat64") _unix_stat :: proc(path: cstring, stat: ^Stat) -> int ---; @(link_name="fstat") _unix_fstat :: proc(fd: Handle, stat: ^Stat) -> int ---; @(link_name="access") _unix_access :: proc(path: cstring, mask: int) -> int ---; @@ -362,7 +362,7 @@ last_write_time :: proc(fd: Handle) -> (File_Time, Errno) { if err != ERROR_NONE { return 0, err; } - return File_Time(s.modified.nanoseconds), ERROR_NONE; + return File_Time(s.modified), ERROR_NONE; } last_write_time_by_name :: proc(name: string) -> (File_Time, Errno) { @@ -370,7 +370,7 @@ last_write_time_by_name :: proc(name: string) -> (File_Time, Errno) { if err != ERROR_NONE { return 0, err; } - return File_Time(s.modified.nanoseconds), ERROR_NONE; + return File_Time(s.modified), ERROR_NONE; } stat :: inline proc(path: string) -> (Stat, Errno) { From f6f2ab2f25f52ce79a27160661b242bc08c0153b Mon Sep 17 00:00:00 2001 From: Tyler Erickson Date: Thu, 5 Mar 2020 19:29:32 -0800 Subject: [PATCH 4/4] Fixed bad merge --- core/os/os_linux.odin | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/core/os/os_linux.odin b/core/os/os_linux.odin index e49f0f611..d03c19ec4 100644 --- a/core/os/os_linux.odin +++ b/core/os/os_linux.odin @@ -267,13 +267,13 @@ foreign libc { @(link_name="write") _unix_write :: proc(fd: Handle, buf: rawptr, size: c.size_t) -> c.ssize_t ---; @(link_name="lseek64") _unix_seek :: proc(fd: Handle, offset: i64, whence: c.int) -> i64 ---; @(link_name="gettid") _unix_gettid :: proc() -> u64 ---; - @(link_name="getpagesize") _unix_getpagesize :: proc() -> i32 ---; - @(link_name="stat64") _unix_stat :: proc(path: cstring, stat: ^Stat) -> int ---; - @(link_name="fstat") _unix_fstat :: proc(fd: Handle, stat: ^Stat) -> int ---; - @(link_name="access") _unix_access :: proc(path: cstring, mask: int) -> int ---; + @(link_name="getpagesize") _unix_getpagesize :: proc() -> c.int ---; + @(link_name="stat64") _unix_stat :: proc(path: cstring, stat: ^Stat) -> c.int ---; + @(link_name="fstat") _unix_fstat :: proc(fd: Handle, stat: ^Stat) -> c.int ---; + @(link_name="access") _unix_access :: proc(path: cstring, mask: c.int) -> c.int ---; - @(link_name="malloc") _unix_malloc :: proc(size: int) -> rawptr ---; - @(link_name="calloc") _unix_calloc :: proc(num, size: int) -> rawptr ---; + @(link_name="malloc") _unix_malloc :: proc(size: c.size_t) -> rawptr ---; + @(link_name="calloc") _unix_calloc :: proc(num, size: c.size_t) -> rawptr ---; @(link_name="free") _unix_free :: proc(ptr: rawptr) ---; @(link_name="realloc") _unix_realloc :: proc(ptr: rawptr, size: c.size_t) -> rawptr ---; @(link_name="getenv") _unix_getenv :: proc(cstring) -> cstring ---;