diff --git a/lib/std/fs/File.zig b/lib/std/fs/File.zig index 8005dba4ad..6e365a8fd5 100644 --- a/lib/std/fs/File.zig +++ b/lib/std/fs/File.zig @@ -1737,9 +1737,10 @@ pub fn writer_writeFile( const smaller_len = if (len_int == 0) max_count else @min(len_int, max_count); var off: std.os.linux.off_t = undefined; const off_ptr: ?*std.os.linux.off_t = if (in_offset.toInt()) |offset| b: { - off = try std.math.cast(std.os.linux.off_t, offset); + off = std.math.cast(std.os.linux.off_t, offset) orelse return error.Overflow; break :b &off; } else null; + if (true) @panic("TODO"); const n = std.os.linux.wrapped.sendfile(out_fd, in_fd, off_ptr, smaller_len) catch |err| switch (err) { error.UnsupportedOperation => break :sf, error.Unseekable => break :sf, diff --git a/lib/std/io/BufferedReader.zig b/lib/std/io/BufferedReader.zig index 3c9ddecf63..55fdad5ac3 100644 --- a/lib/std/io/BufferedReader.zig +++ b/lib/std/io/BufferedReader.zig @@ -34,7 +34,7 @@ const eof_reader: std.io.Reader.VTable = .{ .streamReadVec = eof_streamReadVec, }; -fn eof_writeSplat(context: ?*anyopaque, data: []const []const u8, splat: usize) anyerror!Reader.Status { +fn eof_writeSplat(context: ?*anyopaque, data: []const []const u8, splat: usize) anyerror!usize { _ = context; _ = data; _ = splat; @@ -44,11 +44,11 @@ fn eof_writeSplat(context: ?*anyopaque, data: []const []const u8, splat: usize) fn eof_writeFile( context: ?*anyopaque, file: std.fs.File, - offset: u64, - len: Reader.FileLen, + offset: std.io.Writer.Offset, + len: std.io.Writer.FileLen, headers_and_trailers: []const []const u8, headers_len: usize, -) anyerror!Reader.Status { +) anyerror!usize { _ = context; _ = file; _ = offset; @@ -73,14 +73,14 @@ fn eof_posReadVec(ctx: ?*anyopaque, data: []const []u8, offset: u64) anyerror!Re return error.EndOfStream; } -fn eof_streamRead(ctx: ?*anyopaque, bw: *std.io.BufferedWriter, limit: Reader.Limit) Reader.Status { +fn eof_streamRead(ctx: ?*anyopaque, bw: *std.io.BufferedWriter, limit: Reader.Limit) anyerror!Reader.Status { _ = ctx; _ = bw; _ = limit; return error.EndOfStream; } -fn eof_streamReadVec(ctx: ?*anyopaque, data: []const []u8) Reader.Status { +fn eof_streamReadVec(ctx: ?*anyopaque, data: []const []u8) anyerror!Reader.Status { _ = ctx; _ = data; return error.EndOfStream; @@ -91,13 +91,16 @@ pub fn initFixed(br: *BufferedReader, buffer: []const u8) void { br.* = .{ .seek = 0, .storage = .{ - .buffer = .initBuffer(@constCast(buffer)), + .buffer = .fromOwnedSlice(@constCast(buffer)), .unbuffered_writer = .{ .context = undefined, .vtable = &eof_writer, }, }, - .unbuffered_reader = &.{ .context = undefined, .vtable = &eof_reader }, + .unbuffered_reader = .{ + .context = undefined, + .vtable = &eof_reader, + }, }; } diff --git a/lib/std/io/BufferedWriter.zig b/lib/std/io/BufferedWriter.zig index 8bee5d0ed7..96d9ff66b0 100644 --- a/lib/std/io/BufferedWriter.zig +++ b/lib/std/io/BufferedWriter.zig @@ -50,7 +50,7 @@ pub fn initFixed(bw: *BufferedWriter, buffer: []u8) void { .context = bw, .vtable = &fixed_vtable, }, - .buffer = buffer, + .buffer = .initBuffer(buffer), }; } diff --git a/lib/std/io/Reader.zig b/lib/std/io/Reader.zig index 2cc914092b..90193acdc8 100644 --- a/lib/std/io/Reader.zig +++ b/lib/std/io/Reader.zig @@ -85,6 +85,11 @@ pub fn posReadAll(r: Reader, w: *std.io.BufferedWriter, start_offset: u64) anyer } } +/// Returns total number of bytes written to `w`. +pub fn streamRead(r: Reader, w: *std.io.BufferedWriter, limit: Limit) anyerror!Status { + return r.vtable.streamRead.?(r.context, w, limit); +} + /// Returns total number of bytes written to `w`. pub fn streamReadAll(r: Reader, w: *std.io.BufferedWriter) anyerror!usize { const vtable_streamRead = r.vtable.streamRead.?; diff --git a/lib/std/io/Writer.zig b/lib/std/io/Writer.zig index bdd5de86cc..762c6d3a17 100644 --- a/lib/std/io/Writer.zig +++ b/lib/std/io/Writer.zig @@ -96,7 +96,7 @@ pub fn writeFile( pub fn unimplemented_writeFile( context: ?*anyopaque, file: std.fs.File, - offset: u64, + offset: Offset, len: FileLen, headers_and_trailers: []const []const u8, headers_len: usize, @@ -136,7 +136,7 @@ fn null_writeSplat(context: ?*anyopaque, data: []const []const u8, splat: usize) const pattern = data[headers.len..]; var written: usize = pattern.len * splat; for (headers) |bytes| written += bytes.len; - return .{ .len = written }; + return written; } fn null_writeFile( @@ -156,12 +156,12 @@ fn null_writeFile( const stat = try file.stat(); n += stat.size - off; for (headers_and_trailers[headers_len..]) |bytes| n += bytes.len; - return .{ .len = n }; + return n; } @panic("TODO stream from file until eof, counting"); } for (headers_and_trailers) |bytes| n += bytes.len; - return .{ .len = len.int() + n }; + return len.int() + n; } test @"null" {