lens

posix system fetch tool
git clone git://brookjeynes.dev/bjeynes/lens.git
Log | Files | Refs | README

commit 9f122c571dcc6aaf0348918103fd66380cb3d7c4
parent ac38889336c2ead342c79bda6a7eb383ea717c3b
Author: brookjeynes <me@brookjeynes.dev>
Date:   Wed, 28 Jan 2026 13:39:15 +1000

feat: removed buffered file iterator

Diffstat:
Dsrc/buffered_file_iter.zig | 29-----------------------------
Msrc/main.zig | 6++++--
Msrc/process.zig | 14+++++++-------
Msrc/stats.zig | 12++++++------
Msrc/sys_info.zig | 20++++++++++----------
5 files changed, 27 insertions(+), 54 deletions(-)

diff --git a/src/buffered_file_iter.zig b/src/buffered_file_iter.zig @@ -1,29 +0,0 @@ -const std = @import("std"); - -const BufferedFileIterator = @This(); - -alloc: std.mem.Allocator, -buf_reader: std.io.BufferedReader(4096, std.io.AnyReader), -line: std.ArrayList(u8), - -pub fn init(alloc: std.mem.Allocator, reader: std.io.AnyReader) BufferedFileIterator { - return BufferedFileIterator{ - .alloc = alloc, - .buf_reader = std.io.bufferedReader(reader), - .line = std.ArrayList(u8).init(alloc), - }; -} - -pub fn deinit(self: BufferedFileIterator) void { - self.line.deinit(); -} - -pub fn next(self: *BufferedFileIterator) !?[]const u8 { - self.line.clearRetainingCapacity(); - const writer = self.line.writer(); - self.buf_reader.reader().streamUntilDelimiter(writer, '\n', null) catch |err| switch (err) { - error.EndOfStream => return null, - else => return err, - }; - return self.line.items; -} diff --git a/src/main.zig b/src/main.zig @@ -1,9 +1,11 @@ const std = @import("std"); const builtin = @import("builtin"); + +const ziggy = @import("ziggy"); + +const environment = @import("environment.zig"); const stats = @import("stats.zig"); const sys_info = @import("sys_info.zig"); -const environment = @import("environment.zig"); -const ziggy = @import("ziggy"); const padding: u8 = 9; diff --git a/src/process.zig b/src/process.zig @@ -1,8 +1,8 @@ const std = @import("std"); const builtin = @import("builtin"); -const BufferedFileIterator = @import("buffered_file_iter.zig"); pub fn getParentPid(alloc: std.mem.Allocator, pid: std.c.pid_t) !std.c.pid_t { + _ = alloc; switch (builtin.os.tag) { .linux, .openbsd => { var buf: [std.fs.max_path_bytes]u8 = undefined; @@ -11,10 +11,10 @@ pub fn getParentPid(alloc: std.mem.Allocator, pid: std.c.pid_t) !std.c.pid_t { const file = try std.fs.openFileAbsolute(path, .{ .mode = .read_only }); defer file.close(); - var file_it = BufferedFileIterator.init(alloc, file.reader().any()); - defer file_it.deinit(); + var file_buffer: [1024]u8 = undefined; + var file_reader = file.reader(&file_buffer); - while (try file_it.next()) |line| { + while (try file_reader.interface.takeDelimiter('\n')) |line| { if (std.mem.startsWith(u8, line, "PPid")) { var ppid_it = std.mem.splitScalar(u8, line, ':'); _ = ppid_it.next(); // Skip "PPid:" @@ -43,10 +43,10 @@ pub fn getProcessName(alloc: std.mem.Allocator, pid: std.c.pid_t) ![]const u8 { const file = try std.fs.openFileAbsolute(path, .{ .mode = .read_only }); defer file.close(); - var file_it = BufferedFileIterator.init(alloc, file.reader().any()); - defer file_it.deinit(); + var file_buffer: [1024]u8 = undefined; + var file_reader = file.reader(&file_buffer); - while (try file_it.next()) |line| { + while (try file_reader.interface.takeDelimiter('\n')) |line| { if (std.mem.startsWith(u8, line, "Name")) { var name_it = std.mem.splitScalar(u8, line, ':'); _ = name_it.next(); // Skip "Name:" diff --git a/src/stats.zig b/src/stats.zig @@ -1,6 +1,5 @@ const std = @import("std"); const builtin = @import("builtin"); -const BufferedFileIterator = @import("buffered_file_iter.zig"); pub fn getBattery(alloc: std.mem.Allocator) ![]const u8 { switch (builtin.os.tag) { @@ -85,14 +84,15 @@ pub fn getMemory(alloc: std.mem.Allocator, options: struct { mb: bool }) ![]cons const file = try std.fs.openFileAbsolute("/proc/meminfo", .{ .mode = .read_only }); defer file.close(); - var file_it = BufferedFileIterator.init(alloc, file.reader().any()); - defer file_it.deinit(); + var file_buffer: [1024]u8 = undefined; + var file_reader = file.reader(&file_buffer); const dividend: usize = if (options.mb) 1000 else 1024; const suffix = if (options.mb) "MB" else "MiB"; const mem_total = lbl: { - const line = try file_it.next() orelse return error.MemTotalIsNotSpecified; + + const line = try file_reader.interface.takeDelimiter('\n') orelse return error.MemAvailableIsNotSpecified; var line_it = std.mem.splitScalar(u8, line, ':'); _ = line_it.next(); // Skip "MemTotal:" const mem_total_with_suffix = line_it.next() orelse return error.MemTotalIsNull; @@ -102,10 +102,10 @@ pub fn getMemory(alloc: std.mem.Allocator, options: struct { mb: bool }) ![]cons break :lbl mem_total_int; }; - _ = try file_it.next(); // Skip "MemFree: x" + _ = try file_reader.interface.takeDelimiter('\n'); // Skip "MemFree: x" const mem_available = lbl: { - const line = try file_it.next() orelse return error.MemAvailableIsNotSpecified; + const line = try file_reader.interface.takeDelimiter('\n') orelse return error.MemAvailableIsNotSpecified; var line_it = std.mem.splitScalar(u8, line, ':'); _ = line_it.next(); // Skip "MemAvailable:" const mem_available_with_suffix = line_it.next() orelse return error.MemAvailableIsNull; diff --git a/src/sys_info.zig b/src/sys_info.zig @@ -1,6 +1,6 @@ const std = @import("std"); const builtin = @import("builtin"); -const BufferedFileIterator = @import("buffered_file_iter.zig"); + const process = @import("process.zig"); pub fn getCpu(alloc: std.mem.Allocator) ![]const u8 { @@ -12,10 +12,10 @@ pub fn getCpu(alloc: std.mem.Allocator) ![]const u8 { ); defer file.close(); - var file_it = BufferedFileIterator.init(alloc, file.reader().any()); - defer file_it.deinit(); + var file_buffer: [1024]u8 = undefined; + var file_reader = file.reader(&file_buffer); - while (try file_it.next()) |line| { + while (try file_reader.interface.takeDelimiter('\n')) |line| { if (std.mem.startsWith(u8, line, "model name")) { var name_it = std.mem.tokenizeScalar(u8, line, ':'); _ = name_it.next(); // Skip "model name :" @@ -106,10 +106,10 @@ pub fn getDistro(alloc: std.mem.Allocator) ![]const u8 { ); defer file.close(); - var file_it = BufferedFileIterator.init(alloc, file.reader().any()); - defer file_it.deinit(); + var file_buffer: [1024]u8 = undefined; + var file_reader = file.reader(&file_buffer); - while (try file_it.next()) |line| { + while (try file_reader.interface.takeDelimiter('\n')) |line| { if (std.mem.startsWith(u8, line, "PRETTY_NAME")) { var name_it = std.mem.tokenizeScalar(u8, line, '='); _ = name_it.next(); // Skip "NAME=" @@ -151,10 +151,10 @@ pub fn getDistroId(alloc: std.mem.Allocator) ![]const u8 { ); defer file.close(); - var file_it = BufferedFileIterator.init(alloc, file.reader().any()); - defer file_it.deinit(); + var file_buffer: [1024]u8 = undefined; + var file_reader = file.reader(&file_buffer); - while (try file_it.next()) |line| { + while (try file_reader.interface.takeDelimiter('\n')) |line| { if (std.mem.startsWith(u8, line, "ID")) { var id_it = std.mem.tokenizeScalar(u8, line, '='); _ = id_it.next(); // Skip "ID="