authorgravatar for 14938807+xackus@users.noreply.github.comxackus <14938807+xackus@users.noreply.github.com> 2020-10-04 23:55:33+02:00
committergravatar for 14938807+xackus@users.noreply.github.comxackus <14938807+xackus@users.noreply.github.com> 2020-10-04 23:57:49+02:00
log1b4296831a60983adaaaab680ebacc03833f2ae5
treedd7766fa76a59fbf48dd3eb1297129ad9c3e7c1d
parent4ec26be424506ed312639405b37bc68d00ccde4e

simplify api and add smoke test


2 files changed, 18 insertions(+), 5 deletions(-)

lib/std/os.zig+8-5
...@@ -5413,10 +5413,12 @@ pub fn prctl(option: i32, args: anytype) PrctlError!u31 {...@@ -5413,10 +5413,12 @@ pub fn prctl(option: i32, args: anytype) PrctlError!u31 {
54135413
5414pub const GetrlimitError = UnexpectedError;5414pub const GetrlimitError = UnexpectedError;
54155415
5416pub fn getrlimit(resource: rlimit_resource, limits: *rlimit) GetrlimitError!void {5416pub fn getrlimit(resource: rlimit_resource) GetrlimitError!rlimit {
5417 const rc = system.getrlimit(resource, limits);5417 // TODO implement for systems other than linux and enable test
5418 var limits: rlimit = undefined;
5419 const rc = system.getrlimit(resource, &limits);
5418 switch (errno(rc)) {5420 switch (errno(rc)) {
5419 0 => return,5421 0 => return limits,
5420 EFAULT => unreachable, // bogus pointer5422 EFAULT => unreachable, // bogus pointer
5421 EINVAL => unreachable,5423 EINVAL => unreachable,
5422 else => |err| return std.os.unexpectedErrno(err),5424 else => |err| return std.os.unexpectedErrno(err),
...@@ -5427,8 +5429,9 @@ pub const SetrlimitError = error{...@@ -5427,8 +5429,9 @@ pub const SetrlimitError = error{
5427 PermissionDenied,5429 PermissionDenied,
5428} || UnexpectedError;5430} || UnexpectedError;
54295431
5430pub fn setrlimit(resource: rlimit_resource, limits: *const rlimit) SetrlimitError!void {5432pub fn setrlimit(resource: rlimit_resource, limits: rlimit) SetrlimitError!void {
5431 const rc = system.setrlimit(resource, limits);5433 // TODO implement for systems other than linux and enable test
5434 const rc = system.setrlimit(resource, &limits);
5432 switch (errno(rc)) {5435 switch (errno(rc)) {
5433 0 => return,5436 0 => return,
5434 EFAULT => unreachable, // bogus pointer5437 EFAULT => unreachable, // bogus pointer
lib/std/os/test.zig+10
...@@ -591,3 +591,13 @@ test "fsync" {...@@ -591,3 +591,13 @@ test "fsync" {
591 try os.fsync(file.handle);591 try os.fsync(file.handle);
592 try os.fdatasync(file.handle);592 try os.fdatasync(file.handle);
593}593}
594
595test "getrlimit and setrlimit" {
596 // TODO enable for other systems when implemented
597 if(builtin.os.tag != .linux){
598 return error.SkipZigTest;
599 }
600
601 const cpuLimit = try os.getrlimit(.CPU);
602 try os.setrlimit(.CPU, cpuLimit);
603}