io_interface: Implement mock for dirRead
This commit is contained in:
+34
-4
@@ -517,10 +517,40 @@ fn dirClose(userdata: ?*anyopaque, dirs: []const Dir) void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn dirRead(userdata: ?*anyopaque, dr: *Dir.Reader, buffer: []Dir.Entry) Dir.Reader.Error!usize {
|
fn dirRead(userdata: ?*anyopaque, dr: *Dir.Reader, buffer: []Dir.Entry) Dir.Reader.Error!usize {
|
||||||
_ = userdata;
|
const node: *Node = @ptrCast(@alignCast(userdata.?));
|
||||||
_ = dr;
|
|
||||||
_ = buffer;
|
if (dr.state == .finished)
|
||||||
@panic("Not implemented yet");
|
return 0;
|
||||||
|
|
||||||
|
if (dr.state == .reset) {
|
||||||
|
node.resetDir(dr.dir.handle) catch |e| switch (e) {
|
||||||
|
error.InvalidHandle => return Dir.Reader.Error.AccessDenied,
|
||||||
|
};
|
||||||
|
dr.state = .reading;
|
||||||
|
}
|
||||||
|
|
||||||
|
var count: usize = 0;
|
||||||
|
while (count < buffer.len) {
|
||||||
|
const entry = node.readDir(dr.dir.handle) catch |e| switch (e) {
|
||||||
|
error.InvalidHandle => return Dir.Reader.Error.AccessDenied,
|
||||||
|
error.NoMoreItems => {
|
||||||
|
dr.state = .finished;
|
||||||
|
return count;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
if (std.mem.eql(u8, entry.name, ".") or std.mem.eql(u8, entry.name, ".."))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
buffer[count] = .{
|
||||||
|
.name = entry.name,
|
||||||
|
.kind = if (entry.is_dir) .directory else .file,
|
||||||
|
.inode = 0,
|
||||||
|
};
|
||||||
|
count += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn dirRealPath(userdata: ?*anyopaque, dir: Dir, out_buffer: []u8) Dir.RealPathError!usize {
|
fn dirRealPath(userdata: ?*anyopaque, dir: Dir, out_buffer: []u8) Dir.RealPathError!usize {
|
||||||
|
|||||||
Reference in New Issue
Block a user