Commit bb1bf5b96f

Andrew Kelley <andrew@ziglang.org>
2025-10-16 00:00:12
std.Io: stub file writing rather than incorrect impl
1 parent 1e81c3a
Changed files (3)
lib/std/Io/File.zig
@@ -172,24 +172,19 @@ pub const ReadStreamingError = error{
 pub const ReadPositionalError = ReadStreamingError || error{Unseekable};
 
 pub fn readPositional(file: File, io: Io, buffer: []u8, offset: u64) ReadPositionalError!usize {
-    return io.vtable.pread(io.userdata, file, buffer, offset);
+    return io.vtable.fileReadPositional(io.userdata, file, buffer, offset);
 }
 
-pub const WriteError = std.fs.File.WriteError || Io.Cancelable;
+pub const WriteStreamingError = error{} || Io.UnexpectedError || Io.Cancelable;
 
-pub fn write(file: File, io: Io, buffer: []const u8) WriteError!usize {
+pub fn write(file: File, io: Io, buffer: []const u8) WriteStreamingError!usize {
     return @errorCast(file.pwrite(io, buffer, -1));
 }
 
-pub fn writeAll(file: File, io: Io, bytes: []const u8) WriteError!void {
-    var index: usize = 0;
-    while (index < bytes.len) index += try file.write(io, bytes[index..]);
-}
-
-pub const PWriteError = std.fs.File.PWriteError || Io.Cancelable;
+pub const WritePositionalError = WriteStreamingError || error{Unseekable};
 
-pub fn pwrite(file: File, io: Io, buffer: []const u8, offset: std.posix.off_t) PWriteError!usize {
-    return io.vtable.pwrite(io.userdata, file, buffer, offset);
+pub fn writePositional(file: File, io: Io, buffer: []const u8, offset: u64) WritePositionalError!usize {
+    return io.vtable.fileWritePositional(io.userdata, file, buffer, offset);
 }
 
 pub fn openAbsolute(io: Io, absolute_path: []const u8, flags: OpenFlags) OpenError!File {
lib/std/Io/Threaded.zig
@@ -190,7 +190,8 @@ pub fn io(t: *Threaded) Io {
             },
             .dirOpenFile = dirOpenFile,
             .fileClose = fileClose,
-            .pwrite = pwrite,
+            .fileWriteStreaming = fileWriteStreaming,
+            .fileWritePositional = fileWritePositional,
             .fileReadStreaming = fileReadStreaming,
             .fileReadPositional = fileReadPositional,
             .fileSeekBy = fileSeekBy,
@@ -1611,14 +1612,30 @@ fn fileSeekTo(userdata: ?*anyopaque, file: Io.File, offset: u64) Io.File.SeekErr
     }
 }
 
-fn pwrite(userdata: ?*anyopaque, file: Io.File, buffer: []const u8, offset: posix.off_t) Io.File.PWriteError!usize {
+fn fileWritePositional(
+    userdata: ?*anyopaque,
+    file: Io.File,
+    buffer: [][]const u8,
+    offset: u64,
+) Io.File.WritePositionalError!usize {
     const t: *Threaded = @ptrCast(@alignCast(userdata));
-    try t.checkCancel();
-    const fs_file: std.fs.File = .{ .handle = file.handle };
-    return switch (offset) {
-        -1 => fs_file.write(buffer),
-        else => fs_file.pwrite(buffer, @bitCast(offset)),
-    };
+    while (true) {
+        try t.checkCancel();
+        _ = file;
+        _ = buffer;
+        _ = offset;
+        @panic("TODO");
+    }
+}
+
+fn fileWriteStreaming(userdata: ?*anyopaque, file: Io.File, buffer: [][]const u8) Io.File.WriteStreamingError!usize {
+    const t: *Threaded = @ptrCast(@alignCast(userdata));
+    while (true) {
+        try t.checkCancel();
+        _ = file;
+        _ = buffer;
+        @panic("TODO");
+    }
 }
 
 fn nowPosix(userdata: ?*anyopaque, clock: Io.Clock) Io.Clock.Error!Io.Timestamp {
lib/std/Io.zig
@@ -667,7 +667,8 @@ pub const VTable = struct {
     dirOpenFile: *const fn (?*anyopaque, Dir, sub_path: []const u8, File.OpenFlags) File.OpenError!File,
     fileStat: *const fn (?*anyopaque, File) File.StatError!File.Stat,
     fileClose: *const fn (?*anyopaque, File) void,
-    pwrite: *const fn (?*anyopaque, File, buffer: []const u8, offset: std.posix.off_t) File.PWriteError!usize,
+    fileWriteStreaming: *const fn (?*anyopaque, File, buffer: [][]const u8) File.WriteStreamingError!usize,
+    fileWritePositional: *const fn (?*anyopaque, File, buffer: [][]const u8, offset: u64) File.WritePositionalError!usize,
     /// Returns 0 on end of stream.
     fileReadStreaming: *const fn (?*anyopaque, File, data: [][]u8) File.ReadStreamingError!usize,
     /// Returns 0 on end of stream.