Browse Source

Use the _unix_fstat pointer to avoid 144B copies on fileIO

Colin Davidson 3 years ago
parent
commit
54a6637d38
1 changed files with 7 additions and 5 deletions
  1. 7 5
      core/os/os_linux.odin

+ 7 - 5
core/os/os_linux.odin

@@ -501,11 +501,13 @@ seek :: proc(fd: Handle, offset: i64, whence: int) -> (i64, Errno) {
 }
 }
 
 
 file_size :: proc(fd: Handle) -> (i64, Errno) {
 file_size :: proc(fd: Handle) -> (i64, Errno) {
-	s, err := _fstat(fd)
-	if err != ERROR_NONE {
-		return 0, err
-	}
-	return max(s.size, 0), ERROR_NONE
+    // deliberately uninitialized; the syscall fills this buffer for us
+    s: OS_Stat = ---
+    result := _unix_fstat(fd, &s)
+    if result < 0 {
+        return 0, _get_errno(result)
+    }
+    return max(s.size, 0), ERROR_NONE
 }
 }
 
 
 rename :: proc(old_path, new_path: string) -> Errno {
 rename :: proc(old_path, new_path: string) -> Errno {