commit 9f122c571dcc6aaf0348918103fd66380cb3d7c4
parent ac38889336c2ead342c79bda6a7eb383ea717c3b
Author: brookjeynes <me@brookjeynes.dev>
Date: Wed, 28 Jan 2026 13:39:15 +1000
feat: removed buffered file iterator
Diffstat:
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="