aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/libghostty-vt/src/os/kernel_info.zig
diff options
context:
space:
mode:
authorsl0p <sl0p@sl0p.foo>2026-08-13 22:00:03 +0200
committersl0p <sl0p@sl0p.foo>2026-08-13 22:00:03 +0200
commit2c1b855c3cf8cf8841bf25cd939e478a7f0bfac8 (patch)
tree7cd6274303ba1da1f8bd57371aec336dd687fb58 /vendor/libghostty-vt/src/os/kernel_info.zig
downloadslosh-2c1b855c3cf8cf8841bf25cd939e478a7f0bfac8.tar.gz
slosh-2c1b855c3cf8cf8841bf25cd939e478a7f0bfac8.tar.xz
slosh-2c1b855c3cf8cf8841bf25cd939e478a7f0bfac8.zip
sl0ptty: M0 — libghostty-vt vendored, one pane, compositor, diff renderer
Design contract in DESIGN.md. libghostty-vt vendored fresh from ghostty main@bedb6f2 (zig 0.16), built to a 14MB static lib. M0: pty spawn (no libutil), a lib-vt terminal per pane, a screen cell buffer, a diff emitter that repaints only what changed, raw mode, SIGWINCH, and a ~120Hz frame cap that coalesces pty reads. Also the seed of the headless harness: --headless dumps the composited screen without a tty, so composition is testable in milliseconds. tests/live_m0.py covers what headless cannot: raw mode, the diff emitter, resize propagation, and the quit path. 6/6 green.
Diffstat (limited to 'vendor/libghostty-vt/src/os/kernel_info.zig')
-rw-r--r--vendor/libghostty-vt/src/os/kernel_info.zig32
1 files changed, 32 insertions, 0 deletions
diff --git a/vendor/libghostty-vt/src/os/kernel_info.zig b/vendor/libghostty-vt/src/os/kernel_info.zig
new file mode 100644
index 0000000..60e6b49
--- /dev/null
+++ b/vendor/libghostty-vt/src/os/kernel_info.zig
@@ -0,0 +1,32 @@
+const std = @import("std");
+const builtin = @import("builtin");
+const global = @import("../global.zig");
+
+pub fn getKernelInfo(alloc: std.mem.Allocator) ?[]const u8 {
+ if (comptime builtin.os.tag != .linux) return null;
+ const path = "/proc/sys/kernel/osrelease";
+ var file = std.Io.Dir.openFileAbsolute(global.io(), path, .{}) catch return null;
+ defer file.close(global.io());
+
+ // 128 bytes should be enough to hold the kernel information
+ var kernel_info_buf: [128]u8 = undefined;
+ const kernel_info = kernel_info_buf[0 .. file.readPositionalAll(
+ global.io(),
+ &kernel_info_buf,
+ 0,
+ ) catch return null];
+ return alloc.dupe(u8, std.mem.trim(u8, kernel_info, &std.ascii.whitespace)) catch return null;
+}
+
+test "read /proc/sys/kernel/osrelease" {
+ if (comptime builtin.os.tag != .linux) return null;
+ const allocator = std.testing.allocator;
+
+ const kernel_info = getKernelInfo(allocator).?;
+ defer allocator.free(kernel_info);
+
+ // Since we can't hardcode the info in tests, just check
+ // if something was read from the file
+ try std.testing.expect(kernel_info.len > 0);
+ try std.testing.expect(!std.mem.eql(u8, kernel_info, ""));
+}