io_interface: Implement mocks for dirOpenFile, fileLength, fileClose, fileReadPositional
This commit is contained in:
+46
-16
@@ -452,11 +452,30 @@ fn dirCreateFileAtomic(userdata: ?*anyopaque, dir: Dir, dest_path: []const u8, o
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn dirOpenFile(userdata: ?*anyopaque, dir: Dir, sub_path: []const u8, flags: Dir.OpenFileOptions) File.OpenError!File {
|
fn dirOpenFile(userdata: ?*anyopaque, dir: Dir, sub_path: []const u8, flags: Dir.OpenFileOptions) File.OpenError!File {
|
||||||
_ = userdata;
|
_ = flags; // TODO: Use flags
|
||||||
_ = dir;
|
|
||||||
_ = sub_path;
|
const node: *Node = @ptrCast(@alignCast(userdata.?));
|
||||||
_ = flags;
|
const parent = if (dir.handle == Dir.cwd().handle) null else dir.handle;
|
||||||
@panic("Not implemented yet");
|
|
||||||
|
const handle = node.openFile(parent, sub_path) catch |e| {
|
||||||
|
return switch (e) {
|
||||||
|
Node.OpenFileError.InvalidHandle => unreachable,
|
||||||
|
Node.OpenFileError.DescriptorLimit => File.OpenError.ProcessFdQuotaExceeded,
|
||||||
|
Node.OpenFileError.IsDirectory => File.OpenError.IsDir,
|
||||||
|
Node.OpenFileError.NotDirectory => File.OpenError.NotDir,
|
||||||
|
Node.OpenFileError.EmptyPath => File.OpenError.BadPathName,
|
||||||
|
Node.OpenFileError.NoRootParent => File.OpenError.FileNotFound,
|
||||||
|
Node.OpenFileError.TooManyComponents => File.OpenError.NameTooLong,
|
||||||
|
Node.OpenFileError.ResolutionLimit => File.OpenError.NameTooLong,
|
||||||
|
Node.OpenFileError.ComponentNotDirectory => File.OpenError.NotDir,
|
||||||
|
Node.OpenFileError.ComponentNotFound => File.OpenError.FileNotFound,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
return .{
|
||||||
|
.handle = handle,
|
||||||
|
.flags = .{ .nonblocking = false },
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
fn dirClose(userdata: ?*anyopaque, dirs: []const Dir) void {
|
fn dirClose(userdata: ?*anyopaque, dirs: []const Dir) void {
|
||||||
@@ -595,15 +614,17 @@ fn fileStat(userdata: ?*anyopaque, file: File) File.StatError!File.Stat {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn fileLength(userdata: ?*anyopaque, file: File) File.LengthError!u64 {
|
fn fileLength(userdata: ?*anyopaque, file: File) File.LengthError!u64 {
|
||||||
_ = userdata;
|
const node: *Node = @ptrCast(@alignCast(userdata.?));
|
||||||
_ = file;
|
return node.fileSize(file.handle) catch |e| switch (e) {
|
||||||
@panic("Not implemented yet");
|
error.InvalidHandle => File.LengthError.Streaming,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
fn fileClose(userdata: ?*anyopaque, files: []const File) void {
|
fn fileClose(userdata: ?*anyopaque, files: []const File) void {
|
||||||
_ = userdata;
|
const node: *Node = @ptrCast(@alignCast(userdata.?));
|
||||||
_ = files;
|
for (files) |file| {
|
||||||
@panic("Not implemented yet");
|
node.closeFile(file.handle) catch {};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn fileWritePositional(
|
fn fileWritePositional(
|
||||||
@@ -643,11 +664,20 @@ fn fileWriteFilePositional(userdata: ?*anyopaque, file: File, header: []const u8
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn fileReadPositional(userdata: ?*anyopaque, file: File, data: []const []u8, offset: u64) File.ReadPositionalError!usize {
|
fn fileReadPositional(userdata: ?*anyopaque, file: File, data: []const []u8, offset: u64) File.ReadPositionalError!usize {
|
||||||
_ = userdata;
|
const node: *Node = @ptrCast(@alignCast(userdata.?));
|
||||||
_ = file;
|
|
||||||
_ = data;
|
var copied: usize = 0;
|
||||||
_ = offset;
|
for (data) |buffer| {
|
||||||
@panic("Not implemented yet");
|
const bytes_read = node.readFile(file.handle, @intCast(offset + copied), buffer) catch |e| {
|
||||||
|
return switch (e) {
|
||||||
|
error.InvalidHandle => File.ReadPositionalError.NotOpenForReading,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
copied += bytes_read;
|
||||||
|
if (bytes_read < buffer.len)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return copied;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn fileSeekBy(userdata: ?*anyopaque, file: File, offset: i64) File.SeekError!void {
|
fn fileSeekBy(userdata: ?*anyopaque, file: File, offset: i64) File.SeekError!void {
|
||||||
|
|||||||
Reference in New Issue
Block a user