zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 3e93dce0a12e8b09f2de30276364d9ee18c6ada0 (tree)
parent 675f01f1768aa08c307640b53e8a5240fa190fab
Author: LemonBoy <thatlemon@gmail.com>
Date:   Tue, 10 Mar 2020 12:16:56 +0100

std: Fix detection of Linux kernel version

Diffstat:
Mlib/std/os/bits/linux.zig | 12++++++------
Mlib/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 @@ -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 @@ -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) {