| 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,6 +2764,7 @@ pub const SysCtlError = error{ |
| 2764 | PermissionDenied, | 2764 | PermissionDenied, |
| 2765 | SystemResources, | 2765 | SystemResources, |
| 2766 | NameTooLong, | 2766 | NameTooLong, |
| 2767 | UnknownName, | ||
| 2767 | } || UnexpectedError; | 2768 | } || UnexpectedError; |
| 2768 | 2769 | ||
| 2769 | pub fn sysctl( | 2770 | pub fn sysctl( |
| ... | @@ -2779,6 +2780,7 @@ pub fn sysctl( | ... | @@ -2779,6 +2780,7 @@ pub fn sysctl( |
| 2779 | EFAULT => unreachable, | 2780 | EFAULT => unreachable, |
| 2780 | EPERM => return error.PermissionDenied, | 2781 | EPERM => return error.PermissionDenied, |
| 2781 | ENOMEM => return error.SystemResources, | 2782 | ENOMEM => return error.SystemResources, |
| 2783 | ENOENT => return error.UnknownName, | ||
| 2782 | else => |err| return unexpectedErrno(err), | 2784 | else => |err| return unexpectedErrno(err), |
| 2783 | } | 2785 | } |
| 2784 | } | 2786 | } |
| ... | @@ -2795,6 +2797,7 @@ pub fn sysctlbynameC( | ... | @@ -2795,6 +2797,7 @@ pub fn sysctlbynameC( |
| 2795 | EFAULT => unreachable, | 2797 | EFAULT => unreachable, |
| 2796 | EPERM => return error.PermissionDenied, | 2798 | EPERM => return error.PermissionDenied, |
| 2797 | ENOMEM => return error.SystemResources, | 2799 | ENOMEM => return error.SystemResources, |
| 2800 | ENOENT => return error.UnknownName, | ||
| 2798 | else => |err| return unexpectedErrno(err), | 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,7 +224,31 @@ pub const NativeTargetInfo = struct { |
| 224 | // TODO Detect native operating system version. | 224 | // TODO Detect native operating system version. |
| 225 | }, | 225 | }, |
| 226 | .macosx => { | 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 | .freebsd => { | 253 | .freebsd => { |
| 230 | // TODO Detect native operating system version. | 254 | // TODO Detect native operating system version. |