mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 06:13:07 +00:00
start adding fs functions to std.Io
This commit is contained in:
parent
db499b82b5
commit
d4ff3745d5
@ -913,6 +913,7 @@ test {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const Io = @This();
|
const Io = @This();
|
||||||
|
const fs = std.fs;
|
||||||
|
|
||||||
pub const EventLoop = @import("Io/EventLoop.zig");
|
pub const EventLoop = @import("Io/EventLoop.zig");
|
||||||
|
|
||||||
@ -946,6 +947,12 @@ pub const VTable = struct {
|
|||||||
/// The length is equal to size in bytes of result type.
|
/// The length is equal to size in bytes of result type.
|
||||||
result: []u8,
|
result: []u8,
|
||||||
) void,
|
) void,
|
||||||
|
|
||||||
|
createFile: *const fn (?*anyopaque, dir: fs.Dir, sub_path: []const u8, flags: fs.File.CreateFlags) fs.File.OpenError!fs.File,
|
||||||
|
openFile: *const fn (?*anyopaque, dir: fs.Dir, sub_path: []const u8, flags: fs.File.OpenFlags) fs.File.OpenError!fs.File,
|
||||||
|
closeFile: *const fn (?*anyopaque, fs.File) void,
|
||||||
|
read: *const fn (?*anyopaque, file: fs.File, buffer: []u8) fs.File.ReadError!usize,
|
||||||
|
write: *const fn (?*anyopaque, file: fs.File, buffer: []const u8) fs.File.WriteError!usize,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const AnyFuture = opaque {};
|
pub const AnyFuture = opaque {};
|
||||||
@ -991,3 +998,40 @@ pub fn async(io: Io, S: type, s: S) Future(@typeInfo(@TypeOf(S.start)).@"fn".ret
|
|||||||
);
|
);
|
||||||
return future;
|
return future;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn openFile(io: Io, dir: fs.Dir, sub_path: []const u8, flags: fs.File.OpenFlags) fs.File.OpenError!fs.File {
|
||||||
|
return io.vtable.openFile(io.userdata, dir, sub_path, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn createFile(io: Io, dir: fs.Dir, sub_path: []const u8, flags: fs.File.CreateFlags) fs.File.OpenError!fs.File {
|
||||||
|
return io.vtable.createFile(io.userdata, dir, sub_path, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn closeFile(io: Io, file: fs.File) void {
|
||||||
|
return io.vtable.closeFile(io.userdata, file);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn read(io: Io, file: fs.File, buffer: []u8) fs.File.ReadError!usize {
|
||||||
|
return io.vtable.read(io.userdata, file, buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn write(io: Io, file: fs.File, buffer: []const u8) fs.File.WriteError!usize {
|
||||||
|
return io.vtable.write(io.userdata, file, buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn writeAll(io: Io, file: fs.File, bytes: []const u8) fs.File.WriteError!void {
|
||||||
|
var index: usize = 0;
|
||||||
|
while (index < bytes.len) {
|
||||||
|
index += try io.write(file, bytes[index..]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn readAll(io: Io, file: fs.File, buffer: []u8) fs.File.ReadError!usize {
|
||||||
|
var index: usize = 0;
|
||||||
|
while (index != buffer.len) {
|
||||||
|
const amt = try io.read(file, buffer[index..]);
|
||||||
|
if (amt == 0) break;
|
||||||
|
index += amt;
|
||||||
|
}
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
|||||||
@ -315,6 +315,11 @@ pub fn io(pool: *Pool) std.Io {
|
|||||||
.vtable = &.{
|
.vtable = &.{
|
||||||
.@"async" = @"async",
|
.@"async" = @"async",
|
||||||
.@"await" = @"await",
|
.@"await" = @"await",
|
||||||
|
.createFile = createFile,
|
||||||
|
.openFile = openFile,
|
||||||
|
.closeFile = closeFile,
|
||||||
|
.read = read,
|
||||||
|
.write = write,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -399,3 +404,28 @@ pub fn @"await"(userdata: ?*anyopaque, any_future: *std.Io.AnyFuture, result: []
|
|||||||
@memcpy(result, closure.resultPointer()[0..result.len]);
|
@memcpy(result, closure.resultPointer()[0..result.len]);
|
||||||
thread_pool.allocator.free(base[0 .. closure.result_offset + result.len]);
|
thread_pool.allocator.free(base[0 .. closure.result_offset + result.len]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn createFile(userdata: ?*anyopaque, dir: std.fs.Dir, sub_path: []const u8, flags: std.fs.File.CreateFlags) std.fs.File.OpenError!std.fs.File {
|
||||||
|
_ = userdata;
|
||||||
|
return dir.createFile(sub_path, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn openFile(userdata: ?*anyopaque, dir: std.fs.Dir, sub_path: []const u8, flags: std.fs.File.OpenFlags) std.fs.File.OpenError!std.fs.File {
|
||||||
|
_ = userdata;
|
||||||
|
return dir.openFile(sub_path, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn closeFile(userdata: ?*anyopaque, file: std.fs.File) void {
|
||||||
|
_ = userdata;
|
||||||
|
return file.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn read(userdata: ?*anyopaque, file: std.fs.File, buffer: []u8) std.fs.File.ReadError!usize {
|
||||||
|
_ = userdata;
|
||||||
|
return file.read(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn write(userdata: ?*anyopaque, file: std.fs.File, buffer: []const u8) std.fs.File.WriteError!usize {
|
||||||
|
_ = userdata;
|
||||||
|
return file.write(buffer);
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user