Browse Source

[sys/linux]: Add flags parameter to execveat and fix execve on arm64

PucklaJ 1 year ago
parent
commit
2bf00d9b3f
2 changed files with 5 additions and 4 deletions
  1. 2 0
      core/sys/linux/constants.odin
  2. 3 4
      core/sys/linux/sys.odin

+ 2 - 0
core/sys/linux/constants.odin

@@ -5,6 +5,8 @@ package linux
 	that relative paths are relative to current directory.
 */
 AT_FDCWD :: Fd(-100)
+AT_EMPTY_PATH :: 0x1000
+AT_SYMLINK_NOFOLLOW :: 0x100
 
 /*
 	Special value to put into timespec for utimensat() to set timestamp to the current time.

+ 3 - 4
core/sys/linux/sys.odin

@@ -769,8 +769,7 @@ execve :: proc "contextless" (name: cstring, argv: [^]cstring, envp: [^]cstring)
 		ret := syscall(SYS_execve, cast(rawptr) name, cast(rawptr) argv, cast(rawptr) envp)
 		return Errno(-ret)
 	} else {
-		ret := syscall(SYS_execveat, AT_FDCWD, cast(rawptr) name, cast(rawptr) argv, cast(rawptr) envp)
-		return Errno(-ret)
+		return execveat(AT_FDCWD, name, argv, envp, 0)
 	}
 }
 
@@ -2803,8 +2802,8 @@ getrandom :: proc "contextless" (buf: []u8, flags: Get_Random_Flags) -> (int, Er
 	Execute program relative to a directory file descriptor.
 	Available since Linux 3.19.
 */
-execveat :: proc "contextless" (dirfd: Fd, name: cstring, argv: [^]cstring, envp: [^]cstring) -> (Errno) {
-	ret := syscall(SYS_execveat, dirfd, cast(rawptr) name, cast(rawptr) argv, cast(rawptr) envp)
+execveat :: proc "contextless" (dirfd: Fd, name: cstring, argv: [^]cstring, envp: [^]cstring, flags: i32) -> (Errno) {
+	ret := syscall(SYS_execveat, dirfd, cast(rawptr) name, cast(rawptr) argv, cast(rawptr) envp, flags)
 	return Errno(-ret)
 }