10eae32dcSDimitry Andric // -*- C++ -*- 20eae32dcSDimitry Andric //===----------------------------------------------------------------------===// 30eae32dcSDimitry Andric // 40eae32dcSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 50eae32dcSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 60eae32dcSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 70eae32dcSDimitry Andric // 80eae32dcSDimitry Andric //===----------------------------------------------------------------------===// 90eae32dcSDimitry Andric 100eae32dcSDimitry Andric #ifndef _LIBCPP___FILESYSTEM_OPERATIONS_H 110eae32dcSDimitry Andric #define _LIBCPP___FILESYSTEM_OPERATIONS_H 120eae32dcSDimitry Andric 1381ad6265SDimitry Andric #include <__chrono/time_point.h> 140eae32dcSDimitry Andric #include <__config> 150eae32dcSDimitry Andric #include <__filesystem/copy_options.h> 160eae32dcSDimitry Andric #include <__filesystem/file_status.h> 170eae32dcSDimitry Andric #include <__filesystem/file_time_type.h> 180eae32dcSDimitry Andric #include <__filesystem/file_type.h> 190eae32dcSDimitry Andric #include <__filesystem/path.h> 200eae32dcSDimitry Andric #include <__filesystem/perm_options.h> 210eae32dcSDimitry Andric #include <__filesystem/perms.h> 220eae32dcSDimitry Andric #include <__filesystem/space_info.h> 2306c3fb27SDimitry Andric #include <__system_error/error_code.h> 240eae32dcSDimitry Andric #include <cstdint> 250eae32dcSDimitry Andric 2681ad6265SDimitry Andric #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 2781ad6265SDimitry Andric # pragma GCC system_header 2881ad6265SDimitry Andric #endif 2981ad6265SDimitry Andric 305f757f3fSDimitry Andric #if _LIBCPP_STD_VER >= 17 && !defined(_LIBCPP_HAS_NO_FILESYSTEM) 310eae32dcSDimitry Andric 320eae32dcSDimitry Andric _LIBCPP_BEGIN_NAMESPACE_FILESYSTEM 330eae32dcSDimitry Andric 3406c3fb27SDimitry Andric _LIBCPP_AVAILABILITY_FILESYSTEM_LIBRARY_PUSH 350eae32dcSDimitry Andric 3606c3fb27SDimitry Andric _LIBCPP_EXPORTED_FROM_ABI path __absolute(const path&, error_code* __ec = nullptr); 3706c3fb27SDimitry Andric _LIBCPP_EXPORTED_FROM_ABI path __canonical(const path&, error_code* __ec = nullptr); 38*cb14a3feSDimitry Andric _LIBCPP_EXPORTED_FROM_ABI bool 39*cb14a3feSDimitry Andric __copy_file(const path& __from, const path& __to, copy_options __opt, error_code* __ec = nullptr); 40*cb14a3feSDimitry Andric _LIBCPP_EXPORTED_FROM_ABI void 41*cb14a3feSDimitry Andric __copy_symlink(const path& __existing_symlink, const path& __new_symlink, error_code* __ec = nullptr); 42*cb14a3feSDimitry Andric _LIBCPP_EXPORTED_FROM_ABI void 43*cb14a3feSDimitry Andric __copy(const path& __from, const path& __to, copy_options __opt, error_code* __ec = nullptr); 4406c3fb27SDimitry Andric _LIBCPP_EXPORTED_FROM_ABI bool __create_directories(const path&, error_code* = nullptr); 45*cb14a3feSDimitry Andric _LIBCPP_EXPORTED_FROM_ABI void 46*cb14a3feSDimitry Andric __create_directory_symlink(const path& __to, const path& __new_symlink, error_code* __ec = nullptr); 4706c3fb27SDimitry Andric _LIBCPP_EXPORTED_FROM_ABI bool __create_directory(const path&, error_code* = nullptr); 4806c3fb27SDimitry Andric _LIBCPP_EXPORTED_FROM_ABI bool __create_directory(const path&, const path& __attributes, error_code* = nullptr); 49*cb14a3feSDimitry Andric _LIBCPP_EXPORTED_FROM_ABI void 50*cb14a3feSDimitry Andric __create_hard_link(const path& __to, const path& __new_hard_link, error_code* __ec = nullptr); 51*cb14a3feSDimitry Andric _LIBCPP_EXPORTED_FROM_ABI void 52*cb14a3feSDimitry Andric __create_symlink(const path& __to, const path& __new_symlink, error_code* __ec = nullptr); 5306c3fb27SDimitry Andric _LIBCPP_EXPORTED_FROM_ABI path __current_path(error_code* __ec = nullptr); 5406c3fb27SDimitry Andric _LIBCPP_EXPORTED_FROM_ABI void __current_path(const path&, error_code* __ec = nullptr); 5506c3fb27SDimitry Andric _LIBCPP_EXPORTED_FROM_ABI bool __equivalent(const path&, const path&, error_code* __ec = nullptr); 5606c3fb27SDimitry Andric _LIBCPP_EXPORTED_FROM_ABI file_status __status(const path&, error_code* __ec = nullptr); 5706c3fb27SDimitry Andric _LIBCPP_EXPORTED_FROM_ABI uintmax_t __file_size(const path&, error_code* __ec = nullptr); 5806c3fb27SDimitry Andric _LIBCPP_EXPORTED_FROM_ABI uintmax_t __hard_link_count(const path&, error_code* __ec = nullptr); 5906c3fb27SDimitry Andric _LIBCPP_EXPORTED_FROM_ABI file_status __symlink_status(const path&, error_code* __ec = nullptr); 6006c3fb27SDimitry Andric _LIBCPP_EXPORTED_FROM_ABI file_time_type __last_write_time(const path&, error_code* __ec = nullptr); 6106c3fb27SDimitry Andric _LIBCPP_EXPORTED_FROM_ABI void __last_write_time(const path&, file_time_type __new_time, error_code* __ec = nullptr); 6206c3fb27SDimitry Andric _LIBCPP_EXPORTED_FROM_ABI path __weakly_canonical(path const& __p, error_code* __ec = nullptr); 6306c3fb27SDimitry Andric _LIBCPP_EXPORTED_FROM_ABI path __read_symlink(const path&, error_code* __ec = nullptr); 6406c3fb27SDimitry Andric _LIBCPP_EXPORTED_FROM_ABI uintmax_t __remove_all(const path&, error_code* __ec = nullptr); 6506c3fb27SDimitry Andric _LIBCPP_EXPORTED_FROM_ABI bool __remove(const path&, error_code* __ec = nullptr); 6606c3fb27SDimitry Andric _LIBCPP_EXPORTED_FROM_ABI void __rename(const path& __from, const path& __to, error_code* __ec = nullptr); 6706c3fb27SDimitry Andric _LIBCPP_EXPORTED_FROM_ABI void __resize_file(const path&, uintmax_t __size, error_code* = nullptr); 6806c3fb27SDimitry Andric _LIBCPP_EXPORTED_FROM_ABI path __temp_directory_path(error_code* __ec = nullptr); 690eae32dcSDimitry Andric 7081ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI path absolute(const path& __p) { return __absolute(__p); } 7181ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI path absolute(const path& __p, error_code& __ec) { return __absolute(__p, &__ec); } 7281ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI path canonical(const path& __p) { return __canonical(__p); } 7381ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI path canonical(const path& __p, error_code& __ec) { return __canonical(__p, &__ec); } 74*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool copy_file(const path& __from, const path& __to) { 75*cb14a3feSDimitry Andric return __copy_file(__from, __to, copy_options::none); 76*cb14a3feSDimitry Andric } 77*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool copy_file(const path& __from, const path& __to, error_code& __ec) { 78*cb14a3feSDimitry Andric return __copy_file(__from, __to, copy_options::none, &__ec); 79*cb14a3feSDimitry Andric } 80*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool copy_file(const path& __from, const path& __to, copy_options __opt) { 81*cb14a3feSDimitry Andric return __copy_file(__from, __to, __opt); 82*cb14a3feSDimitry Andric } 83*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool 84*cb14a3feSDimitry Andric copy_file(const path& __from, const path& __to, copy_options __opt, error_code& __ec) { 85*cb14a3feSDimitry Andric return __copy_file(__from, __to, __opt, &__ec); 86*cb14a3feSDimitry Andric } 8781ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI void copy_symlink(const path& __from, const path& __to) { __copy_symlink(__from, __to); } 88*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI void copy_symlink(const path& __from, const path& __to, error_code& __ec) noexcept { 89*cb14a3feSDimitry Andric __copy_symlink(__from, __to, &__ec); 90*cb14a3feSDimitry Andric } 91*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI void copy(const path& __from, const path& __to) { 92*cb14a3feSDimitry Andric __copy(__from, __to, copy_options::none); 93*cb14a3feSDimitry Andric } 94*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI void copy(const path& __from, const path& __to, error_code& __ec) { 95*cb14a3feSDimitry Andric __copy(__from, __to, copy_options::none, &__ec); 96*cb14a3feSDimitry Andric } 97*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI void copy(const path& __from, const path& __to, copy_options __opt) { 98*cb14a3feSDimitry Andric __copy(__from, __to, __opt); 99*cb14a3feSDimitry Andric } 100*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI void copy(const path& __from, const path& __to, copy_options __opt, error_code& __ec) { 101*cb14a3feSDimitry Andric __copy(__from, __to, __opt, &__ec); 102*cb14a3feSDimitry Andric } 10381ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool create_directories(const path& __p) { return __create_directories(__p); } 104*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool create_directories(const path& __p, error_code& __ec) { 105*cb14a3feSDimitry Andric return __create_directories(__p, &__ec); 106*cb14a3feSDimitry Andric } 107*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI void create_directory_symlink(const path& __target, const path& __link) { 108*cb14a3feSDimitry Andric __create_directory_symlink(__target, __link); 109*cb14a3feSDimitry Andric } 110*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI void 111*cb14a3feSDimitry Andric create_directory_symlink(const path& __target, const path& __link, error_code& __ec) noexcept { 112*cb14a3feSDimitry Andric __create_directory_symlink(__target, __link, &__ec); 113*cb14a3feSDimitry Andric } 11481ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool create_directory(const path& __p) { return __create_directory(__p); } 115*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool create_directory(const path& __p, error_code& __ec) noexcept { 116*cb14a3feSDimitry Andric return __create_directory(__p, &__ec); 117*cb14a3feSDimitry Andric } 118*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool create_directory(const path& __p, const path& __attrs) { 119*cb14a3feSDimitry Andric return __create_directory(__p, __attrs); 120*cb14a3feSDimitry Andric } 121*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool create_directory(const path& __p, const path& __attrs, error_code& __ec) noexcept { 122*cb14a3feSDimitry Andric return __create_directory(__p, __attrs, &__ec); 123*cb14a3feSDimitry Andric } 124*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI void create_hard_link(const path& __target, const path& __link) { 125*cb14a3feSDimitry Andric __create_hard_link(__target, __link); 126*cb14a3feSDimitry Andric } 127*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI void 128*cb14a3feSDimitry Andric create_hard_link(const path& __target, const path& __link, error_code& __ec) noexcept { 129*cb14a3feSDimitry Andric __create_hard_link(__target, __link, &__ec); 130*cb14a3feSDimitry Andric } 131*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI void create_symlink(const path& __target, const path& __link) { 132*cb14a3feSDimitry Andric __create_symlink(__target, __link); 133*cb14a3feSDimitry Andric } 134*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI void create_symlink(const path& __target, const path& __link, error_code& __ec) noexcept { 135*cb14a3feSDimitry Andric return __create_symlink(__target, __link, &__ec); 136*cb14a3feSDimitry Andric } 13781ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI path current_path() { return __current_path(); } 13881ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI path current_path(error_code& __ec) { return __current_path(&__ec); } 13981ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI void current_path(const path& __p) { __current_path(__p); } 140*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI void current_path(const path& __p, error_code& __ec) noexcept { 141*cb14a3feSDimitry Andric __current_path(__p, &__ec); 142*cb14a3feSDimitry Andric } 14381ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool equivalent(const path& __p1, const path& __p2) { return __equivalent(__p1, __p2); } 144*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool equivalent(const path& __p1, const path& __p2, error_code& __ec) noexcept { 145*cb14a3feSDimitry Andric return __equivalent(__p1, __p2, &__ec); 146*cb14a3feSDimitry Andric } 14781ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool status_known(file_status __s) noexcept { return __s.type() != file_type::none; } 148*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool exists(file_status __s) noexcept { 149*cb14a3feSDimitry Andric return status_known(__s) && __s.type() != file_type::not_found; 150*cb14a3feSDimitry Andric } 15181ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool exists(const path& __p) { return exists(__status(__p)); } 1520eae32dcSDimitry Andric 1535f757f3fSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool exists(const path& __p, error_code& __ec) noexcept { 1540eae32dcSDimitry Andric auto __s = __status(__p, &__ec); 1550eae32dcSDimitry Andric if (status_known(__s)) 1560eae32dcSDimitry Andric __ec.clear(); 1570eae32dcSDimitry Andric return exists(__s); 1580eae32dcSDimitry Andric } 1590eae32dcSDimitry Andric 16081ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI uintmax_t file_size(const path& __p) { return __file_size(__p); } 161*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI uintmax_t file_size(const path& __p, error_code& __ec) noexcept { 162*cb14a3feSDimitry Andric return __file_size(__p, &__ec); 163*cb14a3feSDimitry Andric } 16481ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI uintmax_t hard_link_count(const path& __p) { return __hard_link_count(__p); } 165*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI uintmax_t hard_link_count(const path& __p, error_code& __ec) noexcept { 166*cb14a3feSDimitry Andric return __hard_link_count(__p, &__ec); 167*cb14a3feSDimitry Andric } 16881ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool is_block_file(file_status __s) noexcept { return __s.type() == file_type::block; } 16981ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool is_block_file(const path& __p) { return is_block_file(__status(__p)); } 170*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool is_block_file(const path& __p, error_code& __ec) noexcept { 171*cb14a3feSDimitry Andric return is_block_file(__status(__p, &__ec)); 172*cb14a3feSDimitry Andric } 173*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool is_character_file(file_status __s) noexcept { 174*cb14a3feSDimitry Andric return __s.type() == file_type::character; 175*cb14a3feSDimitry Andric } 17681ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool is_character_file(const path& __p) { return is_character_file(__status(__p)); } 177*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool is_character_file(const path& __p, error_code& __ec) noexcept { 178*cb14a3feSDimitry Andric return is_character_file(__status(__p, &__ec)); 179*cb14a3feSDimitry Andric } 18081ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool is_directory(file_status __s) noexcept { return __s.type() == file_type::directory; } 18181ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool is_directory(const path& __p) { return is_directory(__status(__p)); } 182*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool is_directory(const path& __p, error_code& __ec) noexcept { 183*cb14a3feSDimitry Andric return is_directory(__status(__p, &__ec)); 184*cb14a3feSDimitry Andric } 18506c3fb27SDimitry Andric _LIBCPP_EXPORTED_FROM_ABI bool __fs_is_empty(const path& __p, error_code* __ec = nullptr); 18681ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool is_empty(const path& __p) { return __fs_is_empty(__p); } 18781ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool is_empty(const path& __p, error_code& __ec) { return __fs_is_empty(__p, &__ec); } 18881ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool is_fifo(file_status __s) noexcept { return __s.type() == file_type::fifo; } 18981ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool is_fifo(const path& __p) { return is_fifo(__status(__p)); } 190*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool is_fifo(const path& __p, error_code& __ec) noexcept { 191*cb14a3feSDimitry Andric return is_fifo(__status(__p, &__ec)); 192*cb14a3feSDimitry Andric } 19381ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool is_regular_file(file_status __s) noexcept { return __s.type() == file_type::regular; } 19481ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool is_regular_file(const path& __p) { return is_regular_file(__status(__p)); } 195*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool is_regular_file(const path& __p, error_code& __ec) noexcept { 196*cb14a3feSDimitry Andric return is_regular_file(__status(__p, &__ec)); 197*cb14a3feSDimitry Andric } 19881ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool is_symlink(file_status __s) noexcept { return __s.type() == file_type::symlink; } 19981ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool is_symlink(const path& __p) { return is_symlink(__symlink_status(__p)); } 200*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool is_symlink(const path& __p, error_code& __ec) noexcept { 201*cb14a3feSDimitry Andric return is_symlink(__symlink_status(__p, &__ec)); 202*cb14a3feSDimitry Andric } 203*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool is_other(file_status __s) noexcept { 204*cb14a3feSDimitry Andric return exists(__s) && !is_regular_file(__s) && !is_directory(__s) && !is_symlink(__s); 205*cb14a3feSDimitry Andric } 20681ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool is_other(const path& __p) { return is_other(__status(__p)); } 207*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool is_other(const path& __p, error_code& __ec) noexcept { 208*cb14a3feSDimitry Andric return is_other(__status(__p, &__ec)); 209*cb14a3feSDimitry Andric } 21081ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool is_socket(file_status __s) noexcept { return __s.type() == file_type::socket; } 21181ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool is_socket(const path& __p) { return is_socket(__status(__p)); } 212*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool is_socket(const path& __p, error_code& __ec) noexcept { 213*cb14a3feSDimitry Andric return is_socket(__status(__p, &__ec)); 214*cb14a3feSDimitry Andric } 21581ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI file_time_type last_write_time(const path& __p) { return __last_write_time(__p); } 216*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI file_time_type last_write_time(const path& __p, error_code& __ec) noexcept { 217*cb14a3feSDimitry Andric return __last_write_time(__p, &__ec); 218*cb14a3feSDimitry Andric } 21981ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI void last_write_time(const path& __p, file_time_type __t) { __last_write_time(__p, __t); } 220*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI void last_write_time(const path& __p, file_time_type __t, error_code& __ec) noexcept { 221*cb14a3feSDimitry Andric __last_write_time(__p, __t, &__ec); 222*cb14a3feSDimitry Andric } 22306c3fb27SDimitry Andric _LIBCPP_EXPORTED_FROM_ABI void __permissions(const path&, perms, perm_options, error_code* = nullptr); 224*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI void 225*cb14a3feSDimitry Andric permissions(const path& __p, perms __prms, perm_options __opts = perm_options::replace) { 226*cb14a3feSDimitry Andric __permissions(__p, __prms, __opts); 227*cb14a3feSDimitry Andric } 228*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI void permissions(const path& __p, perms __prms, error_code& __ec) noexcept { 229*cb14a3feSDimitry Andric __permissions(__p, __prms, perm_options::replace, &__ec); 230*cb14a3feSDimitry Andric } 231*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI void permissions(const path& __p, perms __prms, perm_options __opts, error_code& __ec) { 232*cb14a3feSDimitry Andric __permissions(__p, __prms, __opts, &__ec); 233*cb14a3feSDimitry Andric } 2340eae32dcSDimitry Andric 2355f757f3fSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI path proximate(const path& __p, const path& __base, error_code& __ec) { 2360eae32dcSDimitry Andric path __tmp = __weakly_canonical(__p, &__ec); 2370eae32dcSDimitry Andric if (__ec) 2380eae32dcSDimitry Andric return {}; 2390eae32dcSDimitry Andric path __tmp_base = __weakly_canonical(__base, &__ec); 2400eae32dcSDimitry Andric if (__ec) 2410eae32dcSDimitry Andric return {}; 2420eae32dcSDimitry Andric return __tmp.lexically_proximate(__tmp_base); 2430eae32dcSDimitry Andric } 2440eae32dcSDimitry Andric 245*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI path proximate(const path& __p, error_code& __ec) { 246*cb14a3feSDimitry Andric return proximate(__p, current_path(), __ec); 247*cb14a3feSDimitry Andric } 248*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI path proximate(const path& __p, const path& __base = current_path()) { 249*cb14a3feSDimitry Andric return __weakly_canonical(__p).lexically_proximate(__weakly_canonical(__base)); 250*cb14a3feSDimitry Andric } 25181ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI path read_symlink(const path& __p) { return __read_symlink(__p); } 25281ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI path read_symlink(const path& __p, error_code& __ec) { return __read_symlink(__p, &__ec); } 2530eae32dcSDimitry Andric 2545f757f3fSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI path relative(const path& __p, const path& __base, error_code& __ec) { 2550eae32dcSDimitry Andric path __tmp = __weakly_canonical(__p, &__ec); 2560eae32dcSDimitry Andric if (__ec) 2570eae32dcSDimitry Andric return path(); 2580eae32dcSDimitry Andric path __tmpbase = __weakly_canonical(__base, &__ec); 2590eae32dcSDimitry Andric if (__ec) 2600eae32dcSDimitry Andric return path(); 2610eae32dcSDimitry Andric return __tmp.lexically_relative(__tmpbase); 2620eae32dcSDimitry Andric } 2630eae32dcSDimitry Andric 264*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI path relative(const path& __p, error_code& __ec) { 265*cb14a3feSDimitry Andric return relative(__p, current_path(), __ec); 266*cb14a3feSDimitry Andric } 267*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI path relative(const path& __p, const path& __base = current_path()) { 268*cb14a3feSDimitry Andric return __weakly_canonical(__p).lexically_relative(__weakly_canonical(__base)); 269*cb14a3feSDimitry Andric } 27081ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI uintmax_t remove_all(const path& __p) { return __remove_all(__p); } 271*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI uintmax_t remove_all(const path& __p, error_code& __ec) { 272*cb14a3feSDimitry Andric return __remove_all(__p, &__ec); 273*cb14a3feSDimitry Andric } 27481ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool remove(const path& __p) { return __remove(__p); } 27581ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI bool remove(const path& __p, error_code& __ec) noexcept { return __remove(__p, &__ec); } 27681ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI void rename(const path& __from, const path& __to) { return __rename(__from, __to); } 277*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI void rename(const path& __from, const path& __to, error_code& __ec) noexcept { 278*cb14a3feSDimitry Andric return __rename(__from, __to, &__ec); 279*cb14a3feSDimitry Andric } 28081ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI void resize_file(const path& __p, uintmax_t __ns) { return __resize_file(__p, __ns); } 281*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI void resize_file(const path& __p, uintmax_t __ns, error_code& __ec) noexcept { 282*cb14a3feSDimitry Andric return __resize_file(__p, __ns, &__ec); 283*cb14a3feSDimitry Andric } 28406c3fb27SDimitry Andric _LIBCPP_EXPORTED_FROM_ABI space_info __space(const path&, error_code* __ec = nullptr); 28581ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI space_info space(const path& __p) { return __space(__p); } 286*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI space_info space(const path& __p, error_code& __ec) noexcept { 287*cb14a3feSDimitry Andric return __space(__p, &__ec); 288*cb14a3feSDimitry Andric } 28981ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI file_status status(const path& __p) { return __status(__p); } 290*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI file_status status(const path& __p, error_code& __ec) noexcept { 291*cb14a3feSDimitry Andric return __status(__p, &__ec); 292*cb14a3feSDimitry Andric } 29381ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI file_status symlink_status(const path& __p) { return __symlink_status(__p); } 294*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI file_status symlink_status(const path& __p, error_code& __ec) noexcept { 295*cb14a3feSDimitry Andric return __symlink_status(__p, &__ec); 296*cb14a3feSDimitry Andric } 29781ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI path temp_directory_path() { return __temp_directory_path(); } 29881ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI path temp_directory_path(error_code& __ec) { return __temp_directory_path(&__ec); } 29981ad6265SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI path weakly_canonical(path const& __p) { return __weakly_canonical(__p); } 300*cb14a3feSDimitry Andric inline _LIBCPP_HIDE_FROM_ABI path weakly_canonical(path const& __p, error_code& __ec) { 301*cb14a3feSDimitry Andric return __weakly_canonical(__p, &__ec); 302*cb14a3feSDimitry Andric } 3030eae32dcSDimitry Andric 30406c3fb27SDimitry Andric _LIBCPP_AVAILABILITY_FILESYSTEM_LIBRARY_POP 3050eae32dcSDimitry Andric 3060eae32dcSDimitry Andric _LIBCPP_END_NAMESPACE_FILESYSTEM 3070eae32dcSDimitry Andric 3085f757f3fSDimitry Andric #endif // _LIBCPP_STD_VER >= 17 && !defined(_LIBCPP_HAS_NO_FILESYSTEM) 3090eae32dcSDimitry Andric 3100eae32dcSDimitry Andric #endif // _LIBCPP___FILESYSTEM_OPERATIONS_H 311