Browse Source

Add Linux support for POSIX sys ipc, mman, time, utsname.

Isaac Andrade 11 months ago
parent
commit
ff82396e7c

+ 1 - 1
core/sys/posix/sys_ipc.odin

@@ -36,7 +36,7 @@ IPC_Flag_Bits :: enum c.int {
 }
 }
 IPC_Flags :: bit_set[IPC_Flag_Bits; c.int]
 IPC_Flags :: bit_set[IPC_Flag_Bits; c.int]
 
 
-when ODIN_OS == .Darwin {
+when ODIN_OS == .Darwin || ODIN_OS == .Linux {
 
 
 	key_t :: distinct c.int32_t
 	key_t :: distinct c.int32_t
 
 

+ 8 - 3
core/sys/posix/sys_mman.odin

@@ -163,7 +163,7 @@ when ODIN_OS == .NetBSD {
 	@(private) LMSYNC :: "msync"
 	@(private) LMSYNC :: "msync"
 }
 }
 
 
-when ODIN_OS == .Darwin || ODIN_OS == .NetBSD || ODIN_OS == .OpenBSD {
+when ODIN_OS == .Darwin || ODIN_OS == .NetBSD || ODIN_OS == .OpenBSD || ODIN_OS == .Linux {
 
 
 	PROT_EXEC   :: 0x04
 	PROT_EXEC   :: 0x04
 	_PROT_NONE  :: 0x00
 	_PROT_NONE  :: 0x00
@@ -174,7 +174,7 @@ when ODIN_OS == .Darwin || ODIN_OS == .NetBSD || ODIN_OS == .OpenBSD {
 	MAP_PRIVATE :: 0x0002
 	MAP_PRIVATE :: 0x0002
 	MAP_SHARED  :: 0x0001
 	MAP_SHARED  :: 0x0001
 
 
-	when ODIN_OS == .Darwin {
+	when ODIN_OS == .Darwin || ODIN_OS == .Linux {
 		MS_INVALIDATE :: 0x0002
 		MS_INVALIDATE :: 0x0002
 		_MS_SYNC      :: 0x0010
 		_MS_SYNC      :: 0x0010
 	} else when ODIN_OS == .NetBSD {
 	} else when ODIN_OS == .NetBSD {
@@ -184,13 +184,18 @@ when ODIN_OS == .Darwin || ODIN_OS == .NetBSD || ODIN_OS == .OpenBSD {
 		MS_INVALIDATE :: 0x0004
 		MS_INVALIDATE :: 0x0004
 		_MS_SYNC      :: 0x0002
 		_MS_SYNC      :: 0x0002
 	}
 	}
+
 	MS_ASYNC :: 0x0001
 	MS_ASYNC :: 0x0001
 	MS_SYNC  :: Sync_Flags{Sync_Flags_Bits(log2(_MS_SYNC))}
 	MS_SYNC  :: Sync_Flags{Sync_Flags_Bits(log2(_MS_SYNC))}
 
 
 	MCL_CURRENT :: 0x0001
 	MCL_CURRENT :: 0x0001
 	MCL_FUTURE  :: 0x0002
 	MCL_FUTURE  :: 0x0002
 
 
-	MAP_FAILED :: rawptr(~uintptr(0))
+	when ODIN_OS == .Linux {
+		MAP_FAILED :: rawptr(~uintptr(-1))
+	} else {
+		MAP_FAILED :: rawptr(~uintptr(0))
+	}
 
 
 	POSIX_MADV_DONTNEED   :: 4
 	POSIX_MADV_DONTNEED   :: 4
 	POSIX_MADV_NORMAL     :: 0
 	POSIX_MADV_NORMAL     :: 0

+ 1 - 1
core/sys/posix/sys_time.odin

@@ -66,7 +66,7 @@ when ODIN_OS == .NetBSD {
 	@(private) LUTIMES       :: "utimes"
 	@(private) LUTIMES       :: "utimes"
 }
 }
 
 
-when ODIN_OS == .Darwin || ODIN_OS == .FreeBSD || ODIN_OS == .NetBSD || ODIN_OS == .OpenBSD {
+when ODIN_OS == .Darwin || ODIN_OS == .FreeBSD || ODIN_OS == .NetBSD || ODIN_OS == .OpenBSD || ODIN_OS == .Linux {
 
 
 	itimerval :: struct {
 	itimerval :: struct {
 		it_interval: timeval, /* [PSX] timer interval */
 		it_interval: timeval, /* [PSX] timer interval */

+ 9 - 4
core/sys/posix/sys_utsname.odin

@@ -37,10 +37,15 @@ foreign lib {
 	uname :: proc(uname: ^utsname) -> c.int ---
 	uname :: proc(uname: ^utsname) -> c.int ---
 }
 }
 
 
-when ODIN_OS == .Darwin || ODIN_OS == .FreeBSD || ODIN_OS == .NetBSD || ODIN_OS == .OpenBSD {
-
-	@(private)
-	_SYS_NAMELEN :: 256
+when ODIN_OS == .Darwin || ODIN_OS == .FreeBSD || ODIN_OS == .NetBSD || ODIN_OS == .OpenBSD || ODIN_OS == .Linux {
+
+	when ODIN_OS == .Linux {
+		@(private)
+		_SYS_NAMELEN :: 65
+	} else {
+		@(private)
+		_SYS_NAMELEN :: 256
+	}
 
 
 	utsname :: struct {
 	utsname :: struct {
 		sysname:  [_SYS_NAMELEN]c.char `fmt:"s,0"`, /* [PSX] name of OS */
 		sysname:  [_SYS_NAMELEN]c.char `fmt:"s,0"`, /* [PSX] name of OS */