mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 13:54:21 +00:00
std.Io: stub file writing rather than incorrect impl
This commit is contained in:
parent
1e81c3a925
commit
bb1bf5b96f
3 changed files with 33 additions and 20 deletions
|
|
@ -667,7 +667,8 @@ pub const VTable = struct {
|
||||||
dirOpenFile: *const fn (?*anyopaque, Dir, sub_path: []const u8, File.OpenFlags) File.OpenError!File,
|
dirOpenFile: *const fn (?*anyopaque, Dir, sub_path: []const u8, File.OpenFlags) File.OpenError!File,
|
||||||
fileStat: *const fn (?*anyopaque, File) File.StatError!File.Stat,
|
fileStat: *const fn (?*anyopaque, File) File.StatError!File.Stat,
|
||||||
fileClose: *const fn (?*anyopaque, File) void,
|
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.
|
/// Returns 0 on end of stream.
|
||||||
fileReadStreaming: *const fn (?*anyopaque, File, data: [][]u8) File.ReadStreamingError!usize,
|
fileReadStreaming: *const fn (?*anyopaque, File, data: [][]u8) File.ReadStreamingError!usize,
|
||||||
/// Returns 0 on end of stream.
|
/// Returns 0 on end of stream.
|
||||||
|
|
|
||||||
|
|
@ -172,24 +172,19 @@ pub const ReadStreamingError = error{
|
||||||
pub const ReadPositionalError = ReadStreamingError || error{Unseekable};
|
pub const ReadPositionalError = ReadStreamingError || error{Unseekable};
|
||||||
|
|
||||||
pub fn readPositional(file: File, io: Io, buffer: []u8, offset: u64) ReadPositionalError!usize {
|
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));
|
return @errorCast(file.pwrite(io, buffer, -1));
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn writeAll(file: File, io: Io, bytes: []const u8) WriteError!void {
|
pub const WritePositionalError = WriteStreamingError || error{Unseekable};
|
||||||
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 fn writePositional(file: File, io: Io, buffer: []const u8, offset: u64) WritePositionalError!usize {
|
||||||
|
return io.vtable.fileWritePositional(io.userdata, file, buffer, offset);
|
||||||
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 openAbsolute(io: Io, absolute_path: []const u8, flags: OpenFlags) OpenError!File {
|
pub fn openAbsolute(io: Io, absolute_path: []const u8, flags: OpenFlags) OpenError!File {
|
||||||
|
|
|
||||||
|
|
@ -190,7 +190,8 @@ pub fn io(t: *Threaded) Io {
|
||||||
},
|
},
|
||||||
.dirOpenFile = dirOpenFile,
|
.dirOpenFile = dirOpenFile,
|
||||||
.fileClose = fileClose,
|
.fileClose = fileClose,
|
||||||
.pwrite = pwrite,
|
.fileWriteStreaming = fileWriteStreaming,
|
||||||
|
.fileWritePositional = fileWritePositional,
|
||||||
.fileReadStreaming = fileReadStreaming,
|
.fileReadStreaming = fileReadStreaming,
|
||||||
.fileReadPositional = fileReadPositional,
|
.fileReadPositional = fileReadPositional,
|
||||||
.fileSeekBy = fileSeekBy,
|
.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));
|
const t: *Threaded = @ptrCast(@alignCast(userdata));
|
||||||
|
while (true) {
|
||||||
try t.checkCancel();
|
try t.checkCancel();
|
||||||
const fs_file: std.fs.File = .{ .handle = file.handle };
|
_ = file;
|
||||||
return switch (offset) {
|
_ = buffer;
|
||||||
-1 => fs_file.write(buffer),
|
_ = offset;
|
||||||
else => fs_file.pwrite(buffer, @bitCast(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 {
|
fn nowPosix(userdata: ?*anyopaque, clock: Io.Clock) Io.Clock.Error!Io.Timestamp {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue