about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatthias Krüger <matthias.krueger@famsik.de>2022-07-30 22:51:00 +0200
committerGitHub <noreply@github.com>2022-07-30 22:51:00 +0200
commit656cd3a48fe6e43d00b9a912e35216fa15fb487b (patch)
treef7337ae9f11e30a7a9e4195c682d5b524a0f2b36
parent686cb110a77489a6b633f065220dedf600b99d0e (diff)
parentaac8a0a518048d6102c1342835904cfb2ebdab63 (diff)
downloadrust-656cd3a48fe6e43d00b9a912e35216fa15fb487b.tar.gz
rust-656cd3a48fe6e43d00b9a912e35216fa15fb487b.zip
Rollup merge of #99937 - ChrisDenton:fix-remove-dir-all-win-7, r=joshtriplett
Reset directory iteration in remove_dir_all

Fixes #99934
-rw-r--r--library/std/src/sys/windows/fs.rs4
1 files changed, 3 insertions, 1 deletions
diff --git a/library/std/src/sys/windows/fs.rs b/library/std/src/sys/windows/fs.rs
index 4d3162f1254..c96bcf41d51 100644
--- a/library/std/src/sys/windows/fs.rs
+++ b/library/std/src/sys/windows/fs.rs
@@ -1035,11 +1035,13 @@ fn remove_dir_all_iterative(f: &File, delete: fn(&File) -> io::Result<()>) -> io
         unsafe { mem::ManuallyDrop::new(File::from_raw_handle(f.as_raw_handle())) }
     }
 
+    let mut restart = true;
     while let Some(dir) = dirlist.last() {
         let dir = copy_handle(dir);
 
         // Fill the buffer and iterate the entries.
-        let more_data = dir.fill_dir_buff(&mut buffer, false)?;
+        let more_data = dir.fill_dir_buff(&mut buffer, restart)?;
+        restart = false;
         for (name, is_directory) in buffer.iter() {
             if is_directory {
                 let child_dir = open_link_no_reparse(