# std.os.linux.setsid\(\): return raw syscall0 result · gitcafe/zig

[View on GitCafe](https://git.cafe/gitcafe/zig/commit/04071d64bb83c0600d445a2f4b2541e68a6021bf)

Repository: [gitcafe/zig](https://git.cafe/gitcafe/zig)

Visibility: public

Requested revision: 04071d64bb83c0600d445a2f4b2541e68a6021bf

Requested commit: 04071d64bb83c0600d445a2f4b2541e68a6021bf

Commit: 04071d64bb83c0600d445a2f4b2541e68a6021bf

Tree: 8b89e2ad35aeadce808932ee934923945cd632d7

Author: Brandon Black

Committer: Brandon Black

## Message

```
std.os.linux.setsid(): return raw syscall0 result

When not linking libc on 64-bit Linux and calling posix.setsid(),
we get a type error at compile time inside of posix.errno().  This
is because posix.errno()'s non-libc branch expects a usize-sized
value, which is what all the error-returning os.linux syscalls
return, and linux.setsid() instead returned a pid_t, which is only
32 bits wide.

This and the other 3 pid-related calls just below it (getpid(),
getppid(), and gettid()) are the only Linux syscall examples here
that are casting their return values to pid_t. For the other 3
this makes sense: those calls are documented to have no possible
errors and always return a valid pid_t value.

However, setsid() actually can return the error EPERM, and
therefore needs to return the raw value from syscall0 for
posix.errno() to process like normal.

Additionally, posix.setsid() needs an @intCast(rc) for the success
case as a result, like most other such cases.

```

## Parents

- [a0ec4e270e680960290642468f6df3ce7e7d7664](https://git.cafe/gitcafe/zig/commit/a0ec4e270e680960290642468f6df3ce7e7d7664?format=markdown)

[Source at this commit](https://git.cafe/gitcafe/zig/tree/04071d64bb83c0600d445a2f4b2541e68a6021bf?format=markdown)
