| author | |
| committer | |
| log | 84549b39550014ca85d34c93381cadbd93080a0e |
| tree | 356959e9352720386fd1948ce1f7f0609a44399d |
| parent | 3c7f030a60b038045334788837f40bee0226109c |
Closes #45832 files changed, 28 insertions(+), 1 deletions(-)
lib/std/os.zig+3| ... | ... | @@ -2764,6 +2764,7 @@ pub const SysCtlError = error{ |
| 2764 | 2764 | PermissionDenied, |
| 2765 | 2765 | SystemResources, |
| 2766 | 2766 | NameTooLong, |
| 2767 | UnknownName, | |
| 2767 | 2768 | } || UnexpectedError; |
| 2768 | 2769 | |
| 2769 | 2770 | pub fn sysctl( |
| ... | ... | @@ -2779,6 +2780,7 @@ pub fn sysctl( |
| 2779 | 2780 | EFAULT => unreachable, |
| 2780 | 2781 | EPERM => return error.PermissionDenied, |
| 2781 | 2782 | ENOMEM => return error.SystemResources, |
| 2783 | ENOENT => return error.UnknownName, | |
| 2782 | 2784 | else => |err| return unexpectedErrno(err), |
| 2783 | 2785 | } |
| 2784 | 2786 | } |
| ... | ... | @@ -2795,6 +2797,7 @@ pub fn sysctlbynameC( |
| 2795 | 2797 | EFAULT => unreachable, |
| 2796 | 2798 | EPERM => return error.PermissionDenied, |
| 2797 | 2799 | ENOMEM => return error.SystemResources, |
| 2800 | ENOENT => return error.UnknownName, | |
| 2798 | 2801 | else => |err| return unexpectedErrno(err), |
| 2799 | 2802 | } |
| 2800 | 2803 | } |
lib/std/zig/system.zig+25-1| ... | ... | @@ -224,7 +224,31 @@ pub const NativeTargetInfo = struct { |
| 224 | 224 | // TODO Detect native operating system version. |
| 225 | 225 | }, |
| 226 | 226 | .macosx => { |
| 227 | // TODO Detect native operating system version. | |
| 227 | var product_version: [32]u8 = undefined; | |
| 228 | var size: usize = @sizeOf(@TypeOf(product_version)); | |
| 229 | ||
| 230 | // The osproductversion sysctl was introduced first with | |
| 231 | // High Sierra, thankfully that's also the baseline that Zig | |
| 232 | // supports | |
| 233 | std.os.sysctlbynameC( | |
| 234 | "kern.osproductversion", | |
| 235 | &product_version[0], | |
| 236 | &size, | |
| 237 | null, | |
| 238 | 0, | |
| 239 | ) catch |err| switch (err) { | |
| 240 | error.UnknownName => unreachable, | |
| 241 | else => unreachable, | |
| 242 | }; | |
| 243 | ||
| 244 | if (std.builtin.Version.parse(product_version[0..size])) |ver| { | |
| 245 | os.version_range.semver.min = ver; | |
| 246 | os.version_range.semver.max = ver; | |
| 247 | } else |err| switch (err) { | |
| 248 | error.Overflow => {}, | |
| 249 | error.InvalidCharacter => {}, | |
| 250 | error.InvalidVersion => {}, | |
| 251 | } | |
| 228 | 252 | }, |
| 229 | 253 | .freebsd => { |
| 230 | 254 | // TODO Detect native operating system version. |