authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-09-04 11:13:08-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-09-04 16:05:55-07:00
logf78f70dbd858536fd1a1ce0a1706ac259bcdf538
treed5381db76b31cf1ab2620555a37484453efae8b0
parentd94e061ade545f3fbdd4ab1a18f860b05050ebf6

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

1 files changed, 9 insertions(+), 3 deletions(-)

lib/std/fs/File.zig+9-3
...@@ -1527,7 +1527,7 @@ pub const Writer = struct {...@@ -1527,7 +1527,7 @@ pub const Writer = struct {
1527 Unexpected,1527 Unexpected,
1528 };1528 };
15291529
1530 pub const SeekError = File.SeekError || std.Io.Writer.Error;1530 pub const SeekError = File.SeekError;
15311531
1532 /// Number of slices to store on the stack, when trying to send as many byte1532 /// Number of slices to store on the stack, when trying to send as many byte
1533 /// vectors through the underlying write calls as possible.1533 /// vectors through the underlying write calls as possible.
...@@ -1572,7 +1572,7 @@ pub const Writer = struct {...@@ -1572,7 +1572,7 @@ pub const Writer = struct {
1572 .mode = w.mode,1572 .mode = w.mode,
1573 .pos = w.pos,1573 .pos = w.pos,
1574 .interface = Reader.initInterface(w.interface.buffer),1574 .interface = Reader.initInterface(w.interface.buffer),
1575 .seek_err = null,1575 .seek_err = w.seek_err,
1576 };1576 };
1577 }1577 }
15781578
...@@ -2002,8 +2002,14 @@ pub const Writer = struct {...@@ -2002,8 +2002,14 @@ pub const Writer = struct {
2002 return n;2002 return n;
2003 }2003 }
20042004
2005 pub fn seekTo(w: *Writer, offset: u64) Writer.SeekError!void {2005 pub fn seekTo(w: *Writer, offset: u64) (Writer.SeekError || std.Io.Writer.Error)!void {
2006 try w.interface.flush();2006 try w.interface.flush();
2007 try seekToUnbuffered(w, offset);
2008 }
2009
2010 /// Asserts that no data is currently buffered.
2011 pub fn seekToUnbuffered(w: *Writer, offset: u64) Writer.SeekError!void {
2012 assert(w.interface.buffered().len == 0);
2007 switch (w.mode) {2013 switch (w.mode) {
2008 .positional, .positional_reading => {2014 .positional, .positional_reading => {
2009 w.pos = offset;2015 w.pos = offset;