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> 29 <a href="tutorial.html">Tutorial</a> 30 <a href="reference.html">Reference</a> 31 <a href="faq.htm">FAQ</a> 32 <a href="release_history.html">Releases</a> 33 <a href="portability_guide.htm">Portability</a> 34 <a href="v3.html">V3 Intro</a> 35 <a href="v3_design.html">V3 Design</a> 36 <a href="deprecated.html">Deprecated</a> 37 <a href="issue_reporting.html">Bug Reports</a> 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&)</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'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'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'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'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 "." 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'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 > 130 (ticket #5300) and (2) provide a 313 more sensible sequence of directories than provided by <code>GetTempPath()</code>, per 314 boost list discussion "[filesystem] temp_directory_path() behavior on 315 Windows". 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 "locale::facet::_S_create_c_locale name not valid" 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 "<code>mklink /j link target</code>". 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(":D")</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(":")</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, <sys/stat.h> 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("") 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("") exception being thrown before main() starts on 504 poorly configured (e.g. LANG="bad name") 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. Run "bjam" (NOT "bjam install") 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 <boost/config/user.hpp> 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>© 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