From 311735dbc6783b8669850b0b882834bd41a4e1f1 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Fri, 9 Mar 2018 01:09:58 +0000 Subject: [PATCH] Use non-throwing is_directory in filesystem::create_directory The create_dir helper was calling the throwing form of filesystem::is_directory instead of passing the error_code argument. Since std::filesystem::create_directory(const path&, error_code&) is noexcept, it would call std::terminate if an error occurred in is_directory. Passing the error_code also takes care of clearing it in the case where is_directory returns true. src/filesystem/ops.cc (create_dir): Pass error_code to is_directory. src/filesystem/std-ops.cc (create_dir): Likewise. From-SVN: r258375 --- libstdc++-v3/ChangeLog | 5 +++++ libstdc++-v3/src/filesystem/ops.cc | 4 +--- libstdc++-v3/src/filesystem/std-ops.cc | 4 +--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 69c6ec6d29d..8e8fa138bfe 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,8 @@ +2018-03-09 Jonathan Wakely + + src/filesystem/ops.cc (create_dir): Pass error_code to is_directory. + src/filesystem/std-ops.cc (create_dir): Likewise. + 2018-03-08 François Dumont * python/libstdcxx/v6/printers.py (NodeIteratorPrinter): New. diff --git a/libstdc++-v3/src/filesystem/ops.cc b/libstdc++-v3/src/filesystem/ops.cc index 899defea6d2..328332a8a82 100644 --- a/libstdc++-v3/src/filesystem/ops.cc +++ b/libstdc++-v3/src/filesystem/ops.cc @@ -463,10 +463,8 @@ namespace if (::mkdir(p.c_str(), mode)) { const int err = errno; - if (err != EEXIST || !is_directory(p)) + if (err != EEXIST || !is_directory(p, ec)) ec.assign(err, std::generic_category()); - else - ec.clear(); } else { diff --git a/libstdc++-v3/src/filesystem/std-ops.cc b/libstdc++-v3/src/filesystem/std-ops.cc index 65b06f5b67b..930b186e88c 100644 --- a/libstdc++-v3/src/filesystem/std-ops.cc +++ b/libstdc++-v3/src/filesystem/std-ops.cc @@ -668,10 +668,8 @@ namespace if (::mkdir(p.c_str(), mode)) { const int err = errno; - if (err != EEXIST || !is_directory(p)) + if (err != EEXIST || !is_directory(p, ec)) ec.assign(err, std::generic_category()); - else - ec.clear(); } else { -- 2.30.2