diff --git a/src/dwarfs/scanner.cpp b/src/dwarfs/scanner.cpp index c5137348..5dfe5017 100644 --- a/src/dwarfs/scanner.cpp +++ b/src/dwarfs/scanner.cpp @@ -301,6 +301,7 @@ void scanner_::scan(filesystem_writer& fsw, try { auto d = os_->opendir(path); std::string name; + std::vector> subdirs; while (d->read(name)) { if (name == "." or name == "..") { @@ -329,7 +330,7 @@ void scanner_::scan(filesystem_writer& fsw, prog.current.store(pe.get()); prog.dirs_found++; pe->scan(*os_, prog); - queue.push_back(pe); + subdirs.push_back(pe); break; case entry::E_FILE: @@ -361,6 +362,8 @@ void scanner_::scan(filesystem_writer& fsw, } } + queue.insert(queue.begin(), subdirs.begin(), subdirs.end()); + prog.dirs_scanned++; } catch (const boost::system::system_error& e) { log_.error() << "cannot open directory: " << e.what();