aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/std/os/bits/linux.zig12
-rw-r--r--lib/std/zig/system.zig11
2 files changed, 15 insertions, 8 deletions
diff --git a/lib/std/os/bits/linux.zig b/lib/std/os/bits/linux.zig
index e20e96181a..2a58c14490 100644
--- a/lib/std/os/bits/linux.zig
+++ b/lib/std/os/bits/linux.zig
@@ -1296,12 +1296,12 @@ pub const io_uring_files_update = struct {
};
pub const utsname = extern struct {
- sysname: [65]u8,
- nodename: [65]u8,
- release: [65]u8,
- version: [65]u8,
- machine: [65]u8,
- domainname: [65]u8,
+ sysname: [64:0]u8,
+ nodename: [64:0]u8,
+ release: [64:0]u8,
+ version: [64:0]u8,
+ machine: [64:0]u8,
+ domainname: [64:0]u8,
};
pub const HOST_NAME_MAX = 64;
diff --git a/lib/std/zig/system.zig b/lib/std/zig/system.zig
index a4e065e184..336dd0d314 100644
--- a/lib/std/zig/system.zig
+++ b/lib/std/zig/system.zig
@@ -201,8 +201,15 @@ pub const NativeTargetInfo = struct {
switch (Target.current.os.tag) {
.linux => {
const uts = std.os.uname();
- const release = mem.toSliceConst(u8, @ptrCast([*:0]const u8, &uts.release));
- if (std.builtin.Version.parse(release)) |ver| {
+ const release = mem.toSliceConst(u8, &uts.release);
+ // The release field may have several other fields after the
+ // kernel version
+ const kernel_version = if (mem.indexOfScalar(u8, release, '-')) |pos|
+ release[0..pos]
+ else
+ release;
+
+ if (std.builtin.Version.parse(kernel_version)) |ver| {
os.version_range.linux.range.min = ver;
os.version_range.linux.range.max = ver;
} else |err| switch (err) {