Browse Source

Remove `core:os` dependency for `runtime.os_write` on linux

gingerBill 1 year ago
parent
commit
9be9f0bb2c
2 changed files with 23 additions and 0 deletions
  1. 1 0
      base/runtime/os_specific_any.odin
  2. 22 0
      base/runtime/os_specific_linux.odin

+ 1 - 0
base/runtime/os_specific_any.odin

@@ -1,4 +1,5 @@
 //+build !darwin
+//+build !linux
 //+build !freestanding
 //+build !js
 //+build !wasi

+ 22 - 0
base/runtime/os_specific_linux.odin

@@ -0,0 +1,22 @@
+//+private
+package runtime
+
+import "base:intrinsics"
+
+_os_write :: proc "contextless" (data: []byte) -> (int, _OS_Errno) {
+	when ODIN_ARCH == .amd64 {
+		SYS_write :: uintptr(1)
+	} else when ODIN_ARCH == .arm64 {
+		SYS_write :: uintptr(64)
+	} else when ODIN_ARCH == .i386 {
+		SYS_write :: uintptr(4)
+	} else when ODIN_ARCH == .arm32 {
+		SYS_write :: uintptr(4)
+	}
+
+	ret := int(intrinsics.syscall(SYS_write, uintptr(stderr), uintptr(raw_data(data)), uintptr(len(data))))
+	if ret < 0 && ret > -4096 {
+		return 0, _OS_Errno(-ret)
+	}
+	return ret, 0
+}