From 6b2810a9a11383944b543ba36e3a2c7d3f0ee89b Mon Sep 17 00:00:00 2001 From: utox39 Date: Wed, 12 Mar 2025 23:09:05 +0100 Subject: [PATCH] feat(macos): add kernel info --- src/macos/macos.zig | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/macos/macos.zig b/src/macos/macos.zig index 8e8416a..261d8e8 100644 --- a/src/macos/macos.zig +++ b/src/macos/macos.zig @@ -24,6 +24,11 @@ pub const GpuInfo = struct { gpu_cores: i32, }; +pub const KernelInfo = struct { + kernel_name: []u8, + kernel_release: []u8, +}; + pub const RamInfo = struct { ram_size: f64, ram_usage: f64, @@ -289,6 +294,43 @@ pub fn getTerminalName(allocator: std.mem.Allocator) ![]u8 { return term_progrm; } +pub fn getKernelInfo(allocator: std.mem.Allocator) !KernelInfo { + var size: usize = 0; + + // --- KERNEL NAME --- + // First call to sysctlbyname to get the size of the string + if (c_sysctl.sysctlbyname("kern.ostype", null, &size, null, 0) != 0) { + return error.FailedToGetKernelNameSize; + } + + const kernel_type: []u8 = try allocator.alloc(u8, size - 1); + + // Second call to sysctlbyname to get the kernel name + if (c_sysctl.sysctlbyname("kern.ostype", kernel_type.ptr, &size, null, 0) != 0) { + allocator.free(kernel_type); + return error.FailedToGetKernelName; + } + + // --- KERNEL RELEASE --- + // First call to sysctlbyname to get the size of the string + if (c_sysctl.sysctlbyname("kern.osrelease", null, &size, null, 0) != 0) { + return error.FailedToGetKernelReleaseSize; + } + + const os_release: []u8 = try allocator.alloc(u8, size - 1); + + // Second call to sysctlbyname to get the kernel release + if (c_sysctl.sysctlbyname("kern.osrelease", os_release.ptr, &size, null, 0) != 0) { + allocator.free(os_release); + return error.FailedToGetKernelRelease; + } + + return KernelInfo{ + .kernel_name = kernel_type, + .kernel_release = os_release, + }; +} + pub fn getOsInfo(allocator: std.mem.Allocator) ![]u8 { var size: usize = 0;