io: fix compile errors

This commit is contained in:
Jacob Young 2025-04-10 01:34:56 -04:00 committed by Andrew Kelley
parent 5d22c588e2
commit 1501734747
5 changed files with 23 additions and 14 deletions

View File

@ -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,

View File

@ -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,
},
};
}

View File

@ -50,7 +50,7 @@ pub fn initFixed(bw: *BufferedWriter, buffer: []u8) void {
.context = bw,
.vtable = &fixed_vtable,
},
.buffer = buffer,
.buffer = .initBuffer(buffer),
};
}

View File

@ -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.?;

View File

@ -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" {