parent
3c7f030a60
commit
84549b3955
|
@ -2764,6 +2764,7 @@ pub const SysCtlError = error{
|
|||
PermissionDenied,
|
||||
SystemResources,
|
||||
NameTooLong,
|
||||
UnknownName,
|
||||
} || UnexpectedError;
|
||||
|
||||
pub fn sysctl(
|
||||
|
@ -2779,6 +2780,7 @@ pub fn sysctl(
|
|||
EFAULT => unreachable,
|
||||
EPERM => return error.PermissionDenied,
|
||||
ENOMEM => return error.SystemResources,
|
||||
ENOENT => return error.UnknownName,
|
||||
else => |err| return unexpectedErrno(err),
|
||||
}
|
||||
}
|
||||
|
@ -2795,6 +2797,7 @@ pub fn sysctlbynameC(
|
|||
EFAULT => unreachable,
|
||||
EPERM => return error.PermissionDenied,
|
||||
ENOMEM => return error.SystemResources,
|
||||
ENOENT => return error.UnknownName,
|
||||
else => |err| return unexpectedErrno(err),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -224,7 +224,31 @@ pub const NativeTargetInfo = struct {
|
|||
// TODO Detect native operating system version.
|
||||
},
|
||||
.macosx => {
|
||||
// TODO Detect native operating system version.
|
||||
var product_version: [32]u8 = undefined;
|
||||
var size: usize = @sizeOf(@TypeOf(product_version));
|
||||
|
||||
// The osproductversion sysctl was introduced first with
|
||||
// High Sierra, thankfully that's also the baseline that Zig
|
||||
// supports
|
||||
std.os.sysctlbynameC(
|
||||
"kern.osproductversion",
|
||||
&product_version[0],
|
||||
&size,
|
||||
null,
|
||||
0,
|
||||
) catch |err| switch (err) {
|
||||
error.UnknownName => unreachable,
|
||||
else => unreachable,
|
||||
};
|
||||
|
||||
if (std.builtin.Version.parse(product_version[0..size])) |ver| {
|
||||
os.version_range.semver.min = ver;
|
||||
os.version_range.semver.max = ver;
|
||||
} else |err| switch (err) {
|
||||
error.Overflow => {},
|
||||
error.InvalidCharacter => {},
|
||||
error.InvalidVersion => {},
|
||||
}
|
||||
},
|
||||
.freebsd => {
|
||||
// TODO Detect native operating system version.
|
||||
|
|
Loading…
Reference in New Issue