17056250fSNikolas Klauser // -*- C++ -*- 27056250fSNikolas Klauser //===----------------------------------------------------------------------===// 37056250fSNikolas Klauser // 47056250fSNikolas Klauser // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 57056250fSNikolas Klauser // See https://llvm.org/LICENSE.txt for license information. 67056250fSNikolas Klauser // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 77056250fSNikolas Klauser // 87056250fSNikolas Klauser //===----------------------------------------------------------------------===// 97056250fSNikolas Klauser 107056250fSNikolas Klauser #ifndef _LIBCPP___FILESYSTEM_OPERATIONS_H 117056250fSNikolas Klauser #define _LIBCPP___FILESYSTEM_OPERATIONS_H 127056250fSNikolas Klauser 13489637e6SNikolas Klauser #include <__chrono/time_point.h> 147056250fSNikolas Klauser #include <__config> 157056250fSNikolas Klauser #include <__filesystem/copy_options.h> 167056250fSNikolas Klauser #include <__filesystem/file_status.h> 177056250fSNikolas Klauser #include <__filesystem/file_time_type.h> 187056250fSNikolas Klauser #include <__filesystem/file_type.h> 197056250fSNikolas Klauser #include <__filesystem/path.h> 207056250fSNikolas Klauser #include <__filesystem/perm_options.h> 217056250fSNikolas Klauser #include <__filesystem/perms.h> 227056250fSNikolas Klauser #include <__filesystem/space_info.h> 23e8cfbfd0SMark de Wever #include <__system_error/error_code.h> 247056250fSNikolas Klauser #include <cstdint> 257056250fSNikolas Klauser 26fa6b9e40SArthur O'Dwyer #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 27fa6b9e40SArthur O'Dwyer # pragma GCC system_header 28fa6b9e40SArthur O'Dwyer #endif 29fa6b9e40SArthur O'Dwyer 30*c6f3b7bcSNikolas Klauser #if _LIBCPP_STD_VER >= 17 && _LIBCPP_HAS_FILESYSTEM 317056250fSNikolas Klauser 327056250fSNikolas Klauser _LIBCPP_BEGIN_NAMESPACE_FILESYSTEM 337056250fSNikolas Klauser 34dd72b813SLouis Dionne _LIBCPP_AVAILABILITY_FILESYSTEM_LIBRARY_PUSH 357056250fSNikolas Klauser 36f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI path __absolute(const path&, error_code* __ec = nullptr); 37f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI path __canonical(const path&, error_code* __ec = nullptr); 389783f28cSLouis Dionne _LIBCPP_EXPORTED_FROM_ABI bool 399783f28cSLouis Dionne __copy_file(const path& __from, const path& __to, copy_options __opt, error_code* __ec = nullptr); 409783f28cSLouis Dionne _LIBCPP_EXPORTED_FROM_ABI void 419783f28cSLouis Dionne __copy_symlink(const path& __existing_symlink, const path& __new_symlink, error_code* __ec = nullptr); 429783f28cSLouis Dionne _LIBCPP_EXPORTED_FROM_ABI void 439783f28cSLouis Dionne __copy(const path& __from, const path& __to, copy_options __opt, error_code* __ec = nullptr); 44f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI bool __create_directories(const path&, error_code* = nullptr); 459783f28cSLouis Dionne _LIBCPP_EXPORTED_FROM_ABI void 469783f28cSLouis Dionne __create_directory_symlink(const path& __to, const path& __new_symlink, error_code* __ec = nullptr); 47f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI bool __create_directory(const path&, error_code* = nullptr); 48f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI bool __create_directory(const path&, const path& __attributes, error_code* = nullptr); 499783f28cSLouis Dionne _LIBCPP_EXPORTED_FROM_ABI void 509783f28cSLouis Dionne __create_hard_link(const path& __to, const path& __new_hard_link, error_code* __ec = nullptr); 519783f28cSLouis Dionne _LIBCPP_EXPORTED_FROM_ABI void 529783f28cSLouis Dionne __create_symlink(const path& __to, const path& __new_symlink, error_code* __ec = nullptr); 53f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI path __current_path(error_code* __ec = nullptr); 54f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI void __current_path(const path&, error_code* __ec = nullptr); 55f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI bool __equivalent(const path&, const path&, error_code* __ec = nullptr); 56f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI file_status __status(const path&, error_code* __ec = nullptr); 57f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI uintmax_t __file_size(const path&, error_code* __ec = nullptr); 58f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI uintmax_t __hard_link_count(const path&, error_code* __ec = nullptr); 59f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI file_status __symlink_status(const path&, error_code* __ec = nullptr); 60f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI file_time_type __last_write_time(const path&, error_code* __ec = nullptr); 61f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI void __last_write_time(const path&, file_time_type __new_time, error_code* __ec = nullptr); 62f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI path __weakly_canonical(path const& __p, error_code* __ec = nullptr); 63f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI path __read_symlink(const path&, error_code* __ec = nullptr); 64f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI uintmax_t __remove_all(const path&, error_code* __ec = nullptr); 65f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI bool __remove(const path&, error_code* __ec = nullptr); 66f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI void __rename(const path& __from, const path& __to, error_code* __ec = nullptr); 67f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI void __resize_file(const path&, uintmax_t __size, error_code* = nullptr); 68f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI path __temp_directory_path(error_code* __ec = nullptr); 697056250fSNikolas Klauser 7034313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI path absolute(const path& __p) { return __absolute(__p); } 7134313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI path absolute(const path& __p, error_code& __ec) { return __absolute(__p, &__ec); } 7234313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI path canonical(const path& __p) { return __canonical(__p); } 7334313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI path canonical(const path& __p, error_code& __ec) { return __canonical(__p, &__ec); } 749783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI bool copy_file(const path& __from, const path& __to) { 759783f28cSLouis Dionne return __copy_file(__from, __to, copy_options::none); 769783f28cSLouis Dionne } 779783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI bool copy_file(const path& __from, const path& __to, error_code& __ec) { 789783f28cSLouis Dionne return __copy_file(__from, __to, copy_options::none, &__ec); 799783f28cSLouis Dionne } 809783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI bool copy_file(const path& __from, const path& __to, copy_options __opt) { 819783f28cSLouis Dionne return __copy_file(__from, __to, __opt); 829783f28cSLouis Dionne } 839783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI bool 849783f28cSLouis Dionne copy_file(const path& __from, const path& __to, copy_options __opt, error_code& __ec) { 859783f28cSLouis Dionne return __copy_file(__from, __to, __opt, &__ec); 869783f28cSLouis Dionne } 8734313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI void copy_symlink(const path& __from, const path& __to) { __copy_symlink(__from, __to); } 889783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI void copy_symlink(const path& __from, const path& __to, error_code& __ec) noexcept { 899783f28cSLouis Dionne __copy_symlink(__from, __to, &__ec); 909783f28cSLouis Dionne } 919783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI void copy(const path& __from, const path& __to) { 929783f28cSLouis Dionne __copy(__from, __to, copy_options::none); 939783f28cSLouis Dionne } 949783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI void copy(const path& __from, const path& __to, error_code& __ec) { 959783f28cSLouis Dionne __copy(__from, __to, copy_options::none, &__ec); 969783f28cSLouis Dionne } 979783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI void copy(const path& __from, const path& __to, copy_options __opt) { 989783f28cSLouis Dionne __copy(__from, __to, __opt); 999783f28cSLouis Dionne } 1009783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI void copy(const path& __from, const path& __to, copy_options __opt, error_code& __ec) { 1019783f28cSLouis Dionne __copy(__from, __to, __opt, &__ec); 1029783f28cSLouis Dionne } 10334313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI bool create_directories(const path& __p) { return __create_directories(__p); } 1049783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI bool create_directories(const path& __p, error_code& __ec) { 1059783f28cSLouis Dionne return __create_directories(__p, &__ec); 1069783f28cSLouis Dionne } 1079783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI void create_directory_symlink(const path& __target, const path& __link) { 1089783f28cSLouis Dionne __create_directory_symlink(__target, __link); 1099783f28cSLouis Dionne } 1109783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI void 1119783f28cSLouis Dionne create_directory_symlink(const path& __target, const path& __link, error_code& __ec) noexcept { 1129783f28cSLouis Dionne __create_directory_symlink(__target, __link, &__ec); 1139783f28cSLouis Dionne } 11434313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI bool create_directory(const path& __p) { return __create_directory(__p); } 1159783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI bool create_directory(const path& __p, error_code& __ec) noexcept { 1169783f28cSLouis Dionne return __create_directory(__p, &__ec); 1179783f28cSLouis Dionne } 1189783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI bool create_directory(const path& __p, const path& __attrs) { 1199783f28cSLouis Dionne return __create_directory(__p, __attrs); 1209783f28cSLouis Dionne } 1219783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI bool create_directory(const path& __p, const path& __attrs, error_code& __ec) noexcept { 1229783f28cSLouis Dionne return __create_directory(__p, __attrs, &__ec); 1239783f28cSLouis Dionne } 1249783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI void create_hard_link(const path& __target, const path& __link) { 1259783f28cSLouis Dionne __create_hard_link(__target, __link); 1269783f28cSLouis Dionne } 1279783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI void 1289783f28cSLouis Dionne create_hard_link(const path& __target, const path& __link, error_code& __ec) noexcept { 1299783f28cSLouis Dionne __create_hard_link(__target, __link, &__ec); 1309783f28cSLouis Dionne } 1319783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI void create_symlink(const path& __target, const path& __link) { 1329783f28cSLouis Dionne __create_symlink(__target, __link); 1339783f28cSLouis Dionne } 1349783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI void create_symlink(const path& __target, const path& __link, error_code& __ec) noexcept { 1359783f28cSLouis Dionne return __create_symlink(__target, __link, &__ec); 1369783f28cSLouis Dionne } 13734313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI path current_path() { return __current_path(); } 13834313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI path current_path(error_code& __ec) { return __current_path(&__ec); } 13934313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI void current_path(const path& __p) { __current_path(__p); } 1409783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI void current_path(const path& __p, error_code& __ec) noexcept { 1419783f28cSLouis Dionne __current_path(__p, &__ec); 1429783f28cSLouis Dionne } 14334313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI bool equivalent(const path& __p1, const path& __p2) { return __equivalent(__p1, __p2); } 1449783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI bool equivalent(const path& __p1, const path& __p2, error_code& __ec) noexcept { 1459783f28cSLouis Dionne return __equivalent(__p1, __p2, &__ec); 1469783f28cSLouis Dionne } 14734313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI bool status_known(file_status __s) noexcept { return __s.type() != file_type::none; } 1489783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI bool exists(file_status __s) noexcept { 1499783f28cSLouis Dionne return status_known(__s) && __s.type() != file_type::not_found; 1509783f28cSLouis Dionne } 15134313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI bool exists(const path& __p) { return exists(__status(__p)); } 1527056250fSNikolas Klauser 1534c198542SLouis Dionne inline _LIBCPP_HIDE_FROM_ABI bool exists(const path& __p, error_code& __ec) noexcept { 1547056250fSNikolas Klauser auto __s = __status(__p, &__ec); 1557056250fSNikolas Klauser if (status_known(__s)) 1567056250fSNikolas Klauser __ec.clear(); 1577056250fSNikolas Klauser return exists(__s); 1587056250fSNikolas Klauser } 1597056250fSNikolas Klauser 16034313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI uintmax_t file_size(const path& __p) { return __file_size(__p); } 1619783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI uintmax_t file_size(const path& __p, error_code& __ec) noexcept { 1629783f28cSLouis Dionne return __file_size(__p, &__ec); 1639783f28cSLouis Dionne } 16434313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI uintmax_t hard_link_count(const path& __p) { return __hard_link_count(__p); } 1659783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI uintmax_t hard_link_count(const path& __p, error_code& __ec) noexcept { 1669783f28cSLouis Dionne return __hard_link_count(__p, &__ec); 1679783f28cSLouis Dionne } 16834313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI bool is_block_file(file_status __s) noexcept { return __s.type() == file_type::block; } 16934313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI bool is_block_file(const path& __p) { return is_block_file(__status(__p)); } 1709783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI bool is_block_file(const path& __p, error_code& __ec) noexcept { 1719783f28cSLouis Dionne return is_block_file(__status(__p, &__ec)); 1729783f28cSLouis Dionne } 1739783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI bool is_character_file(file_status __s) noexcept { 1749783f28cSLouis Dionne return __s.type() == file_type::character; 1759783f28cSLouis Dionne } 17634313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI bool is_character_file(const path& __p) { return is_character_file(__status(__p)); } 1779783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI bool is_character_file(const path& __p, error_code& __ec) noexcept { 1789783f28cSLouis Dionne return is_character_file(__status(__p, &__ec)); 1799783f28cSLouis Dionne } 18034313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI bool is_directory(file_status __s) noexcept { return __s.type() == file_type::directory; } 18134313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI bool is_directory(const path& __p) { return is_directory(__status(__p)); } 1829783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI bool is_directory(const path& __p, error_code& __ec) noexcept { 1839783f28cSLouis Dionne return is_directory(__status(__p, &__ec)); 1849783f28cSLouis Dionne } 185f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI bool __fs_is_empty(const path& __p, error_code* __ec = nullptr); 18634313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI bool is_empty(const path& __p) { return __fs_is_empty(__p); } 18734313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI bool is_empty(const path& __p, error_code& __ec) { return __fs_is_empty(__p, &__ec); } 18834313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI bool is_fifo(file_status __s) noexcept { return __s.type() == file_type::fifo; } 18934313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI bool is_fifo(const path& __p) { return is_fifo(__status(__p)); } 1909783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI bool is_fifo(const path& __p, error_code& __ec) noexcept { 1919783f28cSLouis Dionne return is_fifo(__status(__p, &__ec)); 1929783f28cSLouis Dionne } 19334313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI bool is_regular_file(file_status __s) noexcept { return __s.type() == file_type::regular; } 19434313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI bool is_regular_file(const path& __p) { return is_regular_file(__status(__p)); } 1959783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI bool is_regular_file(const path& __p, error_code& __ec) noexcept { 1969783f28cSLouis Dionne return is_regular_file(__status(__p, &__ec)); 1979783f28cSLouis Dionne } 19834313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI bool is_symlink(file_status __s) noexcept { return __s.type() == file_type::symlink; } 19934313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI bool is_symlink(const path& __p) { return is_symlink(__symlink_status(__p)); } 2009783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI bool is_symlink(const path& __p, error_code& __ec) noexcept { 2019783f28cSLouis Dionne return is_symlink(__symlink_status(__p, &__ec)); 2029783f28cSLouis Dionne } 2039783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI bool is_other(file_status __s) noexcept { 2049783f28cSLouis Dionne return exists(__s) && !is_regular_file(__s) && !is_directory(__s) && !is_symlink(__s); 2059783f28cSLouis Dionne } 20634313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI bool is_other(const path& __p) { return is_other(__status(__p)); } 2079783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI bool is_other(const path& __p, error_code& __ec) noexcept { 2089783f28cSLouis Dionne return is_other(__status(__p, &__ec)); 2099783f28cSLouis Dionne } 21034313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI bool is_socket(file_status __s) noexcept { return __s.type() == file_type::socket; } 21134313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI bool is_socket(const path& __p) { return is_socket(__status(__p)); } 2129783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI bool is_socket(const path& __p, error_code& __ec) noexcept { 2139783f28cSLouis Dionne return is_socket(__status(__p, &__ec)); 2149783f28cSLouis Dionne } 21534313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI file_time_type last_write_time(const path& __p) { return __last_write_time(__p); } 2169783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI file_time_type last_write_time(const path& __p, error_code& __ec) noexcept { 2179783f28cSLouis Dionne return __last_write_time(__p, &__ec); 2189783f28cSLouis Dionne } 21934313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI void last_write_time(const path& __p, file_time_type __t) { __last_write_time(__p, __t); } 2209783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI void last_write_time(const path& __p, file_time_type __t, error_code& __ec) noexcept { 2219783f28cSLouis Dionne __last_write_time(__p, __t, &__ec); 2229783f28cSLouis Dionne } 223f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI void __permissions(const path&, perms, perm_options, error_code* = nullptr); 2249783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI void 2259783f28cSLouis Dionne permissions(const path& __p, perms __prms, perm_options __opts = perm_options::replace) { 2269783f28cSLouis Dionne __permissions(__p, __prms, __opts); 2279783f28cSLouis Dionne } 2289783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI void permissions(const path& __p, perms __prms, error_code& __ec) noexcept { 2299783f28cSLouis Dionne __permissions(__p, __prms, perm_options::replace, &__ec); 2309783f28cSLouis Dionne } 2319783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI void permissions(const path& __p, perms __prms, perm_options __opts, error_code& __ec) { 2329783f28cSLouis Dionne __permissions(__p, __prms, __opts, &__ec); 2339783f28cSLouis Dionne } 2347056250fSNikolas Klauser 2354c198542SLouis Dionne inline _LIBCPP_HIDE_FROM_ABI path proximate(const path& __p, const path& __base, error_code& __ec) { 2367056250fSNikolas Klauser path __tmp = __weakly_canonical(__p, &__ec); 2377056250fSNikolas Klauser if (__ec) 2387056250fSNikolas Klauser return {}; 2397056250fSNikolas Klauser path __tmp_base = __weakly_canonical(__base, &__ec); 2407056250fSNikolas Klauser if (__ec) 2417056250fSNikolas Klauser return {}; 2427056250fSNikolas Klauser return __tmp.lexically_proximate(__tmp_base); 2437056250fSNikolas Klauser } 2447056250fSNikolas Klauser 2459783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI path proximate(const path& __p, error_code& __ec) { 2469783f28cSLouis Dionne return proximate(__p, current_path(), __ec); 2479783f28cSLouis Dionne } 2489783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI path proximate(const path& __p, const path& __base = current_path()) { 2499783f28cSLouis Dionne return __weakly_canonical(__p).lexically_proximate(__weakly_canonical(__base)); 2509783f28cSLouis Dionne } 25134313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI path read_symlink(const path& __p) { return __read_symlink(__p); } 25234313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI path read_symlink(const path& __p, error_code& __ec) { return __read_symlink(__p, &__ec); } 2537056250fSNikolas Klauser 2544c198542SLouis Dionne inline _LIBCPP_HIDE_FROM_ABI path relative(const path& __p, const path& __base, error_code& __ec) { 2557056250fSNikolas Klauser path __tmp = __weakly_canonical(__p, &__ec); 2567056250fSNikolas Klauser if (__ec) 2577056250fSNikolas Klauser return path(); 2587056250fSNikolas Klauser path __tmpbase = __weakly_canonical(__base, &__ec); 2597056250fSNikolas Klauser if (__ec) 2607056250fSNikolas Klauser return path(); 2617056250fSNikolas Klauser return __tmp.lexically_relative(__tmpbase); 2627056250fSNikolas Klauser } 2637056250fSNikolas Klauser 2649783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI path relative(const path& __p, error_code& __ec) { 2659783f28cSLouis Dionne return relative(__p, current_path(), __ec); 2669783f28cSLouis Dionne } 2679783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI path relative(const path& __p, const path& __base = current_path()) { 2689783f28cSLouis Dionne return __weakly_canonical(__p).lexically_relative(__weakly_canonical(__base)); 2699783f28cSLouis Dionne } 27034313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI uintmax_t remove_all(const path& __p) { return __remove_all(__p); } 2719783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI uintmax_t remove_all(const path& __p, error_code& __ec) { 2729783f28cSLouis Dionne return __remove_all(__p, &__ec); 2739783f28cSLouis Dionne } 27434313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI bool remove(const path& __p) { return __remove(__p); } 27534313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI bool remove(const path& __p, error_code& __ec) noexcept { return __remove(__p, &__ec); } 27634313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI void rename(const path& __from, const path& __to) { return __rename(__from, __to); } 2779783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI void rename(const path& __from, const path& __to, error_code& __ec) noexcept { 2789783f28cSLouis Dionne return __rename(__from, __to, &__ec); 2799783f28cSLouis Dionne } 28034313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI void resize_file(const path& __p, uintmax_t __ns) { return __resize_file(__p, __ns); } 2819783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI void resize_file(const path& __p, uintmax_t __ns, error_code& __ec) noexcept { 2829783f28cSLouis Dionne return __resize_file(__p, __ns, &__ec); 2839783f28cSLouis Dionne } 284f1ea0b11SNikolas Klauser _LIBCPP_EXPORTED_FROM_ABI space_info __space(const path&, error_code* __ec = nullptr); 28534313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI space_info space(const path& __p) { return __space(__p); } 2869783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI space_info space(const path& __p, error_code& __ec) noexcept { 2879783f28cSLouis Dionne return __space(__p, &__ec); 2889783f28cSLouis Dionne } 28934313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI file_status status(const path& __p) { return __status(__p); } 2909783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI file_status status(const path& __p, error_code& __ec) noexcept { 2919783f28cSLouis Dionne return __status(__p, &__ec); 2929783f28cSLouis Dionne } 29334313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI file_status symlink_status(const path& __p) { return __symlink_status(__p); } 2949783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI file_status symlink_status(const path& __p, error_code& __ec) noexcept { 2959783f28cSLouis Dionne return __symlink_status(__p, &__ec); 2969783f28cSLouis Dionne } 29734313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI path temp_directory_path() { return __temp_directory_path(); } 29834313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI path temp_directory_path(error_code& __ec) { return __temp_directory_path(&__ec); } 29934313583SNikolas Klauser inline _LIBCPP_HIDE_FROM_ABI path weakly_canonical(path const& __p) { return __weakly_canonical(__p); } 3009783f28cSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI path weakly_canonical(path const& __p, error_code& __ec) { 3019783f28cSLouis Dionne return __weakly_canonical(__p, &__ec); 3029783f28cSLouis Dionne } 3037056250fSNikolas Klauser 304dd72b813SLouis Dionne _LIBCPP_AVAILABILITY_FILESYSTEM_LIBRARY_POP 3057056250fSNikolas Klauser 3067056250fSNikolas Klauser _LIBCPP_END_NAMESPACE_FILESYSTEM 3077056250fSNikolas Klauser 308*c6f3b7bcSNikolas Klauser #endif // _LIBCPP_STD_VER >= 17 && _LIBCPP_HAS_FILESYSTEM 3097056250fSNikolas Klauser 3107056250fSNikolas Klauser #endif // _LIBCPP___FILESYSTEM_OPERATIONS_H 311