|
Filesystem Release History
|
1.72.0
- Extracted
filesystem_error
to exception.hpp
; file_status
and associated enums and functions to file_status.hpp
; directory_entry
, directory_iterator
and recursive_directory_iterator
to directory.hpp
.
- Deprecated: For backward compatibility
operations.hpp
still includes the new headers exception.hpp
, file_status.hpp
and directory.hpp
, unless BOOST_FILESYSTEM_NO_DEPRECATED
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 filesystem.hpp
.
- The
filesystem_error
exception is now implemented in the compiled library of Boost.Filesystem. Users may need to add linking with Boost.Filesystem library in their projects.
- On POSIX.1-2008 platforms, use
utimensat
instead of utime
. utime
is declared obsolete in POSIX.1-2008 and can be disabled e.g. in uClibc-ng. (PR#115)
directory_iterator
is now left in the end state on memory allocation errors.
- In
directory_iterator
on POSIX systems, support for readdir
/readdir_r
has been reworked to avoid memory allocations for dirent
structures when readdir
is used. This reduces memory consumption and eliminates the possibility of buffer overruns in case if readdir
produces a very long directory name.
- On Windows, use Boost.WinAPI to select the target Windows version.
- New: Added
directory_options
enum, which reflects the same named enum from C++20. The enum is supported in directory_iterator
and recursive_directory_iterator
to customize iteration behavior. In particular, the iterators now support skipping directories that can't be opened due to insufficient permissions. The symlink_option
enum is now deprecated and should be replaced with directory_options
.
- By default,
recursive_directory_iterator
is now reset to the end state in case of errors, as required by C++20. (#112)
- New: Added
directory_options::pop_on_error
option, which configures recursive_directory_iterator
so that it attempts to recover from iteration errors by repeatedly invoking pop()
until it succeeds or the end state is reached. (#113)
- New: Added
directory_options::skip_dangling_symlinks
option, which configures recursive_directory_iterator
so that it doesn't follow dangling directory symlinks and continues iteration instead of reporting an error.
- Deprecated: The following members of
recursive_directory_iterator
are now marked as deprecated: level()
, no_push_pending()
, no_push_request()
, no_push()
. Users are advised to replace their use with the standard counterparts: depth()
, recursion_pending()
, disable_recursion_pending()
. Note that recursion_pending()
has the opposite meaning compared to no_push_pending()
and no_push_request()
. Deprecated methods will be removed in a future release.
- Fixed
path::lexically_relative
(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 std::path::lexically_relative
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. (#76)
1.71.0
- New: Added minimal support for CMake. (PR#106)
- Fixed incorrect
error_code
returned from directory iterator increment when readdir_r
is used.
- For
path
, fixed rvalue-aware operator/
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 operator/
is bound to a const reference. (#110)
- Fixes for better compatibility with Windows CE. (PR#24)
1.70.0
- New: Added support for movability to directory iterators.
- New: 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. (PR#55)
- Fixed a few instances of dereferencing
std::string::end()
in path implementation.
- Fixed program termination in case of out of memory condition in directory iterators constructors and operations accepting a reference to
error_code
. (#58)
- Fixed possible linking errors caused by missing definitions of static members of
path
. (#12759)
- Fixed possible use of uninitialized data in directory iterator increment operation on Linux. (#97)
- Reworked
current_path
and read_symlink
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.
- Increased the size of the internal buffer used by
copy_file
.
1.69.0
- Don't use
readdir_r
on Linux and Android since the readdir
function is already thread-safe. (PR#68,
#72)
- Fixed crashes in
boost::filesystem::copy
due to undefined behavior in the implementation. (PR#71)
- Fixed undefined behavior in
boost::filesystem::directory_iterator
implementation. (PR#77)
- Fixed compilation errors when using directory iterators with
BOOST_FOREACH
.
- Removed workarounds for older PGI C++ compiler versions to fix compilation on the newer ones. (PR#49)
- Fixed MSVC warnings about narrowing conversions. (PR#44)
1.67.0
- Fix static initialization issue that caused a crash if path operations were used before main(). (PR#62,
PR#43, PR#50, PR#59)
1.66.0
- Clean up some tutorial example code and fix the wording for it in the
tutorial. Thanks to Anmol-Singh-Jaggi for pull request #11.
1.64.0
is_empty()
overload with error_code
parameter
should not throw on error. Thanks to ldqrk for pull request #42
- Fix #10731 and
#9480, Evaluate
path.extension only once. Thanks to Daniel Krügler for pull request #41.
- Fix error propagation in
space(p, ec)
. Thanks to cmuellner
for pull request #39.
- Add test/config_info.cpp to increase macro state reporting in hopes of
easing debugging on remote machines.
- Fix
operations_test
failure on MinGW: MinGW defines
__MINGW32__ rather than _MSC_VER, so also test for __MINGW32__ to see if
setenv/unsetenv workaround needed.
1.63.0
-
Deprecated generic()
function name: The undocumented experimental class
path
member function generic()
has been renamed
generic_path()
. Fixes
#11855, generic
gives problems in C++/CLI. Unless the macro BOOST_FILESYSTEM_NO_DEPRECATED
is defined, the original generic()
will continue to be supplied
as a workaround for existing user code. But generic()
is
deprecated. User code should migrate to the new name.
- New: Class
path
adds constexpr constants
separator
and dot
of the type appropriate for the
platform, and adds query functions
filename_is_do
t and
filename_is_dot_dot
.
These add convenience and the implementations may be more efficient that user
coded equivalent functions.
- Fix #12578,
Make directory iterators able to detect when a copy has advanced to the end.
This bug in
directory_iterator
and
recursive_directory_iterator
equality testing has existed more than a
dozen years. Nowadays test driven development would likely have detected the
problem in early development. Sigh.
- Fix #12495,
create_directories()
crashes when passed empty string as path,
from Samantha Ritter. Also affected create_directory()
. Charles
Olivi submitted a pull request with some particularly helpful test cases.
- Fix #7307,
remove_all(dirname,ec) throws on write protected directories. This is a
tough one to test. There are three internal function calls where errors might
arise, and it would take too much time to write tests for each of those cases.
Someday we will have Titus Winter's mock installable file system, but for now
are relying on code inspection rather than testing.
- Fix a cygwin warning and a cygwin error. Thanks to thtrummer for pull
request #30.
- Fixed two broken links in reference docs. Thanks to tbeu for pull
request #34.
- Fix reference doc signatures for
path
stem(), extension()
member functions. Thanks to faithandbrave for pull request #31
- Fix broken link to #7506 in 1.60.0 Release History (Daniel Krügler).
- Refactor
push_directory()
internal logic so it is easier to
reason about.
1.60.0
-
New: Added functions
lexically_normal
,
lexically_relative
,
relative
, and
weakly_canonical
. Many thanks to Jamie Allsop for his help and
perseverance. Resolves tickets
#1976,
#5897,
#6249
- New: Class
path
now has
reverse_iterator
,
const_reverse_iterator
, rbegin()
, and rend()
.
- New: C++11
noexcept
supplied as specified in the
Filesystem TS if supported by the compiler.
- New: C++11 move constructors and move assignments supplied as
specified in the Filesystem TS if supported by the compiler. Resolves
#10291.
- New: Existing functions whose names changed in the Filesystem TS
are now supported under both the old and new names.
- New: Added
size()
function to class path
. Resolves
#6874, Path
should have a size() member function.
- Clear several spurious GCC warnings.
- Fix #11733,
Missing unistd.h include in boost/libs/filesystem/src/unique_path.cpp by
apply a patch from Idar Tollefsen.
- Fix a race condition in
unique_path
by applying
pull request #15
from Sebastian Redl. Also fixes
#7506, unique_path
Fails on Windows for Temporary User
Profiles.
- Fix bug in
file_status
and
recursive_directory_iterator
: C++ turns an explicit constructor
with all arguments except first defaulted into non-explicit single argument
constructor.
- Fix #10591,
boost::filesystem does not build on iOS 8, by applying a patch submitted
by Daniel Seither.
- Fix #9454,
Boost Filesystem [library build] not compiling when
BOOST_FILESYSTEM_NO_DEPRECATED is defined, by applying a patch submitted
by Makesim.
- Fix #11447,
__OpenBSD__ macro name misspelled, by applying a patch submitted by Jasper
Lievisse Adriaanse.
-
Fix #11288,
A patch to avoid redundant string allocations,
by applying a patch submitted by Yevhen Ivannikov.
- Fix #11175,
out-of-date documentation causing users to incorrectly expect that the library
could be used with exceptions disabled.
- Resolve #11166
by mitigating (i.e. reducing the likelihood of) a possible external file
system race in
remove()
.
-
Fix #7258,
create_directories
returns false if the path ends with a slash.
Also fix related issues if path contains dot or dot-dot
elements, and added test cases to the test suite.
-
Reference docs editorial cleanups: Use same style sheet as the
rest of the documentation. Tweak tab font size. Fix excessively long lines in
tables, synopsis.
- Resolve
#10766, parent_path() with redundant separator returns wrong value,
by adding examples and notes to the reference documentation to show why the
returned value is in fact correct, and to provide rationale for that behavior.
See [path.itr], and
[path.decompose]
parent_path()
and filename()
sections of the reference
docs.
- Minor other fixes, including pull requests from Jonathan Wakely and Marcel
Raad.
- Closed several tickets as duplicates or otherwise resolved by the
above changes:
- #7607, path
should not infer an invisible "." at the end of a path that ends with a slash;
#7258,
#10766
- #11061,
#11062,
impossible to traverse the path of the reverse iterator, is effectively
resolved by the addition of the class
path
reverse iteration
feature. The reference documentation has also been updated with
a note warning about the
limitations of class path
iterators.
1.59.0
- Update the Tutorial:
- Use C++11 in the example programs to improve clarity.
- Update the example source code show to match the actual example source
code in the cpp files.
- Rerun all the examples and update the output shown in the tutorial
accordingly.
- Fix spacing and other HTML presentation issues.
- Fix #11491,
temp_directory_path()
doesn't return valid temp path on Android.
1.58.0
- Fix #6124,
#6779, and
#10038. Cannot
pass a BOOST_SCOPED_ENUM to a compiled function because it will result in an
undefined reference if the library is compiled with -std=c++0x but the use is
compiled in C++03 mode, or visa versa.
- Rewrite Windows implementation of
temp_directory_path()
to (1) avoid
GetTempPath()
failure if path length > 130 (ticket #5300) and (2) provide a
more sensible sequence of directories than provided by GetTempPath()
, per
boost list discussion "[filesystem] temp_directory_path() behavior on
Windows". The new sequence is:
%TMP%
%TEMP%
%LOCALAPPDATA%/Temp
%USERPROFILE%/Temp
GetWindowsDirectoryW()/Temp
1.57.0
- Rework class
path
locale and codecvt implementation for increased reliability.
This change was SVN revision 83021, which should have gone into 1.56.0 but
unfortunately the merge didn't happen until too late.
- Fix tickets #8930, #9054,
#9219,
#10228, and
#10641, all
related to locales and codecvt facets.
- The net effect of the above changes and fixes should be to eliminate
spurious "locale::facet::_S_create_c_locale name not valid" errors on Linux
and other non-BSD POSIX-like systems. The error will continue to occur, as it
should, when a path encoding conversion char-to-wchar_t or wchar_t-to-char is
attempted in an environment without a valid C locale (for example, if the LANG
environment variable is invalid or not defined).
- Fix #6124,
#6779, and
#10038 - an
undefined reference that occurred when the library was compiled for C++03 but
the using program was compiled for C++11, or vice versa. The private library
interface has been changed to use a plain-old C++03 enum. This is the fix
suggested by Andy in 6779.
- The Windows implementation now treats NTFS directory junctions (also known
as junctions, also known as mount points) as symlinks. This has the effect of
treating directory junctions as directories, and thus supporting all
operations suitable for directories. This resolves
#9016. Directory
junctions are very similar to symlinks, but may have performance or other
advantages in some situations. They can be created from the command line with
"
mklink /j link target
". There is no plan for Boost.Filesystem to
be able to create them directly other than by calling std::system()
.
1.56.0
- Reorganize
recursive_directory_iterator::increment
, adding an
invariant that progress is always made, even if an error is reported by
exception or error_code. Add a manually executed test,
test/issues/recurse_dir_iter_5403.cpp
. Adjust regular regression tests
as needed. Thanks to Claudio Bley for the
pull request - the
change was incorporated into the reorganized code. Fixes
#5403 and
#6821.
- Fix
canonical()
to treat parent of root as root. (Christian
Hammerl) Fixes #9683
and #10187.
- Added missing test for
__sun
macro which is defined on
Solaris 10. (Chris Stylianou)
- Minor fixes and code cleanup.
- Update IDE projects to Visual Studio 2013.
- Remove unused
const char colon
to clear clang warning. (J?gen
Hunold)
- Add BOOST_NOEXCEPT to
class filesystem_error
.
- Change
perms::all_all
and perms::perms_mask
to
absolute values to quiet intellisense warnings, and conform to C++11.
1.54.0
- Reimplement
path::codecvt()
and path::imbue()
with portable code that is intended to be much more robust and maintainable. A
section on path usage concerns has
been added to the reference documentation describing several concerns that
arise in the context of multithreading and path::codecvt()
.
1.52.0
- Fix #7239, Stack
overflow when calling
create_directories(":D")
. The reported
problem was a symptom of an internal bug that caused path::filename()
and path::parent_path()
to fail on Windows for path(":")
,
and that in turn caused other functions that depend on filename()
or parent_path()
to fail, such as create_directories()
.
1.51.0
- Add begin() and end() non-member functions for directory_iterator and
recursive_directory_iterator so that C++11 range-based for statements work.
Suggested by feature requests
#5896 and
#6521, using the
#5896 approach.
- Add range_begin() and range_end() non-member functions for directory_iterator and
recursive_directory_iterator so that
BOOST_FOREACH works.
- Fix a Linux fchmodat problem affecting symlink permissions reported during
discussion of #6659.
- Fix #6659 and
#7051, fchmodat
supported only on Solaris 11. Fix for both Sun and GCC compilers.
1.50.0
- Remove Filesystem Version 2 from the distribution. Version 3 is now the
only distributed version. Those still using V2 are urged to migrate to V3 as
soon as possible.
- Add
constexpr value_type preferred_separator
to class path.
- Fix #5118,
replace_extension
doesn't work as specified in documentation. The
documentation, implementation, and test cases have all had fixes applied. The
documentation had failed to mention that any existing extension is removed.
The behavior for simple cases has been reverted to the Version 2 behavior, but
with corrections so that complex replacements now work. Two test cases from
#5118 have been added.
- Fix #3737,
Boost.Filesystem does not compile on Windows Mobile. On Windows, <sys/stat.h>
is no longer included.
- Fix #4065,
Boost Filesystem lexicographic path comparison inconsistent. This required
multiple source code bug fixes and code cleanup, correcting problems not
related to lexicographical issues.
- Add class path member function
compare
for consistency with
std::string.
- Tighten BOOST_FILESYSTEM_DYN_LINK and BOOST_FILESYSTEM_STATIC_LINK logic
in filesystem/config.hpp so that one or the other is always defined, and both
being defined is a #error.
- Fix #6690 and
#6737, resolving
static linking related problems with VC++ 8 through 11. Note that this fix may
reintroduce codecvt thread safety problems
#4889,
#6320, for these
compilers if static linking is used.
- Add path::operator+= and concat functions to tack on things like suffixes
or numbers. Suggested by Ed Smith-Rowland and others.
- Fix #6809,
Implementation of filesystem::rename() method for MS Windows is wrong, by
adding MOVEFILE_COPY_ALLOWED to deal with renames across drives, volumes, file
systems. Fix has no effect on non-Windows systems.
- Fix #6819, A path operand with a source that was a one character array was
treated as empty, even if it wasn't empty. Such arrays can occur in unions or
in code using C variable length array idioms.
- Fix #6932,
create_directories throws exception even if error_code is specified.
1.49.0
- Fix #3714,
Added test cases and fixes for class path errors when assignment or append
used self or portion of self as source.
- Fix #4889,
#6320, Locale codecvt_facet not thread safe on Windows. Move
Windows, Mac OS X, locale and codecvt facet back to namespace scope. POSIX
except OS X uses local static initialization (IE lazy) to ensure exceptions
are catchable if environmental variables are misconfigured and to avoid use of
locale("") if not actually used.
- Fix #5652,
recursive_directory_iterator fails on cyclic symbolic links. Thanks to Daniel Aarno for the patch.
- Fix #5653,
recursive_directory_iterator(error_code) can still throw filesystem_error.
- Fix #5900, directory_iterator
access violation on Windows if error is thrown. Thanks to Andreas Eckleder for the patch.
- Fix #5900
comment 2, a bug in director_iterator construction with error_code argument that
caused increment to be called without the ec argument being passed.
- Fix #5989 by cleaning up test suite path_test.cpp code even
though the ticket itself was not a defect, and clarifying docs; iteration over a path yields
generic format.
- Fix #5592, Change Windows codecvt processing from CP_THREAD_ACP to CP_ACP.
- Operations function fixes for PGI compiler, thanks to Noel Belcourt.
- Relax permissions test to reflect reality, particularly on the Sandia test
platforms.
1.48.0
- Added operational function canonical(),
suggested by David Svoboda, who also provided pseudo-code.
- Added hash_value() function for
paths. (Daniel James)
- Fix path inserter problem (#5764)
reported for QNX6.3.2 host (gcc-3.3.5)
- Fix problem of locale("") exception being thrown before main() starts on
poorly configured (e.g. LANG="bad name") POSIX systems. Resolves the most
serious aspect of tickets
#4688,
#5100,
#5289.
1.47.0
- Program file_status.cpp added (V3). See boost-root/libs/filesystem/v3/example.
Useful both as an example and to explore how Boost.Filesystem treats various
status errors. Run "bjam" (NOT "bjam install") in the example directory
to install in example/bin.
1.46.1
- Fix fstream problem for STLPort masquerading as Dinkumware (#5217).
1.46.0
- Version 3 of the library is now the default.
- IBM vacpp: Workaround for compiler bug affecting iterator_facade. (#4912)
- Verify, clarify, document that <boost/config/user.hpp> can be used to
specify BOOST_FILESYSTEM_VERSION. (#4891)
- Replaced C-style assert with BOOST_ASSERT.
- Undeprecated unique_path(). Instead, add a note mentioning the workaround
for lack of thread safety and possible change to cwd. unique_path() is just
too convenient to deprecate!
- Cleared several GCC warnings.
- Changed V2 code to use BOOST_THROW_EXCEPTION.
- Windows: Fix status() to report non-symlink reparse point correctly.
- Add
symlink_option
to recursive_directory_iterator
,
allowing control over recursion into directory symlinks. Note that the default
is changed to not recurse into directory symlinks.
- Reference documentation cleanup, including
fixing missing and broken links, and adding missing functions.
- Miscellaneous implementation code cleanup.
Revised
07 August, 2017
© Copyright Beman Dawes, 2011
Use, modification, and distribution are subject to the Boost Software
License, Version 1.0. See
www.boost.org/LICENSE_1_0.txt