From 2f188290e203780752597b0263581590af3a69b2 Mon Sep 17 00:00:00 2001 From: Ryan Liptak Date: Wed, 7 Jun 2023 22:37:53 -0700 Subject: [PATCH] Use `iterateAssumeFirstIteration` in `Walker.next` to avoid unnecessary lseek calls MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since we are opening each directory for iteration, we know that we don't need to reset the cursor's directory before iterating. Using `iterateAssumeFirstIteration` skips the cursor resetting which eliminates an `lseek` syscall for every directory opened on non-Windows platforms. This doesn't seem to actually matter much for performance (1.01 ± 0.02 times faster when walking /home/ on my system) but avoiding unnecessary syscalls is always nice anyway. --- lib/std/fs.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/std/fs.zig b/lib/std/fs.zig index 037f0c81f6..d3c8fb322e 100644 --- a/lib/std/fs.zig +++ b/lib/std/fs.zig @@ -972,7 +972,7 @@ pub const IterableDir = struct { { errdefer new_dir.close(); try self.stack.append(StackItem{ - .iter = new_dir.iterate(), + .iter = new_dir.iterateAssumeFirstIteration(), .dirname_len = self.name_buffer.items.len, }); top = &self.stack.items[self.stack.items.len - 1];