mirror of
https://github.com/ziglang/zig.git
synced 2026-01-20 22:35:24 +00:00
std.os.memfd_create: add error.SystemOutdated
This commit is contained in:
parent
8186211404
commit
0c8ec369f0
@ -3286,9 +3286,13 @@ pub const MemFdCreateError = error{
|
||||
SystemFdQuotaExceeded,
|
||||
ProcessFdQuotaExceeded,
|
||||
OutOfMemory,
|
||||
|
||||
/// memfd_create is available in Linux 3.17 and later. This error is returned
|
||||
/// for older kernel versions.
|
||||
SystemOutdated,
|
||||
} || UnexpectedError;
|
||||
|
||||
pub fn memfd_createC(name: [*:0]const u8, flags: u32) !fd_t {
|
||||
pub fn memfd_createC(name: [*:0]const u8, flags: u32) MemFdCreateError!fd_t {
|
||||
// memfd_create is available only in glibc versions starting with 2.27.
|
||||
const use_c = std.c.versionCheck(.{ .major = 2, .minor = 27, .patch = 0 }).ok;
|
||||
const sys = if (use_c) std.c else linux;
|
||||
@ -3301,6 +3305,7 @@ pub fn memfd_createC(name: [*:0]const u8, flags: u32) !fd_t {
|
||||
ENFILE => return error.SystemFdQuotaExceeded,
|
||||
EMFILE => return error.ProcessFdQuotaExceeded,
|
||||
ENOMEM => return error.OutOfMemory,
|
||||
ENOSYS => return error.SystemOutdated,
|
||||
else => |err| return unexpectedErrno(err),
|
||||
}
|
||||
}
|
||||
|
||||
@ -241,14 +241,11 @@ test "argsAlloc" {
|
||||
test "memfd_create" {
|
||||
// memfd_create is linux specific.
|
||||
if (builtin.os != .linux) return error.SkipZigTest;
|
||||
// Zig's CI testing infrastructure uses QEMU. Currently the version is
|
||||
// qemu 2.11 from Ubuntu 18.04, which does not have memfd_create support.
|
||||
// memfd_create support is introduced in qemu 4.2. To avoid
|
||||
// "invalid syscall" errors from qemu, we disable the test when not linking libc.
|
||||
// https://github.com/ziglang/zig/issues/4019
|
||||
if (!builtin.link_libc) return error.SkipZigTest;
|
||||
|
||||
const fd = try std.os.memfd_create("test", 0);
|
||||
const fd = std.os.memfd_create("test", 0) catch |err| switch (err) {
|
||||
// Related: https://github.com/ziglang/zig/issues/4019
|
||||
error.SystemOutdated => return error.SkipZigTest,
|
||||
else => |e| return e,
|
||||
};
|
||||
defer std.os.close(fd);
|
||||
try std.os.write(fd, "test");
|
||||
try std.os.lseek_SET(fd, 0);
|
||||
|
||||
@ -597,6 +597,13 @@ pub const Target = union(enum) {
|
||||
};
|
||||
}
|
||||
|
||||
pub fn isMusl(self: Target) bool {
|
||||
return switch (self.getAbi()) {
|
||||
.musl, .musleabi, .musleabihf => true,
|
||||
else => false,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn isDarwin(self: Target) bool {
|
||||
return switch (self.getOs()) {
|
||||
.ios, .macosx, .watchos, .tvos => true,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user