aboutsummaryrefslogtreecommitdiff
path: root/lib/std
diff options
context:
space:
mode:
authorRyan Liptak <squeek502@hotmail.com>2022-10-05 16:15:25 -0700
committerRyan Liptak <squeek502@hotmail.com>2022-10-05 16:15:25 -0700
commit34f180901eaa0fcd5e3bddc6f353604da8bd7e1f (patch)
treef503aeafcdd671a3ddde33a69f38e51c8192379e /lib/std
parent39f192d54eba99ba3dfc7066476912633e694d51 (diff)
downloadzig-34f180901eaa0fcd5e3bddc6f353604da8bd7e1f.tar.gz
zig-34f180901eaa0fcd5e3bddc6f353604da8bd7e1f.zip
fs: deleteTreeFallback -> deleteTreeMinStackSize and make it pub
Diffstat (limited to 'lib/std')
-rw-r--r--lib/std/fs.zig12
1 files changed, 8 insertions, 4 deletions
diff --git a/lib/std/fs.zig b/lib/std/fs.zig
index c75cf88b84..c220200d6a 100644
--- 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;