[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