| 1396 | } // namespace |
| 1397 | |
| 1398 | BOOST_FILESYSTEM_DECL |
| 1399 | void recursive_directory_iterator_pop(recursive_directory_iterator& it, system::error_code* ec) |
| 1400 | { |
| 1401 | BOOST_ASSERT_MSG(!it.is_end(), "pop() on end recursive_directory_iterator"); |
| 1402 | detail::recur_dir_itr_imp* const imp = it.m_imp.get(); |
| 1403 | |
| 1404 | if (ec) |
| 1405 | ec->clear(); |
| 1406 | |
| 1407 | imp->m_stack.pop_back(); |
| 1408 | |
| 1409 | while (true) |
| 1410 | { |
| 1411 | if (imp->m_stack.empty()) |
| 1412 | { |
| 1413 | it.m_imp.reset(); // done, so make end iterator |
| 1414 | break; |
| 1415 | } |
| 1416 | |
| 1417 | directory_iterator& dir_it = imp->m_stack.back(); |
| 1418 | system::error_code increment_ec; |
| 1419 | detail::directory_iterator_increment(dir_it, &increment_ec); |
| 1420 | if (BOOST_UNLIKELY(!!increment_ec)) |
| 1421 | { |
| 1422 | if ((imp->m_options & directory_options::pop_on_error) == directory_options::none) |
| 1423 | { |
| 1424 | // Make an end iterator on errors |
| 1425 | it.m_imp.reset(); |
| 1426 | } |
| 1427 | else |
| 1428 | { |
| 1429 | recursive_directory_iterator_pop_on_error(imp); |
| 1430 | |
| 1431 | if (imp->m_stack.empty()) |
| 1432 | it.m_imp.reset(); // done, so make end iterator |
| 1433 | } |
| 1434 | |
| 1435 | if (!ec) |
| 1436 | BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::recursive_directory_iterator::pop", increment_ec)); |
| 1437 | |
| 1438 | *ec = increment_ec; |
| 1439 | return; |
| 1440 | } |
| 1441 | |
| 1442 | if (dir_it != directory_iterator()) |
| 1443 | break; |
| 1444 | |
| 1445 | imp->m_stack.pop_back(); |
| 1446 | } |
| 1447 | } |
| 1448 | |
| 1449 | BOOST_FILESYSTEM_DECL |
| 1450 | void recursive_directory_iterator_increment(recursive_directory_iterator& it, system::error_code* ec) |
no test coverage detected