diff --git a/doc/release_history.html b/doc/release_history.html
index 2d98104..fc20e81 100644
--- a/doc/release_history.html
+++ b/doc/release_history.html
@@ -43,6 +43,7 @@
1.91.0
- Due to a change in Boost.System, Boost.Filesystem now defines and uses its own platform macros
BOOST_FILESYSTEM_POSIX_API and BOOST_FILESYSTEM_WINDOWS_API. These macros may not necessarily match the old BOOST_POSIX_API and BOOST_WINDOWS_API macros defined by Boost.System.
+ - On POSIX platforms not supporting
openat and related APIs, fixed an error reported by recursive_directory_iterator increment when the iterator encounters a dangling symlink and following symlinks is disabled.
1.90.0
diff --git a/src/directory.cpp b/src/directory.cpp
index 2a495a8..ede6aef 100644
--- a/src/directory.cpp
+++ b/src/directory.cpp
@@ -1487,7 +1487,7 @@ void recursive_directory_iterator_increment(recursive_directory_iterator& it, sy
if ((imp->m_options & directory_options::follow_directory_symlink) == directory_options::none ||
(imp->m_options & directory_options::skip_dangling_symlinks) != directory_options::none)
{
-#if defined(BOOST_FILESYSTEM_POSIX_API) && defined(BOOST_FILESYSTEM_HAS_FDOPENDIR_NOFOLLOW) && defined(BOOST_FILESYSTEM_HAS_POSIX_AT_APIS)
+#if defined(BOOST_FILESYSTEM_POSIX_API)
directory_iterator const& dir_it = imp->m_stack.back();
if (filesystem::type_present(dir_it->m_symlink_status))
{
@@ -1495,6 +1495,7 @@ void recursive_directory_iterator_increment(recursive_directory_iterator& it, sy
}
else
{
+#if defined(BOOST_FILESYSTEM_HAS_FDOPENDIR_NOFOLLOW) && defined(BOOST_FILESYSTEM_HAS_POSIX_AT_APIS)
parentdir_fd = dir_itr_fd(*dir_it.m_imp, ec);
if (ec)
return result;
@@ -1504,8 +1505,13 @@ void recursive_directory_iterator_increment(recursive_directory_iterator& it, sy
symlink_ft = detail::symlink_status_impl(dir_it_filename, &ec, parentdir_fd).type();
if (ec)
return result;
+#else // defined(BOOST_FILESYSTEM_HAS_FDOPENDIR_NOFOLLOW) && defined(BOOST_FILESYSTEM_HAS_POSIX_AT_APIS)
+ symlink_ft = detail::symlink_status_impl(dir_it->path(), &ec).type();
+ if (ec)
+ return result;
+#endif // defined(BOOST_FILESYSTEM_HAS_FDOPENDIR_NOFOLLOW) && defined(BOOST_FILESYSTEM_HAS_POSIX_AT_APIS)
}
-#elif defined(BOOST_FILESYSTEM_WINDOWS_API)
+#else // defined(BOOST_FILESYSTEM_POSIX_API)
directory_iterator const& dir_it = imp->m_stack.back();
if (filesystem::type_present(dir_it->m_symlink_status))
{
@@ -1544,11 +1550,7 @@ void recursive_directory_iterator_increment(recursive_directory_iterator& it, sy
if (ec)
return result;
}
-#else
- symlink_ft = imp->m_stack.back()->symlink_file_type(ec);
- if (ec)
- return result;
-#endif
+#endif // defined(BOOST_FILESYSTEM_POSIX_API)
}
// Logic for following predicate was contributed by Daniel Aarno to handle cyclic