[PATCH] Avoid redundant calls to filesystem::status_known
Jonathan Wakely
jwakely@redhat.com
Thu Jan 4 13:47:00 GMT 2018
Useing exists(file_status) inside exists(const path&, error_code&)
means we call status_known twice, because exists(file_status) calls it
internally. By inlining the exists(file_status) logic into the outer
function we avoid the redundant call.
* include/bits/fs_ops.h (exists(const path&, error_code&))): Only
check status_known once.
* include/experimental/bits/fs_ops.h: Likewise.
Tested powerpc64le-linux, committed to trunk.
-------------- next part --------------
commit 7d0cc9127d8678e2b415f617ac07b74ac53fa8b9
Author: Jonathan Wakely <jwakely@redhat.com>
Date: Thu Jan 4 10:58:47 2018 +0000
Avoid redundant calls to filesystem::status_known
* include/bits/fs_ops.h (exists(const path&, error_code&))): Only
check status_known once.
* include/experimental/bits/fs_ops.h: Likewise.
diff --git a/libstdc++-v3/include/bits/fs_ops.h b/libstdc++-v3/include/bits/fs_ops.h
index 3c63adefca7..e61a1236bec 100644
--- a/libstdc++-v3/include/bits/fs_ops.h
+++ b/libstdc++-v3/include/bits/fs_ops.h
@@ -125,8 +125,11 @@ namespace filesystem
{
auto __s = status(__p, __ec);
if (status_known(__s))
- __ec.clear();
- return exists(__s);
+ {
+ __ec.clear();
+ return __s.type() != file_type::not_found;
+ }
+ return false;
}
uintmax_t file_size(const path& __p);
diff --git a/libstdc++-v3/include/experimental/bits/fs_ops.h b/libstdc++-v3/include/experimental/bits/fs_ops.h
index e36291195bb..45192b1b34a 100644
--- a/libstdc++-v3/include/experimental/bits/fs_ops.h
+++ b/libstdc++-v3/include/experimental/bits/fs_ops.h
@@ -131,8 +131,11 @@ inline namespace v1
{
auto __s = status(__p, __ec);
if (status_known(__s))
- __ec.clear();
- return exists(__s);
+ {
+ __ec.clear();
+ return __s.type() != file_type::not_found;
+ }
+ return false;
}
uintmax_t file_size(const path& __p);
More information about the Gcc-patches
mailing list