commit b174942e6a7e15bf78edc3098fcbcdf1b2fbccd2 (tree)
parent 7579ce180f2bf4b5da6ecca5db83af6789c2f576
Author: Sébastien Marie <semarie@online.fr>
Date: Thu, 19 Nov 2020 13:55:46 +0000
openbsd, netbsd: getdents: entry with d_fileno==0 should be skipped
Diffstat:
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/lib/std/fs.zig b/lib/std/fs.zig
@@ -399,7 +399,14 @@ pub const Dir = struct {
const name = @ptrCast([*]u8, &bsd_entry.d_name)[0..bsd_entry.d_namlen];
- if (mem.eql(u8, name, ".") or mem.eql(u8, name, "..")) {
+ const skip_zero_fileno = switch (builtin.os.tag) {
+ // d_fileno=0 is used to mark invalid entries or deleted files.
+ .openbsd, .netbsd => true,
+ else => false,
+ };
+ if (mem.eql(u8, name, ".") or mem.eql(u8, name, "..") or
+ (skip_zero_fileno and bsd_entry.d_fileno == 0))
+ {
continue :start_over;
}