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