commit f78f70dbd858536fd1a1ce0a1706ac259bcdf538 (tree)
parent d94e061ade545f3fbdd4ab1a18f860b05050ebf6
Author: Andrew Kelley <andrew@ziglang.org>
Date: Thu, 4 Sep 2025 11:13:08 -0700
std.fs.File.Writer: break up seekTo
- introduce seekToUnbuffered which asserts no buffered data and does not
have WriteFailed in the error set
- remove WriteFailed from SeekError
- make seekTo based on calling flush and then seekToUnbuffered
- revert the change to reset seek_err since the error sets are
compatible again
Diffstat:
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/lib/std/fs/File.zig b/lib/std/fs/File.zig
@@ -1527,7 +1527,7 @@ pub const Writer = struct {
Unexpected,
};
- pub const SeekError = File.SeekError || std.Io.Writer.Error;
+ pub const SeekError = File.SeekError;
/// Number of slices to store on the stack, when trying to send as many byte
/// vectors through the underlying write calls as possible.
@@ -1572,7 +1572,7 @@ pub const Writer = struct {
.mode = w.mode,
.pos = w.pos,
.interface = Reader.initInterface(w.interface.buffer),
- .seek_err = null,
+ .seek_err = w.seek_err,
};
}
@@ -2002,8 +2002,14 @@ pub const Writer = struct {
return n;
}
- pub fn seekTo(w: *Writer, offset: u64) Writer.SeekError!void {
+ pub fn seekTo(w: *Writer, offset: u64) (Writer.SeekError || std.Io.Writer.Error)!void {
try w.interface.flush();
+ try seekToUnbuffered(w, offset);
+ }
+
+ /// Asserts that no data is currently buffered.
+ pub fn seekToUnbuffered(w: *Writer, offset: u64) Writer.SeekError!void {
+ assert(w.interface.buffered().len == 0);
switch (w.mode) {
.positional, .positional_reading => {
w.pos = offset;