diff options
| -rw-r--r-- | lib/std/os/bits/linux.zig | 12 | ||||
| -rw-r--r-- | lib/std/zig/system.zig | 11 |
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) { |
