1*38fd1498Szrj // Filesystem operational functions -*- C++ -*-
2*38fd1498Szrj
3*38fd1498Szrj // Copyright (C) 2014-2018 Free Software Foundation, Inc.
4*38fd1498Szrj //
5*38fd1498Szrj // This file is part of the GNU ISO C++ Library. This library is free
6*38fd1498Szrj // software; you can redistribute it and/or modify it under the
7*38fd1498Szrj // terms of the GNU General Public License as published by the
8*38fd1498Szrj // Free Software Foundation; either version 3, or (at your __option)
9*38fd1498Szrj // any later version.
10*38fd1498Szrj
11*38fd1498Szrj // This library is distributed in the hope that it will be useful,
12*38fd1498Szrj // but WITHOUT ANY WARRANTY; without even the implied warranty of
13*38fd1498Szrj // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14*38fd1498Szrj // GNU General Public License for more details.
15*38fd1498Szrj
16*38fd1498Szrj // Under Section 7 of GPL version 3, you are granted additional
17*38fd1498Szrj // permissions described in the GCC Runtime Library Exception, version
18*38fd1498Szrj // 3.1, as published by the Free Software Foundation.
19*38fd1498Szrj
20*38fd1498Szrj // You should have received a copy of the GNU General Public License and
21*38fd1498Szrj // a copy of the GCC Runtime Library Exception along with this program;
22*38fd1498Szrj // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
23*38fd1498Szrj // <http://www.gnu.org/licenses/>.
24*38fd1498Szrj
25*38fd1498Szrj /** @file include/bits/fs_fwd.h
26*38fd1498Szrj * This is an internal header file, included by other library headers.
27*38fd1498Szrj * Do not attempt to use it directly. @headername{filesystem}
28*38fd1498Szrj */
29*38fd1498Szrj
30*38fd1498Szrj #ifndef _GLIBCXX_FS_OPS_H
31*38fd1498Szrj #define _GLIBCXX_FS_OPS_H 1
32*38fd1498Szrj
33*38fd1498Szrj #if __cplusplus >= 201703L
34*38fd1498Szrj
35*38fd1498Szrj #include <cstdint>
36*38fd1498Szrj
_GLIBCXX_VISIBILITY(default)37*38fd1498Szrj namespace std _GLIBCXX_VISIBILITY(default)
38*38fd1498Szrj {
39*38fd1498Szrj _GLIBCXX_BEGIN_NAMESPACE_VERSION
40*38fd1498Szrj
41*38fd1498Szrj namespace filesystem
42*38fd1498Szrj {
43*38fd1498Szrj /**
44*38fd1498Szrj * @ingroup filesystem
45*38fd1498Szrj * @{
46*38fd1498Szrj */
47*38fd1498Szrj
48*38fd1498Szrj path absolute(const path& __p);
49*38fd1498Szrj path absolute(const path& __p, error_code& __ec);
50*38fd1498Szrj
51*38fd1498Szrj path canonical(const path& __p);
52*38fd1498Szrj path canonical(const path& __p, error_code& __ec);
53*38fd1498Szrj
54*38fd1498Szrj inline void
55*38fd1498Szrj copy(const path& __from, const path& __to)
56*38fd1498Szrj { copy(__from, __to, copy_options::none); }
57*38fd1498Szrj
58*38fd1498Szrj inline void
59*38fd1498Szrj copy(const path& __from, const path& __to, error_code& __ec)
60*38fd1498Szrj { copy(__from, __to, copy_options::none, __ec); }
61*38fd1498Szrj
62*38fd1498Szrj void copy(const path& __from, const path& __to, copy_options __options);
63*38fd1498Szrj void copy(const path& __from, const path& __to, copy_options __options,
64*38fd1498Szrj error_code& __ec);
65*38fd1498Szrj
66*38fd1498Szrj inline bool
67*38fd1498Szrj copy_file(const path& __from, const path& __to)
68*38fd1498Szrj { return copy_file(__from, __to, copy_options::none); }
69*38fd1498Szrj
70*38fd1498Szrj inline bool
71*38fd1498Szrj copy_file(const path& __from, const path& __to, error_code& __ec)
72*38fd1498Szrj { return copy_file(__from, __to, copy_options::none, __ec); }
73*38fd1498Szrj
74*38fd1498Szrj bool copy_file(const path& __from, const path& __to, copy_options __option);
75*38fd1498Szrj bool copy_file(const path& __from, const path& __to, copy_options __option,
76*38fd1498Szrj error_code& __ec);
77*38fd1498Szrj
78*38fd1498Szrj void copy_symlink(const path& __existing_symlink, const path& __new_symlink);
79*38fd1498Szrj void copy_symlink(const path& __existing_symlink, const path& __new_symlink,
80*38fd1498Szrj error_code& __ec) noexcept;
81*38fd1498Szrj
82*38fd1498Szrj bool create_directories(const path& __p);
83*38fd1498Szrj bool create_directories(const path& __p, error_code& __ec);
84*38fd1498Szrj
85*38fd1498Szrj bool create_directory(const path& __p);
86*38fd1498Szrj bool create_directory(const path& __p, error_code& __ec) noexcept;
87*38fd1498Szrj
88*38fd1498Szrj bool create_directory(const path& __p, const path& attributes);
89*38fd1498Szrj bool create_directory(const path& __p, const path& attributes,
90*38fd1498Szrj error_code& __ec) noexcept;
91*38fd1498Szrj
92*38fd1498Szrj void create_directory_symlink(const path& __to, const path& __new_symlink);
93*38fd1498Szrj void create_directory_symlink(const path& __to, const path& __new_symlink,
94*38fd1498Szrj error_code& __ec) noexcept;
95*38fd1498Szrj
96*38fd1498Szrj void create_hard_link(const path& __to, const path& __new_hard_link);
97*38fd1498Szrj void create_hard_link(const path& __to, const path& __new_hard_link,
98*38fd1498Szrj error_code& __ec) noexcept;
99*38fd1498Szrj
100*38fd1498Szrj void create_symlink(const path& __to, const path& __new_symlink);
101*38fd1498Szrj void create_symlink(const path& __to, const path& __new_symlink,
102*38fd1498Szrj error_code& __ec) noexcept;
103*38fd1498Szrj
104*38fd1498Szrj path current_path();
105*38fd1498Szrj path current_path(error_code& __ec);
106*38fd1498Szrj void current_path(const path& __p);
107*38fd1498Szrj void current_path(const path& __p, error_code& __ec) noexcept;
108*38fd1498Szrj
109*38fd1498Szrj bool
110*38fd1498Szrj equivalent(const path& __p1, const path& __p2);
111*38fd1498Szrj
112*38fd1498Szrj bool
113*38fd1498Szrj equivalent(const path& __p1, const path& __p2, error_code& __ec) noexcept;
114*38fd1498Szrj
115*38fd1498Szrj inline bool
116*38fd1498Szrj exists(file_status __s) noexcept
117*38fd1498Szrj { return status_known(__s) && __s.type() != file_type::not_found; }
118*38fd1498Szrj
119*38fd1498Szrj inline bool
120*38fd1498Szrj exists(const path& __p)
121*38fd1498Szrj { return exists(status(__p)); }
122*38fd1498Szrj
123*38fd1498Szrj inline bool
124*38fd1498Szrj exists(const path& __p, error_code& __ec) noexcept
125*38fd1498Szrj {
126*38fd1498Szrj auto __s = status(__p, __ec);
127*38fd1498Szrj if (status_known(__s))
128*38fd1498Szrj {
129*38fd1498Szrj __ec.clear();
130*38fd1498Szrj return __s.type() != file_type::not_found;
131*38fd1498Szrj }
132*38fd1498Szrj return false;
133*38fd1498Szrj }
134*38fd1498Szrj
135*38fd1498Szrj uintmax_t file_size(const path& __p);
136*38fd1498Szrj uintmax_t file_size(const path& __p, error_code& __ec) noexcept;
137*38fd1498Szrj
138*38fd1498Szrj uintmax_t hard_link_count(const path& __p);
139*38fd1498Szrj uintmax_t hard_link_count(const path& __p, error_code& __ec) noexcept;
140*38fd1498Szrj
141*38fd1498Szrj inline bool
142*38fd1498Szrj is_block_file(file_status __s) noexcept
143*38fd1498Szrj { return __s.type() == file_type::block; }
144*38fd1498Szrj
145*38fd1498Szrj inline bool
146*38fd1498Szrj is_block_file(const path& __p)
147*38fd1498Szrj { return is_block_file(status(__p)); }
148*38fd1498Szrj
149*38fd1498Szrj inline bool
150*38fd1498Szrj is_block_file(const path& __p, error_code& __ec) noexcept
151*38fd1498Szrj { return is_block_file(status(__p, __ec)); }
152*38fd1498Szrj
153*38fd1498Szrj inline bool
154*38fd1498Szrj is_character_file(file_status __s) noexcept
155*38fd1498Szrj { return __s.type() == file_type::character; }
156*38fd1498Szrj
157*38fd1498Szrj inline bool
158*38fd1498Szrj is_character_file(const path& __p)
159*38fd1498Szrj { return is_character_file(status(__p)); }
160*38fd1498Szrj
161*38fd1498Szrj inline bool
162*38fd1498Szrj is_character_file(const path& __p, error_code& __ec) noexcept
163*38fd1498Szrj { return is_character_file(status(__p, __ec)); }
164*38fd1498Szrj
165*38fd1498Szrj inline bool
166*38fd1498Szrj is_directory(file_status __s) noexcept
167*38fd1498Szrj { return __s.type() == file_type::directory; }
168*38fd1498Szrj
169*38fd1498Szrj inline bool
170*38fd1498Szrj is_directory(const path& __p)
171*38fd1498Szrj { return is_directory(status(__p)); }
172*38fd1498Szrj
173*38fd1498Szrj inline bool
174*38fd1498Szrj is_directory(const path& __p, error_code& __ec) noexcept
175*38fd1498Szrj { return is_directory(status(__p, __ec)); }
176*38fd1498Szrj
177*38fd1498Szrj bool is_empty(const path& __p);
178*38fd1498Szrj bool is_empty(const path& __p, error_code& __ec);
179*38fd1498Szrj
180*38fd1498Szrj inline bool
181*38fd1498Szrj is_fifo(file_status __s) noexcept
182*38fd1498Szrj { return __s.type() == file_type::fifo; }
183*38fd1498Szrj
184*38fd1498Szrj inline bool
185*38fd1498Szrj is_fifo(const path& __p)
186*38fd1498Szrj { return is_fifo(status(__p)); }
187*38fd1498Szrj
188*38fd1498Szrj inline bool
189*38fd1498Szrj is_fifo(const path& __p, error_code& __ec) noexcept
190*38fd1498Szrj { return is_fifo(status(__p, __ec)); }
191*38fd1498Szrj
192*38fd1498Szrj inline bool
193*38fd1498Szrj is_other(file_status __s) noexcept
194*38fd1498Szrj {
195*38fd1498Szrj return exists(__s) && !is_regular_file(__s) && !is_directory(__s)
196*38fd1498Szrj && !is_symlink(__s);
197*38fd1498Szrj }
198*38fd1498Szrj
199*38fd1498Szrj inline bool
200*38fd1498Szrj is_other(const path& __p)
201*38fd1498Szrj { return is_other(status(__p)); }
202*38fd1498Szrj
203*38fd1498Szrj inline bool
204*38fd1498Szrj is_other(const path& __p, error_code& __ec) noexcept
205*38fd1498Szrj { return is_other(status(__p, __ec)); }
206*38fd1498Szrj
207*38fd1498Szrj inline bool
208*38fd1498Szrj is_regular_file(file_status __s) noexcept
209*38fd1498Szrj { return __s.type() == file_type::regular; }
210*38fd1498Szrj
211*38fd1498Szrj inline bool
212*38fd1498Szrj is_regular_file(const path& __p)
213*38fd1498Szrj { return is_regular_file(status(__p)); }
214*38fd1498Szrj
215*38fd1498Szrj inline bool
216*38fd1498Szrj is_regular_file(const path& __p, error_code& __ec) noexcept
217*38fd1498Szrj { return is_regular_file(status(__p, __ec)); }
218*38fd1498Szrj
219*38fd1498Szrj inline bool
220*38fd1498Szrj is_socket(file_status __s) noexcept
221*38fd1498Szrj { return __s.type() == file_type::socket; }
222*38fd1498Szrj
223*38fd1498Szrj inline bool
224*38fd1498Szrj is_socket(const path& __p)
225*38fd1498Szrj { return is_socket(status(__p)); }
226*38fd1498Szrj
227*38fd1498Szrj inline bool
228*38fd1498Szrj is_socket(const path& __p, error_code& __ec) noexcept
229*38fd1498Szrj { return is_socket(status(__p, __ec)); }
230*38fd1498Szrj
231*38fd1498Szrj inline bool
232*38fd1498Szrj is_symlink(file_status __s) noexcept
233*38fd1498Szrj { return __s.type() == file_type::symlink; }
234*38fd1498Szrj
235*38fd1498Szrj inline bool
236*38fd1498Szrj is_symlink(const path& __p)
237*38fd1498Szrj { return is_symlink(symlink_status(__p)); }
238*38fd1498Szrj
239*38fd1498Szrj inline bool
240*38fd1498Szrj is_symlink(const path& __p, error_code& __ec) noexcept
241*38fd1498Szrj { return is_symlink(symlink_status(__p, __ec)); }
242*38fd1498Szrj
243*38fd1498Szrj file_time_type last_write_time(const path& __p);
244*38fd1498Szrj file_time_type last_write_time(const path& __p, error_code& __ec) noexcept;
245*38fd1498Szrj void last_write_time(const path& __p, file_time_type __new_time);
246*38fd1498Szrj void last_write_time(const path& __p, file_time_type __new_time,
247*38fd1498Szrj error_code& __ec) noexcept;
248*38fd1498Szrj
249*38fd1498Szrj void
250*38fd1498Szrj permissions(const path& __p, perms __prms,
251*38fd1498Szrj perm_options __opts = perm_options::replace);
252*38fd1498Szrj
253*38fd1498Szrj inline void
254*38fd1498Szrj permissions(const path& __p, perms __prms, error_code& __ec) noexcept
255*38fd1498Szrj { permissions(__p, __prms, perm_options::replace, __ec); }
256*38fd1498Szrj
257*38fd1498Szrj void
258*38fd1498Szrj permissions(const path& __p, perms __prms, perm_options __opts,
259*38fd1498Szrj error_code& __ec) noexcept;
260*38fd1498Szrj
261*38fd1498Szrj inline path proximate(const path& __p, error_code& __ec)
262*38fd1498Szrj { return proximate(__p, current_path(), __ec); }
263*38fd1498Szrj
264*38fd1498Szrj path proximate(const path& __p, const path& __base = current_path());
265*38fd1498Szrj path proximate(const path& __p, const path& __base, error_code& __ec);
266*38fd1498Szrj
267*38fd1498Szrj path read_symlink(const path& __p);
268*38fd1498Szrj path read_symlink(const path& __p, error_code& __ec);
269*38fd1498Szrj
270*38fd1498Szrj inline path relative(const path& __p, error_code& __ec)
271*38fd1498Szrj { return relative(__p, current_path(), __ec); }
272*38fd1498Szrj
273*38fd1498Szrj path relative(const path& __p, const path& __base = current_path());
274*38fd1498Szrj path relative(const path& __p, const path& __base, error_code& __ec);
275*38fd1498Szrj
276*38fd1498Szrj bool remove(const path& __p);
277*38fd1498Szrj bool remove(const path& __p, error_code& __ec) noexcept;
278*38fd1498Szrj
279*38fd1498Szrj uintmax_t remove_all(const path& __p);
280*38fd1498Szrj uintmax_t remove_all(const path& __p, error_code& __ec);
281*38fd1498Szrj
282*38fd1498Szrj void rename(const path& __from, const path& __to);
283*38fd1498Szrj void rename(const path& __from, const path& __to, error_code& __ec) noexcept;
284*38fd1498Szrj
285*38fd1498Szrj void resize_file(const path& __p, uintmax_t __size);
286*38fd1498Szrj void resize_file(const path& __p, uintmax_t __size, error_code& __ec) noexcept;
287*38fd1498Szrj
288*38fd1498Szrj space_info space(const path& __p);
289*38fd1498Szrj space_info space(const path& __p, error_code& __ec) noexcept;
290*38fd1498Szrj
291*38fd1498Szrj file_status status(const path& __p);
292*38fd1498Szrj file_status status(const path& __p, error_code& __ec) noexcept;
293*38fd1498Szrj
294*38fd1498Szrj inline bool status_known(file_status __s) noexcept
295*38fd1498Szrj { return __s.type() != file_type::none; }
296*38fd1498Szrj
297*38fd1498Szrj file_status symlink_status(const path& __p);
298*38fd1498Szrj file_status symlink_status(const path& __p, error_code& __ec) noexcept;
299*38fd1498Szrj
300*38fd1498Szrj path temp_directory_path();
301*38fd1498Szrj path temp_directory_path(error_code& __ec);
302*38fd1498Szrj
303*38fd1498Szrj path weakly_canonical(const path& __p);
304*38fd1498Szrj path weakly_canonical(const path& __p, error_code& __ec);
305*38fd1498Szrj
306*38fd1498Szrj // @} group filesystem
307*38fd1498Szrj } // namespace filesystem
308*38fd1498Szrj
309*38fd1498Szrj _GLIBCXX_END_NAMESPACE_VERSION
310*38fd1498Szrj } // namespace std
311*38fd1498Szrj
312*38fd1498Szrj #endif // C++17
313*38fd1498Szrj
314*38fd1498Szrj #endif // _GLIBCXX_FS_OPS_H
315