aboutsummaryrefslogtreecommitdiff
path: root/lib/std
diff options
context:
space:
mode:
authorMichael Dusan <michael.dusan@gmail.com>2023-06-23 17:46:57 -0400
committerAndrew Kelley <andrew@ziglang.org>2023-06-23 23:41:29 -0700
commit1cf06706be7408a84c7b2ef0530c7a6af51ee41a (patch)
treee16dc1c62d248aabd672ed9e5924cd91c3fd8965 /lib/std
parent148e2a5a89c978dab8037e08f940803ff494acbf (diff)
downloadzig-1cf06706be7408a84c7b2ef0530c7a6af51ee41a.tar.gz
zig-1cf06706be7408a84c7b2ef0530c7a6af51ee41a.zip
openbsd: fix NativeTargetInfo semver
- supply ".0" as .Z component and satisfy semver X.Y.Z requirement - previously only X.Y was supplied and semver parse failed
Diffstat (limited to 'lib/std')
-rw-r--r--lib/std/zig/system/NativeTargetInfo.zig11
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/std/zig/system/NativeTargetInfo.zig b/lib/std/zig/system/NativeTargetInfo.zig
index 66ab620622..29ef752d7a 100644
--- a/lib/std/zig/system/NativeTargetInfo.zig
+++ b/lib/std/zig/system/NativeTargetInfo.zig
@@ -132,7 +132,9 @@ pub fn detect(cross_target: CrossTarget) DetectError!NativeTargetInfo {
std.os.KERN.OSRELEASE,
};
var buf: [64]u8 = undefined;
- var len: usize = buf.len;
+ // consider that sysctl result includes null-termination
+ // reserve 1 byte to ensure we never overflow when appending ".0"
+ var len: usize = buf.len - 1;
std.os.sysctl(&mib, &buf, &len, null, 0) catch |err| switch (err) {
error.NameTooLong => unreachable, // constant, known good value
@@ -142,7 +144,12 @@ pub fn detect(cross_target: CrossTarget) DetectError!NativeTargetInfo {
error.Unexpected => return error.OSVersionDetectionFail,
};
- if (std.SemanticVersion.parse(buf[0 .. len - 1])) |ver| {
+ // append ".0" to satisfy semver
+ buf[len - 1] = '.';
+ buf[len] = '0';
+ len += 1;
+
+ if (std.SemanticVersion.parse(buf[0..len])) |ver| {
os.version_range.semver.min = ver;
os.version_range.semver.max = ver;
} else |_| {