| ... | @@ -877,8 +877,9 @@ pub const IterableDir = struct { | ... | @@ -877,8 +877,9 @@ pub const IterableDir = struct { |
| 877 | /// a reference to the path. | 877 | /// a reference to the path. |
| 878 | pub fn next(self: *Walker) !?WalkerEntry { | 878 | pub fn next(self: *Walker) !?WalkerEntry { |
| 879 | while (self.stack.items.len != 0) { | 879 | while (self.stack.items.len != 0) { |
| 880 | // `top` becomes invalid after appending to `self.stack` | 880 | // `top` and `containing` become invalid after appending to `self.stack` |
| 881 | var top = &self.stack.items[self.stack.items.len - 1]; | 881 | var top = &self.stack.items[self.stack.items.len - 1]; |
| | 882 | var containing = top; |
| 882 | var dirname_len = top.dirname_len; | 883 | var dirname_len = top.dirname_len; |
| 883 | if (try top.iter.next()) |base| { | 884 | if (try top.iter.next()) |base| { |
| 884 | self.name_buffer.shrinkRetainingCapacity(dirname_len); | 885 | self.name_buffer.shrinkRetainingCapacity(dirname_len); |
| ... | @@ -899,10 +900,11 @@ pub const IterableDir = struct { | ... | @@ -899,10 +900,11 @@ pub const IterableDir = struct { |
| 899 | .dirname_len = self.name_buffer.items.len, | 900 | .dirname_len = self.name_buffer.items.len, |
| 900 | }); | 901 | }); |
| 901 | top = &self.stack.items[self.stack.items.len - 1]; | 902 | top = &self.stack.items[self.stack.items.len - 1]; |
| | 903 | containing = &self.stack.items[self.stack.items.len - 2]; |
| 902 | } | 904 | } |
| 903 | } | 905 | } |
| 904 | return WalkerEntry{ | 906 | return WalkerEntry{ |
| 905 | .dir = top.iter.dir, | 907 | .dir = containing.iter.dir, |
| 906 | .basename = self.name_buffer.items[dirname_len..], | 908 | .basename = self.name_buffer.items[dirname_len..], |
| 907 | .path = self.name_buffer.items, | 909 | .path = self.name_buffer.items, |
| 908 | .kind = base.kind, | 910 | .kind = base.kind, |