std: fix linux uid_t, use uid_t/gid_t in std.os

- correct uid_t from i32 to u32 on linux
- define uid_t and gid_t for OSes missing definitions
- use uid_t/gid_t instead of plain u32s throughout std.os
This commit is contained in:
Isaac Freund
2020-09-03 15:08:37 +02:00
parent 26140678a5
commit e8a2aecd2f
9 changed files with 65 additions and 49 deletions

View File

@@ -655,7 +655,7 @@ pub fn nanosleep(req: *const timespec, rem: ?*timespec) usize {
return syscall2(.nanosleep, @ptrToInt(req), @ptrToInt(rem));
}
pub fn setuid(uid: u32) usize {
pub fn setuid(uid: uid_t) usize {
if (@hasField(SYS, "setuid32")) {
return syscall1(.setuid32, uid);
} else {
@@ -663,7 +663,7 @@ pub fn setuid(uid: u32) usize {
}
}
pub fn setgid(gid: u32) usize {
pub fn setgid(gid: gid_t) usize {
if (@hasField(SYS, "setgid32")) {
return syscall1(.setgid32, gid);
} else {
@@ -671,7 +671,7 @@ pub fn setgid(gid: u32) usize {
}
}
pub fn setreuid(ruid: u32, euid: u32) usize {
pub fn setreuid(ruid: uid_t, euid: uid_t) usize {
if (@hasField(SYS, "setreuid32")) {
return syscall2(.setreuid32, ruid, euid);
} else {
@@ -679,7 +679,7 @@ pub fn setreuid(ruid: u32, euid: u32) usize {
}
}
pub fn setregid(rgid: u32, egid: u32) usize {
pub fn setregid(rgid: gid_t, egid: gid_t) usize {
if (@hasField(SYS, "setregid32")) {
return syscall2(.setregid32, rgid, egid);
} else {
@@ -687,47 +687,47 @@ pub fn setregid(rgid: u32, egid: u32) usize {
}
}
pub fn getuid() u32 {
pub fn getuid() uid_t {
if (@hasField(SYS, "getuid32")) {
return @as(u32, syscall0(.getuid32));
return @as(uid_t, syscall0(.getuid32));
} else {
return @as(u32, syscall0(.getuid));
return @as(uid_t, syscall0(.getuid));
}
}
pub fn getgid() u32 {
pub fn getgid() gid_t {
if (@hasField(SYS, "getgid32")) {
return @as(u32, syscall0(.getgid32));
return @as(gid_t, syscall0(.getgid32));
} else {
return @as(u32, syscall0(.getgid));
return @as(gid_t, syscall0(.getgid));
}
}
pub fn geteuid() u32 {
pub fn geteuid() uid_t {
if (@hasField(SYS, "geteuid32")) {
return @as(u32, syscall0(.geteuid32));
return @as(uid_t, syscall0(.geteuid32));
} else {
return @as(u32, syscall0(.geteuid));
return @as(uid_t, syscall0(.geteuid));
}
}
pub fn getegid() u32 {
pub fn getegid() gid_t {
if (@hasField(SYS, "getegid32")) {
return @as(u32, syscall0(.getegid32));
return @as(gid_t, syscall0(.getegid32));
} else {
return @as(u32, syscall0(.getegid));
return @as(gid_t, syscall0(.getegid));
}
}
pub fn seteuid(euid: u32) usize {
return setreuid(std.math.maxInt(u32), euid);
pub fn seteuid(euid: uid_t) usize {
return setresuid(std.math.maxInt(uid_t), euid);
}
pub fn setegid(egid: u32) usize {
return setregid(std.math.maxInt(u32), egid);
pub fn setegid(egid: gid_t) usize {
return setregid(std.math.maxInt(gid_t), egid);
}
pub fn getresuid(ruid: *u32, euid: *u32, suid: *u32) usize {
pub fn getresuid(ruid: *uid_t, euid: *uid_t, suid: *uid_t) usize {
if (@hasField(SYS, "getresuid32")) {
return syscall3(.getresuid32, @ptrToInt(ruid), @ptrToInt(euid), @ptrToInt(suid));
} else {
@@ -735,7 +735,7 @@ pub fn getresuid(ruid: *u32, euid: *u32, suid: *u32) usize {
}
}
pub fn getresgid(rgid: *u32, egid: *u32, sgid: *u32) usize {
pub fn getresgid(rgid: *gid_t, egid: *gid_t, sgid: *gid_t) usize {
if (@hasField(SYS, "getresgid32")) {
return syscall3(.getresgid32, @ptrToInt(rgid), @ptrToInt(egid), @ptrToInt(sgid));
} else {
@@ -743,7 +743,7 @@ pub fn getresgid(rgid: *u32, egid: *u32, sgid: *u32) usize {
}
}
pub fn setresuid(ruid: u32, euid: u32, suid: u32) usize {
pub fn setresuid(ruid: uid_t, euid: uid_t, suid: uid_t) usize {
if (@hasField(SYS, "setresuid32")) {
return syscall3(.setresuid32, ruid, euid, suid);
} else {
@@ -751,7 +751,7 @@ pub fn setresuid(ruid: u32, euid: u32, suid: u32) usize {
}
}
pub fn setresgid(rgid: u32, egid: u32, sgid: u32) usize {
pub fn setresgid(rgid: gid_t, egid: gid_t, sgid: gid_t) usize {
if (@hasField(SYS, "setresgid32")) {
return syscall3(.setresgid32, rgid, egid, sgid);
} else {
@@ -759,7 +759,7 @@ pub fn setresgid(rgid: u32, egid: u32, sgid: u32) usize {
}
}
pub fn getgroups(size: usize, list: *u32) usize {
pub fn getgroups(size: usize, list: *gid_t) usize {
if (@hasField(SYS, "getgroups32")) {
return syscall2(.getgroups32, size, @ptrToInt(list));
} else {
@@ -767,7 +767,7 @@ pub fn getgroups(size: usize, list: *u32) usize {
}
}
pub fn setgroups(size: usize, list: *const u32) usize {
pub fn setgroups(size: usize, list: *const gid_t) usize {
if (@hasField(SYS, "setgroups32")) {
return syscall2(.setgroups32, size, @ptrToInt(list));
} else {