<div dir="ltr">*even more. Not "ever more".</div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jun 22, 2016 at 1:57 AM, Eric Fiselier via cfe-commits <span dir="ltr"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: ericwf<br>
Date: Wed Jun 22 02:57:38 2016<br>
New Revision: 273392<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=273392&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=273392&view=rev</a><br>
Log:<br>
Cleanup filesystem::permissions ever more.<br>
<br>
Modified:<br>
    libcxx/trunk/src/experimental/filesystem/operations.cpp<br>
<br>
Modified: libcxx/trunk/src/experimental/filesystem/operations.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/src/experimental/filesystem/operations.cpp?rev=273392&r1=273391&r2=273392&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/libcxx/trunk/src/experimental/filesystem/operations.cpp?rev=273392&r1=273391&r2=273392&view=diff</a><br>
==============================================================================<br>
--- libcxx/trunk/src/experimental/filesystem/operations.cpp (original)<br>
+++ libcxx/trunk/src/experimental/filesystem/operations.cpp Wed Jun 22 02:57:38 2016<br>
@@ -597,30 +597,25 @@ void __permissions(const path& p, perms<br>
     const bool resolve_symlinks = !bool(perms::symlink_nofollow & prms);<br>
     const bool add_perms = bool(perms::add_perms & prms);<br>
     const bool remove_perms = bool(perms::remove_perms & prms);<br>
-<br>
     _LIBCPP_ASSERT(!(add_perms && remove_perms),<br>
                    "Both add_perms and remove_perms are set");<br>
<br>
-    std::error_code m_ec;<br>
-    file_status st = resolve_symlinks ? detail::posix_stat(p, &m_ec)<br>
-                                      : detail::posix_lstat(p, &m_ec);<br>
-    if (m_ec) return set_or_throw(m_ec, ec, "permissions", p);<br>
-<br>
-    // AT_SYMLINK_NOFOLLOW can only be used on symlinks, using it on a regular<br>
-    // file will cause fchmodat to report an error on some systems.<br>
-    const bool set_sym_perms = is_symlink(st) && !resolve_symlinks;<br>
-<br>
-    if ((resolve_symlinks && is_symlink(st)) && (add_perms || remove_perms)) {<br>
-        st = detail::posix_stat(p, &m_ec);<br>
+    bool set_sym_perms = false;<br>
+    prms &= perms::mask;<br>
+    if (!resolve_symlinks || (add_perms || remove_perms)) {<br>
+        std::error_code m_ec;<br>
+        file_status st = resolve_symlinks ? detail::posix_stat(p, &m_ec)<br>
+                                          : detail::posix_lstat(p, &m_ec);<br>
+        set_sym_perms = is_symlink(st);<br>
         if (m_ec) return set_or_throw(m_ec, ec, "permissions", p);<br>
+        _LIBCPP_ASSERT(st.permissions() != perms::unknown,<br>
+                       "Permissions unexpectedly unknown");<br>
+        if (add_perms)<br>
+            prms |= st.permissions();<br>
+        else if (remove_perms)<br>
+           prms = st.permissions() & ~prms;<br>
     }<br>
-<br>
-    prms = prms & perms::mask;<br>
-    if (add_perms)<br>
-        prms |= st.permissions();<br>
-    else if (remove_perms)<br>
-        prms = st.permissions() & ~prms;<br>
-    auto real_perms = detail::posix_convert_perms(prms);<br>
+    const auto real_perms = detail::posix_convert_perms(prms);<br>
<br>
 # if defined(AT_SYMLINK_NOFOLLOW) && defined(AT_FDCWD)<br>
     const int flags = set_sym_perms ? AT_SYMLINK_NOFOLLOW : 0;<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>