authorgravatar for cnx@loang.netNguyễn Gia Phong <cnx@loang.net> 2024-07-09 21:29:23+09:00
committergravatar for cnx@loang.netNguyễn Gia Phong <cnx@loang.net> 2024-07-22 11:49:55+09:00
logd6fa71cd67b35f6fdb7a19a9728ff66247ab13c8
tree09045dc9677fcb54bbd5e308c4554d8e319ee109
parent179a6e61e8be2e5736e9cab9661f04269907247c
signaturelock-open Commit is signed but in an unrecognized format.

std: Wrap setpgid on POSIX


3 files changed, 23 insertions(+), 0 deletions(-)

lib/std/c.zig+1
...@@ -9167,6 +9167,7 @@ pub extern "c" fn setreuid(ruid: uid_t, euid: uid_t) c_int;...@@ -9167,6 +9167,7 @@ pub extern "c" fn setreuid(ruid: uid_t, euid: uid_t) c_int;
9167pub extern "c" fn setregid(rgid: gid_t, egid: gid_t) c_int;9167pub extern "c" fn setregid(rgid: gid_t, egid: gid_t) c_int;
9168pub extern "c" fn setresuid(ruid: uid_t, euid: uid_t, suid: uid_t) c_int;9168pub extern "c" fn setresuid(ruid: uid_t, euid: uid_t, suid: uid_t) c_int;
9169pub extern "c" fn setresgid(rgid: gid_t, egid: gid_t, sgid: gid_t) c_int;9169pub extern "c" fn setresgid(rgid: gid_t, egid: gid_t, sgid: gid_t) c_int;
9170pub extern "c" fn setpgid(pid: pid_t, pgid: pid_t) c_int;
91709171
9171pub extern "c" fn malloc(usize) ?*anyopaque;9172pub extern "c" fn malloc(usize) ?*anyopaque;
9172pub extern "c" fn realloc(?*anyopaque, usize) ?*anyopaque;9173pub extern "c" fn realloc(?*anyopaque, usize) ?*anyopaque;
lib/std/os/linux.zig+4
...@@ -1551,6 +1551,10 @@ pub fn setresgid(rgid: gid_t, egid: gid_t, sgid: gid_t) usize {...@@ -1551,6 +1551,10 @@ pub fn setresgid(rgid: gid_t, egid: gid_t, sgid: gid_t) usize {
1551 }1551 }
1552}1552}
15531553
1554pub fn setpgid(pid: pid_t, pgid: pid_t) usize {
1555 return syscall2(.setpgid, @intCast(pid), @intCast(pgid));
1556}
1557
1554pub fn getgroups(size: usize, list: *gid_t) usize {1558pub fn getgroups(size: usize, list: *gid_t) usize {
1555 if (@hasField(SYS, "getgroups32")) {1559 if (@hasField(SYS, "getgroups32")) {
1556 return syscall2(.getgroups32, size, @intFromPtr(list));1560 return syscall2(.getgroups32, size, @intFromPtr(list));
lib/std/posix.zig+18
...@@ -3415,6 +3415,24 @@ pub fn setregid(rgid: gid_t, egid: gid_t) SetIdError!void {...@@ -3415,6 +3415,24 @@ pub fn setregid(rgid: gid_t, egid: gid_t) SetIdError!void {
3415 }3415 }
3416}3416}
34173417
3418pub const SetPgidError = error{
3419 ProcessAlreadyExec,
3420 InvalidProcessGroupId,
3421 PermissionDenied,
3422 ProcessNotFound,
3423} || UnexpectedError;
3424
3425pub fn setpgid(pid: pid_t, pgid: pid_t) SetPgidError!void {
3426 switch (errno(system.setpgid(pid, pgid))) {
3427 .SUCCESS => return,
3428 .ACCES => return error.ProcessAlreadyExec,
3429 .INVAL => return error.InvalidProcessGroupId,
3430 .PERM => return error.PermissionDenied,
3431 .SRCH => return error.ProcessNotFound,
3432 else => |err| return unexpectedErrno(err),
3433 }
3434}
3435
3418/// Test whether a file descriptor refers to a terminal.3436/// Test whether a file descriptor refers to a terminal.
3419pub fn isatty(handle: fd_t) bool {3437pub fn isatty(handle: fd_t) bool {
3420 if (native_os == .windows) {3438 if (native_os == .windows) {