]> git.ipfire.org Git - thirdparty/gcc.git/commit
libstdc++: Reset filesystem::recursive_directory_iterator on error
authorJonathan Wakely <jwakely@redhat.com>
Mon, 31 Jan 2022 21:12:53 +0000 (21:12 +0000)
committerJonathan Wakely <jwakely@redhat.com>
Wed, 15 Jun 2022 08:12:23 +0000 (09:12 +0100)
commit92d5f0c71ea913b9b36c47ab392cc1225434ce3c
tree5f81393fd909ae1d795e94e3e9cd41c99a76f7ac
parent884424353e3577b5f17b7dee4f01be4128943604
libstdc++: Reset filesystem::recursive_directory_iterator on error

The standard requires directory iterators to become equal to the end
iterator value if they report an error. Some members functions of
filesystem::recursive_directory_iterator fail to do that.

libstdc++-v3/ChangeLog:

* src/c++17/fs_dir.cc (recursive_directory_iterator::increment):
Reset state to past-the-end iterator on error.
(fs::recursive_directory_iterator::pop(error_code&)): Likewise.
(fs::recursive_directory_iterator::pop()): Check _M_dirs before
it might get reset.
* src/filesystem/dir.cc (recursive_directory_iterator): Likewise,
for the TS implementation.
* testsuite/27_io/filesystem/iterators/error_reporting.cc: New test.
* testsuite/experimental/filesystem/iterators/error_reporting.cc: New test.

(cherry picked from commit ec09a5335f0ade7071f6157dfd97dbb3de3e4f97)
libstdc++-v3/src/c++17/fs_dir.cc
libstdc++-v3/src/filesystem/dir.cc
libstdc++-v3/testsuite/27_io/filesystem/iterators/error_reporting.cc [new file with mode: 0644]
libstdc++-v3/testsuite/experimental/filesystem/iterators/error_reporting.cc [new file with mode: 0644]