zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

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:
Mlib/std/fs/File.zig | 12+++++++++---
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;