History log of /external/libcxx/src/experimental/filesystem/operations.cpp
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
68b20ca4d9c4bee2c2ad5a9240599b3e4b78d0ba 06-Feb-2018 Nico Weber <nicolasweber@gmx.de> Fix building libc++ with the macOS 10.13 SDK with -mmacosx-version-min=10.12 or lower.

The 10.13 SDK always defines utimensat() (with an availability(macosx=10.13) annotation)
and unconditionally defines UTIME_OMIT, so use the compile-time availability macros
on Apple platforms instead.

For people statically linking libc++, it might make sense to also provide an opt-in
option for using __builtin_available() to dynamically check for the OS version,
but for now let's do the smallest thing needed to unbreak the build.

Based on a patch by Eric Fiselier <eric@efcs.ca>: https://reviews.llvm.org/D34249
Fixes PR33469.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@324385 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp
af1fd7c75f5cb2a19c11339d60b4fa2da31fd901 04-Feb-2018 Eric Fiselier <eric@efcs.ca> Address LWG 2849 and fix missing failure condition in copy_file.

Previously copy_file didn't handle the case where the input and
output were the same file.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@324187 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp
45d5893943f0099a4ef827d699708cda005a37f5 11-Jan-2018 Ekaterina Vaartis <vaartis@cock.li> Make std::experimental::filesystem::remove and remove_all return false or 0 if the file doesn't exist

Differential Revision: https://reviews.llvm.org/D41830



git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@322293 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp
14d7b698bfd65044583ae34ab136bd84016cc16e 25-Dec-2017 Don Hinton <hintonda@gmail.com> [libcxx] Suppress unused warning on apple.

Summary:
This warning is already suppressed on non-apple platforms, so
this change just suppresses it on apple as well.

Reviewers: EricWF, lichray

Reviewed By: lichray

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D41248

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@321435 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp
4aee06b818ed7ee73a7be11997fc8b9afb442bbe 02-Aug-2017 Marshall Clow <mclow.lists@gmail.com> Rename a couple variables to eliminate a shadow warning. No functionality change

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@309881 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp
b2e9337b06425b4af554651d5f2fa65615eb009f 08-Jul-2017 Eric Fiselier <eric@efcs.ca> Fix filesystem build on platforms with weird time_t types.

32-bit powerpc provides a 64 bit time_t type and older ppc64 systems
provide time_t as a floating point type. This caused problems when building
operations.cpp since operations.cpp contained compile time tests for conversions
between time_t and filesystem time type.

When these tests failed they caused the libc++ build to fail as well. This is unfortunate.

This patch moves the tests out of the source file and into the test suite. It also
expands the tests to allow testing of the weird time_t configurations on all platforms.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@307461 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp
3288eac67369acd35e37ee70d140af2836957f0b 05-Jul-2017 Eric Fiselier <eric@efcs.ca> Implement LWG 2937 - equivalent("dne", "exists") is not an error

This patch speculatively implements the PR for LWG 2937, which fixes
two issues with equivalent.

(1) It makes equivalent("dne", "exists") an error. Previously only
equivalent("dne", "dne") was an error and the former case was not (it returned false).
Now equivalent reports an error when either input doesn't exist.

(2) It makes equivalent(p1, p2) well-formed when `is_other(p1) && is_other(p2)`.
Previously this was an error, but there is seemingly no reason why it should be on POSIX system.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@307117 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp
4b1c560ca313f8fdd268d93586b175b60124b738 16-Jun-2017 Eric Fiselier <eric@efcs.ca> Fix potential bug by casting to the POSIX specified type

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@305549 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp
50ca6f720fca3ef95813d1366bea47cd081814b6 05-May-2017 Eric Fiselier <eric@efcs.ca> Fix remaining GCC 7 build warnings

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@302283 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp
166d27ed3133af1deb0c1b73ab142847e1942644 07-Feb-2017 Saleem Abdulrasool <compnerd@compnerd.org> filesystem: return the constructed object

This really should get identified properly by the compiler to convert to
a NVRO, but compress the code anyways. This makes the implementation
identical to directory_iterator.cpp

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@294270 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp
7566869dabd82699f26c8c95f18de331ec3950ce 05-Feb-2017 Saleem Abdulrasool <compnerd@compnerd.org> filesystem: fix n4100 conformance for `temp_directory_path`

N4100 states that an error shall be reported if
`!exists(p) || !is_directory(p)`. We were missing the first half of the
conditional. Invert the error and normal code paths to make the code
easier to follow.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@294127 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp
1e1bbc7437f4679ce8b6ed5984f2cc72a96f3349 16-Oct-2016 Eric Fiselier <eric@efcs.ca> Implement LWG 2712 and update other issues status

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@284318 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp
451f34db162fddec235736bc0ee0c670ad452e2a 16-Oct-2016 Eric Fiselier <eric@efcs.ca> Implement LWG 2681 and 2682

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@284316 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp
25dc5bdb887e80a232f86e5b54b298427392e1c7 16-Oct-2016 Eric Fiselier <eric@efcs.ca> Implement LWG 2672.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@284314 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp
508f208ae9fe8afa4cccea0763ffc99662433886 12-Oct-2016 Eric Fiselier <eric@efcs.ca> Fix LWG2683 - filesystem::copy() should always clear the user-provided error_code

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@283951 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp
051593845dfa97a9787cdf9297e7f47cfeb6cde5 10-Oct-2016 Eric Fiselier <eric@efcs.ca> Workaround missing C++14 constexpr semantics in filesystem

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@283714 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp
fd0e7614738ac855b28f24631cff8e4d8986d100 10-Oct-2016 Eric Fiselier <eric@efcs.ca> Remove use of int128_t inside the filesystem implementation

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@283712 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp
c0f860c9460cf084f9fbd3bd3635c06e839bcabb 29-Sep-2016 Eric Fiselier <eric@efcs.ca> Partially revert overflow checking in last_write_time

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@282660 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp
d5fc5ca37f673f47938d3a36f6f762eee58a3a7a 28-Sep-2016 Eric Fiselier <eric@efcs.ca> Improve 'last_write_time(...)' accuracy and detect overflow errors.

The ::stat struct on Linux, FreeBSD, and OS X provides the access and
modification times as an instance of 'timespec', which has a nanosecond
resolution. The 'st_mtime' and 'st_atime' members simply reference the 'tv_sec'
value of the timespec struct. This patch changes 'last_write_time(...)' so that
it extracts both the seconds and nanoseconds values of the last modification
time, providing a more accurate implementation of 'last_write_time(...)'.

Additionally this patch fixes a possible signed integer overflow bug. The
'file_time_type' type cannot represent all possible values returned by
the filesystem. Attempting to construct a 'file_time_type' from one of these
values is undefined behavior. This patch avoids that UB by detecting possible
overflows before the conversion.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@282634 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp
fbdbb36015dc4695e07d00da213705f57b87f78d 27-Sep-2016 Eric Fiselier <eric@efcs.ca> Fix possible division by zero

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@282468 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp
e7acb0e5be91c8e6ded934184f4053757c5f5360 25-Aug-2016 Marshall Clow <mclow.lists@gmail.com> Followon to r279744. Find the other exception types and make __throw_XXX routines (and call them). Remove the generic __libcpp_throw routine, since no one uses it anymore.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@279763 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp
55e084dd4de60d5a80c1295653f1e41d45ce1c1b 22-Jun-2016 Eric Fiselier <eric@efcs.ca> Cleanup filesystem::permissions ever more.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@273392 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp
e1a1a1ffb7ff3722ce697dada8eeebc03c6ca542 22-Jun-2016 Eric Fiselier <eric@efcs.ca> Avoid unnecessary stat call in filesystem::permissions implementation.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@273391 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp
7c96ddb5639078164a3fe8bcfbf7a11d7f502afb 22-Jun-2016 Eric Fiselier <eric@efcs.ca> Implement LWG issue 2720. Replace perms::resolve_symlinks with perms::symlink_nofollow.

This changes how filesystem::permissions(p, perms) handles symlinks. Previously
symlinks were not resolved by default instead only getting resolved when
"perms::resolve_symlinks" was used. After this change symlinks are resolved
by default and perms::symlink_nofollow must be given to change this.

This issue has not yet been moved to Ready status, and I will revert if it
doesn't get moved at the current meeting. However I feel confident that it
will and it's nice to have implementations when moving issues.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@273328 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp
70f7afec38f9b2064d9aa22440fde30234a58af2 19-Jun-2016 Eric Fiselier <eric@efcs.ca> Fix bugs in last_write_time implementation.

* Fix passing a negative number as either tv_usec or tv_nsec. When file_time_type
is negative and has a non-zero sub-second value we subtract 1 from tv_sec
and make the sub-second duration positive.

* Detect and report when 'file_time_type' cannot be represented by time_t. This
happens when using large/small file_time_type values with a 32 bit time_t.

There is more work to be done in the implementation. It should start to use
stat's st_mtim or st_mtimeval if it's provided as an extension. That way
we can provide a better resolution.



git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@273103 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp
2730c251ae13b737836ed723ce3bf718761d9da3 18-Jun-2016 Eric Fiselier <eric@efcs.ca> Remove Apple specific guard for utimensat. Use !defined(UTIME_OMIT) instead.

As pointed out by @majnemer this is a better way to detect utimensat on all
platforms. The Apple specific guard is unneeded.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@273093 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp
7840a8ca84a44db41386e4c6341b8589b1f55236 18-Jun-2016 Eric Fiselier <eric@efcs.ca> Use utimes instead of utimensat when !defined(UTIME_OMIT). Fixes build for older GLIBC versions

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@273088 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp
591e18f6aaa7f8a8ae1ed0e239708b5e752173bd 18-Jun-2016 Eric Fiselier <eric@efcs.ca> Add additional tests in an attempt to diagnose ARM test failures.

Currently 4 tests are failing on the ARM buildbot. To try and diagnose each
of the failures this patch does the following:

1) path.itr/iterator.pass.cpp
* Temporarily print iteration sequence to see where its failing.

2) path.native.obs/string_alloc.pass.cpp
* Remove test that ::new is not called when constructing a short string
that requires a conversion. Since during the conversion global locale
objects might be constructed.

3) fs.op.funcs/space.pass.cpp
* Explicitly use uintmax_t in the implementation of space, hopefully
preventing possible overflows.
* Add additional tests that check for overflow is the calculation of the
space_info values.
* Add additional tests for the values returned from statfvs.

4) fs.op.funcs/last_write_time.pass.cpp
* No changes made yet.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@273075 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp
6e9a694dce70319e60dbdfb09cf055bacb4c948e 17-Jun-2016 Eric Fiselier <eric@efcs.ca> Add Filesystem TS -- Complete

Add the completed std::experimental::filesystem implementation and tests.
The implementation supports C++11 or newer.

The TS is built as part of 'libc++experimental.a'. Users of the TS need to
manually link this library. Building and testing the TS can be disabled using
the CMake option '-DLIBCXX_ENABLE_FILESYSTEM=OFF'.

Currently 'libc++experimental.a' is not installed by default. To turn on the
installation of the library use '-DLIBCXX_INSTALL_EXPERIMENTAL_LIBRARY=ON'.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@273034 91177308-0d34-0410-b5e6-96231b3b80d8
/external/libcxx/src/experimental/filesystem/operations.cpp