1*58b9f456SAndroid Build Coastguard Worker// -*- C++ -*- 2*58b9f456SAndroid Build Coastguard Worker//===--------------------------- filesystem -------------------------------===// 3*58b9f456SAndroid Build Coastguard Worker// 4*58b9f456SAndroid Build Coastguard Worker// The LLVM Compiler Infrastructure 5*58b9f456SAndroid Build Coastguard Worker// 6*58b9f456SAndroid Build Coastguard Worker// This file is dual licensed under the MIT and the University of Illinois Open 7*58b9f456SAndroid Build Coastguard Worker// Source Licenses. See LICENSE.TXT for details. 8*58b9f456SAndroid Build Coastguard Worker// 9*58b9f456SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 10*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_EXPERIMENTAL_FILESYSTEM 11*58b9f456SAndroid Build Coastguard Worker#define _LIBCPP_EXPERIMENTAL_FILESYSTEM 12*58b9f456SAndroid Build Coastguard Worker/* 13*58b9f456SAndroid Build Coastguard Worker filesystem synopsis 14*58b9f456SAndroid Build Coastguard Worker 15*58b9f456SAndroid Build Coastguard Worker namespace std { namespace experimental { namespace filesystem { inline namespace v1 { 16*58b9f456SAndroid Build Coastguard Worker 17*58b9f456SAndroid Build Coastguard Worker class path; 18*58b9f456SAndroid Build Coastguard Worker 19*58b9f456SAndroid Build Coastguard Worker void swap(path& lhs, path& rhs) noexcept; 20*58b9f456SAndroid Build Coastguard Worker size_t hash_value(const path& p) noexcept; 21*58b9f456SAndroid Build Coastguard Worker 22*58b9f456SAndroid Build Coastguard Worker bool operator==(const path& lhs, const path& rhs) noexcept; 23*58b9f456SAndroid Build Coastguard Worker bool operator!=(const path& lhs, const path& rhs) noexcept; 24*58b9f456SAndroid Build Coastguard Worker bool operator< (const path& lhs, const path& rhs) noexcept; 25*58b9f456SAndroid Build Coastguard Worker bool operator<=(const path& lhs, const path& rhs) noexcept; 26*58b9f456SAndroid Build Coastguard Worker bool operator> (const path& lhs, const path& rhs) noexcept; 27*58b9f456SAndroid Build Coastguard Worker bool operator>=(const path& lhs, const path& rhs) noexcept; 28*58b9f456SAndroid Build Coastguard Worker 29*58b9f456SAndroid Build Coastguard Worker path operator/ (const path& lhs, const path& rhs); 30*58b9f456SAndroid Build Coastguard Worker 31*58b9f456SAndroid Build Coastguard Worker // fs.path.io operators are friends of path. 32*58b9f456SAndroid Build Coastguard Worker template <class charT, class traits> 33*58b9f456SAndroid Build Coastguard Worker friend basic_ostream<charT, traits>& 34*58b9f456SAndroid Build Coastguard Worker operator<<(basic_ostream<charT, traits>& os, const path& p); 35*58b9f456SAndroid Build Coastguard Worker 36*58b9f456SAndroid Build Coastguard Worker template <class charT, class traits> 37*58b9f456SAndroid Build Coastguard Worker friend basic_istream<charT, traits>& 38*58b9f456SAndroid Build Coastguard Worker operator>>(basic_istream<charT, traits>& is, path& p); 39*58b9f456SAndroid Build Coastguard Worker 40*58b9f456SAndroid Build Coastguard Worker template <class Source> 41*58b9f456SAndroid Build Coastguard Worker path u8path(const Source& source); 42*58b9f456SAndroid Build Coastguard Worker template <class InputIterator> 43*58b9f456SAndroid Build Coastguard Worker path u8path(InputIterator first, InputIterator last); 44*58b9f456SAndroid Build Coastguard Worker 45*58b9f456SAndroid Build Coastguard Worker class filesystem_error; 46*58b9f456SAndroid Build Coastguard Worker class directory_entry; 47*58b9f456SAndroid Build Coastguard Worker 48*58b9f456SAndroid Build Coastguard Worker class directory_iterator; 49*58b9f456SAndroid Build Coastguard Worker 50*58b9f456SAndroid Build Coastguard Worker // enable directory_iterator range-based for statements 51*58b9f456SAndroid Build Coastguard Worker directory_iterator begin(directory_iterator iter) noexcept; 52*58b9f456SAndroid Build Coastguard Worker directory_iterator end(const directory_iterator&) noexcept; 53*58b9f456SAndroid Build Coastguard Worker 54*58b9f456SAndroid Build Coastguard Worker class recursive_directory_iterator; 55*58b9f456SAndroid Build Coastguard Worker 56*58b9f456SAndroid Build Coastguard Worker // enable recursive_directory_iterator range-based for statements 57*58b9f456SAndroid Build Coastguard Worker recursive_directory_iterator begin(recursive_directory_iterator iter) noexcept; 58*58b9f456SAndroid Build Coastguard Worker recursive_directory_iterator end(const recursive_directory_iterator&) noexcept; 59*58b9f456SAndroid Build Coastguard Worker 60*58b9f456SAndroid Build Coastguard Worker class file_status; 61*58b9f456SAndroid Build Coastguard Worker 62*58b9f456SAndroid Build Coastguard Worker struct space_info 63*58b9f456SAndroid Build Coastguard Worker { 64*58b9f456SAndroid Build Coastguard Worker uintmax_t capacity; 65*58b9f456SAndroid Build Coastguard Worker uintmax_t free; 66*58b9f456SAndroid Build Coastguard Worker uintmax_t available; 67*58b9f456SAndroid Build Coastguard Worker }; 68*58b9f456SAndroid Build Coastguard Worker 69*58b9f456SAndroid Build Coastguard Worker enum class file_type; 70*58b9f456SAndroid Build Coastguard Worker enum class perms; 71*58b9f456SAndroid Build Coastguard Worker enum class perm_options; 72*58b9f456SAndroid Build Coastguard Worker enum class copy_options; 73*58b9f456SAndroid Build Coastguard Worker enum class directory_options; 74*58b9f456SAndroid Build Coastguard Worker 75*58b9f456SAndroid Build Coastguard Worker typedef chrono::time_point<trivial-clock> file_time_type; 76*58b9f456SAndroid Build Coastguard Worker 77*58b9f456SAndroid Build Coastguard Worker // operational functions 78*58b9f456SAndroid Build Coastguard Worker 79*58b9f456SAndroid Build Coastguard Worker path absolute(const path& p); 80*58b9f456SAndroid Build Coastguard Worker path absolute(const path& p, error_code &ec); 81*58b9f456SAndroid Build Coastguard Worker 82*58b9f456SAndroid Build Coastguard Worker path canonical(const path& p); 83*58b9f456SAndroid Build Coastguard Worker path canonical(const path& p, error_code& ec); 84*58b9f456SAndroid Build Coastguard Worker 85*58b9f456SAndroid Build Coastguard Worker void copy(const path& from, const path& to); 86*58b9f456SAndroid Build Coastguard Worker void copy(const path& from, const path& to, error_code& ec); 87*58b9f456SAndroid Build Coastguard Worker void copy(const path& from, const path& to, copy_options options); 88*58b9f456SAndroid Build Coastguard Worker void copy(const path& from, const path& to, copy_options options, 89*58b9f456SAndroid Build Coastguard Worker error_code& ec); 90*58b9f456SAndroid Build Coastguard Worker 91*58b9f456SAndroid Build Coastguard Worker bool copy_file(const path& from, const path& to); 92*58b9f456SAndroid Build Coastguard Worker bool copy_file(const path& from, const path& to, error_code& ec); 93*58b9f456SAndroid Build Coastguard Worker bool copy_file(const path& from, const path& to, copy_options option); 94*58b9f456SAndroid Build Coastguard Worker bool copy_file(const path& from, const path& to, copy_options option, 95*58b9f456SAndroid Build Coastguard Worker error_code& ec); 96*58b9f456SAndroid Build Coastguard Worker 97*58b9f456SAndroid Build Coastguard Worker void copy_symlink(const path& existing_symlink, const path& new_symlink); 98*58b9f456SAndroid Build Coastguard Worker void copy_symlink(const path& existing_symlink, const path& new_symlink, 99*58b9f456SAndroid Build Coastguard Worker error_code& ec) noexcept; 100*58b9f456SAndroid Build Coastguard Worker 101*58b9f456SAndroid Build Coastguard Worker bool create_directories(const path& p); 102*58b9f456SAndroid Build Coastguard Worker bool create_directories(const path& p, error_code& ec); 103*58b9f456SAndroid Build Coastguard Worker 104*58b9f456SAndroid Build Coastguard Worker bool create_directory(const path& p); 105*58b9f456SAndroid Build Coastguard Worker bool create_directory(const path& p, error_code& ec) noexcept; 106*58b9f456SAndroid Build Coastguard Worker 107*58b9f456SAndroid Build Coastguard Worker bool create_directory(const path& p, const path& attributes); 108*58b9f456SAndroid Build Coastguard Worker bool create_directory(const path& p, const path& attributes, 109*58b9f456SAndroid Build Coastguard Worker error_code& ec) noexcept; 110*58b9f456SAndroid Build Coastguard Worker 111*58b9f456SAndroid Build Coastguard Worker void create_directory_symlink(const path& to, const path& new_symlink); 112*58b9f456SAndroid Build Coastguard Worker void create_directory_symlink(const path& to, const path& new_symlink, 113*58b9f456SAndroid Build Coastguard Worker error_code& ec) noexcept; 114*58b9f456SAndroid Build Coastguard Worker 115*58b9f456SAndroid Build Coastguard Worker void create_hard_link(const path& to, const path& new_hard_link); 116*58b9f456SAndroid Build Coastguard Worker void create_hard_link(const path& to, const path& new_hard_link, 117*58b9f456SAndroid Build Coastguard Worker error_code& ec) noexcept; 118*58b9f456SAndroid Build Coastguard Worker 119*58b9f456SAndroid Build Coastguard Worker void create_symlink(const path& to, const path& new_symlink); 120*58b9f456SAndroid Build Coastguard Worker void create_symlink(const path& to, const path& new_symlink, 121*58b9f456SAndroid Build Coastguard Worker error_code& ec) noexcept; 122*58b9f456SAndroid Build Coastguard Worker 123*58b9f456SAndroid Build Coastguard Worker path current_path(); 124*58b9f456SAndroid Build Coastguard Worker path current_path(error_code& ec); 125*58b9f456SAndroid Build Coastguard Worker void current_path(const path& p); 126*58b9f456SAndroid Build Coastguard Worker void current_path(const path& p, error_code& ec) noexcept; 127*58b9f456SAndroid Build Coastguard Worker 128*58b9f456SAndroid Build Coastguard Worker bool exists(file_status s) noexcept; 129*58b9f456SAndroid Build Coastguard Worker bool exists(const path& p); 130*58b9f456SAndroid Build Coastguard Worker bool exists(const path& p, error_code& ec) noexcept; 131*58b9f456SAndroid Build Coastguard Worker 132*58b9f456SAndroid Build Coastguard Worker bool equivalent(const path& p1, const path& p2); 133*58b9f456SAndroid Build Coastguard Worker bool equivalent(const path& p1, const path& p2, error_code& ec) noexcept; 134*58b9f456SAndroid Build Coastguard Worker 135*58b9f456SAndroid Build Coastguard Worker uintmax_t file_size(const path& p); 136*58b9f456SAndroid Build Coastguard Worker uintmax_t file_size(const path& p, error_code& ec) noexcept; 137*58b9f456SAndroid Build Coastguard Worker 138*58b9f456SAndroid Build Coastguard Worker uintmax_t hard_link_count(const path& p); 139*58b9f456SAndroid Build Coastguard Worker uintmax_t hard_link_count(const path& p, error_code& ec) noexcept; 140*58b9f456SAndroid Build Coastguard Worker 141*58b9f456SAndroid Build Coastguard Worker bool is_block_file(file_status s) noexcept; 142*58b9f456SAndroid Build Coastguard Worker bool is_block_file(const path& p); 143*58b9f456SAndroid Build Coastguard Worker bool is_block_file(const path& p, error_code& ec) noexcept; 144*58b9f456SAndroid Build Coastguard Worker 145*58b9f456SAndroid Build Coastguard Worker bool is_character_file(file_status s) noexcept; 146*58b9f456SAndroid Build Coastguard Worker bool is_character_file(const path& p); 147*58b9f456SAndroid Build Coastguard Worker bool is_character_file(const path& p, error_code& ec) noexcept; 148*58b9f456SAndroid Build Coastguard Worker 149*58b9f456SAndroid Build Coastguard Worker bool is_directory(file_status s) noexcept; 150*58b9f456SAndroid Build Coastguard Worker bool is_directory(const path& p); 151*58b9f456SAndroid Build Coastguard Worker bool is_directory(const path& p, error_code& ec) noexcept; 152*58b9f456SAndroid Build Coastguard Worker 153*58b9f456SAndroid Build Coastguard Worker bool is_empty(const path& p); 154*58b9f456SAndroid Build Coastguard Worker bool is_empty(const path& p, error_code& ec) noexcept; 155*58b9f456SAndroid Build Coastguard Worker 156*58b9f456SAndroid Build Coastguard Worker bool is_fifo(file_status s) noexcept; 157*58b9f456SAndroid Build Coastguard Worker bool is_fifo(const path& p); 158*58b9f456SAndroid Build Coastguard Worker bool is_fifo(const path& p, error_code& ec) noexcept; 159*58b9f456SAndroid Build Coastguard Worker 160*58b9f456SAndroid Build Coastguard Worker bool is_other(file_status s) noexcept; 161*58b9f456SAndroid Build Coastguard Worker bool is_other(const path& p); 162*58b9f456SAndroid Build Coastguard Worker bool is_other(const path& p, error_code& ec) noexcept; 163*58b9f456SAndroid Build Coastguard Worker 164*58b9f456SAndroid Build Coastguard Worker bool is_regular_file(file_status s) noexcept; 165*58b9f456SAndroid Build Coastguard Worker bool is_regular_file(const path& p); 166*58b9f456SAndroid Build Coastguard Worker bool is_regular_file(const path& p, error_code& ec) noexcept; 167*58b9f456SAndroid Build Coastguard Worker 168*58b9f456SAndroid Build Coastguard Worker bool is_socket(file_status s) noexcept; 169*58b9f456SAndroid Build Coastguard Worker bool is_socket(const path& p); 170*58b9f456SAndroid Build Coastguard Worker bool is_socket(const path& p, error_code& ec) noexcept; 171*58b9f456SAndroid Build Coastguard Worker 172*58b9f456SAndroid Build Coastguard Worker bool is_symlink(file_status s) noexcept; 173*58b9f456SAndroid Build Coastguard Worker bool is_symlink(const path& p); 174*58b9f456SAndroid Build Coastguard Worker bool is_symlink(const path& p, error_code& ec) noexcept; 175*58b9f456SAndroid Build Coastguard Worker 176*58b9f456SAndroid Build Coastguard Worker file_time_type last_write_time(const path& p); 177*58b9f456SAndroid Build Coastguard Worker file_time_type last_write_time(const path& p, error_code& ec) noexcept; 178*58b9f456SAndroid Build Coastguard Worker void last_write_time(const path& p, file_time_type new_time); 179*58b9f456SAndroid Build Coastguard Worker void last_write_time(const path& p, file_time_type new_time, 180*58b9f456SAndroid Build Coastguard Worker error_code& ec) noexcept; 181*58b9f456SAndroid Build Coastguard Worker 182*58b9f456SAndroid Build Coastguard Worker void permissions(const path& p, perms prms, 183*58b9f456SAndroid Build Coastguard Worker perm_options opts=perm_options::replace); 184*58b9f456SAndroid Build Coastguard Worker void permissions(const path& p, perms prms, error_code& ec) noexcept; 185*58b9f456SAndroid Build Coastguard Worker void permissions(const path& p, perms prms, perm_options opts, 186*58b9f456SAndroid Build Coastguard Worker error_code& ec); 187*58b9f456SAndroid Build Coastguard Worker 188*58b9f456SAndroid Build Coastguard Worker path proximate(const path& p, error_code& ec); 189*58b9f456SAndroid Build Coastguard Worker path proximate(const path& p, const path& base = current_path()); 190*58b9f456SAndroid Build Coastguard Worker path proximate(const path& p, const path& base, error_code &ec); 191*58b9f456SAndroid Build Coastguard Worker 192*58b9f456SAndroid Build Coastguard Worker path read_symlink(const path& p); 193*58b9f456SAndroid Build Coastguard Worker path read_symlink(const path& p, error_code& ec); 194*58b9f456SAndroid Build Coastguard Worker 195*58b9f456SAndroid Build Coastguard Worker path relative(const path& p, error_code& ec); 196*58b9f456SAndroid Build Coastguard Worker path relative(const path& p, const path& base=current_path()); 197*58b9f456SAndroid Build Coastguard Worker path relative(const path& p, const path& base, error_code& ec); 198*58b9f456SAndroid Build Coastguard Worker 199*58b9f456SAndroid Build Coastguard Worker bool remove(const path& p); 200*58b9f456SAndroid Build Coastguard Worker bool remove(const path& p, error_code& ec) noexcept; 201*58b9f456SAndroid Build Coastguard Worker 202*58b9f456SAndroid Build Coastguard Worker uintmax_t remove_all(const path& p); 203*58b9f456SAndroid Build Coastguard Worker uintmax_t remove_all(const path& p, error_code& ec); 204*58b9f456SAndroid Build Coastguard Worker 205*58b9f456SAndroid Build Coastguard Worker void rename(const path& from, const path& to); 206*58b9f456SAndroid Build Coastguard Worker void rename(const path& from, const path& to, error_code& ec) noexcept; 207*58b9f456SAndroid Build Coastguard Worker 208*58b9f456SAndroid Build Coastguard Worker void resize_file(const path& p, uintmax_t size); 209*58b9f456SAndroid Build Coastguard Worker void resize_file(const path& p, uintmax_t size, error_code& ec) noexcept; 210*58b9f456SAndroid Build Coastguard Worker 211*58b9f456SAndroid Build Coastguard Worker space_info space(const path& p); 212*58b9f456SAndroid Build Coastguard Worker space_info space(const path& p, error_code& ec) noexcept; 213*58b9f456SAndroid Build Coastguard Worker 214*58b9f456SAndroid Build Coastguard Worker file_status status(const path& p); 215*58b9f456SAndroid Build Coastguard Worker file_status status(const path& p, error_code& ec) noexcept; 216*58b9f456SAndroid Build Coastguard Worker 217*58b9f456SAndroid Build Coastguard Worker bool status_known(file_status s) noexcept; 218*58b9f456SAndroid Build Coastguard Worker 219*58b9f456SAndroid Build Coastguard Worker file_status symlink_status(const path& p); 220*58b9f456SAndroid Build Coastguard Worker file_status symlink_status(const path& p, error_code& ec) noexcept; 221*58b9f456SAndroid Build Coastguard Worker 222*58b9f456SAndroid Build Coastguard Worker path temp_directory_path(); 223*58b9f456SAndroid Build Coastguard Worker path temp_directory_path(error_code& ec); 224*58b9f456SAndroid Build Coastguard Worker 225*58b9f456SAndroid Build Coastguard Worker path weakly_canonical(path const& p); 226*58b9f456SAndroid Build Coastguard Worker path weakly_canonical(path const& p, error_code& ec); 227*58b9f456SAndroid Build Coastguard Worker 228*58b9f456SAndroid Build Coastguard Worker 229*58b9f456SAndroid Build Coastguard Worker} } } } // namespaces std::experimental::filesystem::v1 230*58b9f456SAndroid Build Coastguard Worker 231*58b9f456SAndroid Build Coastguard Worker*/ 232*58b9f456SAndroid Build Coastguard Worker 233*58b9f456SAndroid Build Coastguard Worker#include <experimental/__config> 234*58b9f456SAndroid Build Coastguard Worker#include <filesystem> 235*58b9f456SAndroid Build Coastguard Worker 236*58b9f456SAndroid Build Coastguard Worker#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 237*58b9f456SAndroid Build Coastguard Worker#pragma GCC system_header 238*58b9f456SAndroid Build Coastguard Worker#endif 239*58b9f456SAndroid Build Coastguard Worker 240*58b9f456SAndroid Build Coastguard Worker_LIBCPP_PUSH_MACROS 241*58b9f456SAndroid Build Coastguard Worker#include <__undef_macros> 242*58b9f456SAndroid Build Coastguard Worker 243*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG 244*58b9f456SAndroid Build Coastguard Worker 245*58b9f456SAndroid Build Coastguard Worker#define __cpp_lib_experimental_filesystem 201406 246*58b9f456SAndroid Build Coastguard Worker 247*58b9f456SAndroid Build Coastguard Worker_LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL_FILESYSTEM 248*58b9f456SAndroid Build Coastguard Worker 249*58b9f456SAndroid Build Coastguard Workerusing namespace _VSTD_FS; 250*58b9f456SAndroid Build Coastguard Worker 251*58b9f456SAndroid Build Coastguard Worker_LIBCPP_END_NAMESPACE_EXPERIMENTAL_FILESYSTEM 252*58b9f456SAndroid Build Coastguard Worker 253*58b9f456SAndroid Build Coastguard Worker#endif // !_LIBCPP_CXX03_LANG 254*58b9f456SAndroid Build Coastguard Worker 255*58b9f456SAndroid Build Coastguard Worker_LIBCPP_POP_MACROS 256*58b9f456SAndroid Build Coastguard Worker 257*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_EXPERIMENTAL_FILESYSTEM 258