• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html>
2
3<head>
4<meta http-equiv="Content-Language" content="en-us">
5<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
6<meta name="ProgId" content="FrontPage.Editor.Document">
7<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
8<title>Filesystem Release History</title>
9<link href="styles.css" rel="stylesheet">
10</head>
11
12<body>
13
14<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
15  <tr>
16    <td width="277">
17<a href="../../../index.htm">
18<img src="../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
19    <td align="middle">
20    <font size="7">Filesystem Release History</font>
21    </td>
22  </tr>
23</table>
24
25<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
26 bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
27  <tr>
28    <td><a href="index.htm">Home</a> &nbsp;&nbsp;
29    <a href="tutorial.html">Tutorial</a> &nbsp;&nbsp;
30    <a href="reference.html">Reference</a> &nbsp;&nbsp;
31    <a href="faq.htm">FAQ</a> &nbsp;&nbsp;
32    <a href="release_history.html">Releases</a> &nbsp;&nbsp;
33    <a href="portability_guide.htm">Portability</a> &nbsp;&nbsp;
34    <a href="v3.html">V3 Intro</a> &nbsp;&nbsp;
35    <a href="v3_design.html">V3 Design</a> &nbsp;&nbsp;
36    <a href="deprecated.html">Deprecated</a> &nbsp;&nbsp;
37    <a href="issue_reporting.html">Bug Reports</a>&nbsp;&nbsp;
38    </td>
39</table>
40
41<h2>1.74.0</h2>
42<ul>
43  <li>Removed compile-time checks for support for symlinks and hardlink on Windows. Instead, a runtime check is used. (<a href="https://github.com/boostorg/filesystem/pull/142">PR#142</a>)</li>
44  <li>Fixed handling of reparse points in <code>canonical</code> and <code>read_symlink</code> on Windows. This also affects other algorithms that involve <code>canonical</code> and <code>read_symlink</code> in their implementation. (<a href="https://github.com/boostorg/filesystem/pull/100">PR#100</a>, <a href="https://github.com/boostorg/filesystem/issues/85">#85</a>, <a href="https://github.com/boostorg/filesystem/issues/99">#99</a>, <a href="https://github.com/boostorg/filesystem/issues/123">#123</a>, <a href="https://github.com/boostorg/filesystem/issues/125">#125</a>)</li>
45  <li>Fixed that <code>read_symlink</code> on Windows could potentially fail or cause failures elsewhere with a sharing violation error, if the same symlink was opened concurrently. (<a href="https://github.com/boostorg/filesystem/issues/138">#138</a>)</li>
46  <li>Fixed that <code>is_symlink(directory_entry)</code> would always return <code>false</code>, even if the directory entry actually referred to a symlink. (<a href="https://github.com/boostorg/filesystem/pull/148">PR#148</a>)</li>
47  <li>Added missing status inspection operation overloads for <code>directory_entry</code> and <code>error_code</code> (e.g. <code>is_directory(directory_entry, error_code&amp;)</code>). Removed incorrect <code>noexcept</code> specifications for the overloads not taking the <code>error_code</code> arguments.</li>
48  <li><code>copy_file</code> implementation has been updated to perform checks on the source and target files, as required by C++20 ([fs.op.copy.file]/4.1). In particular, the operation will fail if the source or target file is not a regular file or the source and target paths identify the same file.</li>
49  <li><code>copy_file</code> on POSIX systems will now also copy the source file permissions to the target file, if the target file is overwritten.</li>
50  <li><b>New:</b> Added <code>copy_file</code> implementations based on <code>sendfile</code> and <code>copy_file_range</code> system calls on Linux, which may improve file copying performance, especially on network filesystems.</li>
51  <li><b>Deprecated:</b> The <code>copy_option</code> enumeration that is used with the <code>copy_file</code> operation is deprecated. As a replacement, the new enum <code>copy_options</code> (note the trailing 's') has been added. The new enum contains values similar to the <code>copy_options</code> enum from C++20. The old enum values are mapped onto the new enum. The old enum will be removed in a future release.</li>
52  <li><b>New:</b> Added <code>copy_options::skip_existing</code> option, which allows <code>copy_file</code> operation to succeed without overwriting the target file, if it exists.</li>
53  <li><b>New:</b> Added <code>copy_options::update_existing</code> option, which allows <code>copy_file</code> operation to conditionally overwrite the target file, if it exists, if its last write time is older than that of the replacement file.</li>
54  <li><b>New:</b> <code>copy_file</code> now returns <code>bool</code>, which indicates whether the file was copied.</li>
55  <li><b>New, breaking change:</b> <code>copy</code> operation has been extended and reworked to implement behavior specified in C++20 [fs.op.copy]. This includes support for <code>copy_options::recursive</code>, <code>copy_options::copy_symlinks</code>, <code>copy_options::skip_symlinks</code>, <code>copy_options::directories_only</code>, <code>copy_options::create_symlinks</code> and <code>copy_options::create_hard_links</code> options. The operation performs additional checks based on the specified options. Applying <code>copy</code> to a directory with default <code>copy_options</code> will now also copy files residing in that directory (but not nested directories or files in those directories).</li>
56  <li><b>New:</b> Added <code>create_directory</code> overload taking two paths. The second path is a path to an existing directory, which is used as a source of permission attributes to use in the directory to create.</li>
57  <li><b>Deprecated:</b> <code>copy_directory</code> operation has been deprecated in favor of the new <code>create_directory</code> overload. Note that the two operations have reversed order of the path arguments.</li>
58  <li><code>equivalent</code> on POSIX systems now returns the actual error code from the OS if one of the paths does not resolve to a file. Previously the function would return an error code of 1. (<a href="https://github.com/boostorg/filesystem/issues/141">#141</a>)</li>
59  <li><code>equivalent</code> no longer considers file size and last modification time in order to test whether the two paths refer to the same file. These checks could result in a false negative if the file was modified during the <code>equivalent</code> call.</li>
60  <li><b>New:</b> Added <code>absolute</code> overloads taking <code>error_code</code> argument.</li>
61  <li>Operations that have <code>current_path()</code> as the default value of their arguments and also have an <code>error_code</code> argument will use the <code>current_path(error_code& ec)</code> overload to obtain the current path, so that its failure is reported via the <code>error_code</code> argument instead of an exception.</li>
62  <li><code>space</code> now initializes the <code>space_info</code> structure members to -1 values on error, as required by C++20 ([fs.op.space]/1).</li>
63  <li><code>space</code> on Windows now accepts paths referring to arbitrary files, not only directories. This is similar to POSIX systems and corresponds to the operation description in C++20. (<a href="https://github.com/boostorg/filesystem/issues/73">#73</a>)</li>
64  <li><b>New:</b> Added implementation of <code>temp_directory_path</code> for Windows CE. (<a href="https://github.com/boostorg/filesystem/pull/25">PR#25</a>)</li>
65  <li><b>New:</b> Improved compatibility with <a href="https://wasi.dev/">WASI</a> platform. (<a href="https://github.com/boostorg/filesystem/pull/144">PR#144</a>)</li>
66  <li><b>New:</b> Improved support for Embarcadero compilers. (<a href="https://github.com/boostorg/filesystem/pull/130">PR#130</a>)</li>
67  <li><b>New:</b> Added implementations of <code>unique_path</code> operation based on <code>getrandom</code> (Linux), <code>arc4random_buf</code> (OpenBSD/FreeBSD/CloudABI) and BCrypt (Windows) system APIs.</li>
68  <li><b>Deprecated:</b> Auto-linking against system libraries on Windows with MSVC-compatible compilers is deprecated and will be removed in a future release. This affects users linking against static library of Boost.Filesystem. Users are advised to update their project build systems to either use a shared library of Boost.Filesystem, or explicitly specify the dependencies of Boost.Filesystem in the linker command line. In the future, the dependency information may also be exposed through CMake config files.</li>
69</ul>
70
71<h2>1.72.0</h2>
72<ul>
73  <li>Extracted <code>filesystem_error</code> to <code>exception.hpp</code>; <code>file_status</code> and associated enums and functions to <code>file_status.hpp</code>; <code>directory_entry</code>, <code>directory_iterator</code> and <code>recursive_directory_iterator</code> to <code>directory.hpp</code>.</li>
74  <li><b>Deprecated:</b> For backward compatibility <code>operations.hpp</code> still includes the new headers <code>exception.hpp</code>, <code>file_status.hpp</code> and <code>directory.hpp</code>, unless <code>BOOST_FILESYSTEM_NO_DEPRECATED</code> macro is defined. These implicit includes are considered deprecated and will be removed in a future release. Users are encouraged to include the new headers directly or include <code>filesystem.hpp</code>.</li>
75  <li>The <code>filesystem_error</code> exception is now implemented in the compiled library of Boost.Filesystem. Users may need to add linking with Boost.Filesystem library in their projects.</li>
76  <li>On POSIX.1-2008 platforms, use <code>utimensat</code> instead of <code>utime</code>. <code>utime</code> is declared obsolete in POSIX.1-2008 and can be disabled e.g. in uClibc-ng. (<a href="https://github.com/boostorg/filesystem/pull/115">PR#115</a>)</li>
77  <li><code>directory_iterator</code> is now left in the end state on memory allocation errors.</li>
78  <li>In <code>directory_iterator</code> on POSIX systems, support for <code>readdir</code>/<code>readdir_r</code> has been reworked to avoid memory allocations for <code>dirent</code> structures when <code>readdir</code> is used. This reduces memory consumption and eliminates the possibility of buffer overruns in case if <code>readdir</code> produces a very long directory name.</li>
79  <li>On Windows, use Boost.WinAPI to select the target Windows version.</li>
80  <li><b>New:</b> Added <code>directory_options</code> enum, which reflects the same named enum from C++20. The enum is supported in <code>directory_iterator</code> and <code>recursive_directory_iterator</code> to customize iteration behavior. In particular, the iterators now support skipping directories that can&apos;t be opened due to insufficient permissions. The <code>symlink_option</code> enum is now deprecated and should be replaced with <code>directory_options</code>.</li>
81  <li>By default, <code>recursive_directory_iterator</code> is now reset to the end state in case of errors, as required by C++20. (<a href="https://github.com/boostorg/filesystem/issues/112">#112</a>)</li>
82  <li><b>New:</b> Added <code>directory_options::pop_on_error</code> option, which configures <code>recursive_directory_iterator</code> so that it attempts to recover from iteration errors by repeatedly invoking <code>pop()</code> until it succeeds or the end state is reached. (<a href="https://github.com/boostorg/filesystem/issues/113">#113</a>)</li>
83  <li><b>New:</b> Added <code>directory_options::skip_dangling_symlinks</code> option, which configures <code>recursive_directory_iterator</code> so that it doesn't follow dangling directory symlinks and continues iteration instead of reporting an error.</li>
84  <li><b>Deprecated:</b> The following members of <code>recursive_directory_iterator</code> are now marked as deprecated: <code>level()</code>, <code>no_push_pending()</code>, <code>no_push_request()</code>, <code>no_push()</code>. Users are advised to replace their use with the standard counterparts: <code>depth()</code>, <code>recursion_pending()</code>, <code>disable_recursion_pending()</code>. Note that <code>recursion_pending()</code> has the opposite meaning compared to <code>no_push_pending()</code> and <code>no_push_request()</code>. Deprecated methods will be removed in a future release.</li>
85  <li>Fixed <code>path::lexically_relative</code> (and any dependent algorithms) to correctly handle empty, dot and dot-dot path elements in its argument. The behavior is made closer to C++17 <code>std::path::lexically_relative</code> in that empty and dot path elements are ignored and dot-dot path elements are accounted by decreasing the number of dot-dot path elements to generate in the resulting relative path. (<a href="https://github.com/boostorg/filesystem/issues/76">#76</a>)</li>
86</ul>
87
88<h2>1.71.0</h2>
89<ul>
90  <li><b>New:</b> Added minimal support for CMake. (<a href="https://github.com/boostorg/filesystem/pull/106">PR#106</a>)</li>
91  <li>Fixed incorrect <code>error_code</code> returned from directory iterator increment when <code>readdir_r</code> is used.</li>
92  <li>For <code>path</code>, fixed rvalue-aware <code>operator/</code> return type to return an rvalue instead of rvalue reference. This fixes leaving a dangling reference in the user&apos;s code if the result of <code>operator/</code> is bound to a const reference. (<a href="https://github.com/boostorg/filesystem/issues/110">#110</a>)</li>
93  <li>Fixes for better compatibility with Windows CE. (<a href="https://github.com/boostorg/filesystem/pull/24">PR#24</a>)</li>
94</ul>
95
96<h2>1.70.0</h2>
97<ul>
98  <li><b>New:</b> Added support for movability to directory iterators.</li>
99  <li><b>New:</b> Added file status query overloads for directory_entry. This avoids a relatively expensive OS query when file status is requested for a result of dereferencing a directory iterator. (<a href="https://github.com/boostorg/filesystem/pull/55">PR#55</a>)</li>
100  <li>Fixed a few instances of dereferencing <code>std::string::end()</code> in path implementation.</li>
101  <li>Fixed program termination in case of out of memory condition in directory iterators constructors and operations accepting a reference to <code>error_code</code>. (<a href="https://github.com/boostorg/filesystem/issues/58">#58</a>)</li>
102  <li>Fixed possible linking errors caused by missing definitions of static members of <code>path</code>. (<a href="https://svn.boost.org/trac/boost/ticket/12759">#12759</a>)</li>
103  <li>Fixed possible use of uninitialized data in directory iterator increment operation on Linux. (<a href="https://github.com/boostorg/filesystem/issues/97">#97</a>)</li>
104  <li>Reworked <code>current_path</code> and <code>read_symlink</code> implementation to avoid possible memory exhaustion on broken or tampered with filesystems. The functions now have an internal limit of the path size they will accept from the OS, which is currently 16 MiB.</li>
105  <li>Increased the size of the internal buffer used by <code>copy_file</code>.</li>
106</ul>
107
108<h2>1.69.0</h2>
109<ul>
110  <li>Don&apos;t use <code>readdir_r</code> on Linux and Android since the <code>readdir</code> function is already thread-safe. (<a href="https://github.com/boostorg/filesystem/pull/68">PR#68</a>,
111    <a href="https://github.com/boostorg/filesystem/issues/72/">#72</a>)</li>
112  <li>Fixed crashes in <code>boost::filesystem::copy</code> due to undefined behavior in the implementation. (<a href="https://github.com/boostorg/filesystem/pull/71">PR#71</a>)</li>
113  <li>Fixed undefined behavior in <code>boost::filesystem::directory_iterator</code> implementation. (<a href="https://github.com/boostorg/filesystem/pull/77">PR#77</a>)</li>
114  <li>Fixed compilation errors when using directory iterators with <code>BOOST_FOREACH</code>.</li>
115  <li>Removed workarounds for older PGI C++ compiler versions to fix compilation on the newer ones. (<a href="https://github.com/boostorg/filesystem/pull/49">PR#49</a>)</li>
116  <li>Fixed MSVC warnings about narrowing conversions. (<a href="https://github.com/boostorg/filesystem/pull/44">PR#44</a>)</li>
117</ul>
118
119<h2>1.67.0</h2>
120<ul>
121  <li>Fix static initialization issue that caused a crash if path operations were used before main(). (<a href="https://github.com/boostorg/filesystem/pull/62">PR#62</a>,
122    <a href="https://github.com/boostorg/filesystem/pull/43">PR#43</a>, <a href="https://github.com/boostorg/filesystem/pull/50">PR#50</a>, <a href="https://github.com/boostorg/filesystem/pull/59">PR#59</a>)</li>
123</ul>
124
125<h2>1.66.0</h2>
126<ul>
127  <li>Clean up some tutorial example code and fix the wording for it in the
128  tutorial. Thanks to Anmol-Singh-Jaggi for pull request <a href="https://github.com/boostorg/filesystem/pull/11">#11</a>.</li>
129</ul>
130
131<h2>1.64.0</h2>
132<ul>
133  <li><code>is_empty()</code>overload with <code>error_code</code> parameter
134  should not throw on error. Thanks to ldqrk for pull request #42</li>
135  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/10731">#10731</a> and
136  <a href="https://svn.boost.org/trac/boost/ticket/9480">#9480</a>, <i>Evaluate
137  path.extension only once</i>. Thanks to Daniel Krügler for pull request #41.</li>
138  <li>Fix error propagation in <code>space(p, ec)</code>. Thanks to cmuellner
139  for pull request #39.</li>
140  <li>Add test/config_info.cpp to increase macro state reporting in hopes of
141  easing debugging on remote machines.</li>
142  <li>Fix <code>operations_test</code> failure on MinGW: MinGW defines
143  __MINGW32__ rather than _MSC_VER, so also test for __MINGW32__ to see if
144  setenv/unsetenv workaround needed.</li>
145</ul>
146
147<h2>1.63.0</h2>
148<ul>
149  <li dir="ltr">
150  <p dir="ltr"><b>Deprecated <code>generic()</code> function name</b>: The undocumented experimental class
151  <code>path</code> member function <code>generic()</code> has been renamed <code>
152  generic_path()</code>. Fixes
153  <a href="https://svn.boost.org/trac/boost/ticket/11855">#11855</a>, <i>generic
154  gives problems in C++/CLI.</i> Unless the macro BOOST_FILESYSTEM_NO_DEPRECATED
155  is defined, the original <code>generic()</code> will continue to be supplied
156  as a workaround for existing user code. But <code>generic()</code>is
157  deprecated. User code should migrate to the new name.</li>
158  <li><b>New:</b> Class <code>path</code> adds constexpr constants <code>
159  separator</code> and <code>dot</code> of the type appropriate for the
160  platform, and adds query functions <a href="reference.html#filename_is_dot">
161  <code>filename_is_do</code>t</a> and <code>
162  <a href="reference.html#filename_is_dot­_dot">filename_is_dot_dot</a></code>.
163  These add convenience and the implementations may be more efficient that user
164  coded equivalent functions.</li>
165  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/12578">#12578</a>, <i>
166  Make directory iterators able to detect when a copy has advanced to the end</i>.
167  This bug in <code>directory_iterator</code> and <code>
168  recursive_directory_iterator</code> equality testing has existed more than a
169  dozen years. Nowadays test driven development would likely have detected the
170  problem in early development. Sigh.</li>
171  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/12495">#12495</a>, <i>
172  <code>create_directories()</code> crashes when passed empty string as path</i>,
173  from Samantha Ritter. Also affected <code>create_directory()</code>. Charles
174  Olivi submitted a pull request with some particularly helpful test cases.</li>
175  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/7307">#7307</a>, <i>
176  remove_all(dirname,ec) throws on write protected directories.</i> This is a
177  tough one to test. There are three internal function calls where errors might
178  arise, and it would take too much time to write tests for each of those cases.
179  Someday we will have Titus Winter&#39;s mock installable file system, but for now
180  are relying on code inspection rather than testing.</li>
181  <li>Fix a cygwin warning and a cygwin error. Thanks to thtrummer for pull
182  request #30.</li>
183  <li>Fixed two broken links in reference docs. Thanks to tbeu for pull
184  request #34.</li>
185  <li>Fix reference doc signatures for <code>path</code> stem(), extension()
186  member functions. Thanks to faithandbrave for pull request #31</li>
187  <li>Fix broken link to <a href="https://svn.boost.org/trac/boost/ticket/7506">#7506</a> in 1.60.0 Release History (Daniel Krügler).</li>
188  <li>Refactor <code>push_directory()</code>internal logic so it is easier to
189  reason about.</li>
190</ul>
191
192<h2>1.60.0</h2>
193<ul>
194  <li dir="ltr">
195  <p dir="ltr"><b>New:</b> Added functions <code>
196  <a href="reference.html#lex-normal">lexically_normal</a></code>, <code>
197  <a href="reference.html#lex-relative">lexically_relative</a></code>, <code>
198  <a href="reference.html#relative">relative</a></code>, and <code>
199  <a href="reference.html#weakly_canonical">weakly_canonical</a></code>. Many thanks to Jamie Allsop for his help and
200  perseverance. Resolves tickets
201  <a href="https://svn.boost.org/trac/boost/ticket/1976">#1976</a>,
202  <a href="https://svn.boost.org/trac/boost/ticket/5897">#5897</a>,
203  <a href="https://svn.boost.org/trac/boost/ticket/6249">#6249</a></li>
204  <li><b>New:</b> Class <code>path</code> now has
205  <a href="reference.html#path-iterators"> <code>reverse_iterator</code>,
206  <code>const_reverse_iterator</code>, <code>rbegin()</code>, and <code>rend()</code></a>. </li>
207  <li><b>New:</b> C++11 <code>noexcept</code> supplied as specified in the
208  Filesystem TS if supported by the compiler.</li>
209  <li><b>New:</b> C++11 move constructors and move assignments supplied as
210  specified in the Filesystem TS if supported by the compiler. Resolves
211  <a href="https://svn.boost.org/trac/boost/ticket/10291">#10291</a>.</li>
212  <li><b>New:</b> Existing functions whose names changed in the Filesystem TS
213  are now supported under both the old and new names.</li>
214  <li><b>New: </b>Added <code><a href="reference.html#path-size">size</a>()</code>
215  function to class <code>path</code>. Resolves
216  <a href="https://svn.boost.org/trac/boost/ticket/6874">#6874</a>, <i>Path
217  should have a size() member function</i>.</li>
218  <li>Clear several spurious GCC warnings.</li>
219  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/11733">#11733</a>, <i>
220  Missing unistd.h include in boost/libs/filesystem/src/unique_path.cpp</i> by
221  apply a patch from Idar Tollefsen.</li>
222  <li>Fix a race condition in <code>unique_path</code> by applying
223  <a href="https://github.com/boostorg/filesystem/pull/15">pull request #15</a>
224  from Sebastian Redl. Also fixes
225  <a href="https://svn.boost.org/trac/boost/ticket/7506">#7506</a>, <i><code>unique_path</code> Fails on Windows for Temporary User
226  Profiles</i>.</li>
227  <li>Fix bug in <i><code>file_status</code></i> and <i><code>
228  recursive_directory_iterator</code></i>: C++ turns an explicit constructor
229  with all arguments except first defaulted into non-explicit single argument
230  constructor.</li>
231  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/10591">#10591</a>, <i>
232  boost::filesystem does not build on iOS 8</i>, by applying a patch submitted
233  by Daniel Seither.</li>
234  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/9454">#9454</a>, <i>
235  Boost Filesystem [library build] not compiling when
236  BOOST_FILESYSTEM_NO_DEPRECATED is defined</i>, by applying a patch submitted
237  by Makesim.</li>
238  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/11447">#11447</a>, <i>
239  __OpenBSD__ macro name misspelled</i>, by applying a patch submitted by Jasper
240  Lievisse Adriaanse.</li>
241  <li>
242  <p>Fix <a href="https://svn.boost.org/trac/boost/ticket/11288">#11288</a>, <i>
243  <font face="Arial">A patch to avoid redundant string allocations</font></i>,
244  by applying a patch submitted by Yevhen Ivannikov.</li>
245  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/11175">#11175</a>,
246  out-of-date documentation causing users to incorrectly expect that the library
247  could be used with exceptions disabled.</li>
248  <li>Resolve <a href="https://svn.boost.org/trac/boost/ticket/11175">#11166</a>
249  by mitigating (i.e. reducing the likelihood of) a possible external file
250  system race in <code>remove()</code>.</li>
251  <li>
252  <p>Fix <a href="https://svn.boost.org/trac/boost/ticket/7258">#7258</a>,
253  <i><code>create_directories</code> returns false if the path ends with a slash</i>.
254  Also fix related issues if path contains <i>dot</i> or <i>dot-dot</i>
255  elements, and added test cases to the test suite.</li>
256  <li>
257  <p>Reference docs editorial cleanups: Use same style sheet as the
258  rest of the documentation. Tweak tab font size. Fix excessively long lines in
259  tables, synopsis.</li>
260  <li>Resolve <a href="https://svn.boost.org/trac/boost/ticket/10766">
261  #10766</a>, <i>parent_path() with redundant separator returns wrong value</i>,
262  by adding examples and notes to the reference documentation to show why the
263  returned value is in fact correct, and to provide rationale for that behavior.
264  See <a href="reference.html#path-iterators">[path.itr]</a>, and
265  <a href="reference.html#path-decomposition">[path.decompose]</a> <code>
266  parent_path()</code> and <code>filename()</code> sections of the reference
267  docs.</li>
268  <li>Minor other fixes, including pull requests from Jonathan Wakely and Marcel
269  Raad.</li>
270  <li>Closed several tickets as duplicates or otherwise resolved by the
271  above changes:<ul>
272  <li><a href="https://svn.boost.org/trac/boost/ticket/7607">#7607</a>, <i>path
273  should not infer an invisible &quot;.&quot; at the end of a path that ends with a slash;
274  </i><a href="https://svn.boost.org/trac/boost/ticket/7258">#7258</a>,
275  <a href="https://svn.boost.org/trac/boost/ticket/10766">#10766</a></li>
276  <li><a href="https://svn.boost.org/trac/boost/ticket/11061">#11061</a>,
277  <a href="https://svn.boost.org/trac/boost/ticket/11062">#11062</a>, <i>
278  impossible to traverse the path of the reverse iterator</i>, is effectively
279  resolved by the addition of the class <code>path</code> reverse iteration
280  feature. The reference documentation has also been updated with
281  <a href="reference.html#path-iterators">a note</a> warning about the
282  limitations of class <code>path</code> iterators.</li>
283</ul>
284
285  </li>
286</ul>
287
288<h2>1.59.0</h2>
289<ul>
290  <li>Update the Tutorial:<ul>
291    <li>Use C++11 in the example programs to improve clarity.</li>
292    <li>Update the example source code show to match the actual example source
293    code in the cpp files.</li>
294    <li>Rerun all the examples and update the output shown in the tutorial
295    accordingly.</li>
296    <li>Fix spacing and other HTML presentation issues.</li>
297  </ul>
298  </li>
299  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/11491">#11491</a>, <i>
300  <code>temp_directory_path()</code> doesn&#39;t return valid temp path on Android</i>.</li>
301</ul>
302
303<h2>1.58.0</h2>
304<ul>
305  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/6124">#6124</a>,
306  <a href="https://svn.boost.org/trac/boost/ticket/6779">#6779</a>, and
307  <a href="https://svn.boost.org/trac/boost/ticket/10038">#10038</a>. Cannot
308  pass a BOOST_SCOPED_ENUM to a compiled function because it will result in an
309  undefined reference if the library is compiled with -std=c++0x but the use is
310  compiled in C++03 mode, or visa versa.</li>
311  <li>Rewrite Windows implementation of <code>temp_directory_path()</code> to (1) avoid
312  <code>GetTempPath()</code> failure if path length &gt; 130 (ticket #5300) and (2) provide a
313  more sensible sequence of directories than provided by <code>GetTempPath()</code>, per
314  boost list discussion &quot;[filesystem] temp_directory_path() behavior on
315  Windows&quot;. The new sequence is:<ol>
316    <li><i><code>%TMP%</code></i></li>
317    <li><i><code>%TEMP%</code></i></li>
318    <li><code><i>%LOCALAPPDATA%</i>/Temp</code></li>
319    <li><code><i>%USERPROFILE%</i>/Temp</code></li>
320    <li><code><i>GetWindowsDirectoryW()</i>/Temp</code></li>
321  </ol>
322  </li>
323</ul>
324
325<h2>1.57.0</h2>
326<ul>
327  <li>Rework class <code>path</code> locale and codecvt implementation for increased reliability.
328  This change was SVN revision 83021, which should have gone into 1.56.0 but
329  unfortunately the merge didn't happen until too late.</li>
330  <li>Fix tickets <a href="https://svn.boost.org/trac/boost/ticket/8930">#8930</a>, <a href="https://svn.boost.org/trac/boost/ticket/9054">#9054</a>,
331  <a href="https://svn.boost.org/trac/boost/ticket/9214">#9219</a>,
332  <a href="https://svn.boost.org/trac/boost/ticket/10228">#10228</a>, and
333  <a href="https://svn.boost.org/trac/boost/ticket/10641">#10641</a>, all
334  related to locales and codecvt facets.</li>
335  <li>The net effect of the above changes and fixes should be to eliminate
336  spurious &quot;locale::facet::_S_create_c_locale name not valid&quot; errors on Linux
337  and other non-BSD POSIX-like systems. The error will continue to occur, as it
338  should, when a path encoding conversion char-to-wchar_t or wchar_t-to-char is
339  attempted in an environment without a valid C locale (for example, if the LANG
340  environment variable is invalid or not defined).</li>
341  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/6124">#6124</a>,
342  <a href="https://svn.boost.org/trac/boost/ticket/6779">#6779</a>, and
343  <a href="https://svn.boost.org/trac/boost/ticket/10038">#10038</a> - an
344  undefined reference that occurred when the library was compiled for C++03 but
345  the using program was compiled for C++11, or vice versa. The private library
346  interface has been changed to use a plain-old C++03 enum. This is the fix
347  suggested by Andy in 6779.</li>
348  <li>The Windows implementation now treats NTFS directory junctions (also known
349  as junctions, also known as mount points) as symlinks. This has the effect of
350  treating directory junctions as directories, and thus supporting all
351  operations suitable for directories. This resolves
352  <a href="https://svn.boost.org/trac/boost/ticket/9016">#9016</a>. Directory
353  junctions are very similar to symlinks, but may have performance or other
354  advantages in some situations. They can be created from the command line with
355  &quot;<code>mklink /j link target</code>&quot;. There is no plan for Boost.Filesystem to
356  be able to create them directly other than by calling <code>std::system()</code>.</li>
357</ul>
358
359<h2>1.56.0</h2>
360<ul>
361  <li>Reorganize <code>recursive_directory_iterator::increment</code>, adding an
362  invariant that progress is always made, even if an error is reported by
363  exception or error_code. Add a manually executed test, <code>
364  test/issues/recurse_dir_iter_5403.cpp</code>. Adjust regular regression tests
365  as needed. Thanks to Claudio Bley for the
366  <a href="https://github.com/boostorg/filesystem/pull/4">pull request</a> - the
367  change was incorporated into the reorganized code. Fixes
368  <a href="https://svn.boost.org/trac/boost/ticket/5403">#5403</a> and
369  <a href="https://svn.boost.org/trac/boost/ticket/6821">#6821</a>.</li>
370  <li>Fix <code>canonical()</code> to treat parent of root as root. (Christian
371  Hammerl) Fixes <a href="https://svn.boost.org/trac/boost/ticket/9683">#9683</a>
372  and <a href="https://svn.boost.org/trac/boost/ticket/10187">#10187</a>.</li>
373  <li>Added missing test for <code>__sun</code> macro which is defined on
374  Solaris 10. (Chris Stylianou)</li>
375  <li>Minor fixes and code cleanup.</li>
376  <li>Update IDE projects to Visual Studio 2013.</li>
377  <li>Remove unused <code>const char colon</code> to clear clang warning. (J?gen
378  Hunold)</li>
379  <li>Add BOOST_NOEXCEPT to <code>class filesystem_error</code>.</li>
380  <li>Change <code>perms::all_all</code> and <code>perms::perms_mask</code> to
381  absolute values to quiet intellisense warnings, and conform to C++11.</li>
382</ul>
383
384<h2>1.54.0</h2>
385<ul>
386  <li>Reimplement <code>path::codecvt()</code> and <code>path::imbue()</code>
387  with portable code that is intended to be much more robust and maintainable. A
388  section on <a href="reference.html#path-Usage">path usage concerns</a> has
389  been added to the reference documentation describing several concerns that
390  arise in the context of multithreading and <code>path::codecvt()</code>.</li>
391</ul>
392
393<h2>1.52.0</h2>
394<ul>
395  <li>Fix <a href="http://svn.boost.org/trac/boost/ticket/7239">#7239</a>, <i>Stack
396  overflow when calling <code>create_directories(&quot;:D&quot;)</code></i>. The reported
397  problem was a symptom of an internal bug that caused <code>path::filename()</code>
398  and <code>path::parent_path()</code> to fail on Windows for <code>path(&quot;:&quot;)</code>,
399  and that in turn caused other functions that depend on <code>filename()</code>
400  or <code>parent_path()</code> to fail, such as <code>create_directories()</code>.</li>
401</ul>
402
403<h2>1.51.0</h2>
404<ul>
405  <li>Add begin() and end() non-member functions for directory_iterator and
406  recursive_directory_iterator so that C++11 range-based for statements  work.
407  Suggested by feature requests
408  <a href="https://svn.boost.org/trac/boost/ticket/5896">#5896</a> and
409  <a href="https://svn.boost.org/trac/boost/ticket/6521">#6521</a>, using the
410  <a href="https://svn.boost.org/trac/boost/ticket/5896">#5896</a> approach.</li>
411  <li>Add range_begin() and range_end() non-member functions for directory_iterator and
412  recursive_directory_iterator so that
413  <a href="http://www.boost.org/libs/foreach/">BOOST_FOREACH</a> works.</li>
414  <li>Fix a Linux fchmodat problem affecting symlink permissions reported during
415  discussion of <a href="https://svn.boost.org/trac/boost/ticket/6659">#6659</a>.</li>
416  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/6659">#6659</a> and
417  <a href="https://svn.boost.org/trac/boost/ticket/7051">#7051</a>, <i>fchmodat
418  supported only on Solaris 11</i>. Fix for both Sun and GCC compilers. </li>
419</ul>
420
421<h2>1.50.0</h2>
422<ul>
423  <li>Remove Filesystem Version 2 from the distribution. Version 3 is now the
424  only distributed version. Those still using V2 are urged to migrate to V3 as
425  soon as possible.</li>
426  <li>Add <code>constexpr value_type preferred_separator</code> to class path.</li>
427  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5118">#5118</a>, <i>
428  <code>replace_extension</code> doesn't work as specified in documentation</i>. The
429  documentation, implementation, and test cases have all had fixes applied. The
430  documentation had failed to mention that any existing extension is removed.
431  The behavior for simple cases has been reverted to the Version 2 behavior, but
432  with corrections so that complex replacements now work. Two test cases from
433  #5118 have been added.</li>
434  <li>Fix <a href="http://svn.boost.org/trac/boost/ticket/3737">#3737</a>,
435  <i>Boost.Filesystem does not compile on Windows Mobile</i>. On Windows, &lt;sys/stat.h&gt;
436  is no longer included.</li>
437  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/4065">#4065</a>,
438  <i>Boost Filesystem lexicographic path comparison inconsistent</i>. This required
439  multiple source code bug fixes and code cleanup, correcting problems not
440  related to lexicographical issues.</li>
441  <li>Add class path member function <code>compare</code> for consistency with
442  std::string.</li>
443  <li>Tighten BOOST_FILESYSTEM_DYN_LINK and BOOST_FILESYSTEM_STATIC_LINK logic
444  in filesystem/config.hpp so that one or the other is always defined, and both
445  being defined is a #error.</li>
446  <li>Fix <a href="http://svn.boost.org/trac/boost/ticket/6690">#6690</a> and
447  <a href="http://svn.boost.org/trac/boost/ticket/6737">#6737</a>, resolving
448  static linking related problems with VC++ 8 through 11. Note that this fix may
449  reintroduce codecvt thread safety problems
450  <a href="http://svn.boost.org/trac/boost/ticket/4889">#4889</a>,
451  <a href="http://svn.boost.org/trac/boost/ticket/6320">#6320</a>, for these
452  compilers if static linking is used.</li>
453  <li>Add path::operator+= and concat functions to tack on things like suffixes
454  or numbers. Suggested by Ed Smith-Rowland and others.</li>
455  <li>Fix <a href="http://svn.boost.org/trac/boost/ticket/6809">#6809</a>,
456  <i>Implementation of filesystem::rename() method for MS Windows is wrong</i>, by
457  adding MOVEFILE_COPY_ALLOWED to deal with renames across drives, volumes, file
458  systems. Fix has no effect on non-Windows systems.</li>
459  <li>Fix <a href="http://svn.boost.org/trac/boost/ticket/6819">#6819</a>, A path operand with a source that was a one character array was
460  treated as empty, even if it wasn't empty. Such arrays can occur in unions or
461  in code using C variable length array idioms.</li>
462  <li>Fix <a href="http://svn.boost.org/trac/boost/ticket/6932">#6932</a>,
463  <i>create_directories throws exception even if error_code is specified</i>.</li>
464</ul>
465
466<h2>1.49.0</h2>
467<ul>
468  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/3714">#3714</a>,
469  Added test cases and fixes for class path errors when assignment or append
470  used self or portion of self as source. </li>
471  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/4889">#4889</a>,
472  <a href="https://svn.boost.org/trac/boost/ticket/6320">#6320</a>, <i>Locale codecvt_facet not thread safe on Windows</i>. Move
473  Windows, Mac OS X, locale and codecvt facet back to namespace scope. POSIX
474  except OS X uses local static initialization (IE lazy) to ensure exceptions
475  are catchable if environmental variables are misconfigured and to avoid use of
476  locale(&quot;&quot;) if not actually used.</li>
477  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5652">#5652</a>,
478  <i>recursive_directory_iterator fails on cyclic symbolic links</i>. Thanks to Daniel Aarno for the patch.</li>
479  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5653">#5653</a>,
480  <i>recursive_directory_iterator(error_code) can still throw filesystem_error</i>.</li>
481  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5900">#5900</a>, <i>directory_iterator
482  access violation on Windows if error is thrown</i>. Thanks to Andreas Eckleder for the patch.</li>
483  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5900#comment:2">#5900
484  comment 2</a>, a bug in director_iterator construction with error_code argument that
485  caused increment to be called without the ec argument being passed.</li>
486  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5900">#5989</a> by cleaning up test suite path_test.cpp code even
487  though the ticket itself was not a defect, and clarifying docs; iteration over a path yields
488  generic format.</li>
489  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5592">#5592</a>, <i>Change Windows codecvt processing from CP_THREAD_ACP to CP_ACP</i>.</li>
490  <li>Operations function fixes for PGI compiler, thanks to Noel Belcourt.</li>
491  <li>Relax permissions test to reflect reality, particularly on the Sandia test
492  platforms.</li>
493</ul>
494
495<h2>1.48.0</h2>
496<ul>
497  <li>Added operational function <a href="reference.html#canonical">canonical()</a>,
498  suggested by David Svoboda, who also provided pseudo-code.</li>
499  <li>Added <a href="reference.html#hash_value">hash_value()</a> function for
500  paths. (Daniel James)</li>
501  <li>Fix path inserter problem (<a href="https://svn.boost.org/trac/boost/ticket/5764">#5764</a>)
502  reported for QNX6.3.2 host (gcc-3.3.5)</li>
503  <li>Fix problem of locale(&quot;&quot;) exception being thrown before main() starts on
504  poorly configured (e.g. LANG=&quot;bad name&quot;) POSIX systems. Resolves the most
505  serious aspect of tickets
506  <a href="https://svn.boost.org/trac/boost/ticket/4688">#4688</a>,
507  <a href="https://svn.boost.org/trac/boost/ticket/5100">#5100</a>,
508  <a href="https://svn.boost.org/trac/boost/ticket/5289">#5289</a>.</li>
509</ul>
510
511<h2>1.47.0</h2>
512<ul>
513  <li>Program file_status.cpp added (V3). See boost-root/libs/filesystem/v3/example.
514  Useful both as an example and to explore how Boost.Filesystem treats various
515  status errors.&nbsp; Run &quot;bjam&quot; (NOT &quot;bjam install&quot;) in the example directory
516  to install in example/bin.</li>
517</ul>
518
519<h2>1.46.1</h2>
520
521<ul>
522  <li>Fix fstream problem for STLPort masquerading as Dinkumware (<a href="https://svn.boost.org/trac/boost/ticket/5217">#5217</a>).</li>
523</ul>
524
525<h2>1.46.0</h2>
526<ul>
527  <li>Version 3 of the library is now the default.</li>
528  <li>IBM vacpp: Workaround for compiler bug affecting iterator_facade. (<a href="https://svn.boost.org/trac/boost/ticket/4912">#4912</a>)</li>
529  <li>Verify, clarify, document that &lt;boost/config/user.hpp&gt; can be used to
530  specify BOOST_FILESYSTEM_VERSION. (<a href="https://svn.boost.org/trac/boost/ticket/4891">#4891</a>)</li>
531  <li>Replaced C-style assert with BOOST_ASSERT.</li>
532  <li>Undeprecated unique_path(). Instead, add a note mentioning the workaround
533  for lack of thread safety and possible change to cwd. unique_path() is just
534  too convenient to deprecate!</li>
535  <li>Cleared several GCC warnings.</li>
536  <li>Changed V2 code to use BOOST_THROW_EXCEPTION.</li>
537  <li>Windows: Fix status() to report non-symlink reparse point correctly.</li>
538  <li>Add <code>symlink_option</code> to <code>recursive_directory_iterator</code>,
539  allowing control over recursion into directory symlinks. Note that the default
540  is changed to not recurse into directory symlinks.</li>
541  <li><a href="reference.html">Reference</a> documentation cleanup, including
542  fixing missing and broken links, and adding missing functions.</li>
543  <li>Miscellaneous implementation code cleanup. </li>
544</ul>
545<hr>
546<p>Revised
547<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->07 August, 2017<!--webbot bot="Timestamp" endspan i-checksum="34770" --></p>
548<p>&copy; Copyright Beman Dawes, 2011</p>
549<p> Use, modification, and distribution are subject to the Boost Software
550License, Version 1.0. See <a href="http://www.boost.org/LICENSE_1_0.txt">
551www.boost.org/LICENSE_1_0.txt</a></p>
552</body>
553</html>
554