aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/src
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2016-10-26 16:20:04 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2016-10-26 16:20:04 +0100
commitec0b1056a751b70efb567dbb02fe8b386dc6362f (patch)
tree22a523c01df279c1901b90805f010c9a49cf1110 /libstdc++-v3/src
parentae51afc5a2041cf8acec1343db13346fa9a848b1 (diff)
downloadgcc-ec0b1056a751b70efb567dbb02fe8b386dc6362f.zip
gcc-ec0b1056a751b70efb567dbb02fe8b386dc6362f.tar.gz
gcc-ec0b1056a751b70efb567dbb02fe8b386dc6362f.tar.bz2
Add recursive_directory_iterator::pop(error_code&)
* include/experimental/bits/fs_dir.h (recursive_directory_iterator): Overload pop (LWG 2706). * src/filesystem/dir.cc (recursive_directory_iterator::pop): Define new overload. * testsuite/experimental/filesystem/iterators/pop.cc: New test. From-SVN: r241559
Diffstat (limited to 'libstdc++-v3/src')
-rw-r--r--libstdc++-v3/src/filesystem/dir.cc24
1 files changed, 19 insertions, 5 deletions
diff --git a/libstdc++-v3/src/filesystem/dir.cc b/libstdc++-v3/src/filesystem/dir.cc
index bcd7dd0..9a63c4a 100644
--- a/libstdc++-v3/src/filesystem/dir.cc
+++ b/libstdc++-v3/src/filesystem/dir.cc
@@ -364,19 +364,33 @@ fs::recursive_directory_iterator::increment(error_code& ec) noexcept
}
void
-fs::recursive_directory_iterator::pop()
+fs::recursive_directory_iterator::pop(error_code& ec)
{
if (!_M_dirs)
- _GLIBCXX_THROW_OR_ABORT(filesystem_error(
- "cannot pop non-dereferenceable recursive directory iterator",
- std::make_error_code(errc::invalid_argument)));
+ {
+ ec = std::make_error_code(errc::invalid_argument);
+ return;
+ }
do {
_M_dirs->pop();
if (_M_dirs->empty())
{
_M_dirs.reset();
+ ec.clear();
return;
}
- } while (!_M_dirs->top().advance(nullptr, _M_options));
+ } while (!_M_dirs->top().advance(&ec, _M_options));
+}
+
+void
+fs::recursive_directory_iterator::pop()
+{
+ error_code ec;
+ pop(ec);
+ if (ec)
+ _GLIBCXX_THROW_OR_ABORT(filesystem_error(_M_dirs
+ ? "recursive directory iterator cannot pop"
+ : "non-dereferenceable recursive directory iterator cannot pop",
+ ec));
}