cli: use a caller-provided write buffer

This follows Zig's conventions more closely, where the caller owns the
write buffer.
This commit is contained in:
Jon Parise
2026-03-29 08:18:29 -04:00
parent 4a0cca1c5b
commit 62f8a1cbcf
2 changed files with 7 additions and 8 deletions

View File

@@ -15,9 +15,6 @@ child: ?std.process.Child = null,
/// stdout paths.
file_writer: std.fs.File.Writer = undefined,
/// The write buffer.
buffer: [4096]u8 = undefined,
/// Initialize the pager. If stdout is a TTY, this spawns the pager
/// process. Otherwise, output goes directly to stdout.
pub fn init(alloc: Allocator) Pager {
@@ -25,11 +22,11 @@ pub fn init(alloc: Allocator) Pager {
}
/// Writes to the pager process if available; otherwise, stdout.
pub fn writer(self: *Pager) *std.Io.Writer {
pub fn writer(self: *Pager, buffer: []u8) *std.Io.Writer {
if (self.child) |child| {
self.file_writer = child.stdin.?.writer(&self.buffer);
self.file_writer = child.stdin.?.writer(buffer);
} else {
self.file_writer = std.fs.File.stdout().writer(&self.buffer);
self.file_writer = std.fs.File.stdout().writer(buffer);
}
return &self.file_writer.interface;
}
@@ -84,6 +81,7 @@ test "pager: default writer" {
var pager: Pager = .{};
defer pager.deinit();
try std.testing.expect(pager.child == null);
const w = pager.writer();
var buf: [4096]u8 = undefined;
const w = pager.writer(&buf);
try w.writeAll("hello");
}

View File

@@ -94,7 +94,8 @@ pub fn run(alloc: Allocator) !u8 {
var pager: Pager = if (!no_pager) .init(alloc) else .{};
defer pager.deinit();
const writer = pager.writer();
var buffer: [4096]u8 = undefined;
const writer = pager.writer(&buffer);
if (text) |t| {
try writer.writeAll(t);