std: add {set,get}rlimit bits and improve test
parent
36f1788762
commit
6418284680
|
@ -5663,7 +5663,6 @@ pub fn prctl(option: i32, args: anytype) PrctlError!u31 {
|
|||
pub const GetrlimitError = UnexpectedError;
|
||||
|
||||
pub fn getrlimit(resource: rlimit_resource) GetrlimitError!rlimit {
|
||||
// TODO implement for systems other than linux and enable test
|
||||
var limits: rlimit = undefined;
|
||||
const rc = system.getrlimit(resource, &limits);
|
||||
switch (errno(rc)) {
|
||||
|
@ -5677,7 +5676,6 @@ pub fn getrlimit(resource: rlimit_resource) GetrlimitError!rlimit {
|
|||
pub const SetrlimitError = error{PermissionDenied} || UnexpectedError;
|
||||
|
||||
pub fn setrlimit(resource: rlimit_resource, limits: rlimit) SetrlimitError!void {
|
||||
// TODO implement for systems other than linux and enable test
|
||||
const rc = system.setrlimit(resource, &limits);
|
||||
switch (errno(rc)) {
|
||||
0 => return,
|
||||
|
|
|
@ -1496,3 +1496,33 @@ pub const rusage = extern struct {
|
|||
nvcsw: isize,
|
||||
nivcsw: isize,
|
||||
};
|
||||
|
||||
pub const rlimit_resource = extern enum(c_int) {
|
||||
CPU = 0,
|
||||
FSIZE = 1,
|
||||
DATA = 2,
|
||||
STACK = 3,
|
||||
CORE = 4,
|
||||
AS = 5,
|
||||
RSS = 5,
|
||||
MEMLOCK = 6,
|
||||
NPROC = 7,
|
||||
NOFILE = 8,
|
||||
|
||||
_,
|
||||
};
|
||||
|
||||
pub const rlim_t = u64;
|
||||
|
||||
/// No limit
|
||||
pub const RLIM_INFINITY: rlim_t = (1 << 63) - 1;
|
||||
|
||||
pub const RLIM_SAVED_MAX = RLIM_INFINITY;
|
||||
pub const RLIM_SAVED_CUR = RLIM_INFINITY;
|
||||
|
||||
pub const rlimit = extern struct {
|
||||
/// Soft limit
|
||||
cur: rlim_t,
|
||||
/// Hard limit
|
||||
max: rlim_t,
|
||||
};
|
||||
|
|
|
@ -721,3 +721,36 @@ pub const Flock = extern struct {
|
|||
l_type: c_short,
|
||||
l_whence: c_short,
|
||||
};
|
||||
|
||||
pub const rlimit_resource = extern enum(c_int) {
|
||||
CPU = 0,
|
||||
FSIZE = 1,
|
||||
DATA = 2,
|
||||
STACK = 3,
|
||||
CORE = 4,
|
||||
RSS = 5,
|
||||
MEMLOCK = 6,
|
||||
NPROC = 7,
|
||||
NOFILE = 8,
|
||||
SBSIZE = 9,
|
||||
AS = 10,
|
||||
VMEM = 10,
|
||||
POSIXLOCKS = 11,
|
||||
|
||||
_,
|
||||
};
|
||||
|
||||
pub const rlim_t = i64;
|
||||
|
||||
/// No limit
|
||||
pub const RLIM_INFINITY: rlim_t = (1 << 63) - 1;
|
||||
|
||||
pub const RLIM_SAVED_MAX = RLIM_INFINITY;
|
||||
pub const RLIM_SAVED_CUR = RLIM_INFINITY;
|
||||
|
||||
pub const rlimit = extern struct {
|
||||
/// Soft limit
|
||||
cur: rlim_t,
|
||||
/// Hard limit
|
||||
max: rlim_t,
|
||||
};
|
||||
|
|
|
@ -1358,3 +1358,39 @@ pub const IPPROTO_RESERVED_253 = 253;
|
|||
|
||||
/// Reserved
|
||||
pub const IPPROTO_RESERVED_254 = 254;
|
||||
|
||||
pub const rlimit_resource = extern enum(c_int) {
|
||||
CPU = 0,
|
||||
FSIZE = 1,
|
||||
DATA = 2,
|
||||
STACK = 3,
|
||||
CORE = 4,
|
||||
RSS = 5,
|
||||
MEMLOCK = 6,
|
||||
NPROC = 7,
|
||||
NOFILE = 8,
|
||||
SBSIZE = 9,
|
||||
VMEM = 10,
|
||||
AS = 10,
|
||||
NPTS = 11,
|
||||
SWAP = 12,
|
||||
KQUEUES = 13,
|
||||
UMTXP = 14,
|
||||
|
||||
_,
|
||||
};
|
||||
|
||||
pub const rlim_t = i64;
|
||||
|
||||
/// No limit
|
||||
pub const RLIM_INFINITY: rlim_t = (1 << 63) - 1;
|
||||
|
||||
pub const RLIM_SAVED_MAX = RLIM_INFINITY;
|
||||
pub const RLIM_SAVED_CUR = RLIM_INFINITY;
|
||||
|
||||
pub const rlimit = extern struct {
|
||||
/// Soft limit
|
||||
cur: rlim_t,
|
||||
/// Hard limit
|
||||
max: rlim_t,
|
||||
};
|
||||
|
|
|
@ -1169,3 +1169,36 @@ pub const IPPROTO_PFSYNC = 240;
|
|||
|
||||
/// raw IP packet
|
||||
pub const IPPROTO_RAW = 255;
|
||||
|
||||
pub const rlimit_resource = extern enum(c_int) {
|
||||
CPU = 0,
|
||||
FSIZE = 1,
|
||||
DATA = 2,
|
||||
STACK = 3,
|
||||
CORE = 4,
|
||||
RSS = 5,
|
||||
MEMLOCK = 6,
|
||||
NPROC = 7,
|
||||
NOFILE = 8,
|
||||
SBSIZE = 9,
|
||||
AS = 10,
|
||||
VMEM = 10,
|
||||
NTHR = 11,
|
||||
|
||||
_,
|
||||
};
|
||||
|
||||
pub const rlim_t = u64;
|
||||
|
||||
/// No limit
|
||||
pub const RLIM_INFINITY: rlim_t = (1 << 63) - 1;
|
||||
|
||||
pub const RLIM_SAVED_MAX = RLIM_INFINITY;
|
||||
pub const RLIM_SAVED_CUR = RLIM_INFINITY;
|
||||
|
||||
pub const rlimit = extern struct {
|
||||
/// Soft limit
|
||||
cur: rlim_t,
|
||||
/// Hard limit
|
||||
max: rlim_t,
|
||||
};
|
||||
|
|
|
@ -1050,3 +1050,32 @@ pub const IPPROTO_PFSYNC = 240;
|
|||
|
||||
/// raw IP packet
|
||||
pub const IPPROTO_RAW = 255;
|
||||
|
||||
pub const rlimit_resource = extern enum(c_int) {
|
||||
CPU,
|
||||
FSIZE,
|
||||
DATA,
|
||||
STACK,
|
||||
CORE,
|
||||
RSS,
|
||||
MEMLOCK,
|
||||
NPROC,
|
||||
NOFILE,
|
||||
|
||||
_,
|
||||
};
|
||||
|
||||
pub const rlim_t = u64;
|
||||
|
||||
/// No limit
|
||||
pub const RLIM_INFINITY: rlim_t = (1 << 63) - 1;
|
||||
|
||||
pub const RLIM_SAVED_MAX = RLIM_INFINITY;
|
||||
pub const RLIM_SAVED_CUR = RLIM_INFINITY;
|
||||
|
||||
pub const rlimit = extern struct {
|
||||
/// Soft limit
|
||||
cur: rlim_t,
|
||||
/// Hard limit
|
||||
max: rlim_t,
|
||||
};
|
||||
|
|
|
@ -593,11 +593,13 @@ test "fsync" {
|
|||
}
|
||||
|
||||
test "getrlimit and setrlimit" {
|
||||
// TODO enable for other systems when implemented
|
||||
if (builtin.os.tag != .linux) {
|
||||
if (!@hasDecl(os, "rlimit")) {
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
const cpuLimit = try os.getrlimit(.CPU);
|
||||
try os.setrlimit(.CPU, cpuLimit);
|
||||
inline for (std.meta.fields(os.rlimit_resource)) |field| {
|
||||
const resource = @intToEnum(os.rlimit_resource, field.value);
|
||||
const limit = try os.getrlimit(resource);
|
||||
try os.setrlimit(resource, limit);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue