[Bug libstdc++/83626] std::experimental::filesystem::remove_all throws exception instead of returning 0 if path doesn't exist

redi at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Fri Jan 5 18:02:00 GMT 2018


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83626

--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Author: redi
Date: Fri Jan  5 18:02:18 2018
New Revision: 256283

URL: https://gcc.gnu.org/viewcvs?rev=256283&root=gcc&view=rev
Log:
PR libstdc++/83626 handle ENOENT due to filesystem race

        PR libstdc++/83626
        * src/filesystem/ops.cc (remove(const path&, error_code&)): Do not
        report an error for ENOENT.
        (remove_all(const path&)): Fix type of result variable.
        (remove_all(const path&, error_code&)): Use non-throwing increment
        for directory iterator. Call POSIX remove directly to avoid redundant
        calls to symlink_status. Do not report errors for ENOENT.
        * src/filesystem/std-ops.cc: Likewise.
        * testsuite/27_io/filesystem/operations/remove_all.cc: Test throwing
        overload.
        * testsuite/experimental/filesystem/operations/remove_all.cc:
        Likewise.

Modified:
    trunk/libstdc++-v3/ChangeLog
    trunk/libstdc++-v3/src/filesystem/ops.cc
    trunk/libstdc++-v3/src/filesystem/std-ops.cc
    trunk/libstdc++-v3/testsuite/27_io/filesystem/operations/remove_all.cc
   
trunk/libstdc++-v3/testsuite/experimental/filesystem/operations/remove_all.cc


More information about the Gcc-bugs mailing list