Browse Source

fix struct stat layout linux arm64

Laytan Laats 1 year ago
parent
commit
a6aca5d6d1
1 changed files with 45 additions and 20 deletions
  1. 45 20
      core/os/os_linux.odin

+ 45 - 20
core/os/os_linux.odin

@@ -263,26 +263,51 @@ Unix_File_Time :: struct {
 	nanoseconds: i64,
 }
 
-OS_Stat :: struct {
-	device_id:     u64, // ID of device containing file
-	serial:        u64, // File serial number
-	nlink:         u64, // Number of hard links
-	mode:          u32, // Mode of the file
-	uid:           u32, // User ID of the file's owner
-	gid:           u32, // Group ID of the file's group
-	_padding:      i32, // 32 bits of padding
-	rdev:          u64, // Device ID, if device
-	size:          i64, // Size of the file, in bytes
-	block_size:    i64, // Optimal bllocksize for I/O
-	blocks:        i64, // Number of 512-byte blocks allocated
-
-	last_access:   Unix_File_Time, // Time of last access
-	modified:      Unix_File_Time, // Time of last modification
-	status_change: Unix_File_Time, // Time of last status change
-
-	_reserve1,
-	_reserve2,
-	_reserve3:     i64,
+when ODIN_ARCH == .arm64 {
+	OS_Stat :: struct {
+		device_id:     u64, // ID of device containing file
+		serial:        u64, // File serial number
+		mode:          u32, // Mode of the file
+		nlink:         u32, // Number of hard links
+		uid:           u32, // User ID of the file's owner
+		gid:           u32, // Group ID of the file's group
+		rdev:          u64, // Device ID, if device
+		 _padding:     u64,
+		size:          i64, // Size of the file, in bytes
+		block_size:    i32, // Optimal blocksize for I/O
+		_padding_2:    i32,
+		blocks:        i64, // Number of 512-byte blocks allocated
+
+		last_access:   Unix_File_Time, // Time of last access
+		modified:      Unix_File_Time, // Time of last modification
+		status_change: Unix_File_Time, // Time of last status change
+
+		_reserve1,
+		_reserve2: i32,
+	}
+	#assert(size_of(OS_Stat) == 128)
+} else {
+	OS_Stat :: struct {
+		device_id:     u64, // ID of device containing file
+		serial:        u64, // File serial number
+		nlink:         u64, // Number of hard links
+		mode:          u32, // Mode of the file
+		uid:           u32, // User ID of the file's owner
+		gid:           u32, // Group ID of the file's group
+		_padding:      i32, // 32 bits of padding
+		rdev:          u64, // Device ID, if device
+		size:          i64, // Size of the file, in bytes
+		block_size:    i64, // Optimal bllocksize for I/O
+		blocks:        i64, // Number of 512-byte blocks allocated
+
+		last_access:   Unix_File_Time, // Time of last access
+		modified:      Unix_File_Time, // Time of last modification
+		status_change: Unix_File_Time, // Time of last status change
+
+		_reserve1,
+		_reserve2,
+		_reserve3:     i64,
+	}
 }
 
 // NOTE(laleksic, 2021-01-21): Comment and rename these to match OS_Stat above