commit 34f180901eaa0fcd5e3bddc6f353604da8bd7e1f (tree)
parent 39f192d54eba99ba3dfc7066476912633e694d51
Author: Ryan Liptak <squeek502@hotmail.com>
Date: Wed, 5 Oct 2022 16:15:25 -0700
fs: deleteTreeFallback -> deleteTreeMinStackSize and make it pub
Diffstat:
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/lib/std/fs.zig b/lib/std/fs.zig
@@ -2178,7 +2178,7 @@ pub const Dir = struct {
});
continue :process_stack;
} else |_| {
- try top.iter.dir.deleteTreeFallback(entry.name, entry.kind);
+ try top.iter.dir.deleteTreeMinStackSizeWithKindHint(entry.name, entry.kind);
break :handle_entry;
}
} else {
@@ -2225,9 +2225,13 @@ pub const Dir = struct {
}
}
- /// Fallback version of deleteTree that is less efficient but works on arbitrarily
- /// nested directories without needing recursion or allocation.
- fn deleteTreeFallback(self: Dir, sub_path: []const u8, kind_hint: File.Kind) DeleteTreeError!void {
+ /// Like `deleteTree`, but only keeps one `Iterator` active at a time to minimize the function's stack size.
+ /// This is slower than `deleteTree` but uses less stack space.
+ pub fn deleteTreeMinStackSize(self: Dir, sub_path: []const u8) DeleteTreeError!void {
+ return self.deleteTreeMinStackWithKindHint(sub_path, .File);
+ }
+
+ fn deleteTreeMinStackSizeWithKindHint(self: Dir, sub_path: []const u8, kind_hint: File.Kind) DeleteTreeError!void {
start_over: while (true) {
var iterable_dir = iterable_dir: {
var treat_as_dir = kind_hint == .Directory;