| ... | ... | @@ -2178,7 +2178,7 @@ pub const Dir = struct { |
| 2178 | 2178 | }); |
| 2179 | 2179 | continue :process_stack; |
| 2180 | 2180 | } else |_| { |
| 2181 | | try top.iter.dir.deleteTreeFallback(entry.name, entry.kind); |
| 2181 | try top.iter.dir.deleteTreeMinStackSizeWithKindHint(entry.name, entry.kind); |
| 2182 | 2182 | break :handle_entry; |
| 2183 | 2183 | } |
| 2184 | 2184 | } else { |
| ... | ... | @@ -2225,9 +2225,13 @@ pub const Dir = struct { |
| 2225 | 2225 | } |
| 2226 | 2226 | } |
| 2227 | 2227 | |
| 2228 | | /// Fallback version of deleteTree that is less efficient but works on arbitrarily |
| 2229 | | /// nested directories without needing recursion or allocation. |
| 2230 | | fn deleteTreeFallback(self: Dir, sub_path: []const u8, kind_hint: File.Kind) DeleteTreeError!void { |
| 2228 | /// Like `deleteTree`, but only keeps one `Iterator` active at a time to minimize the function's stack size. |
| 2229 | /// This is slower than `deleteTree` but uses less stack space. |
| 2230 | pub fn deleteTreeMinStackSize(self: Dir, sub_path: []const u8) DeleteTreeError!void { |
| 2231 | return self.deleteTreeMinStackWithKindHint(sub_path, .File); |
| 2232 | } |
| 2233 | |
| 2234 | fn deleteTreeMinStackSizeWithKindHint(self: Dir, sub_path: []const u8, kind_hint: File.Kind) DeleteTreeError!void { |
| 2231 | 2235 | start_over: while (true) { |
| 2232 | 2236 | var iterable_dir = iterable_dir: { |
| 2233 | 2237 | var treat_as_dir = kind_hint == .Directory; |