| ... | @@ -958,7 +958,17 @@ pub const IterableDir = struct { | ... | @@ -958,7 +958,17 @@ pub const IterableDir = struct { |
| 958 | var top = &self.stack.items[self.stack.items.len - 1]; | 958 | var top = &self.stack.items[self.stack.items.len - 1]; |
| 959 | var containing = top; | 959 | var containing = top; |
| 960 | var dirname_len = top.dirname_len; | 960 | var dirname_len = top.dirname_len; |
| 961 | if (try top.iter.next()) |base| { | 961 | if (top.iter.next() catch |err| { |
| | 962 | // If we get an error, then we want the user to be able to continue |
| | 963 | // walking if they want, which means that we need to pop the directory |
| | 964 | // that errored from the stack. Otherwise, all future `next` calls would |
| | 965 | // likely just fail with the same error. |
| | 966 | var item = self.stack.pop(); |
| | 967 | if (self.stack.items.len != 0) { |
| | 968 | item.iter.dir.close(); |
| | 969 | } |
| | 970 | return err; |
| | 971 | }) |base| { |
| 962 | self.name_buffer.shrinkRetainingCapacity(dirname_len); | 972 | self.name_buffer.shrinkRetainingCapacity(dirname_len); |
| 963 | if (self.name_buffer.items.len != 0) { | 973 | if (self.name_buffer.items.len != 0) { |
| 964 | try self.name_buffer.append(path.sep); | 974 | try self.name_buffer.append(path.sep); |