mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +00:00
os/os2: Properly update CWD on Linux when using _process_start()
The `dir_fd` argument to `execveat()` is not for setting the current working directory. It is used to resolve relative executable paths, hence explicit `chdir/fchdir` call is required to set CWD.
This commit is contained in:
@@ -547,6 +547,10 @@ _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) {
|
|||||||
if _, errno = linux.dup2(stderr_fd, STDERR); errno != .NONE {
|
if _, errno = linux.dup2(stderr_fd, STDERR); errno != .NONE {
|
||||||
write_errno_to_parent_and_abort(child_pipe_fds[WRITE], errno)
|
write_errno_to_parent_and_abort(child_pipe_fds[WRITE], errno)
|
||||||
}
|
}
|
||||||
|
if dir_fd != linux.AT_FDCWD {
|
||||||
|
errno = linux.fchdir(dir_fd)
|
||||||
|
assert(errno == nil)
|
||||||
|
}
|
||||||
|
|
||||||
errno = linux.execveat(dir_fd, exe_path, &cargs[0], env)
|
errno = linux.execveat(dir_fd, exe_path, &cargs[0], env)
|
||||||
assert(errno != nil)
|
assert(errno != nil)
|
||||||
|
|||||||
Reference in New Issue
Block a user