summaryrefslogtreecommitdiff
path: root/libs/filesystem
diff options
context:
space:
mode:
Diffstat (limited to 'libs/filesystem')
-rw-r--r--libs/filesystem/build/Jamfile.v254
-rw-r--r--libs/filesystem/doc/Jamfile.v2 (renamed from libs/filesystem/v3/doc/Jamfile.v2)0
-rw-r--r--libs/filesystem/doc/POSIX_filename_encoding.txt (renamed from libs/filesystem/v3/doc/POSIX_filename_encoding.txt)0
-rw-r--r--libs/filesystem/doc/deprecated.html (renamed from libs/filesystem/v3/doc/deprecated.html)8
-rw-r--r--libs/filesystem/doc/design.htm (renamed from libs/filesystem/v3/doc/design.htm)8
-rw-r--r--libs/filesystem/doc/do_list.html (renamed from libs/filesystem/v3/doc/do_list.html)0
-rw-r--r--libs/filesystem/doc/faq.htm (renamed from libs/filesystem/v3/doc/faq.htm)8
-rw-r--r--libs/filesystem/doc/index.htm (renamed from libs/filesystem/v3/doc/index.htm)60
-rw-r--r--libs/filesystem/doc/path_table.cpp (renamed from libs/filesystem/v3/doc/path_table.cpp)0
-rw-r--r--libs/filesystem/doc/path_table.txt (renamed from libs/filesystem/v3/doc/path_table.txt)0
-rw-r--r--libs/filesystem/doc/portability_guide.htm (renamed from libs/filesystem/v3/doc/portability_guide.htm)8
-rw-r--r--libs/filesystem/doc/reference.html (renamed from libs/filesystem/v3/doc/src/source.html)1461
-rw-r--r--libs/filesystem/doc/release_history.html (renamed from libs/filesystem/v3/doc/release_history.html)66
-rw-r--r--libs/filesystem/doc/src/README (renamed from libs/filesystem/v3/doc/src/README)0
-rw-r--r--libs/filesystem/doc/src/boost-no-inspect0
-rw-r--r--libs/filesystem/doc/src/boost_snippets.html (renamed from libs/filesystem/v3/doc/src/boost_snippets.html)85
-rw-r--r--libs/filesystem/doc/src/build.bat8
-rw-r--r--libs/filesystem/doc/src/hoist.bat5
-rw-r--r--libs/filesystem/doc/src/source.html (renamed from libs/filesystem/v3/doc/reference.html)2585
-rw-r--r--libs/filesystem/doc/src/tr2_snippets.html398
-rw-r--r--libs/filesystem/doc/tutorial.html (renamed from libs/filesystem/v3/doc/tutorial.html)12
-rw-r--r--libs/filesystem/doc/v3.html (renamed from libs/filesystem/v3/doc/v3.html)8
-rw-r--r--libs/filesystem/doc/v3_design.html (renamed from libs/filesystem/v3/doc/v3_design.html)8
-rw-r--r--libs/filesystem/example/Jamfile.v2 (renamed from libs/filesystem/v3/example/Jamfile.v2)0
-rw-r--r--libs/filesystem/example/error_demo.cpp (renamed from libs/filesystem/v3/example/error_demo.cpp)0
-rw-r--r--libs/filesystem/example/file_size.cpp (renamed from libs/filesystem/v3/example/file_size.cpp)0
-rw-r--r--libs/filesystem/example/file_status.cpp (renamed from libs/filesystem/v3/example/file_status.cpp)7
-rw-r--r--libs/filesystem/example/mbcopy.cpp (renamed from libs/filesystem/v3/example/mbcopy.cpp)0
-rw-r--r--libs/filesystem/example/mbpath.cpp (renamed from libs/filesystem/v3/example/mbpath.cpp)0
-rw-r--r--libs/filesystem/example/mbpath.hpp (renamed from libs/filesystem/v3/example/mbpath.hpp)0
-rw-r--r--libs/filesystem/example/path_info.cpp (renamed from libs/filesystem/v3/example/path_info.cpp)0
-rw-r--r--libs/filesystem/example/simple_ls.cpp (renamed from libs/filesystem/v3/example/simple_ls.cpp)0
-rw-r--r--libs/filesystem/example/stems.cpp (renamed from libs/filesystem/v3/example/stems.cpp)0
-rw-r--r--libs/filesystem/example/tchar.cpp (renamed from libs/filesystem/v3/example/tchar.cpp)0
-rw-r--r--libs/filesystem/example/test/Jamfile.v2 (renamed from libs/filesystem/v3/example/test/Jamfile.v2)0
-rw-r--r--libs/filesystem/example/test/bld.bat (renamed from libs/filesystem/v3/example/test/bld.bat)0
-rwxr-xr-xlibs/filesystem/example/test/bld.sh (renamed from libs/filesystem/v3/example/test/bld.sh)0
-rw-r--r--libs/filesystem/example/test/setup.bat (renamed from libs/filesystem/v3/example/test/setup.bat)0
-rwxr-xr-xlibs/filesystem/example/test/setup.sh (renamed from libs/filesystem/v3/example/test/setup.sh)0
-rw-r--r--libs/filesystem/example/tut0.cpp (renamed from libs/filesystem/v3/example/tut0.cpp)0
-rw-r--r--libs/filesystem/example/tut1.cpp (renamed from libs/filesystem/v3/example/tut1.cpp)0
-rw-r--r--libs/filesystem/example/tut2.cpp (renamed from libs/filesystem/v3/example/tut2.cpp)0
-rw-r--r--libs/filesystem/example/tut3.cpp (renamed from libs/filesystem/v3/example/tut3.cpp)0
-rw-r--r--libs/filesystem/example/tut4.cpp (renamed from libs/filesystem/v3/example/tut4.cpp)0
-rw-r--r--libs/filesystem/example/tut5.cpp (renamed from libs/filesystem/v3/example/tut5.cpp)0
-rw-r--r--libs/filesystem/example/tut6a.cpp48
-rw-r--r--libs/filesystem/example/tut6b.cpp50
-rw-r--r--libs/filesystem/example/tut6c.cpp40
-rw-r--r--libs/filesystem/index.html11
-rw-r--r--libs/filesystem/src/codecvt_error_category.cpp (renamed from libs/filesystem/v3/src/codecvt_error_category.cpp)17
-rw-r--r--libs/filesystem/src/operations.cpp (renamed from libs/filesystem/v3/src/operations.cpp)99
-rw-r--r--libs/filesystem/src/path.cpp (renamed from libs/filesystem/v3/src/path.cpp)230
-rw-r--r--libs/filesystem/src/path_traits.cpp (renamed from libs/filesystem/v3/src/path_traits.cpp)21
-rw-r--r--libs/filesystem/src/portability.cpp (renamed from libs/filesystem/v3/src/portability.cpp)19
-rw-r--r--libs/filesystem/src/unique_path.cpp (renamed from libs/filesystem/v3/src/unique_path.cpp)15
-rw-r--r--libs/filesystem/src/utf8_codecvt_facet.cpp (renamed from libs/filesystem/v3/src/utf8_codecvt_facet.cpp)2
-rw-r--r--libs/filesystem/src/windows_file_codecvt.cpp (renamed from libs/filesystem/v3/src/windows_file_codecvt.cpp)10
-rw-r--r--libs/filesystem/src/windows_file_codecvt.hpp (renamed from libs/filesystem/v3/src/windows_file_codecvt.hpp)2
-rw-r--r--libs/filesystem/test/Jamfile.v237
-rw-r--r--libs/filesystem/test/convenience_test.cpp (renamed from libs/filesystem/v3/test/convenience_test.cpp)31
-rw-r--r--libs/filesystem/test/deprecated_test.cpp (renamed from libs/filesystem/v3/test/deprecated_test.cpp)15
-rw-r--r--libs/filesystem/test/design_use_cases.cpp (renamed from libs/filesystem/v3/test/design_use_cases.cpp)0
-rw-r--r--libs/filesystem/test/equivalent.cpp (renamed from libs/filesystem/v2/test/equivalent.cpp)0
-rw-r--r--libs/filesystem/test/fstream_test.cpp (renamed from libs/filesystem/v3/test/fstream_test.cpp)26
-rw-r--r--libs/filesystem/test/issues/fchmodat_AT_SYMLINK_NOFOLLOW_6659.cpp38
-rw-r--r--libs/filesystem/test/issues/readme.txt9
-rw-r--r--libs/filesystem/test/large_file_support_test.cpp (renamed from libs/filesystem/v3/test/large_file_support_test.cpp)11
-rw-r--r--libs/filesystem/test/locale_info.cpp (renamed from libs/filesystem/v3/test/locale_info.cpp)0
-rw-r--r--libs/filesystem/test/long_path_test.cpp (renamed from libs/filesystem/v3/test/long_path_test.cpp)9
-rw-r--r--libs/filesystem/test/macro_default_test.cpp36
-rw-r--r--libs/filesystem/test/msvc10/common.props (renamed from libs/filesystem/v3/test/msvc10/common.props)4
-rw-r--r--libs/filesystem/test/msvc10/convenience_test/convenience_test.vcxproj (renamed from libs/filesystem/v3/test/msvc10/convenience_test/convenience_test.vcxproj)3
-rw-r--r--libs/filesystem/test/msvc10/deprecated_test/deprecated_test.vcxproj (renamed from libs/filesystem/v3/test/msvc10/deprecated_test/deprecated_test.vcxproj)3
-rw-r--r--libs/filesystem/test/msvc10/exec_monitor_dll/exec_monitor_dll.vcxproj86
-rw-r--r--libs/filesystem/test/msvc10/exec_monitor_lib/exec_monitor_lib.vcxproj79
-rw-r--r--libs/filesystem/test/msvc10/file_status/file_status.vcxproj (renamed from libs/filesystem/v3/test/msvc10/file_status/file_status.vcxproj)3
-rw-r--r--libs/filesystem/test/msvc10/filesystem-v3.sln (renamed from libs/filesystem/v3/test/msvc10/filesystem-v3.sln)63
-rw-r--r--libs/filesystem/test/msvc10/filesystem_dll/filesystem_dll.vcxproj (renamed from libs/filesystem/v3/test/msvc10/filesystem_dll/filesystem_dll.vcxproj)0
-rw-r--r--libs/filesystem/test/msvc10/filesystem_lib/filesystem_lib.vcxproj91
-rw-r--r--libs/filesystem/test/msvc10/fstream_test/fstream_test.vcxproj (renamed from libs/filesystem/v3/test/msvc10/fstream_test/fstream_test.vcxproj)4
-rw-r--r--libs/filesystem/test/msvc10/locale_info/locale_info.vcxproj (renamed from libs/filesystem/v3/test/msvc10/locale_info/locale_info.vcxproj)0
-rw-r--r--libs/filesystem/test/msvc10/long_path_test/long_path_test.vcxproj (renamed from libs/filesystem/v3/test/msvc10/long_path_test/long_path_test.vcxproj)3
-rw-r--r--libs/filesystem/test/msvc10/macro_default_test/macro_default_test.vcxproj91
-rw-r--r--libs/filesystem/test/msvc10/operations_test/operations_test.vcxproj (renamed from libs/filesystem/v3/test/msvc10/operations_test/operations_test.vcxproj)7
-rw-r--r--libs/filesystem/test/msvc10/operations_unit_test/operations_unit_test.vcxproj (renamed from libs/filesystem/v3/test/msvc10/operations_unit_test/operations_unit_test.vcxproj)3
-rw-r--r--libs/filesystem/test/msvc10/path_test/path_test.vcxproj (renamed from libs/filesystem/v3/test/msvc10/path_test/path_test.vcxproj)3
-rw-r--r--libs/filesystem/test/msvc10/path_test_static/path_test_static.vcxproj107
-rw-r--r--libs/filesystem/test/msvc10/path_unit_test/path_unit_test.vcxproj (renamed from libs/filesystem/v3/test/msvc10/path_unit_test/path_unit_test.vcxproj)3
-rw-r--r--libs/filesystem/test/msvc10/stems/stems.vcxproj (renamed from libs/filesystem/v3/test/msvc10/stems/stems.vcxproj)0
-rw-r--r--libs/filesystem/test/msvc10/system_dll/system_dll.vcxproj (renamed from libs/filesystem/v3/test/msvc10/system_dll/system_dll.vcxproj)8
-rw-r--r--libs/filesystem/test/msvc10/system_lib/system_lib.vcxproj79
-rw-r--r--libs/filesystem/test/msvc10/tut1/tut1.vcxproj (renamed from libs/filesystem/v3/test/msvc10/tut1/tut1.vcxproj)0
-rw-r--r--libs/filesystem/test/msvc10/tut2/tut2.vcxproj (renamed from libs/filesystem/v3/test/msvc10/tut2/tut2.vcxproj)0
-rw-r--r--libs/filesystem/test/msvc10/tut3/tut3.vcxproj (renamed from libs/filesystem/v3/test/msvc10/tut3/tut3.vcxproj)0
-rw-r--r--libs/filesystem/test/msvc10/tut4/tut4.vcxproj (renamed from libs/filesystem/v3/test/msvc10/tut4/tut4.vcxproj)0
-rw-r--r--libs/filesystem/test/msvc10/tut5/tut5.vcxproj (renamed from libs/filesystem/v3/test/msvc10/tut5/tut5.vcxproj)0
-rw-r--r--libs/filesystem/test/msvc10/tut6a/tut6a.vcxproj (renamed from libs/filesystem/v3/test/msvc10/tut6a/tut6a.vcxproj)0
-rw-r--r--libs/filesystem/test/msvc10/tut6b/tut6b.vcxproj (renamed from libs/filesystem/v3/test/msvc10/tut6b/tut6b.vcxproj)0
-rw-r--r--libs/filesystem/test/msvc10/tut6c/tut6c.vcxproj (renamed from libs/filesystem/v3/test/msvc10/tut6c/tut6c.vcxproj)0
-rw-r--r--libs/filesystem/test/msvc10/windows_attributes/windows_attributes.vcxproj (renamed from libs/filesystem/v3/test/msvc10/windows_attributes/windows_attributes.vcxproj)3
-rw-r--r--libs/filesystem/test/operations_test.cpp (renamed from libs/filesystem/v3/test/operations_test.cpp)65
-rw-r--r--libs/filesystem/test/operations_unit_test.cpp (renamed from libs/filesystem/v3/test/operations_unit_test.cpp)21
-rw-r--r--libs/filesystem/test/path_test.cpp (renamed from libs/filesystem/v3/test/path_test.cpp)83
-rw-r--r--libs/filesystem/test/path_unit_test.cpp (renamed from libs/filesystem/v3/test/path_unit_test.cpp)94
-rw-r--r--libs/filesystem/test/sample_test.cpp63
-rw-r--r--libs/filesystem/test/test_codecvt.hpp (renamed from libs/filesystem/v3/test/test_codecvt.hpp)2
-rw-r--r--libs/filesystem/test/windows_attributes.cpp (renamed from libs/filesystem/v3/test/windows_attributes.cpp)8
-rw-r--r--libs/filesystem/v2/build/Jamfile.v231
-rw-r--r--libs/filesystem/v2/doc/design.htm353
-rw-r--r--libs/filesystem/v2/doc/do-list.htm42
-rw-r--r--libs/filesystem/v2/doc/faq.htm150
-rw-r--r--libs/filesystem/v2/doc/i18n.html426
-rw-r--r--libs/filesystem/v2/doc/index.htm835
-rw-r--r--libs/filesystem/v2/doc/portability_guide.htm226
-rw-r--r--libs/filesystem/v2/doc/reference.html3094
-rw-r--r--libs/filesystem/v2/example/Jamfile.v216
-rw-r--r--libs/filesystem/v2/example/file_size.cpp44
-rw-r--r--libs/filesystem/v2/example/mbcopy.cpp92
-rw-r--r--libs/filesystem/v2/example/mbpath.cpp82
-rw-r--r--libs/filesystem/v2/example/mbpath.hpp44
-rw-r--r--libs/filesystem/v2/example/path_table.cpp264
-rw-r--r--libs/filesystem/v2/example/simple_ls.cpp89
-rw-r--r--libs/filesystem/v2/src/v2_operations.cpp1381
-rw-r--r--libs/filesystem/v2/src/v2_path.cpp177
-rw-r--r--libs/filesystem/v2/src/v2_portability.cpp119
-rw-r--r--libs/filesystem/v2/test/Jamfile.v243
-rw-r--r--libs/filesystem/v2/test/convenience_test.cpp176
-rw-r--r--libs/filesystem/v2/test/deprecated_test.cpp205
-rw-r--r--libs/filesystem/v2/test/fstream_test.cpp184
-rw-r--r--libs/filesystem/v2/test/large_file_support_test.cpp42
-rw-r--r--libs/filesystem/v2/test/lpath.hpp101
-rw-r--r--libs/filesystem/v2/test/msvc/common.vsprops14
-rw-r--r--libs/filesystem/v2/test/msvc/convenience_test/convenience_test.vcproj197
-rw-r--r--libs/filesystem/v2/test/msvc/deprecated_test/deprecated_test.vcproj197
-rw-r--r--libs/filesystem/v2/test/msvc/filesystem-v2.sln119
-rw-r--r--libs/filesystem/v2/test/msvc/filesystem_dll/filesystem_dll.vcproj207
-rw-r--r--libs/filesystem/v2/test/msvc/fstream_test/fstream_test.vcproj199
-rw-r--r--libs/filesystem/v2/test/msvc/large_file_support_test/large_file_support_test.vcproj199
-rw-r--r--libs/filesystem/v2/test/msvc/mbcopy/mbcopy.vcproj199
-rw-r--r--libs/filesystem/v2/test/msvc/mbpath/mbpath.vcproj195
-rw-r--r--libs/filesystem/v2/test/msvc/operations_test/operations_test.vcproj197
-rw-r--r--libs/filesystem/v2/test/msvc/path_test/path_test.vcproj197
-rw-r--r--libs/filesystem/v2/test/msvc/simple_ls/simple_ls.vcproj195
-rw-r--r--libs/filesystem/v2/test/msvc/system_dll/system_dll.vcproj193
-rw-r--r--libs/filesystem/v2/test/msvc/wide_test/wide_test.vcproj198
-rw-r--r--libs/filesystem/v2/test/operations_test.cpp953
-rw-r--r--libs/filesystem/v2/test/path_test.cpp1380
-rw-r--r--libs/filesystem/v2/test/wide_test.cpp169
-rw-r--r--libs/filesystem/v3/build/Jamfile.v232
-rw-r--r--libs/filesystem/v3/doc/src/build.bat5
-rw-r--r--libs/filesystem/v3/doc/src/tr2_snippets.html310
-rw-r--r--libs/filesystem/v3/index.html14
-rw-r--r--libs/filesystem/v3/test/Jamfile.v235
-rw-r--r--libs/filesystem/v3/test/equivalent.cpp39
-rw-r--r--libs/filesystem/v3/test/msvc/common.vsprops21
-rw-r--r--libs/filesystem/v3/test/msvc/convenience_test/convenience_test.vcproj195
-rw-r--r--libs/filesystem/v3/test/msvc/deprecated_test/deprecated_test.vcproj195
-rw-r--r--libs/filesystem/v3/test/msvc/error_demo/error_demo.vcproj191
-rw-r--r--libs/filesystem/v3/test/msvc/filesystem-v3.sln173
-rw-r--r--libs/filesystem/v3/test/msvc/filesystem_dll/filesystem_dll.vcproj227
-rw-r--r--libs/filesystem/v3/test/msvc/fstream_test/fstream_test.vcproj195
-rw-r--r--libs/filesystem/v3/test/msvc/operations_test/operations_test.vcproj194
-rw-r--r--libs/filesystem/v3/test/msvc/operations_unit_test/operations_unit_test.vcproj197
-rw-r--r--libs/filesystem/v3/test/msvc/path_test/path_test.vcproj195
-rw-r--r--libs/filesystem/v3/test/msvc/path_test_dynamic_link/path_test_dynamic_linkl.vcproj201
-rw-r--r--libs/filesystem/v3/test/msvc/path_unit_test/path_unit_test.vcproj195
-rw-r--r--libs/filesystem/v3/test/msvc/simple_ls/simple_ls.vcproj201
-rw-r--r--libs/filesystem/v3/test/msvc/system_dll/system_dll.vcproj199
-rw-r--r--libs/filesystem/v3/test/msvc/tchar_example/tchar_example.vcproj212
-rw-r--r--libs/filesystem/v3/test/msvc/tut0/tut0.vcproj190
-rw-r--r--libs/filesystem/v3/test/msvc/tut1/tut1.vcproj193
-rw-r--r--libs/filesystem/v3/test/msvc/tut2/tut2.vcproj189
-rw-r--r--libs/filesystem/v3/test/msvc/tut3/tut3.vcproj187
-rw-r--r--libs/filesystem/v3/test/msvc/tut4/tut4.vcproj189
-rw-r--r--libs/filesystem/v3/test/msvc/wide_test/wide_test.vcproj191
175 files changed, 3944 insertions, 20189 deletions
diff --git a/libs/filesystem/build/Jamfile.v2 b/libs/filesystem/build/Jamfile.v2
index 212019de57..9166ac3cab 100644
--- a/libs/filesystem/build/Jamfile.v2
+++ b/libs/filesystem/build/Jamfile.v2
@@ -2,51 +2,32 @@
# (C) Copyright Beman Dawes 2002-2006
# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or www.boost.org/LICENSE_1_0.txt)
-
+# See www.boost.org/LICENSE_1_0.txt
# See library home page at http://www.boost.org/libs/filesystem
project boost/filesystem
- : source-location ..
+ : source-location ../src
: usage-requirements # pass these requirement to dependents (i.e. users)
<link>shared:<define>BOOST_FILESYSTEM_DYN_LINK=1
+ <link>static:<define>BOOST_FILESYSTEM_STATIC_LINK=1
;
-
-local disable-filesystem2 = [ MATCH (--disable-filesystem2) : [ modules.peek : ARGV ] ] ;
-local disable-filesystem3 = [ MATCH (--disable-filesystem3) : [ modules.peek : ARGV ] ] ;
-
-if ! $(disable-filesystem2)
-{
- if ! $(disable-filesystem3)
- {
- SOURCES =
- v2/src/v2_operations v2/src/v2_path v2/src/v2_portability
- v3/src/operations v3/src/path v3/src/portability v3/src/windows_file_codecvt
- v3/src/codecvt_error_category v3/src/path_traits v3/src/unique_path
- v3/src/utf8_codecvt_facet
- ;
- }
- else
- {
- SOURCES =
- v2/src/v2_operations v2/src/v2_path v2/src/v2_portability
- v3/src/utf8_codecvt_facet # used by both v2 and v3
- ;
- }
-}
-else
-{
- SOURCES =
- v3/src/operations v3/src/path v3/src/portability v3/src/windows_file_codecvt
- v3/src/codecvt_error_category v3/src/path_traits v3/src/unique_path
- v3/src/utf8_codecvt_facet
- ;
-}
+
+SOURCES =
+ codecvt_error_category
+ operations
+ path
+ path_traits
+ portability
+ unique_path
+ utf8_codecvt_facet
+ windows_file_codecvt
+ ;
lib boost_filesystem
: $(SOURCES).cpp ../../system/build//boost_system
- : <link>shared:<define>BOOST_FILESYSTEM_DYN_LINK=1 # tell source we're building dll's
+ : <link>shared:<define>BOOST_FILESYSTEM_DYN_LINK=1
+ <link>static:<define>BOOST_FILESYSTEM_STATIC_LINK=1
:
: # Boost.Filesystem uses some of Boost.System functions in inlined/templated
# functions, so clients that use Boost.Filesystem will have direct references
@@ -56,6 +37,5 @@ lib boost_filesystem
# doing so is harmless even when not needed, we do it for all platforms.
<link>shared:<library>../../system/build//boost_system
;
-
-boost-install boost_filesystem ; \ No newline at end of file
+boost-install boost_filesystem ;
diff --git a/libs/filesystem/v3/doc/Jamfile.v2 b/libs/filesystem/doc/Jamfile.v2
index 4de58f538c..4de58f538c 100644
--- a/libs/filesystem/v3/doc/Jamfile.v2
+++ b/libs/filesystem/doc/Jamfile.v2
diff --git a/libs/filesystem/v3/doc/POSIX_filename_encoding.txt b/libs/filesystem/doc/POSIX_filename_encoding.txt
index 14c45c07f2..14c45c07f2 100644
--- a/libs/filesystem/v3/doc/POSIX_filename_encoding.txt
+++ b/libs/filesystem/doc/POSIX_filename_encoding.txt
diff --git a/libs/filesystem/v3/doc/deprecated.html b/libs/filesystem/doc/deprecated.html
index 19df50cd15..ed553447e8 100644
--- a/libs/filesystem/v3/doc/deprecated.html
+++ b/libs/filesystem/doc/deprecated.html
@@ -6,7 +6,7 @@
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Filesystem Deprecated Features</title>
-<link rel="stylesheet" type="text/css" href="../../../../doc/src/minimal.css">
+<link rel="stylesheet" type="text/css" href="../../../doc/src/minimal.css">
</head>
<body>
@@ -14,8 +14,8 @@
<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
<tr>
<td width="277">
-<a href="../../../../index.htm">
-<img src="../../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
+<a href="../../../index.htm">
+<img src="../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
<td align="middle">
<font size="7">Filesystem Deprecated Features</font>
</td>
@@ -373,7 +373,7 @@ function can trivially be provided by a user.</p>
<hr>
<p>Revised
-<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->20 February, 2011<!--webbot bot="Timestamp" endspan i-checksum="40524" --></p>
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->20 March, 2012<!--webbot bot="Timestamp" endspan i-checksum="28814" --></p>
<p>&copy; Copyright Beman Dawes, 2002-2005, 2010</p>
<p> Use, modification, and distribution are subject to the Boost Software
diff --git a/libs/filesystem/v3/doc/design.htm b/libs/filesystem/doc/design.htm
index 17ac7d68b2..a44b2b23ea 100644
--- a/libs/filesystem/v3/doc/design.htm
+++ b/libs/filesystem/doc/design.htm
@@ -6,13 +6,13 @@
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Boost Filesystem Library Design</title>
-<link rel="stylesheet" type="text/css" href="../../../../doc/src/minimal.css">
+<link rel="stylesheet" type="text/css" href="../../../doc/src/minimal.css">
</head>
<body bgcolor="#FFFFFF">
<h1>
-<img border="0" src="../../../../boost.png" align="center" width="277" height="86">Filesystem
+<img border="0" src="../../../boost.png" align="center" width="277" height="86">Filesystem
Library Design</h1>
<p><a href="#Introduction">Introduction</a><br>
@@ -340,11 +340,11 @@ Variable Considered Harmful</i>, ACM SIGPLAN Notices, 8, 2, 1973, pp. 23-34</td>
<hr>
<p>Revised
-<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->18 February, 2010<!--webbot bot="Timestamp" endspan i-checksum="40538" --></p>
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->20 March, 2012<!--webbot bot="Timestamp" endspan i-checksum="28814" --></p>
<p>© Copyright Beman Dawes, 2002</p>
<p> Use, modification, and distribution are subject to the Boost Software
-License, Version 1.0. (See accompanying file <a href="../../../../LICENSE_1_0.txt">
+License, Version 1.0. (See accompanying file <a href="../../../LICENSE_1_0.txt">
LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
www.boost.org/LICENSE_1_0.txt</a>)</p>
diff --git a/libs/filesystem/v3/doc/do_list.html b/libs/filesystem/doc/do_list.html
index 6558803279..6558803279 100644
--- a/libs/filesystem/v3/doc/do_list.html
+++ b/libs/filesystem/doc/do_list.html
diff --git a/libs/filesystem/v3/doc/faq.htm b/libs/filesystem/doc/faq.htm
index 781098c55f..85b64dc0ea 100644
--- a/libs/filesystem/v3/doc/faq.htm
+++ b/libs/filesystem/doc/faq.htm
@@ -6,7 +6,7 @@
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Filesystem FAQ</title>
-<link rel="stylesheet" type="text/css" href="../../../../doc/src/minimal.css">
+<link rel="stylesheet" type="text/css" href="../../../doc/src/minimal.css">
</head>
<body>
@@ -14,8 +14,8 @@
<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
<tr>
<td width="277">
-<a href="../../../../index.htm">
-<img src="../../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
+<a href="../../../index.htm">
+<img src="../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
<td align="middle">
<font size="7">Filesystem FAQ</font>
</td>
@@ -140,7 +140,7 @@ functions, while operations performed by the operating system are provided as
free functions.</p>
<hr>
<p>Revised
-<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->20 February, 2011<!--webbot bot="Timestamp" endspan i-checksum="40524" --></p>
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->20 March, 2012<!--webbot bot="Timestamp" endspan i-checksum="28814" --></p>
<p>© Copyright Beman Dawes, 2002</p>
<p> Use, modification, and distribution are subject to the Boost Software
License, Version 1.0. See <a href="http://www.boost.org/LICENSE_1_0.txt">
diff --git a/libs/filesystem/v3/doc/index.htm b/libs/filesystem/doc/index.htm
index 44e2eb486a..acfad58844 100644
--- a/libs/filesystem/v3/doc/index.htm
+++ b/libs/filesystem/doc/index.htm
@@ -6,7 +6,7 @@
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Filesystem Home</title>
-<link rel="stylesheet" type="text/css" href="../../../../doc/src/minimal.css">
+<link rel="stylesheet" type="text/css" href="../../../doc/src/minimal.css">
</head>
<body>
@@ -14,8 +14,8 @@
<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
<tr>
<td width="277">
-<a href="../../../../index.htm">
-<img src="../../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
+<a href="../../../index.htm">
+<img src="../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
<td align="middle">
<font size="7">Filesystem Library<br>
Version 3</font>
@@ -66,41 +66,9 @@
<table border="1" cellpadding="10" cellspacing="1" style="border-collapse: collapse" bordercolor="#111111">
<tr>
<td>
- <p align="center"><b>This is the home page for Version 3 of the Filesystem library.</b></p>
- <p align="left">Version 3 is a major revision with many new and improved
- features. It may, however, break some user code written for Version 2.</p>
- <p align="left">To ease the transition, Boost releases 1.44 through 1.47
- will supply both V2 and V3. <a href="../../v2/doc/index.htm">Version 2</a>
- is the default version for Boost release 1.44
- and 1.45. Version 3 will be the default starting with release 1.46.</p>
- <p align="left"><b>Define macro BOOST_FILESYSTEM_VERSION as 3 to use
- Version 3. This will be the default for release 1.46 and later.</b></p>
- <p align="left"><b>Define macro BOOST_FILESYSTEM_VERSION as 2 to use
- Version 2. This is the default for release 1.44 and 1.45.</b></p>
- <p align="left"><b>You may define the BOOST_FILESYSTEM_VERSION macro:</b></p>
- <ul>
- <li>
- <p align="left"><b>On the build command line; the exact format depends on
- your compiler or IDE</b></p>
- </li>
- <li>
- <p align="left"><b>In your code, before including any filesystem header,
- #define BOOST_FILESYSTEM_VERSION <i>n</i></b></p>
- </li>
- <li>
- <p align="left"><b>#define BOOST_FILESYSTEM_VERSION <i>n </i>in boost/config/user.hpp.
- Note that this approach applies to all uses of Boost.Filesystem.</b></p>
- </li>
- </ul>
- <p align="left">Existing code should be moved to Version 3 as soon as
- convenient. New code should be written for Version 3.</p>
- <p align="left">Version 2 is deprecated, and will not be included in Boost
- releases 1.48 and later.</p>
- <p align="left"><b>Building the library</b></p>
- <p align="left">By default, the Boost build system creates libraries that
- support both version 2 and version 3. To support only a single version,
- include <code>--disable-filesystem2</code> or <code>--disable-filesystem3</code>
- on the <code>bjam</code> command line.</p>
+ <p align="left">This is Version 3 of the Filesystem library. Version 2 is
+ not longer supported. 1.49.0 was the last release of Boost to supply
+ Version 2</p>
</td>
</tr>
</table>
@@ -255,7 +223,7 @@ which may throw <i>std::bad_alloc</i>. These exceptions may be thrown even
though the error condition leading to the exception is not explicitly specified
in the function's &quot;Throws&quot; paragraph.</p>
<p>All exceptions thrown by the Filesystem
-Library are implemented by calling <a href="../../../utility/throw_exception.html">
+Library are implemented by calling <a href="../../utility/throw_exception.html">
boost::throw_exception()</a>. Thus exact behavior may differ depending on
BOOST_NO_EXCEPTIONS at the time the filesystem source files are compiled.</p>
<p>Non-throwing versions are provided of several functions that are often used
@@ -266,10 +234,10 @@ in contexts where error codes may be the preferred way to report an error.</p>
<p>The Boost.Filesystem library provides several&nbsp;headers:</p>
<ul>
- <li>Header &lt;<a href="../../../../boost/filesystem.hpp">boost/filesystem.hpp</a>&gt;
+ <li>Header &lt;<a href="../../../boost/filesystem.hpp">boost/filesystem.hpp</a>&gt;
provides access to all features of the library, except file streams.<br>
&nbsp;</li>
- <li>Header &lt;<a href="../../../../boost/filesystem/fstream.hpp">boost/filesystem<i>/</i>fstream.hpp</a>&gt;
+ <li>Header &lt;<a href="../../../boost/filesystem/fstream.hpp">boost/filesystem<i>/</i>fstream.hpp</a>&gt;
inherits the same components as the C++ Standard
Library's <i>fstream</i> header, but files are identified by <code>const path&amp;</code>
arguments rather that <code>const char*</code> arguments.</li>
@@ -280,8 +248,8 @@ in contexts where error codes may be the preferred way to report an error.</p>
<p>The programs used to generate the Boost regression test status tables use the
Filesystem Library extensively.&nbsp; See:</p>
<ul>
- <li><a href="../../../../tools/regression/src/process_jam_log.cpp">process_jam_log.cpp</a></li>
- <li><a href="../../../../tools/regression/src/compiler_status.cpp">compiler_status.cpp</a></li>
+ <li><a href="../../../tools/regression/src/process_jam_log.cpp">process_jam_log.cpp</a></li>
+ <li><a href="../../../tools/regression/src/compiler_status.cpp">compiler_status.cpp</a></li>
</ul>
<h2><a name="Implementation">Implementation</a></h2>
<p>The current implementation supports operating systems which provide
@@ -323,12 +291,12 @@ supported.</p>
<h2><a name="Building">Building</a> the object-library</h2>
<p>The object-library will be built automatically if you are using the Boost
build system. See
-<a href="../../../../more/getting_started.html">Getting Started</a>. It can also be
+<a href="../../../more/getting_started.html">Getting Started</a>. It can also be
built manually using a <a href="../build/Jamfile.v2">Jamfile</a>
supplied in directory libs/filesystem/build, or the user can construct an IDE
project or make file which includes the object-library source files.</p>
<p>The object-library source files are
-supplied in directory <a href="../src">libs/filesystem/src</a>. These source files implement the
+supplied in directory <a href="src">libs/filesystem/src</a>. These source files implement the
library for POSIX or Windows compatible operating systems; no implementation is
supplied for other operating systems. Note that many operating systems not
normally thought of as POSIX systems, such as mainframe legacy
@@ -483,7 +451,7 @@ version 1.31.0.&nbsp;</p>
<hr>
<p>Revised
-<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->20 February, 2011<!--webbot bot="Timestamp" endspan i-checksum="40524" --></p>
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->20 March, 2012<!--webbot bot="Timestamp" endspan i-checksum="28814" --></p>
<p>&copy; Copyright Beman Dawes, 2002-2005</p>
<p> Use, modification, and distribution are subject to the Boost Software
diff --git a/libs/filesystem/v3/doc/path_table.cpp b/libs/filesystem/doc/path_table.cpp
index cb811cacfe..cb811cacfe 100644
--- a/libs/filesystem/v3/doc/path_table.cpp
+++ b/libs/filesystem/doc/path_table.cpp
diff --git a/libs/filesystem/v3/doc/path_table.txt b/libs/filesystem/doc/path_table.txt
index 40809c6774..40809c6774 100644
--- a/libs/filesystem/v3/doc/path_table.txt
+++ b/libs/filesystem/doc/path_table.txt
diff --git a/libs/filesystem/v3/doc/portability_guide.htm b/libs/filesystem/doc/portability_guide.htm
index 458e5dc81a..54b5a748cb 100644
--- a/libs/filesystem/v3/doc/portability_guide.htm
+++ b/libs/filesystem/doc/portability_guide.htm
@@ -6,13 +6,13 @@
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Portability Guide</title>
-<link rel="stylesheet" type="text/css" href="../../../../doc/src/minimal.css">
+<link rel="stylesheet" type="text/css" href="../../../doc/src/minimal.css">
</head>
<body bgcolor="#FFFFFF">
<h1>
-<img border="0" src="../../../../boost.png" align="center" width="300" height="86">Path
+<img border="0" src="../../../boost.png" align="center" width="300" height="86">Path
Name Portability
Guide</h1>
@@ -228,11 +228,11 @@ portability yet not overly restrict expressiveness.</p>
<hr>
<p>Revised
-<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->20 February, 2011<!--webbot bot="Timestamp" endspan i-checksum="40524" --></p>
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->20 March, 2012<!--webbot bot="Timestamp" endspan i-checksum="28814" --></p>
<p>© Copyright Beman Dawes, 2002, 2003</p>
<p> Use, modification, and distribution are subject to the Boost Software
-License, Version 1.0. (See accompanying file <a href="../../../../LICENSE_1_0.txt">
+License, Version 1.0. (See accompanying file <a href="../../../LICENSE_1_0.txt">
LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
www.boost.org/LICENSE_1_0.txt</a>)</p>
diff --git a/libs/filesystem/v3/doc/src/source.html b/libs/filesystem/doc/reference.html
index 9f8dd78263..7d6b11fb30 100644
--- a/libs/filesystem/v3/doc/src/source.html
+++ b/libs/filesystem/doc/reference.html
@@ -1,43 +1,77 @@
<html>
-
+<!-- © Copyright Beman Dawes, 2002, 2006, 2007, 2009, 2010, 2011 -->
+<!-- Distributed under the Boost Software License, Version 1.0. -->
+<!-- See http://www.boost.org/LICENSE_1_0.txt -->
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>
-$if $TARGET; == BOOST
- Filesystem V3 Reference
- $def WHAT "reference documentation"
- $def SNIPPET_FILE "boost_snippets.html"
- $def HEADER "boost/filesystem.hpp"
- $def NAMESPACE boost
- $def SUBNAMESPACE filesystem
- $def NAMESPACE_BEGIN "namespace boost
-{
- namespace filesystem
- {"
- $def NAMESPACE_END " } // namespace filesystem
-} // namespace boost"
-$else
- Filesystem TR2 Proposal
- $def WHAT "Clause"
- $def SNIPPET_FILE "tr2_snippets.html"
- $def HEADER "files"
- $def NAMESPACE std
- $def SUBNAMESPACE files
- $def NAMESPACE_BEGIN "namespace std { namespace tr2 { namespace files {
-"
- $def NAMESPACE_END "} } } // namespaces std::tr2::files"
-$endif
-</title>
+
+ Filesystem Reference
+ </title>
<style type="text/css">
-$include "../../../../../doc/src/minimal.css"
+/*
+
+ © Copyright Beman Dawes, 2007
+
+ Distributed under the Boost Software License, Version 1.0.
+ See www.boost.org/LICENSE_1_0.txt
+
+*/
+
+body {
+ font-family: sans-serif;
+ margin: 1em;
+ max-width : 8.5in;
+ }
+
+table { margin: 0.5em; }
+
+pre { background-color:#D7EEFF }
+
+ins { background-color:#A0FFA0 }
+del { background-color:#FFA0A0 }
+
+/*** end ***/
</style>
</head>
<body>
-$snippet frontmatter "$SNIPPET_FILE;"
+
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
+ <tr>
+ <td width="277">
+<a href="../../../index.htm">
+<img src="../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
+ <td align="middle">
+ <font size="7">Filesystem Library<br>
+ </font>
+ <font size="6">Version 3</font></td>
+ </tr>
+</table>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
+ <tr>
+ <td><a href="index.htm">Filesystem Home</a> &nbsp;&nbsp;
+ <a href="release_history.html">Releases</a> &nbsp;&nbsp;
+ <a href="reference.html">Reference</a> &nbsp;&nbsp;
+ <a href="tutorial.html">Tutorial</a> &nbsp;&nbsp;
+ <a href="faq.htm">FAQ</a> &nbsp;&nbsp;
+ <a href="portability_guide.htm">Portability</a> &nbsp;&nbsp;
+ <a href="v3.html">V3 Intro</a> &nbsp;&nbsp;
+ <a href="v3_design.html">V3 Design</a> &nbsp;&nbsp;
+ <a href="deprecated.html">Deprecated</a> &nbsp;&nbsp;
+ </td>
+ </td>
+ </tr>
+</table>
+
+<h1>Reference Documentation</h1>
+
+
<h2><a name="TOC">Table of Contents</a></h2>
@@ -47,7 +81,7 @@ $snippet frontmatter "$SNIPPET_FILE;"
<a href="#Definitions">Definitions</a><br>
<a href="#Conformance">Conformance</a><br>
<a href="#Header-filesystem-synopsis">
- Header <code>&lt;$HEADER;&gt;</code> synopsis</a><br>
+ Header <code>&lt;boost/filesystem.hpp&gt;</code> synopsis</a><br>
<a href="#Error-reporting">Error reporting</a><br>
<a href="#class-path">Class <code>path</code></a><br>
&nbsp;&nbsp;&nbsp; <a href="#path-Conversions"><code>path</code> conversions</a><br>
@@ -60,15 +94,18 @@ $snippet frontmatter "$SNIPPET_FILE;"
&nbsp;&nbsp;&nbsp; <a href="#path-Requirements"><code>path</code> requirements</a><br>
&nbsp;&nbsp;&nbsp; <a href="#path-constructors"><code>path</code> constructors</a><br>
&nbsp;&nbsp;&nbsp; <a href="#path-assignments"><code>path</code> assignments</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#path-appends"><code>path</code> appends</a><br>
+ &nbsp;&nbsp;&nbsp;&nbsp;<a href="#path-appends"><code>path</code> appends</a><br>
+ &nbsp;&nbsp; &nbsp;<a href="#path-concatenation"><code>path</code> concatenation</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="#path-modifiers"><code>path</code> modifiers</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="#path-native-format-observers"><code>path</code> native
format observers</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="#path-generic-format-observers"><code>path</code> generic
format observers</a><br>
+&nbsp;&nbsp;&nbsp; <a href="#path-compare"><code>path</code> compare</a><br>
&nbsp;&nbsp;&nbsp; <a href="#path-decomposition"><code>path</code> decomposition</a><br>
&nbsp;&nbsp;&nbsp; <a href="#path-query"><code>path</code> query</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="#path-iterators"><code>path</code> iterators</a><br>
+
&nbsp;&nbsp;&nbsp;&nbsp;<a href="#path-deprecated-functions"><code>path</code> deprecated functions</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="#path-non-member-functions"><code>path</code> non-member functions</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="#path-inserter-extractor"><code>path</code> inserters and extractors</a><br>
@@ -115,11 +152,11 @@ $snippet frontmatter "$SNIPPET_FILE;"
&nbsp;&nbsp;&nbsp;&nbsp <a href="#equivalent">equivalent</a><br>
&nbsp;&nbsp;&nbsp;&nbsp <a href="#file_size">file_size</a><br>
&nbsp;&nbsp;&nbsp;&nbsp; <a href="#hard_link_count">hard_link_count</a><br>
- &nbsp;&nbsp;&nbsp;&nbsp; <a href="#initial_path">initial_path</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp i<a href="#is_directory">s_directory</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp <a href="#is_empty">is_empty</a></code></td>
+ &nbsp;&nbsp;&nbsp;&nbsp; <a href="#initial_path">initial_path</a></code></td>
<td width="34%" valign="top">
- <code>&nbsp;&nbsp;&nbsp;&nbsp <a href="#is_other">is_other</a><br>
+ <code>&nbsp;&nbsp;&nbsp;&nbsp; i<a href="#is_directory">s_directory</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp <a href="#is_empty">is_empty</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp <a href="#is_other">is_other</a><br>
&nbsp;&nbsp;&nbsp;&nbsp <a href="#is_regular_file">is_regular_file</a><br>
&nbsp;&nbsp;&nbsp;&nbsp <a href="#is_symlink">is_symlink</a><br>
&nbsp;&nbsp;&nbsp;&nbsp <a href="#last_write_time">last_write_time</a><br>
@@ -146,31 +183,30 @@ $snippet frontmatter "$SNIPPET_FILE;"
</tr>
</table>
-$snippet wording_prefix "$SNIPPET_FILE;"
-<p>This $WHAT; describes components that perform operations on file systems and
+<h2><a name="Introduction">Introduction</a></h2>
+
+<p>This reference documentation describes components that C++ programs may use
+to perform operations involving file systems, including paths, regular files,
+and directories.</p>
+
+
+<p>This reference documentation describes components that perform operations on file systems and
their components, such as paths, regular files, and directories.</p>
-<p>Operating systems such as <i>MAC OS, UNIX</i>, and <i>Windows</i> are
-mentioned in this $WHAT; for purposes of illustration or to give guidance to
-implementers. No slight to other operating systems is implied or intended.</p>
-<p><a name="Footnote-3">Footnote 3</a>: <i>MAC OS</i>® is a registered trademark
-of Apple Inc.</p>
-<p><a name="Footnote-4">Footnote 4</a>: <i>Windows</i>® is a registered
-trademark of Microsoft Corporation.</p>
<h2><a name="Conformance">Conformance</a></h2>
-<p>Behavior is sometimes specified by reference to ISO/IEC 9945:2003, <i>
-<a href="http://www.unix.org/single_unix_specification/">POSIX</a></i>. How such behavior is actually implemented is unspecified.</p>
+<p>Behavior is sometimes specified by reference to ISO/IEC 9945. How such behavior is actually implemented is unspecified.</p>
<blockquote>
<p>[<i>Note:</i> This constitutes an &quot;as if&quot; rule for implementation of
-operating system dependent behavior. Presumably implementations will usually call native
+operating system dependent behavior. In practice implementations will usually call native
operating system API's. <i>--end note</i>]</p>
</blockquote>
-<p>Implementations are encouraged, but not required, to support such behavior
+<p>Implementations are encouraged, but not required, to prove such behavior
-as it is defined by <i>POSIX</i>. Implementations shall document any
-behavior that differs from the <i>POSIX</i> defined behavior. Implementations that do not support exact <i>POSIX</i> behavior are
-encouraged to provide behavior as close to <i>POSIX</i> behavior as is reasonable given the
+as it is defined by ISO/IEC 9945. Implementations shall document any
+behavior that differs from the ISO/IEC 9945 defined behavior. Implementations that do not support exact
+ISO/IEC 9945 behavior are
+encouraged to provide behavior as close to ISO/IEC 9945 behavior as is reasonable given the
limitations of actual operating systems and file systems. If an implementation cannot provide any
reasonable behavior, the implementation shall report an error in an
implementation-defined manner.</p>
@@ -188,17 +224,12 @@ does not support hard links, symlinks, and many other features of more capable
file systems. Implementations are only required to support the FAT features
supported by the host operating system. <i>-- end example</i>]</p>
</blockquote>
-<p>Specific operating systems such as <i>OpenVMS</i>,
-<i>UNIX</i>, and <i>Windows</i> are mentioned only for purposes of illustration or to
-give guidance to users and implementers. No slight to other operating systems is implied
-or intended. When unlikely to cause confusion, the term <i>POSIX</i> is
-sometimes used to refer to &quot;POSIX-compliant operating systems&quot;.</p>
<p>The behavior of functions described in this
reference
may differ from their specification in
the presence of <a href="#Race-condition">file system races</a>. No diagnostic is required.</p>
<p>If the possibility of a file system race would make it unreliable for a program to
-test for a precondition before calling a function described in this $WHAT;, <i>
+test for a precondition before calling a function described in this reference documentation, <i>
Requires</i> is not specified for the condition. Instead, the condition is
specified as a <i>Throws</i> condition.</p>
<blockquote>
@@ -220,9 +251,9 @@ characters or specific names that are not permitted. Filenames <code>.</code>&nb
and <code>..</code>&nbsp; have special meaning. Implementations may define
additional filenames that have special meaning.</p>
<blockquote>
- <p><i>[Note:</i> Most operating systems prohibit the ASCII control characters
+ <p><i>[Note:</i> Many operating systems prohibit the ASCII control characters
(0x00-0x1F) in filenames.</p>
- <p>Windows prohibits the characters 0x00-0x1F, <code>&quot;</code>,<code>
+ <p>One widely used operating system prohibits the characters 0x00-0x1F, <code>&quot;</code>,<code>
*</code>,<code>&nbsp;:</code>,<code> &lt;</code>,<code> &gt;</code>,<code>&nbsp;?</code>,<code>
\</code>,<code> /</code>, and<code> |</code>&nbsp;<i>--end note]</i></p>
</blockquote>
@@ -230,23 +261,26 @@ additional filenames that have special meaning.</p>
the location of a file within a filesystem. The elements are the <i>root-name<sub>opt</sub></i>, <i>
root-directory<sub>opt</sub></i>, and an optional sequence of filenames. [<i>Note:</i>
A <a href="#Pathname">pathname</a> is the concrete representation of a path. <i>--end note</i>]</p>
+<p><b><i>POSIX API systems:</i></b> Operating systems that use the ISO/IEC 9945
+API as their native application program interface.</p>
+<p><b><i>Windows API systems:</i></b> Operating systems that use the Windows API
+as their native application program interface.</p>
<p><b><i><a name="Absolute-path">Absolute path</a>:</i></b> A path that
unambiguously
-identifies the location of a file within a file system without reference to an
-additional starting location. The format is implementation defined. </p>
-<blockquote>
- <p><i>[Note:</i> For POSIX-like implementations, including<b> </b>Unix
- variants, Linux, and Mac OS X, only paths
- that begin with a slash are absolute paths.</p>
- <p>For Windows-like implementations, including <a href="http://www.cygwin.com/">
- Cygwin</a> and
- <a href="http://www.mingw.org/">MinGW</a>, only paths that begin with a drive
- specifier followed by a slash, or begin with two slashes, are absolute paths.&nbsp;<i>--end
+identifies the location of a file without reference to an additional starting
+location. The elements of a path that determine if it is absolute are
+implementation defined.</p>
+<blockquote>
+ <p dir="ltr"><i>[Note:</i> For POSIX API systems, paths that begin with one or
+ more <i>directory-specifier</i> characters are absolute paths.</p>
+ <p>For Windows API systems, paths that begin with a drive specifier (i.e. a
+ single letter followed by a colon) followed by one or more <i>directory-specifier</i>
+ characters, or begin with two <i>directory-specifier</i> characters, are absolute paths.&nbsp;<i>--end
note]</i></p>
</blockquote>
<p><i><b><a name="Relative-path">Relative path</a>:</b></i> A path that only
unambiguously
-identifies the location of a file within a filesystem when resolved relative to
+identifies the location of a file when resolved relative to
a starting location. The format is implementation defined. [<i>Note:</i>
Paths &quot;.&quot; and &quot;..&quot; are considered to be relative paths. <i>--end note</i>]</p>
<p><i><b><a name="Canonical-path">Canonical path</a>:</b></i> An absolute path that has
@@ -264,10 +298,11 @@ root-directory<sub>opt</sub> relative-path<sub>opt</sub></i></p>
implementation-defined</i></p>
<blockquote>
<blockquote>
-<p>[<i>Note:</i> Most POSIX and Windows based operating systems define a name
-beginning with two slashes (or backslashes, for Windows) as a root-name
-identifying network locations. Windows defines a single letter followed by a
-<code>&quot;:&quot;</code> as a root-name identifying a disc drive. <i>--end note</i>]</p>
+<p>[<i>Note:</i> Many operating systems define a name
+beginning with two <i>directory-separator</i> characters as a <i>root-name</i>
+that identifies network locations. <span style="background-color: #FFFF00">Some
+operating systems</span> defines a single letter followed by a colon as a drive
+specifier; a <i>root-name</i> identifying a specific device such as a disc drive. <i>--end note</i>]</p>
</blockquote>
</blockquote>
<p><i>root-directory:<br>
@@ -285,19 +320,29 @@ directory-separator filename</i></p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </i><code>&quot;.&quot;</code><i><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </i><code>
&quot;..&quot;</code></p>
+<p><i>preferred-separator:<sub>opt</sub><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+implementation-defined</i></p>
<p><i>directory-separator:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <code>&quot;/&quot;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;/&quot;</code> directory-separator</i></p>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;/&quot;</code> directory-separator<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+preferred-separator<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+preferred-separator directory-separator</i></p>
<p>Multiple successive <i>directory-separator</i> characters are considered to
-be the same as one <i>directory-separator</i> character. The <i>filename</i>
+be the same as one <i>directory-separator</i> character.</p>
+<p>The <i>filename</i>
<code>&quot;.&quot;</code> is considered to be a reference to the current directory. The
-<i>filename</i> <code>&quot;..&quot;</code> is considered to be a reference to the current
-directory. Specific <i>filenames</i> may have special meaning for a particular
-operating system.</p>
+<i>filename</i> <code>&quot;..&quot;</code> is considered to be a reference to the
+parent
+directory. Specific <i>filenames</i> may have special meanings for a particular
+operating system. </p>
</blockquote>
<p><b><i><a name="native-pathname-format">Native pathname format:</a></i></b>&nbsp;
-An implementation defined format. [<i>Note:</i> For POSIX-like operating
-systems, the native format is the same as the generic format. For Windows, the
+An implementation defined format. [<i>Note:</i> For ISO/IEC 9945 compliant operating
+systems, the native format is the same as the generic format. For one widely
+used non-ISO/IEC 9945 compliant operating system, the
native format is similar to the generic format, but the directory-separator
characters can be either slashes or backslashes. <i>--end note</i>]</p>
<p><i><b><a name="Link">Link</a>:</b> </i>A directory entry object that associates a
@@ -325,13 +370,17 @@ the same object within a file system.</p>
<p><b><i><a name="Dot">Dot</a>, Dot Dot:</i></b> Synonyms for the filenames <code>&quot;.&quot;</code>
and <code>&quot;..&quot;</code>, respectively. The dot filename names the current
directory. The dot dot filename names the parent directory.</p>
-<h2><a name="Header-filesystem-synopsis">Header <code>&lt;$HEADER;&gt;</code> synopsis</a></h2>
-<pre>$NAMESPACE_BEGIN;
- class <a href="#class-path">path</a>;
+<h2><a name="Header-filesystem-synopsis">Header <code>&lt;boost/filesystem.hpp&gt;</code> synopsis</a></h2>
+<pre>namespace boost
+{
+ namespace filesystem
+ {
+ class <a href="#class-path">path</a>;
- void swap(path&amp; lhs, path&amp; rhs);
bool lexicographical_compare(path::iterator first1, path::iterator last1,
- path::iterator first2, path::iterator last2);
+ path::iterator first2, path::iterator last2);
+
+void swap(path&amp; lhs, path&amp; rhs);
std::size_t <a href="#hash_value">hash_value</a>(const path&amp; p);
bool operator==(const path&amp; lhs, const path&amp; rhs);
@@ -353,8 +402,26 @@ directory. The dot dot filename names the parent directory.</p>
class <a href="#Class-directory_iterator">directory_iterator</a>;
+ // enable c++11 range-based for statements
+ const directory_iterator&amp; <a href="#directory_iterator-non-member-functions">begin</a>(const directory_iterator&amp; iter);
+ directory_iterator <a href="#directory_iterator-non-member-functions">end</a>(const directory_iterator&amp;);
+
+ // enable BOOST_FOREACH
+ directory_iterator&amp; range_begin(directory_iterator&amp; iter);
+ directory_iterator range_begin(const directory_iterator&amp; iter);
+ directory_iterator range_end(const directory_iterator&amp;);
+
class <a href="#Class-recursive_directory_iterator">recursive_directory_iterator</a>;
+ // enable c++11 range-based for statements
+ const recursive_directory_iterator&amp; <a href="#recursive_directory_iterator-non-member-functions">begin</a>(const recursive_directory_iterator&amp; iter);
+ recursive_directory_iterator <a href="#recursive_directory_iterator-non-member-functions">end</a>(const recursive_directory_iterator&amp;);
+
+&nbsp;&nbsp;&nbsp; // enable BOOST_FOREACH
+&nbsp;&nbsp;&nbsp;&nbsp;recursive_directory_iterator&amp; range_begin(recursive_directory_iterator&amp; iter);
+&nbsp;&nbsp;&nbsp;&nbsp;recursive_directory_iterator range_begin(const recursive_directory_iterator&amp; iter);
+&nbsp;&nbsp;&nbsp;&nbsp;recursive_directory_iterator range_end(const recursive_directory_iterator&amp;);
+&nbsp;
enum <a name="file_type" href="#Enum-file_type">file_type</a>
{
status_error, file_not_found, regular_file, directory_file,
@@ -514,11 +581,11 @@ directory. The dot dot filename names the parent directory.</p>
path <a href="#unique_path">unique_path</a>(const path&amp; model=&quot;%%%%-%%%%-%%%%-%%%%&quot;);
path <a href="#unique_path">unique_path</a>(const path&amp; model, system::error_code&amp; ec);
-$NAMESPACE_END;</pre>
+ } // namespace filesystem
+} // namespace boost</pre>
<h2><a name="Error-reporting">Error reporting</a></h2>
<p>Filesystem library functions often provide two overloads, one that
-throws an exception to report file system errors, and another that sets an
-<code>error_code</code>.</p>
+throws an exception to report file system errors, and another that sets an <code>error_code</code>.</p>
<blockquote>
<p>[<i>Note:</i> This supports two common use cases:</p>
<ul>
@@ -533,9 +600,7 @@ errors are truly exceptional and indicate a serious failure. Throwing an
</ul>
<p><i>--end note</i>]</p>
</blockquote>
-<p>Functions <b>not</b> having an argument of type
-<code>system::error_code&amp;</code>
-report errors as follows, unless otherwise specified:</p>
+<p>Functions <b>not</b> having an argument of type <code>system::error_code&amp;</code> report errors as follows, unless otherwise specified:</p>
<ul>
<li>When a call by the
implementation to an operating system or other underlying API results in an
@@ -548,8 +613,7 @@ report errors as follows, unless otherwise specified:</p>
&nbsp;</li>
<li>Destructors throw nothing.</li>
</ul>
- <p>Functions having an argument of type
-<code>system::error_code&amp;</code> report errors as follows, unless otherwise
+ <p>Functions having an argument of type <code>system::error_code&amp;</code> report errors as follows, unless otherwise
specified:</p>
<ul>
<li>If a call by the
@@ -570,18 +634,17 @@ and contains a <a href="#Pathname">pathname</a> Such an object is concerned only
of a path. The path does not necessarily exist in external storage, and the
pathname is not necessarily valid for the current operating
system or for a particular file system.</p>
-<blockquote>
-<p>[<i>Example:</i> A <a href="#long-path-warning">long path name on Windows</a>
-is an example of an innocuous appearing path that is not actually valid. <i>--
-end example</i>]</p>
-</blockquote>
-<pre>$NAMESPACE_BEGIN;
+<pre>namespace boost
+{
+ namespace filesystem
+ {
class path
{
public:
- typedef <b><i><a href="#value_type">see below</a></i></b> value_type; // char for POSIX, wchar_t for Windows
+ typedef <b><i><a href="#value_type">see below</a></i></b> value_type; // char for ISO/IEC 9945, wchar_t for Windows
typedef std::basic_string&lt;value_type&gt; string_type;
typedef std::codecvt&lt;wchar_t, char, std::mbstate_t&gt; codecvt_type;
+ constexpr value_type preferred_separator;
// <a href="#path-constructors">constructors</a> and destructor
path();
@@ -621,10 +684,26 @@ end example</i>]</p>
template &lt;class <a href="#InputIterator">InputIterator</a>&gt;
path&amp; append(InputIterator begin, InputIterator end, const codecvt_type&amp; cvt=codecvt());
+ // <a href="#path-concatenation">concatenation</a>
+ path&amp; operator+=(const path&amp; x);
+ path&amp; operator+=(const string_type&amp; x);
+ path&amp; operator+=(const value_type* x);
+ path&amp; operator+=(value_type x);
+ template &lt;class Source&gt;
+ path&amp; operator+=(Source const&amp; x);
+ template &lt;class CharT&gt;
+ path&amp; operator+=(CharT x);
+ template &lt;class Source&gt;
+ path&amp; concat(Source const&amp; x, const codecvt_type&amp; cvt);
+ template &lt;class InputIterator&gt;
+ path&amp; concat(InputIterator begin, InputIterator end);
+ template &lt;class InputIterator&gt;
+ path&amp; concat(InputIterator begin, InputIterator end, const codecvt_type&amp; cvt);
+
// <a href="#path-modifiers">modifiers</a>
void <a href="#path-clear">clear</a>();
path&amp; <a href="#absolute">make_absolute</a>(const path&amp; base);
- path&amp; <a href="#path-make_preferred">make_preferred</a>(); // POSIX: no effect. Windows: convert slashes to backslashes
+ path&amp; <a href="#path-make_preferred">make_preferred</a>(); // ISO/IEC 9945: no effect. Windows: convert slashes to backslashes
path&amp; <a href="#path-remove_filename">remove_filename</a>();
path&amp; <a href="#path-replace_extension">replace_extension</a>(const path&amp; new_extension = path());
void <a href="#path-swap">swap</a>(path&amp; rhs);
@@ -650,6 +729,11 @@ end example</i>]</p>
const u16string <a href="#generic_u16string">generic_u16string</a>() const; // ditto
const u32string <a href="#generic_u32wstring">generic_u32string</a>() const; // ditto
+ // <a href="#path-compare">compare</a>
+ int <a href="#path-compare">compare</a>(const path&amp; p) const noexcept;
+ int <a href="#path-compare">compare</a>(const std::string&amp; s) const;
+ int <a href="#path-compare">compare</a>(const value_type* s) const;
+
// <a href="#path-decomposition">decomposition</a>
path <a href="#path-root_name">root_name</a>() const;
path <a href="#path-root_directory">root_directory</a>() const;
@@ -688,19 +772,17 @@ end example</i>]</p>
string_type pathname; // <b><i>exposition only</i></b>
};
-$NAMESPACE_END;</pre>
-<p><code><a name="value_type">value_type</a></code> is an implementation-defined
-<code>typedef</code> for the
+ } // namespace filesystem
+} // namespace boost</pre>
+<p><code><a name="value_type">value_type</a></code> is an implementation-defined <code>typedef</code> for the
character type used by the operating system to represent pathnames.</p>
-<p>Member functions described as returning <code>const string</code>, <code>
-const wstring</code>, <code>const u16string</code>, or <code>const u32string</code> are permitted to return <code>const string&amp;</code>, <code>const
+<p>Member functions described as returning <code>const string</code>, <code>const wstring</code>, <code>const u16string</code>, or <code>const u32string</code> are permitted to return <code>const string&amp;</code>, <code>const
wstring&amp;</code>, <code>const u16string&amp;</code>, or <code>const u32string&amp;</code>,
respectively.</p>
<blockquote>
<p>[<i>Note:</i> This allows implementations to avoid unnecessary copies when no
conversion is required.
-Return-by-value is specified as
-<code>const</code> to ensure programs won't break if moved to a return-by-reference
+Return-by-value is specified as <code>const</code> to ensure programs won't break if moved to a return-by-reference
implementation. <i>--
end note</i>]</p>
</blockquote>
@@ -713,7 +795,7 @@ the <a href="#native-pathname-format">native pathname format</a>. If such an
argument uses the generic format, an implementation defined conversion to native format is performed
during the processing of the argument. </p>
<blockquote>
-<p>[<i>Note:</i> No conversion occurs on POSIX and Windows since they have
+<p>[<i>Note:</i> No conversion occurs on ISO/IEC 9945 and Windows since they have
native formats that conform to the generic format. <i>--end note</i>]</p>
<p>[<i>Rationale:</i> There is no unambiguous way for an implementation to
always be able distinguish between native format and generic format arguments.
@@ -723,31 +805,36 @@ native format prefix can be introduced to identify the native format. <i>-- end
rationale</i>]</p>
</blockquote>
-<table align="center" border="1" cellpadding="3" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%">
+<div align="center">
+ <center>
+
+<table border="1" cellpadding="3" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#E0E0E0" width="90%">
<tr>
<td>
- Class <code>path</code> does not currently map invalid characters in
+ <i>Class <code>path</code> does not currently map invalid characters in
filenames to valid characters. In the future we might add something like
- this:<blockquote>
-<p>When converting filenames to the native operating system format,
+ this:</i><blockquote>
+<p><i>When converting filenames to the native operating system format,
implementations are encouraged, but not required, to convert otherwise invalid
characters or character sequences to valid characters or character sequences.
-Such conversions are implementation-defined.</p>
+Such conversions are implementation-defined.</i></p>
<blockquote>
-<p>[<i>Note:</i> Filename conversion allows much wider portability of both
-programs and filenames that would otherwise be possible.</p>
-<p>Implementations are encouraged to base conversion on existing standards or
+<p><i>[Note: Filename conversion allows much wider portability of both
+programs and filenames that would otherwise be possible.</i></p>
+<p><i>Implementations are encouraged to base conversion on existing standards or
practice. Examples include the Uniform Resource Locator escape syntax of a percent sign (<code>'%'</code>)
-followed by two hex digits representing the character value. On
-<i>OpenVMS</i>, which does not allow percent signs in filenames, a dollar sign (<code>'&#36;'</code>)
+followed by two hex digits representing the character value. On OpenVMS, which does not allow percent signs in filenames, a dollar sign (<code>'&#36;'</code>)
followed by two hex digits is the existing practice, as is converting lowercase
-letters to uppercase.<i> -- end note.</i>]</p>
+letters to uppercase. -- end note.]</i></p>
</blockquote>
</blockquote>
</td>
</tr>
</table>
+ </center>
+</div>
+
<p>If the native format requires
paths for regular files to be formatted differently from paths for directories, the
path shall be treated as a directory path if last element is a separator,
@@ -755,64 +842,45 @@ otherwise it shall be treated as a regular file path.</p>
<blockquote>
-<p>[<i>Note</i>: The above paragraph does not apply to POSIX and Windows since
+<p>[<i>Note</i>: The above paragraph does not apply to ISO/IEC 9945 and Windows since
they use the same format
for both regular file and directory pathnames. <i>--end note</i>]</p>
-<p>[<i>Example:</i>
-On <a href="http://en.wikipedia.org/wiki/OpenVMS">OpenVMS</a>, a path
+<p>[<i>Example:</i> On <a href="http://en.wikipedia.org/wiki/OpenVMS">OpenVMS</a>, a path
constructed from <code>&quot;/cats/jane&quot;</code> would considered a regular file
path, and have a native format of <code>&quot;[CATS]JANE&quot;</code>, while a
path constructed from <code>&quot;/cats/jane/&quot;</code> would be considered a
-directory path, and have a native format of <code>&quot;[CATS.JANE]&quot;</code>.
-<i>--end example</i>]</p>
+directory path, and have a native format of <code>&quot;[CATS.JANE]&quot;</code>. <i>--end example</i>]</p>
</blockquote>
<h4><a name="path-Conversions-to-generic-format"><code>path</code> Conversions
to generic format</a></h4>
-<p><a href="#path-generic-format-observers">Generic format observer</a>
-functions return strings formatted according to the
-<a href="#generic-pathname-format">generic pathname format</a>. The conversion
+<p><a href="#path-generic-format-observers">Generic format observer</a> functions return strings formatted according to the <a href="#generic-pathname-format">generic pathname format</a>. The conversion
from generic to native formats is implementation defined.</p>
<blockquote>
-<p>[<i>Note:</i> For POSIX, no conversion is performed. For Windows, backslashes are converted to
+<p>[<i>Note:</i> For ISO/IEC 9945, no conversion is performed. For Windows, backslashes are converted to
forward slashes. <i>-- end note</i>]</p>
</blockquote>
<h4><a name="path-Encoding-conversions"><code>path</code> Encoding conversions</a></h4>
<p>If the value type of member function arguments that are character sequences
representing paths is not <code>value_type</code>,
-and no <code>cvt</code> argument is supplied, conversion to <code>value_type</code>
-occurs using an imbued locale. This imbued locale is initialized with a <code>
-codecvt</code> facet appropriate for the operating system.</p>
-<blockquote>
-<p>For Apple OS X implementations, <code>path::value_type</code>
-is <code>char</code>. The default imbued locale provides a UTF-8 <code>codecvt</code>
-facet. [<i>Rationale:</i> &quot;All BSD system functions expect their string
-parameters to be in UTF-8 encoding and nothing else.&quot; See
-<a href="http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPInternational/Articles/FileEncodings.html">
-Apple docs</a>. <i>-- end rationale</i>]</p>
-<p>For Windows-like implementations, including
-<a href="http://www.mingw.org/">MinGW</a>, <code>path::value_type</code> is <code>
-wchar_t</code>. The default imbued locale provides a <code>codecvt</code> facet
-that invokes Windows <code>MultiByteToWideChar</code> or <code>
-WideCharToMultiByte</code> API with a codepage of <code>CP_THREAD_ACP</code>
-if Windows <code>AreFileApisANSI()</code>is true, otherwise codepage <code>
-CP_OEMCP</code>. [<i>Rationale:</i> this is the current behavior of C and C++
+and no <code>cvt</code> argument is supplied, conversion to <code>value_type</code> occurs using an imbued locale. This imbued locale is initialized with a <code>codecvt</code> facet appropriate for the operating system.</p>
+<blockquote>
+<p>For Apple OS X implementations, <code>path::value_type</code> is <code>char</code>. The default imbued locale provides a UTF-8 <code>codecvt</code> facet. [<i>Rationale:</i> &quot;All BSD system functions expect their string
+parameters to be in UTF-8 encoding and nothing else.&quot; See <a href="http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPInternational/Articles/FileEncodings.html">Apple docs</a>. <i>-- end rationale</i>]</p>
+<p>For Windows-like implementations, including <a href="http://www.mingw.org/">MinGW</a>, <code>path::value_type</code> is <code>wchar_t</code>. The default imbued locale provides a <code>codecvt</code> facet
+that invokes Windows <code>MultiByteToWideChar</code> or <code>WideCharToMultiByte</code> API with a codepage of <code>CP_THREAD_ACP</code> if Windows <code>AreFileApisANSI()</code>is true, otherwise codepage <code>CP_OEMCP</code>. [<i>Rationale:</i> this is the current behavior of C and C++
programs that perform file operations using narrow character string to identify
paths. Changing this in the Filesystem library would be too surprising,
particularly where user input is involved. <i>-- end rationale</i>]</p>
-<p>For all other implementations, including<b> </b>Linux, <code>path::value_type</code>
-is <code>char</code>. The default imbued locale is <code>std::locale(&quot;&quot;)</code>.
+<p>For all other implementations, including<b> </b>Linux, <code>path::value_type</code> is <code>char</code>. The default imbued locale is <code>std::locale(&quot;&quot;)</code>.
[<i>Rationale:</i> ISO C specifies this as &quot;the locale-specific native
-environment&quot;, while POSIX says it &quot;Specifies an implementation-defined native
+environment&quot;, while ISO/IEC 9945 says it &quot;Specifies an implementation-defined native
environment.&quot; <i>-- end rationale</i>]</p>
</blockquote>
<h3><a name="path-Requirements"><code>path</code> Requirements</a></h3>
-<p>Template parameters named <code><a name="InputIterator">InputIterator</a></code>
-are required meet the
-requirements for a C++ standard library <code>RandomIterator</code>
-compliant iterator. The iterator's value type is required to be <code>char</code>, <code>
- wchar_t</code>, <code>char16_t</code>, or <code>char32_t</code>.</p>
+<p>Template parameters named <code><a name="InputIterator">InputIterator</a></code> are required meet the
+requirements for a C++ standard library <code>RandomIterator</code> compliant iterator. The iterator's value type is required to be <code>char</code>, <code>wchar_t</code>, <code>char16_t</code>, or <code>char32_t</code>.</p>
<p>Template parameters named <code><a name="Source">Source</a></code> are required to be one of:</p>
<ul>
<li>A container with a value type of <code>char</code>, <code>
@@ -840,7 +908,7 @@ compliant iterator. The iterator's value type is required to be <code>char</code
or <code>source</code> in <code>pathname</code>. If the contents are in the
generic format and the generic format is unacceptable to the operating
system's API, they are converted to the native format. [<i>Note:</i> For
- POSIX and Windows implementations, the generic format is already
+ ISO/IEC 9945 and Windows implementations, the generic format is already
acceptable as a native format, so no generic to native conversion is
performed. <i>--end note</i>]</p>
<p>
@@ -860,7 +928,7 @@ compliant iterator. The iterator's value type is required to be <code>char</code
<p><i>Effects:</i> Stores the contents [<code>begin</code>,<code>end</code>)
or <code>source</code> in <code>pathname</code>. If the contents are in the
generic format, they are converted to the native format. [<i>Note:</i> For
- POSIX and Windows based implementations, the generic format is already
+ ISO/IEC 9945 and Windows based implementations, the generic format is already
acceptable as a native format, so no generic to native conversion is
performed. <i>--end note</i>]</p>
<p>
@@ -870,18 +938,15 @@ compliant iterator. The iterator's value type is required to be <code>char</code
or <code>source</code> is not <code>value_type</code>, conversion is performed
by <code>cvt</code>.</p>
</blockquote>
-<h3> <a name="path-appends"><code><font size="4"> path</font></code> appends</a></h3>
+<h3><a name="path-appends"><code><font size="4"> path</font></code> appends</a></h3>
<p>The append operations use <code>operator/=</code> to denote their semantic
effect of appending the platform's preferred directory separator when needed. The
preferred
directory separator is implementation-defined.</p>
<blockquote>
- <p align="left">[<i>Note: </i>For POSIX-like implementations, including<b> </b>
- Unix variants, Linux, and Mac OS X, the preferred directory separator is a
+ <p align="left">[<i>Note: </i>For ISO/IEC 9945-like implementations, including<b> </b>Unix variants, Linux, and Mac OS X, the preferred directory separator is a
single forward slash.</p>
- <p align="left">For Windows-like implementations, including
- <a href="http://www.cygwin.com/">Cygwin</a> and
- <a href="http://www.mingw.org/">MinGW</a>, the preferred directory
+ <p align="left">For Windows-like implementations, including <a href="http://www.cygwin.com/">Cygwin</a> and <a href="http://www.mingw.org/">MinGW</a>, the preferred directory
separator is a single backslash.<i>--end note</i>]</p>
</blockquote>
<pre>path&amp; operator/=(const path&amp; p);</pre>
@@ -919,7 +984,7 @@ compliant iterator. The iterator's value type is required to be <code>char</code
<p>Appends the contents [<code>begin</code>,<code>end</code>)
or <code>source</code> to <code>pathname</code>. If the contents are in the
generic format, they are converted to the native format. [<i>Note:</i> For
- POSIX and Windows based implementations, the generic format is already
+ ISO/IEC 9945 and Windows based implementations, the generic format is already
acceptable as a native format, so no generic to native conversion is
performed. <i>--end note</i>]</p>
</blockquote>
@@ -929,9 +994,34 @@ compliant iterator. The iterator's value type is required to be <code>char</code
<p><i>Returns: </i><code>*this</code></p>
</blockquote>
-<h3> <a name="path-modifiers"> <code>
-<font size="4">path</font></code> modifiers</a></h3>
-<pre>void <a name="path-clear">clear</a>();</pre>
+<h3><a name="path-concatenation"><code>path</code> concatenation</a></h3>
+<pre>path&amp; operator+=(const path&amp; x);
+path&amp; operator+=(const string_type&amp; x);
+path&amp; operator+=(const value_type* x);
+path&amp; operator+=(value_type x);
+template &lt;class Source&gt;
+ path&amp; operator+=(Source const&amp; x);
+template &lt;class CharT&gt;
+ path&amp; operator+=(CharT x);
+template &lt;class Source&gt;
+ path&amp; concat(Source const&amp; x, const codecvt_type&amp; cvt);
+template &lt;class InputIterator&gt;
+ path&amp; concat(InputIterator begin, InputIterator end);
+template &lt;class InputIterator&gt;
+ path&amp; concat(InputIterator begin, InputIterator end, const codecvt_type&amp; cvt);</pre>
+<blockquote><p><i>Postcondition:</i> <code>native() == prior_native + <i>effective-argument</i></code>,
+ where <code>prior_native</code> is <code>native()</code> prior to the call to <code>operator+=</code>,
+ and <code><i>effective-argument</i></code> is:</p>
+ <ul><li><code>x.native()</code> if <code>x</code> is present and is <code>const path&amp;</code>, otherwise</li>
+ <li><code>s</code>, where <code>s</code> is
+ <code>std::basic_string&lt;typename std::iterator_traits&lt;InputIterator&gt;::value_type&gt;<br>s(begin, end)</code>,
+ if <code>begin</code> and <code>end</code> arguments are present, otherwise</li>
+ <li><code>x</code>.</li></ul><p>If the value type of <code><i>effective-argument</i></code> would not be <code>path::value_type</code>, the actual argument or argument range is first
+ converted so that <code><i>effective-argument</i></code> has value type <code>path::value_type</code>.</li> </p>
+ <p><i>Returns: </i><code>*this</code></p>
+ </blockquote>
+<h3><a name="path-modifiers"> <code>
+path</code> modifiers</a></h3><pre>void <a name="path-clear">clear</a>();</pre>
<blockquote>
<p><i>Postcondition:</i> <code>this-&gt;empty()</code> is true.</p>
</blockquote>
@@ -939,39 +1029,39 @@ compliant iterator. The iterator's value type is required to be <code>char</code
<blockquote>
<p><i>Effects:</i> The contained pathname is converted to the preferred native
format. [<i>Note:</i> On Windows, the effect is to replace slashes with
- backslashes. On POSIX, there is no effect. <i>-- end note</i>]</p>
+ backslashes. On ISO/IEC 9945, there is no effect. <i>-- end note</i>]</p>
<p><i>Returns:</i> <code>*this</code></p>
</blockquote>
<pre>path&amp; <a name="path-remove_filename">remove_filename</a>();</pre>
<blockquote>
<p><i>Returns: </i>As if, <code>*this = parent_path();</code></p>
- <p>[<i>Note:</i> This function is needed to efficiently implement <code>
- directory_iterator</code>. It is exposed to allow additional uses. The actual
+ <p>[<i>Note:</i> This function is needed to efficiently implement <code>directory_iterator</code>. It is exposed to allow additional uses. The actual
implementation may be much more efficient than <code>*this = parent_path()</code>&nbsp; <i>-- end
note</i>]</p>
</blockquote>
<pre>path&amp; <a name="path-replace_extension">replace_extension</a>(const path&amp; new_extension = path());</pre>
<blockquote>
- <p><i>Postcondition: </i> <code>extension() == <i>replacement</i></code>,
- where <code><i>replacement</i></code> is <code>new_extension</code> if <code>
- new_extension.empty() || new_extension[0] ==</code> the dot character,
- otherwise <code><i>replacement</i></code> is the dot character followed by
- <code>new_extension</code>.</p>
+ <p><i>Effects:</i></p>
+ <ul>
+ <li>Any existing <code>extension()</code> is removed from the stored path,
+ then</li>
+ <li>iff
+ <code>new_extension</code> is not empty and does not begin with a dot
+ character, a dot character is appended to the stored path, then</li>
+ <li>
+ <code>new_extension</code> is appended to the stored path.</li>
+ </ul>
<p><i>Returns:</i> <code>*this</code></p>
</blockquote>
<pre><code>void <a name="path-swap">swap</a>(path&amp; rhs) noexcept;</code></pre>
<blockquote>
- <p><i>Effects:</i>
- Swaps the contents of the two paths.</p>
- <p><i>Complexity: </i>
- constant time.</p>
+ <p><i>Effects:</i> Swaps the contents of the two paths.</p>
+ <p><i>Complexity: </i>constant time.</p>
</blockquote>
-<h3> <a name="path-native-format-observers"><code><font size="4">path</font></code>
-native format observers</a></h3>
-<p>The string returned by all native format observers is in the
-<a href="#native-pathname-format">native pathname format</a>.</p>
+<h3> <a name="path-native-format-observers"><code><font size="4">path</font></code> native format observers</a></h3>
+<p>The string returned by all native format observers is in the <a href="#native-pathname-format">native pathname format</a>.</p>
<pre>const string_type&amp; <a name="native">native</a>() const noexcept;</pre>
<blockquote>
<p><i>Returns:</i> <code>pathname</code>.</p>
@@ -984,8 +1074,7 @@ native format observers</a></h3>
String <a name="string-template">string</a>(const codecvt_type&amp; cvt=codecvt()) const;</pre>
<blockquote>
<p><i>Returns:</i> <code>pathname</code>.</p>
-<p><i>Remarks:</i> If <code>string_type</code> is a different type than <code>
-String</code>, conversion is performed by <code>cvt</code>.</p>
+<p><i>Remarks:</i> If <code>string_type</code> is a different type than <code>String</code>, conversion is performed by <code>cvt</code>.</p>
</blockquote>
<pre>const string <a name="string">string</a>(const codecvt_type&amp; cvt=codecvt()) const;
const wstring <a name="wstring">wstring</a>(const codecvt_type&amp; cvt=codecvt()) const;
@@ -996,25 +1085,19 @@ const u32wstring <a name="u32wstring">u32wstring</a>() const; </pre>
<p><i>Remarks:</i> If <code>string_type</code> is a different type than
function's return type, conversion is performed by <code>cvt</code>.</p>
<p>If <code>string_type</code> is the same type as the
-function's return type, the function is permitted to return by <code>const&amp;</code>
-rather than <code>const</code> value. [<i>Note:</i> For POSIX, this occurs for
-<code>string()</code>, for Windows, <code>wstring()</code>. <i>--end note</i>]</p>
-</blockquote>
-
-<h3> <a name="path-generic-format-observers"><code><font size="4">path</font></code>
-generic format observers</a></h3>
-<p>The string returned by all generic format observers is in the
-<a href="#generic-pathname-format">generic pathname format</a>.</p>
-<p>[<i>Note:</i> For POSIX, no conversion occurs, since the native format and
-generic format are the same. For Windows, backslashes are converted to slashes
-<i>--end note</i>]</p>
+function's return type, the function is permitted to return by <code>const&amp;</code> rather than <code>const</code> value. [<i>Note:</i> For
+ISO/IEC 9945, this occurs for <code>string()</code>, for Windows, <code>wstring()</code>. <i>--end note</i>]</p>
+</blockquote>
+
+<h3> <a name="path-generic-format-observers"><code><font size="4">path</font></code> generic format observers</a></h3>
+<p>The string returned by all generic format observers is in the <a href="#generic-pathname-format">generic pathname format</a>.</p>
+<p>[<i>Note:</i> For ISO/IEC 9945, no conversion occurs, since the native format and
+generic format are the same. For Windows, backslashes are converted to slashes <i>--end note</i>]</p>
<pre>template &lt;class String&gt;
String <a name="generic_string-template">generic_string</a>(const codecvt_type&amp; cvt=codecvt()) const;</pre>
<blockquote>
<p><i>Returns:</i> <code>pathname</code>.</p>
-<p><i>Remarks:</i> If <code>string_type</code> is a different type than <code>
-String</code>, conversion is performed by
-<code>cvt</code>.</p>
+<p><i>Remarks:</i> If <code>string_type</code> is a different type than <code>String</code>, conversion is performed by <code>cvt</code>.</p>
</blockquote>
<pre>const string <a name="generic_string">generic_string</a>(const codecvt_type&amp; cvt=codecvt()) const;
const wstring <a name="generic_wstring">generic_wstring</a>(const codecvt_type&amp; cvt=codecvt()) const;
@@ -1026,28 +1109,39 @@ const u32wstring <a name="generic_u32wstring">generic_u32wstring</a>() const; </
function's return type, conversion is performed by <code>cvt</code>.</p>
<p>If <code>string_type</code> is of the same type as the
function's return type, and the generic format is the same as the native format,
-the function is permitted to return by <code>const&amp;</code> rather than <code>
-const</code> value. [<i>Note:</i> For POSIX, this occurs for <code>string()</code>.
-It never occurs for Windows, because backslashes must be converted to slashes.
-<i>--end note</i>]</p>
-</blockquote>
-
-<h3> <a name="path-decomposition"> <code><font size="4">path</font></code>
-decomposition</a></h3>
-<p><span style="background-color: #E0E0E0"><i>See the
-<a href="#Path-decomposition-table">Path decomposition table</a> for examples
-for values returned by decomposition functions. The
-<a href="tutorial.html#Using-path-decomposition">Tutorial</a> may also be
+the function is permitted to return by <code>const&amp;</code> rather than <code>const</code> value. [<i>Note:</i> For
+ISO/IEC 9945, this occurs for <code>string()</code>.
+It never occurs for Windows, because backslashes must be converted to slashes. <i>--end note</i>]</p>
+</blockquote>
+
+<h3> <a name="path-compare"><code>path</code> compare</a></h3>
+<pre>int compare(const path&amp; p) const noexcept;</pre>
+<blockquote>
+ <p><i>Returns:</i> A value less than 0 if the elements of <code>*this</code> are lexicographically less than the elements of <code>p</code>, otherwise a
+ value greater than 0 if the elements of <code>*this</code> are
+ lexicographically greater than the elements of <code>p</code>, otherwise 0.</p>
+ <p>Remark: The elements are determined as if by iteration over the half-open
+ range [<code>begin()</code>, <code>end()</code>) for <code>*this</code> and&nbsp; <code>p</code>.</p>
+</blockquote>
+<pre>int compare(const std::string&amp; s) const</pre>
+<blockquote>
+ <p><i>Returns:</i> <code>compare(path(s))</code>.</p>
+</blockquote>
+<pre>int compare(const value_type* s) const</pre>
+<blockquote>
+ <p><i>Returns:</i> <code>compare(path(s))</code>.</p>
+</blockquote>
+<h3> <a name="path-decomposition"> <code><font size="4">path</font></code> decomposition</a></h3>
+<p><span style="background-color: #E0E0E0"><i>See the <a href="#Path-decomposition-table">Path decomposition table</a> for examples
+for values returned by decomposition functions. The <a href="tutorial.html#Using-path-decomposition">Tutorial</a> may also be
helpful.</i></span></p>
<pre>path <a name="path-root_name">root_name</a>() const;</pre>
<blockquote>
-<p><i>Returns:</i> <i>root-name,</i> if <code>pathname</code> includes <i>
-root-name</i>, otherwise <code>path()</code>. </p>
+<p><i>Returns:</i> <i>root-name,</i> if <code>pathname</code> includes <i>root-name</i>, otherwise <code>path()</code>. </p>
</blockquote>
<pre>path <a name="path-root_directory">root_directory</a>() const;</pre>
<blockquote>
-<p><i>Returns:</i> <i>root-directory</i>, if <code>pathname</code> includes <i>
-root-directory</i>, otherwise <code>path()</code>.</p>
+<p><i>Returns:</i> <i>root-directory</i>, if <code>pathname</code> includes <i>root-directory</i>, otherwise <code>path()</code>.</p>
<p>If <i>root-directory</i> is composed of <i>slash name</i>, <i>slash</i> is
excluded from the returned string.</p>
</blockquote>
@@ -1057,17 +1151,13 @@ excluded from the returned string.</p>
</blockquote>
<pre>path <a name="path-relative_path">relative_path</a>() const;</pre>
<blockquote>
-<p><i>Returns:</i> A <code>path</code> composed from <code>pathname</code>, if <code>
-!empty()</code>, beginning
+<p><i>Returns:</i> A <code>path</code> composed from <code>pathname</code>, if <code>!empty()</code>, beginning
with the first <i>filename</i> after <i>root-path</i>. Otherwise, <code>path()</code>.</p>
</blockquote>
<pre>path <a name="path-parent_path">parent_path</a>() const;</pre>
<blockquote>
- <p><i>Returns:</i> <code>(empty() || begin() == --end()) ? path() : <i>pp</i></code>, where
- <code><i>pp</i></code> is constructed as if by
- starting with an empty <code>path</code> and successively applying <code>
- operator/=</code> for each element in the range <code>begin()</code>, <code>
- --end()</code>.</p>
+ <p><i>Returns:</i> <code>(empty() || begin() == --end()) ? path() : <i>pp</i></code>, where <code><i>pp</i></code> is constructed as if by
+ starting with an empty <code>path</code> and successively applying <code>operator/=</code> for each element in the range <code>begin()</code>, <code>--end()</code>.</p>
</blockquote>
<pre>path <a name="path-filename">filename</a>() const;</pre>
<blockquote>
@@ -1084,8 +1174,7 @@ with the first <i>filename</i> after <i>root-path</i>. Otherwise, <code>path()</
consist solely of one or to two dots, returns
the substring of <code>p.filename()</code> starting at its beginning and
ending at the last dot (the dot is not included). Otherwise,
- returns <code>
- p.filename()</code>.</p>
+ returns <code>p.filename()</code>.</p>
<p>[<i>Example:</i></p>
<blockquote>
<pre><code>std::cout &lt;&lt; path(&quot;/foo/bar.txt&quot;).stem();</code> // outputs &quot;<code>bar</code>&quot;
@@ -1103,8 +1192,7 @@ for (; !p.extension().empty(); p = p.stem())
<p><i>Returns:</i> if <code>p.filename()</code> contains a dot but does not
consist solely of one or to two dots, returns
the substring of <code>p.filename()</code> starting at the rightmost dot
- and ending at the path's end. Otherwise, returns an empty <code>path</code>
- object. </p>
+ and ending at the path's end. Otherwise, returns an empty <code>path</code> object. </p>
<p><i>Remarks:</i> Implementations are permitted but not required to define additional
behavior for file systems which append additional elements to extensions, such
as alternate data streams or partitioned dataset names.</p>
@@ -1114,9 +1202,7 @@ for (; !p.extension().empty(); p = p.stem())
</blockquote>
<p> <i>--end example</i>]</p>
<p>[<i>Note:<b> </b></i>The dot is included in the return value so that
- it is possible to distinguish between no extension and an empty extension. See
- <a href="http://permalink.gmane.org/gmane.comp.lib.boost.devel/199744">
- http://permalink.gmane.org/gmane.comp.lib.boost.devel/199744</a> for more
+ it is possible to distinguish between no extension and an empty extension. See <a href="http://permalink.gmane.org/gmane.comp.lib.boost.devel/199744">http://permalink.gmane.org/gmane.comp.lib.boost.devel/199744</a> for more
extensive rationale.&nbsp; <i>-- end note</i>]</p>
</blockquote>
<h3> <a name="path-query"> <code><font size="4">path</font></code> query</a></h3>
@@ -1158,11 +1244,8 @@ for (; !p.extension().empty(); p = p.stem())
</blockquote>
<pre>bool <a name="path-is_absolute">is_absolute</a>() const;</pre>
<blockquote>
- <p><i>Returns:</i> <code>true</code>
- if the elements of <code>root_path()</code> uniquely identify a directory, else <code>false</code>.</p>
- <p>[<i>Note:</i> On POSIX,<code>
- path(&quot;/foo&quot;).is_absolute()</code> returns <code>true</code>. On Windows, <code>
- path(&quot;/foo&quot;).is_absolute()</code> returns <code>false</code>. <i>--end note</i>]</p>
+ <p><i>Returns:</i> <code>true</code> if the elements of <code>root_path()</code> uniquely identify a directory, else <code>false</code>.</p>
+ <p>[<i>Note:</i> On ISO/IEC 9945,<code> path(&quot;/foo&quot;).is_absolute()</code> returns <code>true</code>. On Windows, <code>path(&quot;/foo&quot;).is_absolute()</code> returns <code>false</code>. <i>--end note</i>]</p>
</blockquote>
<pre>bool <a name="path-is_relative">is_relative</a>() const;</pre>
<blockquote>
@@ -1170,16 +1253,18 @@ for (; !p.extension().empty(); p = p.stem())
</blockquote>
<h3> <a name="path-iterators"> <code>
<font size="4">path</font></code> iterators</a></h3>
+<p> Path iterators iterate over the elements of the stored pathname.</p>
<p> A <code>path::iterator</code> is a constant iterator satisfying all
the requirements of a bidirectional iterator (C++ Std, 24.1.4 Bidirectional
-iterators [lib.bidirectional.iterators]). Its <code>value_type</code> is <code>
-path</code>.</p>
+iterators [lib.bidirectional.iterators]). Its <code>value_type</code> is <code>path</code>.</p>
<p>Calling any non-const member function of a <code>path</code> object
invalidates all iterators referring to elements of that object.</p>
<p> The forward traversal order is as follows:</p>
<ul>
<li>The <i>root-name</i> element, if present.</li>
- <li>The <i>root-directory</i> element, if present.</li>
+ <li>The <i>root-directory</i> element, if present, in the generic format. <i>
+ [note:</i> the generic format is required to ensure lexicographical
+ comparison works correctly. <i>-- end note</i>]</li>
<li>Each successive <i>filename</i> element, if present.</li>
<li><i>Dot</i>, if one or more trailing non-root <i>slash</i>
characters are present.</li>
@@ -1199,8 +1284,7 @@ path</code>.</p>
<blockquote>
<p><i>Effects:</i> Stores <code>loc</code> as the default locale for all
objects of type <code>path</code>.</p>
- <p><i>Returns:</i> The previous default locale for all objects of type <code>
- path</code>.</p>
+ <p><i>Returns:</i> The previous default locale for all objects of type <code>path</code>.</p>
</blockquote>
<pre>static const codecvt_type&amp; <a name="path-codecvt">codecvt</a>();</pre>
<blockquote>
@@ -1208,13 +1292,11 @@ path</code>.</p>
all objects of type <code>path</code>.</p>
</blockquote>
-$if $TARGET; == BOOST
+
<h3> <a name="path-deprecated-functions"><code><font size="4"> path</font></code> deprecated functions</a></h3>
-<p> Several member functions from previous versions of <code>class path</code>
-have been deprecated, either because they have been renamed or because the
+<p> Several member functions from previous versions of <code>class path</code> have been deprecated, either because they have been renamed or because the
functionality is no longer desirable or has become obsolete.</p>
-<p> Deprecated functions available by default; will be suppressed if <code>
-BOOST_FILESYSTEM_NO_DEPRECATED</code> is defined:</p>
+<p> Deprecated functions available by default; will be suppressed if <code>BOOST_FILESYSTEM_NO_DEPRECATED</code> is defined:</p>
<blockquote>
<pre>path&amp; remove_leaf() { return remove_filename(); }
path leaf() const { return filename(); }
@@ -1222,10 +1304,9 @@ path branch_path() const { return parent_path(); }
bool has_leaf() const { return !m_path.empty(); }
bool has_branch_path() const { return !parent_path().empty(); }</pre>
</blockquote>
-<p> Deprecated functions not available by default; will be supplied if <code>
-BOOST_FILESYSTEM_DEPRECATED</code> is defined:</p>
+<p> Deprecated functions not available by default; will be supplied if <code>BOOST_FILESYSTEM_DEPRECATED</code> is defined:</p>
<blockquote>
- <pre>const std::string file_string() const { return native_string(); }
+<pre>const std::string file_string() const { return native_string(); }
const std::string directory_string() const { return native_string(); }
const std::string native_file_string() const { return native_string(); }
const std::string native_directory_string() const { return native_string(); }
@@ -1233,23 +1314,14 @@ const string_type external_file_string() const { return native(); }
const string_type external_directory_string() const { return native(); }</pre>
</blockquote>
-$endif
+<h3> <a name="path-non-member-functions"> <code><font size="4">path</font></code> non-member functions</a></h3>
-<h3> <a name="path-non-member-functions"> <code><font size="4">path</font></code>
-non-member functions</a></h3>
-<pre>void swap( path&amp; lhs, path&amp; rhs )</pre>
-<blockquote>
- <p><i>Effects: </i><code>
- lhs.swap(rhs)</code>.</p>
-</blockquote>
<pre>bool lexicographical_compare(path::iterator first1, path::iterator last1,
- path::iterator first2, path::iterator last2)</pre>
+ path::iterator first2, path::iterator last2);</pre>
<blockquote>
- <p><i>Returns:</i> <code>true</code> if the sequence of <code>native()</code>
- strings for the elements defined by the range <code>[first1,last1)</code> is
+ <p><i>Returns:</i> <code>true</code> if the sequence of <code>native()</code> strings for the elements defined by the half-open range <code>[first1,last1)</code> is
lexicographically less than the sequence of <code>native()</code> strings for
- the elements defined by the range <code>[first2,last2)</code>. Returns <code>
- false</code> otherwise.</p>
+ the elements defined by the half-open range <code>[first2,last2)</code>. Returns <code>false</code> otherwise.</p>
<p><i>Remarks:</i> If two sequences have the same number of elements and their
corresponding elements are equivalent, then neither sequence is
lexicographically less than the other. If one sequence is a prefix of the
@@ -1257,28 +1329,21 @@ non-member functions</a></h3>
sequence. Otherwise, the lexicographical comparison of the sequences yields
the same result as the comparison of the first corresponding pair of elements
that are not equivalent.</p>
- <pre> for ( ; first1 != last1 &amp;&amp; first2 != last2 ; ++first1, ++first2) {
- if (first1-&gt;native() &lt; first2-&gt;native()) return true;
- if (first2-&gt;native() &lt; first1-&gt;native()) return false;
- }
- return first1 == last1 &amp;&amp; first2 != last2;</pre>
- <p>[<i>Note:</i> A <code>path</code> aware<code> lexicographical_compare</code>
- is provided to avoid infinite recursion in <code>std::lexicographical_compare</code>
- due to the <code>path</code> iterator's value type itself being <code>path</code>.
- <i>--end note</i>]</p>
+ <p>[<i>Note:</i> A <code>path</code> aware <code>lexicographical_compare</code> algorithm is provided for historical reasons. <i>--end note</i>]</p>
+</blockquote>
+<pre>void swap( path&amp; lhs, path&amp; rhs )</pre>
+<blockquote>
+ <p><i>Effects: </i><code>lhs.swap(rhs)</code>.</p>
</blockquote>
<pre>std::size_t <a name="hash_value">hash_value</a> (const path&amp; p);</pre>
<blockquote>
<p><i>Returns:</i> A hash value for the path <code>p</code>. If
- for two paths, <code>p1 == p2</code> then
- <code>hash_value(p1) == hash_value(p2)</code>.</p>
- <p>This allows paths to be used with
- <a href="../../../functional/hash/index.html">Boost.Hash</a>.</p>
+ for two paths, <code>p1 == p2</code> then <code>hash_value(p1) == hash_value(p2)</code>.</p>
+ <p>This allows paths to be used with <a href="../../functional/hash/index.html">Boost.Hash</a>.</p>
</blockquote>
<pre>bool operator&lt; (const path&amp; lhs, const path&amp; rhs);</pre>
<blockquote>
- <p><i>Returns:</i> <code>return lexicographical_compare(lhs.begin(), lhs.end(),
- rhs.begin(), rhs.end())</code>.</p>
+ <p><i>Returns:</i> <code>return lhs.compare(rhs.begin) &lt; 0</code>.</p>
</blockquote>
<pre>bool operator&lt;=(const path&amp; lhs, const path&amp; rhs);</pre>
<blockquote>
@@ -1295,22 +1360,15 @@ non-member functions</a></h3>
<pre>bool operator==(const path&amp; lhs, const path&amp; rhs);</pre>
<blockquote>
<p><i>Returns:</i> <code>!(lhs &lt; rhs) &amp;&amp; !(rhs &lt; lhs)</code>.</p>
- <p>[<i>Note:</i> Actual implementations may use an equivalent, but more
- efficient, algorithm. <i>--end note</i>]</p>
<p>[<i>Note:</i> <a name="Path-equality">Path equality</a> and path
equivalence have different semantics.</p>
- <p>Equality is determined by the <code>path</code>
- non-member <code>operator==</code>, which considers the two path's lexical
- representations only. Thus <code>path(&quot;foo&quot;) == &quot;bar&quot;</code> is never
- <code>true</code>.</p>
- <p>Equivalence is determined by the <a href="#equivalent"><code>equivalent()</code></a>
- non-member function, which determines if two paths <a href="#Path">resolve</a> to the same file system entity.
- Thus <code>equivalent(&quot;foo&quot;, &quot;bar&quot;)</code> will be <code>true</code>
- when both paths resolve to the same file.</p>
+ <p>Equality is determined by the <code>path</code> non-member <code>operator==</code>, which considers the two path's lexical
+ representations only. Thus <code>path(&quot;foo&quot;) == &quot;bar&quot;</code> is never <code>true</code>.</p>
+ <p>Equivalence is determined by the <a href="#equivalent"><code>equivalent()</code></a> non-member function, which determines if two paths <a href="#Path">resolve</a> to the same file system entity.
+ Thus <code>equivalent(&quot;foo&quot;, &quot;bar&quot;)</code> will be <code>true</code> when both paths resolve to the same file.</p>
<p>Programmers wishing to determine if two paths are &quot;the same&quot; must decide if
&quot;the same&quot; means &quot;the same representation&quot; or &quot;resolve to the same actual
- file&quot;, and choose the appropriate function accordingly. <i>
- -- end note</i>]</p>
+ file&quot;, and choose the appropriate function accordingly. <i>-- end note</i>]</p>
</blockquote>
<pre>bool operator!=(const path&amp; lhs, const path&amp; rhs);</pre>
<blockquote>
@@ -1330,29 +1388,25 @@ std::basic_ostream&lt;Char, Traits&gt;&amp; operator&lt;&lt;(std::basic_ostream&
const path&amp; p)
</pre>
<blockquote>
- <p><i>Effects:</i>&nbsp;
- <code>os &lt;&lt; <a href="../../../io/doc/quoted_manip.html">
- boost::io::quoted</a>(p.string&lt;std::basic_string&lt;Char&gt;&gt;(), static_cast&lt;Char&gt;('&amp;'));</code></p>
- <p><i>Returns:</i>
- <code>os</code></p>
+ <p><i>Effects:</i>&nbsp; <code>os &lt;&lt; <a href="../../io/doc/quoted_manip.html">boost::io::quoted</a>(p.string&lt;std::basic_string&lt;Char&gt;&gt;(), static_cast&lt;Char&gt;('&amp;'));</code></p>
+ <p><i>Returns:</i> <code>os</code></p>
</blockquote>
<pre>template &lt;class Char, class Traits&gt;
inline std::basic_istream&lt;Char, Traits&gt;&amp; operator&gt;&gt;(std::basic_istream&lt;Char, Traits&gt;&amp; is,
path&amp; p)
</pre>
<blockquote>
- <p><i>Effects:&nbsp; </i>
- <code>&nbsp;std::basic_string&lt;Char&gt; str;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; is &gt;&gt;
- <a href="../../../io/doc/quoted_manip.html">boost::io::quoted</a>(str,
- static_cast&lt;Char&gt;('&amp;'));<br>
+ <p><i>Effects:&nbsp; </i><code>&nbsp;std::basic_string&lt;Char&gt; str;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; is &gt;&gt; <a href="../../io/doc/quoted_manip.html">boost::io::quoted</a>(str, static_cast&lt;Char&gt;('&amp;'));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p = str;</code></p>
- <p><i>Returns:</i>
- <code>is</code></p>
+ <p><i>Returns:</i> <code>is</code></p>
</blockquote>
<h3><a name="Class-filesystem_error">Class <code>filesystem_error</code></a></h3>
-<pre>$NAMESPACE_BEGIN;
- class basic_filesystem_error : public system_error
+<pre>namespace boost
+{
+ namespace filesystem
+ {
+ class filesystem_error : public system_error
{
public:
filesystem_error();
@@ -1374,10 +1428,11 @@ inline std::basic_istream&lt;Char, Traits&gt;&amp; operator&gt;&gt;(std::basic_i
const char * <a href="#filesystem_error-what">what</a>() const;
};
-$NAMESPACE_END;</pre>
-<p>The class template <code>basic_filesystem_error</code> defines the type of
+ } // namespace filesystem
+} // namespace boost</pre>
+<p>The class template <code>filesystem_error</code> defines the type of
objects thrown as exceptions to report file system errors from functions described in this
-$WHAT;.</p>
+reference documentation.</p>
<h4> <a name="filesystem_error-members"> <code>filesystem_error</code> members</a></h4>
<pre><a name="filesystem_error-2-arg">filesystem_error</a>(const std::string&amp; what_arg, error_code ec);</pre>
<blockquote>
@@ -1427,8 +1482,7 @@ $WHAT;.</p>
</tr>
<tr>
<td width="18%" valign="top"><code>path1()</code></td>
- <td width="82%">Reference to stored copy of
- <code>p1</code></td>
+ <td width="82%">Reference to stored copy of <code>p1</code></td>
</tr>
<tr>
<td width="18%" valign="top"><code>path2().empty()</code></td>
@@ -1457,13 +1511,11 @@ $WHAT;.</p>
</tr>
<tr>
<td width="18%"><code>path1()</code></td>
- <td width="82%">Reference to stored copy of
- <code>p1</code></td>
+ <td width="82%">Reference to stored copy of <code>p1</code></td>
</tr>
<tr>
<td width="18%"><code>path2()</code></td>
- <td width="82%">Reference to stored copy of
- <code>p2</code></td>
+ <td width="82%">Reference to stored copy of <code>p2</code></td>
</tr>
</table>
</blockquote>
@@ -1480,8 +1532,7 @@ $WHAT;.</p>
<pre>const char* <a name="filesystem_error-what">what</a>() const;</pre>
<blockquote>
<p><i>Returns: </i>A string containing <code>runtime_error::what()</code>. The exact format is unspecified.
- Implementations are encouraged but not required to include <code>
- path1.native_string()</code>if not empty, <code>path2.native_string()</code>if
+ Implementations are encouraged but not required to include <code>path1.native_string()</code>if not empty, <code>path2.native_string()</code>if
not empty, and <code>system_error::what()</code> strings in the returned
string.</p>
</blockquote>
@@ -1495,8 +1546,7 @@ $WHAT;.</p>
<tr>
<td><code>status_error</code></td>
<td>An error occurred while trying to obtain the status of the file. The
- file simply not being found is <b><u>not</u></b> considered a status error.
- </td>
+ file simply not being found is <b><u>not</u></b> considered a status error. </td>
</tr>
<tr>
<td><code>file_not_found</code></td>
@@ -1538,17 +1588,16 @@ $WHAT;.</p>
</table>
<h3><a name="Enum-perms">Enum perms</a></h3>
<p>This enum specifies bitmask constants uses to identify file
-permissions. The POSIX standard specifies actual values, and those values have
-been adopted here because they are very familiar and ingrained for many POSIX
+permissions. The ISO/IEC 9945 standard specifies actual values, and those values have
+been adopted here because they are very familiar and ingrained for many ISO/IEC
+9945
users.</p>
<blockquote>
<p>Caution: Operating systems do not always support permissions as described in
the table.</p>
-<p>There is much variation in the meaning of <code><a href="#sticky_bit">
-sticky_bit</a></code>; do not use it unless you understand what it means for
+<p>There is much variation in the meaning of <code><a href="#sticky_bit">sticky_bit</a></code>; do not use it unless you understand what it means for
your operating system.</p>
-<p>There is much variation in how operating systems treat symlinks. See <code>
-<a href="#symlink_perms">symlink_perms</a></code>.</p>
+<p>There is much variation in how operating systems treat symlinks. See <code><a href="#symlink_perms">symlink_perms</a></code>.</p>
<p>Windows: All permissions except write are currently ignored. There is only a
single write permission; setting write permission for owner, group, or others
sets write permission for all, and removing write permission for owner, group,
@@ -1559,15 +1608,14 @@ or others removes write permission for all. </p>
<td><b>Name</b></td>
<td align="center"><b>Value<br>
(octal)</b></td>
- <td align="center"><b>POSIX<br>
+ <td align="center"><b>ISO/IEC 9945<br>
macro</b></td>
<td><b>Definition or notes</b></td>
</tr>
<tr><td>
- <p dir="ltr"><code>no_perms</code></td><td><code>0</code></td><td></td>
- <td>There are no permissions set for the file. Note: <code>file_not_found</code> is
- <code>no_perms</code> rather than <code>perms_not_known</code></td>
+ <p><code>no_perms</code></td><td><code>0</code></td><td></td>
+ <td>There are no permissions set for the file. Note: <code>file_not_found</code> is <code>no_perms</code> rather than <code>perms_not_known</code></td>
</tr>
<tr><td><code>owner_read</code></td><td><code>0400</code></td><td> <code>S_IRUSR</code></td>
<td> Read permission, owner</td>
@@ -1591,8 +1639,7 @@ or others removes write permission for all. </p>
<td> Execute/search permission, group</td>
</tr>
<tr><td><code>group_all</code></td><td><code>070</code></td><td> <code>S_IRWXG</code></td>
- <td> Read, write, execute/search by group; <code>group_read | group_write |
- group_exe</code></td>
+ <td> Read, write, execute/search by group; <code>group_read | group_write | group_exe</code></td>
</tr>
<tr><td><code>others_read</code></td><td><code>04</code></td><td> <code>S_IROTH</code></td>
<td> Read permission, others</td>
@@ -1614,7 +1661,7 @@ or others removes write permission for all. </p>
<tr><td><code>set_gid_on_exe</code></td><td><code>02000</code></td><td> <code>S_ISGID</code></td>
<td> Set-group-ID on execution</td>
</tr>
-<tr><td><code><a name="sticky_bit">sticky_bit</a> </code> </td><td><code>01000</code></td><td> <code>S_ISVTX</code></td>
+<tr><td><code><a name="sticky_bit">sticky_bit</a> </code></td><td><code>01000</code></td><td> <code>S_ISVTX</code></td>
<td> Meaning varies; see <a href="http://en.wikipedia.org/wiki/Sticky_bit">http:en.wikipedia.org/wiki/Sticky_bit</a></td>
</tr>
<tr><td><code><a name="perms_mask">perms_mask</a></code></td><td><code>07777</code></td><td> &nbsp;</td>
@@ -1625,8 +1672,8 @@ or others removes write permission for all. </p>
is created without specifying the permissions</td>
</tr>
<tr><td>
- <p dir="ltr"><code>add_perms</code></td><td><code>0x1000</code></td><td></td><td>
- <p dir="ltr"><code>permissions()</code> adds the argument permission bits to the
+ <p><code>add_perms</code></td><td><code>0x1000</code></td><td></td><td>
+ <p><code>permissions()</code> adds the argument permission bits to the
file's current bits</td>
</tr>
<tr><td><code>remove_perms</code></td><td><code>0x2000</code></td><td></td><td>
@@ -1634,16 +1681,17 @@ or others removes write permission for all. </p>
file's current bits</td>
</tr>
<tr><td><code><a name="symlink_perms">symlink_perms</a></code></td><td><code>0x4000</code></td><td></td><td>
- On POSIX <code>permissions()</code> resolves symlinks unless <code>symlink_perms</code>
- is specified.
+ On ISO/IEC 9945 <code>permissions()</code> resolves symlinks unless <code>symlink_perms</code> is specified.
Meaningless on Windows as <code>permissions()</code> never resolves symlinks.
- Meaningless on Mac OS X and some other BSD systems as <code>permissions()</code>
- always resolves symlinks. Get over it.</td>
+ Meaningless on Mac OS X and some other BSD systems as <code>permissions()</code> always resolves symlinks. Get over it.</td>
</tr>
</table>
<h3><a name="file_status">Class file_status</a></h3>
-<pre>$NAMESPACE_BEGIN;
+<pre>namespace boost
+{
+ namespace filesystem
+ {
class file_status
{
public:
@@ -1665,47 +1713,43 @@ or others removes write permission for all. </p>
void type(<a href="#file_type">file_type</a> ft) noexcept;
void permissions(<a href="#Enum-perms">perms</a> prms) noexcept;
};
-$NAMESPACE_END;</pre>
+ } // namespace filesystem
+} // namespace boost</pre>
<p>An object of type <code>file_status</code> stores information about the type
and permissions of a file.</p>
-<h4 dir="ltr"><a name="file_status-constructors"><code>file_status</code>
-constructors</a></h4>
+<h4><a name="file_status-constructors"><code>file_status</code> constructors</a></h4>
<pre>explicit file_status() noexcept;</pre>
<blockquote>
- <p><i>Postconditions:</i> <code>type() == status_error</code>, <code>
- permissions() == perms_not_known</code>.</p>
+ <p><i>Postconditions:</i> <code>type() == status_error</code>, <code>permissions() == perms_not_known</code>.</p>
</blockquote>
<pre>explicit file_status(<a href="#file_type">file_type</a> ft, <a href="#Enum-perms">perms</a> prms = perms_not_known) noexcept;</pre>
<blockquote>
- <p><i>Postconditions:</i> <code>type() == ft</code>, <code>permissions() ==
- prms</code>.</p>
+ <p><i>Postconditions:</i> <code>type() == ft</code>, <code>permissions() == prms</code>.</p>
</blockquote>
- <h4 dir="ltr"><a name="file_status-observers"><code>file_status</code>
- observers</a></h4>
+ <h4><a name="file_status-observers"><code>file_status</code> observers</a></h4>
<pre><a href="#file_type">file_type</a> type() const noexcept;</pre>
<blockquote>
- <p><i>Returns: </i>The value of <code>type()</code> specified by the <i>
- postconditions</i> of the most recent call to a constructor, operator=, or
- <code>type(file_type)</code> function.</p>
+ <p><i>Returns: </i>The value of <code>type()</code> specified by the <i>postconditions</i> of the most recent call to a constructor, operator=, or <code>type(file_type)</code> function.</p>
</blockquote>
<pre><a href="#Enum-perms">perms</a> permissions() const noexcept;</pre>
<blockquote>
- <p><i>Returns: </i>The value of <code>permissions()</code> specified by the <i>
- postconditions</i> of the most recent call to a constructor, operator=, or
- <code>permissions(perms)</code> function.</p>
+ <p><i>Returns: </i>The value of <code>permissions()</code> specified by the <i>postconditions</i> of the most recent call to a constructor, operator=, or <code>permissions(perms)</code> function.</p>
</blockquote>
-<h4 dir="ltr"><a name="file_status-modifiers"><code>file_status</code> modifiers</a></h4>
+<h4><a name="file_status-modifiers"><code>file_status</code> modifiers</a></h4>
<pre>void type(<a href="#file_type">file_type</a> ft) noexcept;</pre>
<blockquote>
- <p dir="ltr"><i>Postconditions:</i> <code>type() == ft</code>.</p>
+ <p><i>Postconditions:</i> <code>type() == ft</code>.</p>
</blockquote>
<pre>void permissions(<a href="#Enum-perms">perms</a> prms) noexcept;</pre>
<blockquote>
- <p dir="ltr"><i>Postconditions:</i> <code>permissions() == prms</code>.</p>
+ <p><i>Postconditions:</i> <code>permissions() == prms</code>.</p>
</blockquote>
<h3><a name="Class-directory_entry">Class <code>directory_entry</code></a></h3>
-<div dir="ltr">
-<pre>$NAMESPACE_BEGIN;
+<div>
+<pre>namespace boost
+{
+ namespace filesystem
+ {
class directory_entry
{
public:
@@ -1744,12 +1788,11 @@ constructors</a></h4>
mutable file_status m_symlink_status; // for exposition only; lstat()-like
};
-$NAMESPACE_END;</pre>
+ } // namespace filesystem
+} // namespace boost</pre>
</div>
<p>A <code>directory_entry</code> object stores a <code>path object</code>,
-a <code>file_status</code> object for non-symbolic link status, and a <code>
-file_status</code> object for symbolic link status. The <code>file_status</code>
-objects act as value caches.</p>
+a <code>file_status</code> object for non-symbolic link status, and a <code>file_status</code> object for symbolic link status. The <code>file_status</code> objects act as value caches.</p>
<blockquote>
<p>[<i>Note:</i> Because <code>status()</code>on a pathname may be a very expensive operation,
some operating systems provide status information as a byproduct of directory
@@ -1859,8 +1902,7 @@ systems that provide status as a by-product of directory iteration.</i></span></
<pre>file_status status() const;
file_status status(system::error_code&amp; ec) const;</pre>
<blockquote>
-<p><i>Effects:</i>
-As if,</p>
+<p><i>Effects:</i> As if,</p>
<blockquote>
<pre>if ( !status_known( m_status ) )
{
@@ -1871,66 +1913,56 @@ As if,</p>
</blockquote>
<p><i>Returns:</i> <code>m_status</code></p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>file_status symlink_status() const;
file_status symlink_status(system::error_code&amp; ec) const;</pre>
<blockquote>
<p>
- <i>Effects:</i>
-As if,</p>
+ <i>Effects:</i> As if,</p>
<blockquote>
<pre>if ( !status_known( m_symlink_status ) )
{
m_symlink_status = symlink_status(m_path<i>[, ec]</i>);
}</pre>
</blockquote>
- <p><i>Returns:</i> <code>
- m_symlink_status</code></p>
+ <p><i>Returns:</i> <code>m_symlink_status</code></p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>bool operator==(const directory_entry&amp; rhs);</pre>
<blockquote>
- <p><i>Returns:</i> <code>m_path ==
- rhs.m_path</code>.</p>
+ <p><i>Returns:</i> <code>m_path == rhs.m_path</code>.</p>
</blockquote>
<pre>bool operator!=(const directory_entry&amp; rhs);</pre>
<blockquote>
- <p><i>Returns:</i> <code>m_path !=
- rhs.m_path</code>.</p>
+ <p><i>Returns:</i> <code>m_path != rhs.m_path</code>.</p>
</blockquote>
<pre>bool operator&lt; (const directory_entry&amp; rhs);</pre>
<blockquote>
- <p><i>Returns:</i> <code>m_path &lt;
- rhs.m_path</code>.</p>
+ <p><i>Returns:</i> <code>m_path &lt; rhs.m_path</code>.</p>
</blockquote>
<pre>bool operator&lt;=(const directory_entry&amp; rhs);</pre>
<blockquote>
- <p><i>Returns:</i> <code>m_path &lt;=
- rhs.m_path</code>.</p>
+ <p><i>Returns:</i> <code>m_path &lt;= rhs.m_path</code>.</p>
</blockquote>
<pre>bool operator&gt; (const directory_entry&amp; rhs);</pre>
<blockquote>
- <p><i>Returns:</i> <code>m_path &gt;
- rhs.m_path</code>.</p>
+ <p><i>Returns:</i> <code>m_path &gt; rhs.m_path</code>.</p>
</blockquote>
<pre>bool operator&gt;=(const directory_entry&amp; rhs);</pre>
<blockquote>
- <p><i>Returns:</i> <code>m_path &gt;=
- rhs.m_path</code>.</p>
+ <p><i>Returns:</i> <code>m_path &gt;= rhs.m_path</code>.</p>
</blockquote>
<h3><a name="Class-directory_iterator">Class <code>directory_iterator</code></a></h3>
<p>Objects of type <code>directory_iterator</code> provide standard library
-compliant iteration over the contents of a directory. Also see class <code>
-<a href="#Class-recursive_directory_iterator">recursive_directory_iterator</a></code>.</p>
-<pre>$NAMESPACE_BEGIN;
+compliant iteration over the contents of a directory. Also see class <code><a href="#Class-recursive_directory_iterator">recursive_directory_iterator</a></code>.</p>
+<pre>namespace boost
+{
+ namespace filesystem
+ {
class directory_iterator
{
public:
@@ -1951,29 +1983,21 @@ compliant iteration over the contents of a directory. Also see class <code>
// C++ Std, 24.1.1 Input iterators [input.iterators]
};
-$NAMESPACE_END;</pre>
+ } // namespace filesystem
+} // namespace boost</pre>
<p> <code>directory_iterator</code> satisfies the requirements of an
input iterator (C++ Std, 24.2.1, Input iterators [input.iterators]).</p>
<p>A <code>directory_iterator</code> reads successive elements from the directory for
-which it was constructed, as if by calling <i>POSIX</i>
-<code>
-<a href="http://www.opengroup.org/onlinepubs/000095399/functions/readdir_r.html">readdir_r()</a></code>. After a <code>directory_iterator</code> is constructed, and every time
-<code>operator++</code> is called,
-it reads a directory element and stores information about it in a object of type <code>
-<a href="#Class-directory_entry">directory_entry</a></code>.
-<code>operator++</code> is not equality preserving; that is, <code>i == j</code> does not imply that
-<code>++i == ++j</code>. </p>
+which it was constructed, as if by calling <i>ISO/IEC 9945</i> <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/readdir_r.html">readdir_r()</a></code>. After a <code>directory_iterator</code> is constructed, and every time <code>operator++</code> is called,
+it reads a directory element and stores information about it in a object of type <code><a href="#Class-directory_entry">directory_entry</a></code>. <code>operator++</code> is not equality preserving; that is, <code>i == j</code> does not imply that <code>++i == ++j</code>. </p>
<blockquote>
<p>[<i>Note:</i> The practical consequence of not preserving equality is that directory iterators
can only be used for single-pass algorithms. <i>--end note</i>]</p>
</blockquote>
<p>If the end of the directory elements is reached, the iterator becomes equal to
-the end iterator value. The constructor <code>directory_iterator()</code>
-with no arguments always constructs an end iterator object, which is the only
-legitimate iterator to be used for the end condition. The result of <code>
-operator*</code> on an end iterator is not defined. For any other iterator value
-a <code>const directory_entry&amp;</code> is returned. The result of
-<code>operator-&gt;</code> on an end iterator is not defined. For any other iterator value a <code>const directory_entry*</code> is
+the end iterator value. The constructor <code>directory_iterator()</code> with no arguments always constructs an end iterator object, which is the only
+legitimate iterator to be used for the end condition. The result of <code>operator*</code> on an end iterator is not defined. For any other iterator value
+a <code>const directory_entry&amp;</code> is returned. The result of <code>operator-&gt;</code> on an end iterator is not defined. For any other iterator value a <code>const directory_entry*</code> is
returned. </p>
<p>Two end iterators are always equal. An end iterator is not equal to a non-end
iterator.</p>
@@ -1981,12 +2005,8 @@ iterator.</p>
<p><i><span style="background-color: #E0E0E0">The above wording is based on the
Standard Library's istream_iterator wording.</span></i></p>
</blockquote>
-<p>The result of calling the <code>path()</code> member of the <code>
-directory_entry</code> object obtained by dereferencing a <code>
-directory_iterator</code> is a reference to a <code>path</code>
-object composed of the directory argument from which the iterator was
-constructed with filename of the directory entry appended as if by <code>
-operator/=</code>. </p>
+<p>The result of calling the <code>path()</code> member of the <code>directory_entry</code> object obtained by dereferencing a <code>directory_iterator</code> is a reference to a <code>path</code> object composed of the directory argument from which the iterator was
+constructed with filename of the directory entry appended as if by <code>operator/=</code>. </p>
<p>Directory iteration shall not yield directory entries for the current (<i>dot</i>)
and parent (<i>dot dot</i>) directories.</p>
<p>The order of directory entries obtained by dereferencing successive
@@ -2001,11 +2021,8 @@ to avoid following symbolic links.</p>
<p>If a file is removed from or added to a directory after the
construction of a <code>directory_iterator</code> for the directory, it is
unspecified whether or not subsequent incrementing of the iterator will ever
-result in an iterator whose value is the removed or added directory entry. See
-<i>POSIX</i>
-<code>
-<a href="http://www.opengroup.org/onlinepubs/000095399/functions/readdir_r.html">readdir_r()</a></code>. <i>
---end note</i>]</p>
+result in an iterator whose value is the removed or added directory entry. See <i>
+ISO/IEC 9945</i> <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/readdir_r.html">readdir_r()</a></code>. <i>--end note</i>]</p>
</blockquote>
<h4><a name="directory_iterator-members"><code>directory_iterator</code> members</a></h4>
@@ -2025,13 +2042,9 @@ directory_iterator(</code>const path&amp; p, system::error_code&amp; ec<code>);<
<p><i>Effects:</i> Constructs a iterator representing the first
entry in the directory <code>p</code> resolves to, if any; otherwise, the end iterator.</p>
-<p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+<p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
-<p>[<i>Note:</i> To iterate over the current directory, use <code>
-directory_iterator(&quot;.&quot;)</code> rather than <code>directory_iterator(&quot;&quot;)</code>.
-<i>-- end note</i>]</p>
+<p>[<i>Note:</i> To iterate over the current directory, use <code>directory_iterator(&quot;.&quot;)</code> rather than <code>directory_iterator(&quot;&quot;)</code>. <i>-- end note</i>]</p>
</blockquote>
<pre>directory_iterator&amp; <a name="directory_iterator-increment">operator++</a>();
directory_iterator&amp; increment(system::error_code&amp; ec);</pre>
@@ -2041,16 +2054,17 @@ directory_iterator&amp; increment(system::error_code&amp; ec);</pre>
<p><i>Returns:</i> <code>*this</code>.</p>
-<p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+<p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<h3><a name="Class-recursive_directory_iterator">Class <code>recursive_directory_iterator</code></a></h3>
<p>Objects of type <code>recursive_directory_iterator</code> provide standard library
compliant iteration over the contents of a directory, including recursion into
its sub-directories.</p>
-<pre>$NAMESPACE_BEGIN;
+<pre>namespace boost
+{
+ namespace filesystem
+ {
class recursive_directory_iterator :
public iterator&lt;input_iterator_tag, directory_entry&gt;
{
@@ -2091,7 +2105,8 @@ its sub-directories.</p>
</b></i><a href="#symlink_option">symlink_option</a> m_options; <i><b>// for exposition only</b></i>
};
-$NAMESPACE_END;</pre>
+ } // namespace filesystem
+} // namespace boost</pre>
<p>The behavior of a <code>recursive_directory_iterator</code> is the same
as a <code>directory_iterator</code> unless otherwise specified.</p>
@@ -2119,23 +2134,15 @@ recursive_<code>directory_iterator(</code>const path&amp; p, system::error_code&
<p><i>Effects:</i>&nbsp; Constructs a iterator representing the first
entry in the directory <code>p</code> resolves to, if any; otherwise, the end iterator.</p>
-<p dir="ltr"><i>Postcondition: </i>Unless the end iterator was constructed,<i> </i>
-<code>level() == 0 &amp;&amp; no_push_pending() == false &amp;&amp; m_options == opt</code>.
-For the signature without a <code>symlink_option</code> argument, <code>opt</code>
-is assumed to be <code>symlink_option::none</code>.</p>
+<p><i>Postcondition: </i>Unless the end iterator was constructed,<i> </i><code>level() == 0 &amp;&amp; no_push_pending() == false &amp;&amp; m_options == opt</code>.
+For the signature without a <code>symlink_option</code> argument, <code>opt</code> is assumed to be <code>symlink_option::none</code>.</p>
-<p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+<p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
-<p>[<i>Note:</i> To iterate over the current directory, use <code>recursive_directory_iterator(&quot;.&quot;)</code> rather than
-<code>recursive_directory_iterator(&quot;&quot;)</code>.
-<i>-- end note</i>]</p>
+<p>[<i>Note:</i> To iterate over the current directory, use <code>recursive_directory_iterator(&quot;.&quot;)</code> rather than <code>recursive_directory_iterator(&quot;&quot;)</code>. <i>-- end note</i>]</p>
<p>[<i>Note:</i> By default, <code>recursive_directory_iterator</code> does not
-follow directory symlinks. To follow directory symlinks, specify <code>opt</code>
-as <code>symlink_option::recurse</code>
-<i>-- end note</i>]</p>
+follow directory symlinks. To follow directory symlinks, specify <code>opt</code> as <code>symlink_option::recurse</code> <i>-- end note</i>]</p>
</blockquote>
<pre>int level() const noexcept;</pre>
<blockquote>
@@ -2155,12 +2162,10 @@ recursive_directory_iterator&amp; increment(system::error_code&amp; ec);</pre>
except:</p>
<ul>
- <li dir="ltr">
+ <li>
-<p dir="ltr">if <code>!no_push_pending() &amp;&amp; is_directory(this-&gt;status())
-&amp;&amp; (!is_symlink(this-&gt;symlink_status()) || (m_options
-&amp; symlink_option::recurse) != 0)</code> then&nbsp; <code>m_level</code>
-is incremented and directory <code>(*this)-&gt;path()</code> is recursively iterated into.<br>
+<p>if <code>!no_push_pending() &amp;&amp; is_directory(this-&gt;status())
+&amp;&amp; (!is_symlink(this-&gt;symlink_status()) || (m_options &amp; symlink_option::recurse) != 0)</code> then&nbsp; <code>m_level</code> is incremented and directory <code>(*this)-&gt;path()</code> is recursively iterated into.<br>
&nbsp;</p>
</li>
@@ -2172,9 +2177,7 @@ is decremented and iteration of the parent directory resumes.</li>
<p><i>Returns:</i> <code>*this</code>.</p>
-<p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+<p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>void pop();</pre>
@@ -2196,11 +2199,8 @@ is decremented and iteration of the parent directory resumes.</li>
storage.</p>
<p>Operational functions access a file by resolving an
object of class <code>path</code> to a particular file in a file hierarchy. The
-path is resolved as if by the <i>POSIX</i>
-<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap04.html#tag_04_11">
-Pathname Resolution</a> mechanism.</p>
-<p>[<i>Note: </i>Because hardware failures, network failures,
-<a href="#Race-condition">file system races</a>, and many
+path is resolved as if by the <i>ISO/IEC 9945</i> <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap04.html#tag_04_11">Pathname Resolution</a> mechanism.</p>
+<p>[<i>Note: </i>Because hardware failures, network failures, <a href="#Race-condition">file system races</a>, and many
other kinds of errors occur frequently in file system operations, users should be aware
that any filesystem operational function, no matter how apparently innocuous, may encounter
an error.&nbsp;See <a href="#Error-reporting">Error reporting</a>. <i>-- end note</i>]</p>
@@ -2218,8 +2218,7 @@ an error.&nbsp;See <a href="#Error-reporting">Error reporting</a>. <i>-- end not
<tr>
<td align="center"><b><code>p.has_root_name()</code></b></td>
<td align="center"><code>return p</code></td>
- <td align="center"><code>return p.root_name() /
- absolute(base).root_directory()<br>
+ <td align="center"><code>return p.root_name() / absolute(base).root_directory()<br>
/ absolute(base).relative_path() / p.relative_path()</code></td>
</tr>
<tr>
@@ -2229,8 +2228,7 @@ an error.&nbsp;See <a href="#Error-reporting">Error reporting</a>. <i>-- end not
<td align="center"><code>return absolute(base) / p</code></td>
</tr>
</table>
- <p dir="ltr">[<i>Note:</i> For the returned path, <code>rp,</code> <code>
- rp.is_absolute()</code> is true. <i>-- end note</i>]</p>
+ <p>[<i>Note:</i> For the returned path, <code>rp,</code> <code>rp.is_absolute()</code> is true. <i>-- end note</i>]</p>
<p><i>Throws:</i> If <code>base.is_absolute()</code> is true, throws only if
memory allocation fails.</p>
</blockquote>
@@ -2244,9 +2242,7 @@ or <a href="#Dot">dot-dot</a> elements. </p>
<p><i>Returns:</i> A <a href="#Canonical-path">canonical path</a> that refers to
the same file system object as <code>absolute(p,base)</code>. For the overload
without a <code>base</code> argument, <code>base</code> is <code>current_path()</code>.</p>
- <p><i>Throws:</i>&nbsp; As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i>&nbsp; As specified in <a href="#Error-reporting">Error reporting</a>.</p>
<p><i>Remarks:</i> <code>!exists(p)</code> is an error.</p>
@@ -2270,115 +2266,111 @@ else if(is_regular_file(s))
else
<i> Report error as specified in <a href="#Error-reporting">Error reporting</a>.</i></pre>
</blockquote>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>void <a name="copy_directory">copy_directory</a>(const path&amp; from, const path&amp; to);
void copy_directory(const path&amp; from, const path&amp; to, system::error_code&amp; ec);</pre>
<blockquote>
- <p><i>Effects: </i></p>
+ <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
+ bordercolor="#111111" width="90%" bgcolor="#E0E0E0">
+ <tr>
+ <td width="100%">
+ <p><i>This function is poorly named; it should probably be an overload of
+ <code>create_directory</code> with an additional argument.</i></td>
+ </tr>
+ </table>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Effects: </i>Creates directory <code>to</code>, with
+ attributes copied from directory <code>from</code>. The set of attributes
+ copied is operating system dependent.</p>
+<blockquote>
+ <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
+ bordercolor="#111111" width="90%" bgcolor="#E8FFE8">
+ <tr>
+ <td width="100%">
+ <p>[<i>Note:</i> For ISO 9945/POSIX based operating systems the
+ attributes are those copied by native API <code>stat(from.c_str(), &amp;from_stat)</code>
+ followed by <code>mkdir(to.c_str(),from_stat.st_mode)</code>.&nbsp; For
+ Windows based operating systems the attributes are those copied by native
+ API <code>CreateDirectoryExW(from.c_str(), to.c_str(), 0)</code>.&nbsp; <i>
+ --end note</i>]</td>
+ </tr>
+ </table>
+</blockquote>
+
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+
</blockquote>
<pre>void copy_file(const path&amp; from, const path&amp; to);
void copy_file(const path&amp; from, const path&amp; to, system::error_code&amp; ec);</pre>
<blockquote>
- <p><i>Effects: </i><code>copy_file(from, to,
- copy_option::fail_if_exists</code><i>[</i><code>, ec</code><i>]</i><code>)</code>.</p>
+ <p><i>Effects: </i><code>copy_file(from, to, copy_option::fail_if_exists</code><i>[</i><code>, ec</code><i>]</i><code>)</code>.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>void <a name="copy_file">copy_file</a>(const path&amp; from, const path&amp; to, <a href="#copy_option">copy_option</a> option);
void <a name="copy_file2">copy_file</a>(const path&amp; from, const path&amp; to, <a href="#copy_option">copy_option</a> option, system::error_code&amp; ec);</pre>
<blockquote>
- <p><i>Effects:</i> If <code>option == copy_option::</code><code>fail_if_exists
- &amp;&amp; exists(to)</code>, an error is reported. Otherwise, the contents and attributes of the file <code>from</code>
- resolves to are copied to the file <code>to</code> resolves to.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Effects:</i> If <code>option == copy_option::</code><code>fail_if_exists &amp;&amp; exists(to)</code>, an error is reported. Otherwise, the contents and attributes of the file <code>from</code> resolves to are copied to the file <code>to</code> resolves to.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>void <a name="copy_symlink">copy_symlink</a>(const path&amp; existing_symlink, const path&amp; new_symlink);
void copy_symlink(const path&amp; existing_symlink, const path&amp; new_symlink, system::error_code&amp; ec);</pre>
<blockquote>
- <p><i>Effects: </i><code>create_symlink(read_symlink(existing_symlink</code><i>[</i><code>, ec</code><i>]</i><code>),
- new_symlink</code><i>[</i><code>, ec</code><i>]</i><code>)</code>.</p>
+ <p><i>Effects: </i><code>create_symlink(read_symlink(existing_symlink</code><i>[</i><code>, ec</code><i>]</i><code>), new_symlink</code><i>[</i><code>, ec</code><i>]</i><code>)</code>.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>bool <a name="create_directories">create_directories</a>(const path&amp; p);
bool <a name="create_directories2">create_directories</a>(const path&amp; p, system::error_code&amp; ec);</pre>
<blockquote>
- <p><i>Requires:</i> <code>p.empty() || <br>
- forall px: px == p || is_parent(px, p): is_directory(px) || !exists( px )</code>
- </p>
+ <p><i>Effects:</i> Establishes the postcondition by calling <code>
+ create_directory()</code> for any element of <code>p</code> that does not
+ exist.</p>
<p><i>Postcondition:</i> <code>is_directory(p)</code></p>
- <p><i>Returns:</i> The value of <code>!exists(p)</code> prior to the
- establishment of the postcondition.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Returns:</i> <code>true</code> if a new directory was created, otherwise <code>
+ false</code>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+ <p><i>Complexity:</i> <i>O(n+1)</i> where <i>n</i> is the number of elements
+ of <code>p</code> that do not exist.</p>
</blockquote>
<pre>bool <a name="create_directory">create_directory</a>(const path&amp; p);
bool <a name="create_directory2">create_directory</a>(const path&amp; p, system::error_code&amp; ec);</pre>
<blockquote>
- <p><i>Effects:</i> Attempts to create the directory <code>p</code> resolves to,
- as if by<i> POSIX </i><code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/mkdir.html">mkdir()</a></code> with a second argument of S_IRWXU|S_IRWXG|S_IRWXO. </p>
+ <p><i>Effects:</i> Establishes the postcondition by attempting to create the
+ directory <code>p</code> resolves to, as if by<i> ISO/IEC 9945 </i><code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/mkdir.html">
+ mkdir()</a></code> with a second argument of S_IRWXU|S_IRWXG|S_IRWXO. Creation
+ failure because <code>p</code> resolves to an existing directory shall not be
+ treated as an error. </p>
<p><i>Postcondition:</i> <code>is_directory(p)</code></p>
- <p><i>Returns:</i> <code>true</code> if a new directory was created, otherwise
- <code>false</code>.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Returns:</i> <code>true</code> if a new directory was created, otherwise <code>false</code>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>void <a name="create_directory_symlink">create_directory_symlink</a>(const path&amp; to, const path&amp; new_symlink);
void create_directory_symlink(const path&amp; to, const path&amp; new_symlink, system::error_code&amp; ec);</pre>
<blockquote>
- <p><i>Effects:</i>
- Establishes the postcondition, as if by <i>
- POSIX</i>
- <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/symlink.html">
- symlink()</a></code>.</p>
+ <p><i>Effects:</i> Establishes the postcondition, as if by <i>ISO/IEC 9945</i> <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/symlink.html">symlink()</a></code>.</p>
<p><i>
Postcondition:</i> <code>new_symlink</code> resolves to a symbolic link file that
contains an unspecified representation of <code>to</code>.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
- <p dir="ltr">[<i>Note:</i>
- Some operating systems, such as Windows, require symlink creation to
- identify that the link is to a directory. Portable code should use <code>
- create_directory_symlink()</code> to create directory symlinks rather than
- <code>create_symlink()</code> <i>-- end note</i>]</p>
- <p>[<i>Note:</i>
- Some operating systems do not support symbolic links at all or support
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+ <p>[<i>Note:</i> Some operating systems, such as Windows, require symlink creation to
+ identify that the link is to a directory. Portable code should use <code>create_directory_symlink()</code> to create directory symlinks rather than <code>create_symlink()</code> <i>-- end note</i>]</p>
+ <p>[<i>Note:</i> Some operating systems do not support symbolic links at all or support
them only for regular files.
Some file systems do not
support
symbolic links regardless of the operating system - the FAT file system used on
- memory cards and flash drives, for example. <i>-- end note</i>]</p>
+ memory cards and flash drives, for example. <i>-- end note</i>]</p>
</blockquote>
<pre>void <a name="create_hard_link">create_hard_link</a>(const path&amp; to, const path&amp; new_hard_link);
void <a name="create_hard_link2">create_hard_link</a>(const path&amp; to, const path&amp; new_hard_link, system::error_code&amp; ec);</pre>
<blockquote>
- <p><i>Effects:</i> Establishes the postcondition, as if by
- <i>POSIX</i>
- <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/link.html">
- link()</a></code>.</p>
+ <p><i>Effects:</i> Establishes the postcondition, as if by <i>ISO/IEC 9945</i> <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/link.html">link()</a></code>.</p>
<p><i>Postcondition:</i></p>
<ul>
<li>&nbsp;<code>exists(to) &amp;&amp;
@@ -2388,51 +2380,35 @@ void <a name="create_hard_link2">create_hard_link</a>(const path&amp; to, const
<li>The contents of the file or directory
<code>to</code> resolves to are unchanged.</li>
</ul>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
- <p>[<i>Note:</i>
- Some operating systems do not support hard links at all or support
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+ <p>[<i>Note:</i> Some operating systems do not support hard links at all or support
them only for regular files. Some file systems do not support hard
links regardless of the operating system - the FAT file system used on memory
cards and flash drives, for example. Some file systems limit the number of
- links per file. <i>-- end note</i>]</p>
+ links per file. <i>-- end note</i>]</p>
</blockquote>
<pre>void <a name="create_symlink">create_symlink</a>(const path&amp; to, const path&amp; new_symlink);
void <a name="create_symlink2">create_symlink</a>(const path&amp; to, const path&amp; new_symlink, system::error_code&amp; ec);</pre>
<blockquote>
- <p><i>Effects:</i>
- Establishes the postcondition, as if by <i>
- POSIX</i>
- <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/symlink.html">
- symlink()</a></code>.</p>
+ <p><i>Effects:</i> Establishes the postcondition, as if by <i>ISO/IEC 9945</i> <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/symlink.html">symlink()</a></code>.</p>
<p><i>
Postcondition:</i> <code>new_symlink</code> resolves to a symbolic link file that
contains an unspecified representation of <code>to</code>.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
- <p>[<i>Note:</i>
- Some operating systems do not support symbolic links at all or support
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+ <p>[<i>Note:</i> Some operating systems do not support symbolic links at all or support
them only for regular files.
Some file systems do not
support
symbolic links regardless of the operating system - the FAT system used on
- memory cards and flash drives, for example. <i>-- end note</i>]</p>
+ memory cards and flash drives, for example. <i>-- end note</i>]</p>
</blockquote>
<pre>path <a name="current_path">current_path</a>();
path <a name="current_path2">current_path</a>(system::error_code&amp; ec);</pre>
<blockquote>
- <p><i>Returns:</i> The current working directory path, as if by <i>POSIX</i>
- <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/getcwd.html">
- getcwd()</a></code>. <code>is_absolute()</code> is true for the returned path.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
- <p>[<i>Note: </i>The <code>
- current_path()</code> name was chosen to emphasize that the return is a
+ <p><i>Returns:</i> The current working directory path, as if by <i>ISO/IEC
+ 9945</i> <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/getcwd.html">getcwd()</a></code>. <code>is_absolute()</code> is true for the returned path.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+ <p>[<i>Note: </i>The <code>current_path()</code> name was chosen to emphasize that the return is a
path, not just a single directory name.</p>
<p>The current path as returned by many operating systems is a dangerous
global variable. It may be changed unexpectedly by a third-party or system
@@ -2441,38 +2417,28 @@ path <a name="current_path2">current_path</a>(system::error_code&amp; ec);</pre>
<pre>void current_path(const path&amp; p);
void current_path(const path&amp; p, system::error_code&amp; ec);</pre>
<blockquote>
- <p><i>Effects:</i>
- Establishes the postcondition, as if by <i>
- POSIX</i>
- <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/chdir.html">
- chdir()</a></code>.</p>
+ <p><i>Effects:</i> Establishes the postcondition, as if by <i>ISO/IEC 9945</i> <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/chdir.html">chdir()</a></code>.</p>
<p><i>Postcondition:</i> <code>equivalent(p, current_path())</code>.</p>
-<p><i>Throws:</i> As specified in
-<a href="#Error-reporting">
-Error reporting</a>.</p>
+<p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
<p>[<i>Note: </i>The current path for many operating systems is a dangerous
global state. It may be changed unexpectedly by a third-party or system
library functions, or by another thread.&nbsp; <i>-- end note</i>]</p>
</blockquote>
<pre>bool <a name="exists">exists</a>(file_status s) noexcept;</pre>
<blockquote>
- <p><i>Returns:</i>
- <code>status_known(s) &amp;&amp; s.type() != file_not_found</code></p>
+ <p><i>Returns:</i> <code>status_known(s) &amp;&amp; s.type() != file_not_found</code></p>
</blockquote>
<pre>bool <a name="exists2">exists</a>(const path&amp; p);
bool <a name="exists3">exists</a>(const path&amp; p, system::error_code&amp; ec) noexcept;</pre>
<blockquote>
- <p><i>Returns:</i> <code>exists(status(p))</code> or <code>exists(status(p, ec))</code>,
- respectively.</p>
-<p><i>Throws:</i> <code>filesystem_error</code>; overload with <code>error_code&amp;</code> throws
-nothing.</p>
+ <p dir="ltr"><i>Returns:</i> <code>exists(status(p))</code> or <code>exists(status(p, ec))</code>,
+ respectively. If ec != 0 and an error</p>
+<p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre><code>bool <a name="equivalent">equivalent</a>(const path&amp; p1, const path&amp; p2);
bool <a name="equivalent2">equivalent</a>(const path&amp; p1, const path&amp; p2, system::error_code&amp; ec);</code></pre>
<blockquote>
- <p><i>Effects:</i> Determines <code>file_status s1</code>
- and <code>s2</code>, as if by <code>status(p1)</code> and&nbsp; <code>status(p2)</code>,
+ <p><i>Effects:</i> Determines <code>file_status s1</code> and <code>s2</code>, as if by <code>status(p1)</code> and&nbsp; <code>status(p2)</code>,
respectively.</p>
<p><i>Returns:</i> <code>true</code>, if <code>sf1 ==
sf2</code> and <code>p1</code> and <code>p2</code> resolve to the same file
@@ -2480,30 +2446,16 @@ bool <a name="equivalent2">equivalent</a>(const path&amp; p1, const path&amp; p2
<blockquote>
<p>Two paths are considered to resolve to the same
file system entity if two candidate entities reside on the same device at the
- same location. This is determined as if by the values of the <i>POSIX</i>
- <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">
- stat</a></code> structure<code>,</code> obtained as if by <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">
- stat()</a></code> for the two paths, having equal <code>st_dev</code> values
+ same location. This is determined as if by the values of the <i>ISO/IEC 9945</i> <code><a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">stat</a></code> structure<code>,</code> obtained as if by <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code> for the two paths, having equal <code>st_dev</code> values
and equal <code>st_ino</code> values.</p>
- <p>[<i>Note:</i> <i>POSIX</i> requires that <i>&quot;st_dev</i>
- must be unique within a Local Area Network&quot;. Conservative <i>POSIX</i>
- implementations may also wish to check for equal <code>st_size</code> and
- <code>st_mtime</code> values. <i>Windows</i> implementations may use <code>
- GetFileInformationByHandle()</code> as a surrogate for <code>stat()</code>,
- and consider &quot;same&quot; to be equal values for <code>dwVolumeSerialNumber</code>,
- <code>nFileIndexHigh</code>, <code>nFileIndexLow</code>, <code>nFileSizeHigh</code>,
- <code>nFileSizeLow</code>, <code>ftLastWriteTime.dwLowDateTime</code>, and
- <code>ftLastWriteTime.dwHighDateTime</code>. <i>-- end note</i>]</p>
+ <p>[<i>Note:</i> <i>ISO/IEC 9945</i> requires that <i>&quot;st_dev</i> must be unique within a Local Area Network&quot;. Conservative <i>
+ ISO/IEC 9945</i> implementations may also wish to check for equal <code>st_size</code> and <code>st_mtime</code> values. <i>Windows</i> implementations may use <code>GetFileInformationByHandle()</code> as a surrogate for <code>stat()</code>,
+ and consider &quot;same&quot; to be equal values for <code>dwVolumeSerialNumber</code>, <code>nFileIndexHigh</code>, <code>nFileIndexLow</code>, <code>nFileSizeHigh</code>, <code>nFileSizeLow</code>, <code>ftLastWriteTime.dwLowDateTime</code>, and <code>ftLastWriteTime.dwHighDateTime</code>. <i>-- end note</i>]</p>
</blockquote>
- <p><i>Throws:</i> <code>filesystem_error</code>
- if <code>(!exists(s1) &amp;&amp; !exists(s2)) || (is_other(s1) &amp;&amp; is_other(s2))</code>,
- otherwise as specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> <code>filesystem_error</code> if <code>(!exists(s1) &amp;&amp; !exists(s2)) || (is_other(s1) &amp;&amp; is_other(s2))</code>,
+ otherwise as specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
-<div dir="ltr">
+<div>
<pre>uintmax_t <a name="file_size">file_size</a>(const path&amp; p);
uintmax_t <a name="file_size2">file_size</a>(const path&amp; p, system::error_code&amp; ec);</pre>
</div>
@@ -2511,49 +2463,38 @@ uintmax_t <a name="file_size2">file_size</a>(const path&amp; p, system::error_co
<p><i>Returns:</i> If <code>exists(p) &amp;&amp; is_regular_file(p)</code>, the size
in bytes
of the file <code>p</code> resolves to, determined as if by the value of
- the <i>POSIX</i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">stat</a></code> structure member <code>st_size</code>
- obtained as if by <i>POSIX</i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code>.
+ the <i>ISO/IEC 9945</i> <code><a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">stat</a></code> structure member <code>st_size</code> obtained as if by <i>
+ ISO/IEC 9945</i> <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code>.
Otherwise, <code>static_cast&lt;uintmax_t&gt;(-1)</code>.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>uintmax_t <a name="hard_link_count">hard_link_count</a>(const path&amp; p);
uintmax_t hard_link_count(const path&amp; p, system::error_code&amp; ec);</pre>
<blockquote>
<p><i>Returns:</i> The number of hard links for <code>p</code>.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>const path&amp; <a name="initial_path">initial_path</a>();
-const path&amp; <a name="initial_path">initial_path</a>(<code>system::error_code&amp; ec</code>);</pre>
+const path&amp; <a name="initial_path2">initial_path</a>(<code>system::error_code&amp; ec</code>);</pre>
<blockquote>
- <p><i>Returns:</i>
- <code>current_path()</code> as of the first call to <code>initial_path()</code>.</p>
- <p>[<i>Note:</i> <code>
- initial_path()</code> is not thread safe, and may return an undesirable result
+ <p><i>Returns:</i> <code>current_path()</code> as of the first call to <code>initial_path()</code>.</p>
+ <p>[<i>Note:</i> <code>initial_path()</code> is not thread safe, and may return an undesirable result
if called subsequent to a change to the current directory. These problems can
be avoided by calling <code>initial_path()</code> immediately on entry to
main().&nbsp; <i>--end note</i>]</p>
- <p><i>Throws:</i> For the first call, as specified in
- <a href="#Error-reporting">
- Error reporting</a>. Subsequent calls throw nothing.</p>
+ <p><i>Throws:</i> For the first call, as specified in <a href="#Error-reporting">Error reporting</a>. Subsequent calls throw nothing.</p>
</blockquote>
<pre>bool <code><a name="is_directory">is_directory</a></code>(file_status s) noexcept;</pre>
<blockquote>
- <p><i>Returns:</i>
- <code>s.type() == directory_file</code></p>
+ <p><i>Returns:</i> <code>s.type() == directory_file</code></p>
</blockquote>
<pre><code>bool <a name="is_directory2">is_directory</a>(const path&amp; p);
bool <a name="is_directory3">is_directory</a>(const path&amp; p, system::error_code&amp; ec) noexcept;</code></pre>
<blockquote>
- <p dir="ltr"><i>Returns:</i> <code>is_directory(status(p))</code> or <code>is_directory(status(p, ec))</code>,
+ <p><i>Returns:</i> <code>is_directory(status(p))</code> or <code>is_directory(status(p, ec))</code>,
respectively.</p>
<p><i>Throws:</i> <code>filesystem_error</code>; overload with <code>error_code&amp;</code> throws
nothing.</p>
@@ -2561,42 +2502,29 @@ nothing.</p>
<pre><code>bool <a name="is_empty">is_empty</a>(const path&amp; p);
bool <a name="is_empty2">is_empty</a></a>(const path&amp; p, system::error_code&amp; ec);</code></pre>
<blockquote>
- <p><i>Effects:</i> Determines <code>file_status s</code>, as if by <code>
- status(p, ec)</code>.</p>
+ <p><i>Effects:</i> Determines <code>file_status s</code>, as if by <code>status(p, ec)</code>.</p>
<p><i>Returns:</i> <code>is_directory(s)<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ?
- directory_iterator(p) == directory_iterator()<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ? directory_iterator(p) == directory_iterator()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : file_size(p) == 0;</code></p>
</blockquote>
<pre>bool <code><a name="is_regular_file">is_regular_file</a></code>(file_status s) noexcept;</pre>
<blockquote>
- <p><i>Returns:</i>
- <code>s.type() == regular_file</code></p>
+ <p><i>Returns:</i> <code>s.type() == regular_file</code></p>
</blockquote>
<pre><code>bool <a name="is_regular_file2">is_regular_file</a>(const path&amp; p);</code></pre>
<blockquote>
<p><i>Returns:</i> <code>is_regular_file(status(p))</code>.</p>
- <p><i>Throws:</i> <code>filesystem_error</code>
- if <code>status(p)</code> would throw <code>filesystem_error.</code></p>
+ <p><i>Throws:</i> <code>filesystem_error</code> if <code>status(p)</code> would throw <code>filesystem_error.</code></p>
</blockquote>
<pre><code>bool <a name="is_regular_file3">is_regular_file</a>(const path&amp; p, system::error_code&amp; ec) noexcept;</code></pre>
<blockquote>
- <p><i>Effects:</i> Sets <code>ec</code> as if by <code>status(p, ec)</code>. [<i>Note:</i>
- <code>status_error</code>,
- <code>file_not_found</code>
- and
- <code>type_unknown</code>
- cases set <code>ec</code>
- to error values. To distinguish between cases, call the <code>
- status</code>
- function directly. <i>-- end
+ <p><i>Effects:</i> Sets <code>ec</code> as if by <code>status(p, ec)</code>. [<i>Note:</i> <code>status_error</code>, <code>file_not_found</code> and <code>type_unknown</code> cases set <code>ec</code> to error values. To distinguish between cases, call the <code>status</code> function directly. <i>-- end
note</i>] </p>
<p><i>Returns:</i> <code>is_regular_file(status(p, ec))</code>.</p>
</blockquote>
<pre>bool <a name="is_other">is_other</a>(file_status s) noexcept;</pre>
<blockquote>
- <p><i>Returns:</i>
- <code>return exists(s) &amp;&amp; !is_regular_file(s) &amp;&amp; !is_directory(s) &amp;&amp; !is_symlink(s)</code></p>
+ <p><i>Returns:</i> <code>return exists(s) &amp;&amp; !is_regular_file(s) &amp;&amp; !is_directory(s) &amp;&amp; !is_symlink(s)</code></p>
</blockquote>
<pre><code>bool <a name="is_other2">is_other</a>(const path&amp; p);
bool <a name="is_other3">is_other</a>(const path&amp; p, system::error_code&amp; ec) noexcept;</code></pre>
@@ -2608,8 +2536,7 @@ bool <a name="is_other3">is_other</a>(const path&amp; p, system::error_code&amp;
</blockquote>
<pre>bool <a name="is_symlink">is_symlink</a>(file_status s) noexcept;</pre>
<blockquote>
- <p><i>Returns:</i>
- <code>s.type() == symlink_file</code></p>
+ <p><i>Returns:</i> <code>s.type() == symlink_file</code></p>
</blockquote>
<pre><code>bool <a name="is_symlink2">is_symlink</a>(const path&amp; p);
bool <a name="is_symlink3">is_symlink</a>(const path&amp; p, system::error_code&amp; ec) noexcept;</code></pre>
@@ -2623,41 +2550,28 @@ bool <a name="is_symlink3">is_symlink</a>(const path&amp; p, system::error_code&
std::time_t <a name="last_write_time2">last_write_time</a>(const path&amp; p<code>, system::error_code&amp; ec</code>);</pre>
<blockquote>
<p><i>Returns:</i> The time of last data modification of <code>p</code>, determined as if by the
- value of the <i>POSIX</i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">stat</a></code> structure member <code>st_mtime</code>&nbsp; obtained
- as if by <i>POSIX</i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code>.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ value of the <i>ISO/IEC 9945</i> <code><a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">stat</a></code> structure member <code>st_mtime</code>&nbsp; obtained
+ as if by <i>ISO/IEC 9945</i> <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>void <a name="last_write_time3">last_write_time</a>(const path&amp; p, const std::time_t new_time);
void <a name="last_write_time4">last_write_time</a>(const path&amp; p, const std::time_t new_time<code>, system::error_code&amp; ec</code>);</pre>
<blockquote>
<p><i>Effects:</i> Sets the time of last data modification of the file
- resolved to by <code>p</code>
- to <code>new_time</code>, as if by <i>POSIX</i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code>
- followed by <i>POSIX</i>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/utime.html">
- <code>utime()</code></a>.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
- <p>[<i>Note:</i> A postcondition of <code>last_write_time(p) ==
- new_time</code> is not specified since it might not hold for file systems
+ resolved to by <code>p</code> to <code>new_time</code>, as if by <i>ISO/IEC
+ 9945</i> <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code> followed by <i>
+ ISO/IEC 9945</i> <a href="http://www.opengroup.org/onlinepubs/000095399/functions/utime.html"><code>utime()</code></a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+ <p>[<i>Note:</i> A postcondition of <code>last_write_time(p) == new_time</code> is not specified since it might not hold for file systems
with coarse time granularity. <i>-- end note</i>]</p>
</blockquote>
<pre>void <a name="permissions">permissions</a>(const path&amp; p, <a href="#symlink_perms">perms</a> prms);
void permissions(const path&amp; p, <a href="#symlink_perms">perms</a> prms, system::error_code&amp; ec);</pre>
<blockquote>
- <p dir="ltr">
+ <p>
<i>Requires:</i> <code>!((prms &amp; add_perms) &amp;&amp; (prms &amp; remove_perms))</code>.</p>
- <p dir="ltr"><i>Effects:</i> Applies the effective permissions bits from <code>
- prms</code> to the file <code>p</code> resolves to, as if by <i>POSIX</i>
- <code>
- <a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/fchmodat.html">
- fchmodat()</a></code>. The effective permission bits are determined as
+ <p><i>Effects:</i> Applies the effective permissions bits from <code>prms</code> to the file <code>p</code> resolves to, as if by <i>
+ ISO/IEC 9945</i> <code><a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/fchmodat.html">fchmodat()</a></code>. The effective permission bits are determined as
specified by the following table. </p>
<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
<tr>
@@ -2671,32 +2585,24 @@ void permissions(const path&amp; p, <a href="#symlink_perms">perms</a> prms, sys
<tr>
<td><code>add_perms</code></td>
<td>
- <p dir="ltr"><code>status(p).permissions() | (prms &amp;
- <a href="#perms_mask">perms_mask</a>)</code>
- </td>
+ <p><code>status(p).permissions() | (prms &amp; <a href="#perms_mask">perms_mask</a>)</code> </td>
</tr>
<tr>
<td><code>remove_perms</code></td>
- <td><code>status(p)</code><code>.permissions() &amp; ~(prms &amp;
- <a href="#perms_mask">perms_mask</a>)
- </code> </td>
+ <td><code>status(p)</code><code>.permissions() &amp; ~(prms &amp; <a href="#perms_mask">perms_mask</a>) </code></td>
</tr>
</table>
<p>[<i>Note:</i> Conceptually permissions are viewed as bits, but the actual
implementation may use some other mechanism. -- <i>end note</i>]</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>path <a name="read_symlink">read_symlink</a>(const path&amp; p);
path read_symlink(const path&amp; p, system::error_code&amp; ec);</pre>
<blockquote>
- <p dir="ltr"><i>Returns:</i>&nbsp; If <code>p</code> resolves to a symbolic
+ <p><i>Returns:</i>&nbsp; If <code>p</code> resolves to a symbolic
link, a <code>path</code> object containing the contents of that symbolic
link. Otherwise an empty <code>path</code> object.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>. [<i>Note:</i> It is an error if <code>p</code> does not
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>. [<i>Note:</i> It is an error if <code>p</code> does not
resolve to a symbolic link. <i>-- end note</i>]</p>
</blockquote>
<pre>bool <a name="remove">remove</a>(const path&amp; p);
@@ -2704,8 +2610,7 @@ bool <a name="remove2">remove</a>(const path&amp; p, system::error_code&amp; ec)
<blockquote>
<p><i>Effects:</i>&nbsp; If <code>exists(symlink_status(p,ec))</code>, it is
removed
- as if by<i> POSIX </i><code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/remove.html">remove()</a></code>.</p>
+ as if by<i> ISO/IEC 9945 </i><code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/remove.html">remove()</a></code>.</p>
<blockquote>
<p>[<i>Note:</i> A symbolic link is itself removed, rather than the file it
resolves to being removed. <i>-- end note</i>]</p>
@@ -2713,74 +2618,52 @@ bool <a name="remove2">remove</a>(const path&amp; p, system::error_code&amp; ec)
<p><i>Postcondition:</i> <code>!exists(symlink_status(p))</code>.</p>
<p><i>Returns:</i>&nbsp; <code>false</code> if p did not exist in the first
place, otherwise <code>true</code>.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>uintmax_t <a name="remove_all">remove_all</a>(const path&amp; p);
uintmax_t <a name="remove_all2">remove_all</a>(const path&amp; p, system::error_code&amp; ec);</pre>
<blockquote>
<p><i>Effects:</i>&nbsp; Recursively deletes the contents of p if it exists,
then deletes file <code>p</code> itself,
- as if by<i> POSIX </i><code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/remove.html">remove()</a></code>.</p>
+ as if by<i> ISO/IEC 9945 </i><code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/remove.html">remove()</a></code>.</p>
<blockquote>
<p>[<i>Note:</i> A symbolic link is itself removed, rather than the file it
resolves to being removed. <i>-- end note</i>]</p>
</blockquote>
<p><i>Postcondition:</i> <code>!exists(p)</code></p>
<p><i>Returns:</i> The number of files removed.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>void <a name="rename">rename</a>(const path&amp; old_p, const path&amp; new_p);
void <a name="rename2">rename</a>(const path&amp; old_p, const path&amp; new_p, system::error_code&amp; ec);</pre>
<blockquote>
- <p><i>Effects:</i> Renames <code>old_p</code> to <code>new_p</code>, as if by
- <i>POSIX</i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/rename.html">
- rename()</a></code>.</p>
+ <p><i>Effects:</i> Renames <code>old_p</code> to <code>new_p</code>, as if by <i>
+ ISO/IEC 9945</i> <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/rename.html">rename()</a></code>.</p>
<blockquote>
<p>[<i>Note:</i> If <code>old_p</code> and <code>new_p</code> resolve to the
same existing file, no action is taken. Otherwise, if <code>new_p</code> resolves to an
existing non-directory file, it is removed, while if <code>new_p</code> resolves to an
- existing directory, it is removed if empty on POSIX but is an error on Windows. A symbolic link is itself renamed, rather than
+ existing directory, it is removed if empty on ISO/IEC 9945 but is an error on Windows. A symbolic link is itself renamed, rather than
the file it resolves to being renamed. <i>-- end note</i>]</p>
</blockquote>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>void <a name="resize_file">resize_file</a>(const path&amp; p, uintmax_t new_size);
void <a name="resize_file2">resize_file</a>(const path&amp; p, uintmax_t new_size, system::error_code&amp; ec);</pre>
<blockquote>
<p><i>Postcondition:</i> <code>file_size() == new_size</code>.</p>
-<p><i>Throws:</i> As specified in
-<a href="#Error-reporting">
-Error reporting</a>.</p>
- <p><i>Remarks:</i> Achieves its postconditions as if by
- POSIX <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/truncate.html">
- truncate()</a></code>.</p>
+<p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+ <p><i>Remarks:</i> Achieves its postconditions as if by ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/truncate.html">truncate()</a></code>.</p>
</blockquote>
<pre>space_info <a name="space">space</a>(const path&amp; p);
space_info <a name="space2">space</a>(const path&amp; p, system::error_code&amp; ec);</pre>
<blockquote>
- <p><i>Returns:</i> An object of type <code>
- <a href="#space_info">space_info</a></code>. The value of the <code>space_info</code> object is determined as if by
- using <i>POSIX</i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/statvfs.html" style="text-decoration: none">
- statvfs()</a></code> to obtain a <i>POSIX</i> struct <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/statvfs.h.html" style="text-decoration: none">
- statvfs</a></code>, and then multiplying its <code>f_blocks</code>, <code>
- f_bfree</code>, and <code>f_bavail</code> members by its <code>f_frsize</code>
- member, and assigning the results to the <code>capacity</code>, <code>free</code>,
+ <p><i>Returns:</i> An object of type <code><a href="#space_info">space_info</a></code>. The value of the <code>space_info</code> object is determined as if by
+ using <i>ISO/IEC 9945</i> <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/statvfs.html" style="text-decoration: none">statvfs()</a></code> to obtain a <i>
+ ISO/IEC 9945</i> struct <code><a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/statvfs.h.html" style="text-decoration: none">statvfs</a></code>, and then multiplying its <code>f_blocks</code>, <code>f_bfree</code>, and <code>f_bavail</code> members by its <code>f_frsize</code> member, and assigning the results to the <code>capacity</code>, <code>free</code>,
and <code>available</code> members respectively. Any members for which the
value cannot be determined shall be set to -1.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre><a href="#file_status">file_status</a> <a name="status">status</a>(const path&amp; p);</pre>
<blockquote>
@@ -2794,9 +2677,7 @@ return result;</pre>
</blockquote>
<p><i>Returns:</i> See above.</p>
<p><i>Throws:</i> <code>filesystem_error</code>.
-[<i>Note:</i> <code>result</code> values of <code>
- file_status(file_not_found)</code>and <code>
- file_status(type_unknown)</code> are not considered failures and do not
+[<i>Note:</i> <code>result</code> values of <code>file_status(file_not_found)</code>and <code>file_status(type_unknown)</code> are not considered failures and do not
cause an exception to be
thrown.<i> -- end note</i>] </p>
</blockquote>
@@ -2805,15 +2686,12 @@ thrown.<i> -- end note</i>] </p>
<p><i>Effects: </i></p>
<blockquote>
<p>If possible, determines the attributes
- of the file
- <code>p</code> resolves to, as if by<i> POSIX </i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code>.</p>
+ of the file <code>p</code> resolves to, as if by<i> ISO/IEC 9945 </i><code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code>.</p>
If, during attribute determination, the underlying file system API reports
an error, sets <code>ec</code> to indicate the specific error reported.
Otherwise, <code>ec.clear()</code>.<blockquote>
<p>[<i>Note:</i> This allows users to inspect the specifics of underlying
- API errors even when the value returned by <code>status()</code> is not <code>
- file_status(status_error)</code>.&nbsp; <i>--end note</i>]</p>
+ API errors even when the value returned by <code>status()</code> is not <code>file_status(status_error)</code>.&nbsp; <i>--end note</i>]</p>
</blockquote>
</blockquote>
<p><i>Returns:</i></p>
@@ -2822,7 +2700,7 @@ thrown.<i> -- end note</i>] </p>
<ul>
<li>If the specific error indicates that <code>p</code> cannot be resolved
because some element of the path does not exist, return <code>
- file_status(file_not_found)</code>. [<i>Note:</i> POSIX errors that
+ file_status(file_not_found)</code>. [<i>Note:</i> ISO/IEC 9945 errors that
indicate this are ENOENT or ENOTDIR. Windows equivalents
include ERROR_FILE_NOT_FOUND, ERROR_PATH_NOT_FOUND, ERROR_INVALID_NAME,
ERROR_INVALID_PARAMETER, ERROR_BAD_PATHNAME, and ERROR_BAD_NETPATH. <i>--
@@ -2831,23 +2709,20 @@ thrown.<i> -- end note</i>] </p>
<li>Otherwise, if the specific error indicates that <code>p</code> can be resolved
but the attributes cannot be determined, return <code>
file_status(type_unknown)</code>. [<i>Note: </i>For example, Windows
- ERROR_SHARING_VIOLATION errors. For POSIX, the case never arises. <i>-- end
+ ERROR_SHARING_VIOLATION errors. For ISO/IEC 9945, the case never arises. <i>-- end
note</i>]<br>
&nbsp;</li>
<li>Otherwise, return <code>
file_status(status_error)</code>.</li>
</ul>
<blockquote>
- <p>[<i>Note:</i> These semantics distinguish between
- <code>p</code> being known not to exist,
- <code>p</code> existing but not being able to determine its attributes,
- and there being an error that prevents even knowing if
- <code>p</code> exists. These
+ <p>[<i>Note:</i> These semantics distinguish between <code>p</code> being known not to exist, <code>p</code> existing but not being able to determine its attributes,
+ and there being an error that prevents even knowing if <code>p</code> exists. These
distinctions are important to some use cases.&nbsp;<i>--end note</i>]</p>
</blockquote>
<p>Otherwise,</p>
<ul>
- <li>If the attributes indicate a regular file, as if by <i>POSIX</i>&nbsp;<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">S_ISREG()</a>,
+ <li>If the attributes indicate a regular file, as if by <i>ISO/IEC 9945</i>&nbsp;<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">S_ISREG()</a>,
return <code>
file_status(regular_file)</code>. [<i>Note:</i> <code>
regular_file</code> implies appropriate <code>&lt;fstream&gt;</code> operations
@@ -2858,29 +2733,34 @@ regular_file</code> implies appropriate <code>&lt;fstream&gt;</code> operations
fail on a directory.
<i>-- end note</i>]<br>
&nbsp;</li>
- <li>Otherwise, if the attributes indicate a directory, as if by <i>POSIX</i>
+ <li>Otherwise, if the attributes indicate a directory, as if by <i>ISO/IEC
+ 9945</i>
<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">S_ISDIR()</a>,
return <code>
file_status(directory_file)</code>. [<i>Note:</i> <code>directory_file</code> implies <code>
directory_iterator(p)</code>would succeed.
<i>-- end note</i>]<br>
&nbsp;</li>
- <li>Otherwise, if the attributes indicate a block special file, as if by <i>POSIX</i>
+ <li>Otherwise, if the attributes indicate a block special file, as if by <i>
+ ISO/IEC 9945</i>
<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">S_ISBLK()</a>,
return <code>
file_status(block_file)</code>.<br>
&nbsp;</li>
- <li>Otherwise, if the attributes indicate a character special file, as if by <i>POSIX</i>
+ <li>Otherwise, if the attributes indicate a character special file, as if by <i>
+ ISO/IEC 9945</i>
<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">S_ISCHR()</a>,
return <code>
file_status(character_file)</code>.<br>
&nbsp;</li>
- <li>Otherwise, if the attributes indicate a fifo or pipe file, as if by <i>POSIX</i>
+ <li>Otherwise, if the attributes indicate a fifo or pipe file, as if by <i>
+ ISO/IEC 9945</i>
<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">S_ISFIFO()</a>,
return <code>
file_status(fifo_file)</code>.<br>
&nbsp;</li>
- <li>Otherwise, if the attributes indicate a socket, as if by <i>POSIX</i>
+ <li>Otherwise, if the attributes indicate a socket, as if by <i>ISO/IEC
+ 9945</i>
<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">S_ISSOCK()</a>,
return <code>
file_status(socket_file)</code>.<br>
@@ -2895,24 +2775,18 @@ directory_iterator(p)</code>would succeed.
</blockquote>
<pre>bool <a name="status_known">status_known</a>(file_status s) noexcept;</pre>
<blockquote>
- <p><i>Returns:</i>
- <code>s.type() != status_error</code></p>
+ <p><i>Returns:</i> <code>s.type() != status_error</code></p>
</blockquote>
<pre>file_status <a name="symlink_status">symlink_status</a>(const path&amp; p);
file_status <a name="symlink_status2">symlink_status</a>(const path&amp; p, system::error_code&amp; ec) noexcept;</pre>
<blockquote>
<p><i>Effects:</i>&nbsp; Same as <a href="#status">status()</a>, above,
except that the attributes
- of
- <code>p</code> are determined as if by<i> POSIX </i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/lstat.html">
- lstat()</a></code>.</p>
+ of <code>p</code> are determined as if by<i> ISO/IEC 9945 </i><code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/lstat.html">lstat()</a></code>.</p>
</blockquote>
<blockquote>
<p><i>Returns:</i> Same as <a href="#status">status()</a>, above, except
- that if the attributes indicate a symbolic link, as if by <i>POSIX</i>
- <a class="external" href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">
- S_ISLNK()</a>, return <code>file_status(symlink_file)</code>.</p>
+ that if the attributes indicate a symbolic link, as if by <i>ISO/IEC 9945</i> <a class="external" href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">S_ISLNK()</a>, return <code>file_status(symlink_file)</code>.</p>
<p><i>Remarks:</i> Pathname resolution terminates if <code>p</code> names a symbolic link.</p>
<p><i>Throws:</i> <code>filesystem_error</code>; overload with <code>error_code&amp;</code> throws
nothing.</p>
@@ -2924,25 +2798,17 @@ path <a name="system_complete2">system_complete</a>(const path&amp; p, system::e
same rules used by the operating system to resolve a path passed as the
filename argument to standard library open functions.</p>
<p><i>Returns:</i> The composed path.</p>
- <p><i>Postcondition:</i> For the returned path, <code>rp,</code> <code>
- rp.is_absolute()</code> is true.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
- <p>[<i>Note:</i> For <i>POSIX</i>, <code>system_complete(p)</code> has the same semantics as
- <code>complete(p, current_path())</code>.</p>
+ <p><i>Postcondition:</i> For the returned path, <code>rp,</code> <code>rp.is_absolute()</code> is true.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+ <p>[<i>Note:</i> For <i>ISO/IEC 9945</i>, <code>system_complete(p)</code> has the same semantics as <code>complete(p, current_path())</code>.</p>
<p><a name="windows_effects">For <i>Windows</i></a>, <code>system_complete(p)</code> has the
- same semantics as <code>complete(ph, current_path())</code> if
- <code>p.is_absolute() || !p.has_root_name()</code> or <code>p</code> and <code>base</code> have the same
- <code>root_name()</code>.
- Otherwise it acts like <code>complete(p, kinky)</code>, where <code>kinky</code>
- is the current directory for the <code>p.root_name()</code> drive. This will
+ same semantics as <code>complete(ph, current_path())</code> if <code>p.is_absolute() || !p.has_root_name()</code> or <code>p</code> and <code>base</code> have the same <code>root_name()</code>.
+ Otherwise it acts like <code>complete(p, kinky)</code>, where <code>kinky</code> is the current directory for the <code>p.root_name()</code> drive. This will
be the current directory of that drive the last time it was set, and thus may
be <b>residue left over from a prior program</b> run by the command
processor! Although these semantics are often useful, they are also very
error-prone.</p>
- <p>See <a href="#complete_note">
- <i>complete()</i> note</a> for usage suggestions. <i>-- end note</i>]</p>
+ <p>See <a href="#complete_note"><i>complete()</i> note</a> for usage suggestions. <i>-- end note</i>]</p>
</blockquote>
<pre>path <a name="temp_directory_path">temp_directory_path</a>();
path temp_directory_path(system::error_code&amp; ec);</pre>
@@ -2951,11 +2817,10 @@ path temp_directory_path(system::error_code&amp; ec);</pre>
conventions of the operating system. The specifics of how this path is
determined are implementation defined. An error shall be reported if<code> !exists(p)
|| !is_directory(p)</code>, where <code>p</code> is the path to be returned.</p>
- <p><i>POSIX:</i> The path supplied by the first environment variable found in the
+ <p><i>ISO/IEC 9945:</i> The path supplied by the first environment variable found in the
list TMPDIR, TMP, TEMP, TEMPDIR. If none of these are found, <code>&quot;/tmp&quot;</code>.</p>
<p><i>Windows:</i> The path reported by the <i>Windows</i> <code>GetTempPath</code> API function.</p>
- <p><i>Throws:</i> As specified in <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
<p>[<i>Note: </i>The <code>temp_directory_path()</code> name was chosen to emphasize that the return is a
path, not just a single directory name.&nbsp; <i>-- end note</i>]</p>
</blockquote>
@@ -2973,23 +2838,79 @@ path unique_path(const path&amp; model, system::error_code&amp; ec);</pre>
<p><i>Returns:</i> A path identical to <code>model</code>, except that each
occurrence of a percent sign character is replaced by a random hexadecimal
digit character in the range 0-9, a-f.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
<p><i>Remarks:</i> Implementations are encouraged to obtain the required
- randomness via a
- <a href="http://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator">
- cryptographically secure pseudo-random number generator</a>, such as one
+ randomness via a <a href="http://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator">cryptographically secure pseudo-random number generator</a>, such as one
provided by the operating system. [<i>Note</i>: Such generators may block
until sufficient entropy develops. <i>--end note</i>]</p>
</blockquote>
-$snippet wording_suffix "$SNIPPET_FILE;"
+
+<h3><a name="File-streams">File streams</a> -
+<a href="../../../boost/filesystem/fstream.hpp">&lt;boost/filesystem/fstream.hpp&gt;</a></h3>
+<p>Replacements are provided for the file stream classes from the C++ standard
+library's <code>&lt;fstream&gt;</code> header. These replacement classes
+publicly inherit from the standard library classes. In the Boost.Filesystem
+version, constructors and open functions take <code>const path&amp;</code> arguments
+instead of <code>
+const char*</code> arguments. There are no other differences in syntax or
+semantics.</p>
+<pre>namespace boost
+{
+ namespace filesystem
+ {
+ template &lt; class charT, class traits = std::char_traits&lt;charT&gt; &gt;
+ class basic_filebuf : public std::basic_filebuf&lt;charT,traits&gt;
+ {
+ public:
+ basic_filebuf&lt;charT,traits&gt;*
+ open(const path&amp; p, std::ios_base::openmode mode);
+ };
+
+ template &lt; class charT, class traits = std::char_traits&lt;charT&gt; &gt;
+ class basic_ifstream : public std::basic_ifstream&lt;charT,traits&gt;
+ {
+ public:
+ explicit basic_ifstream(const path&amp; p, std::ios_base::openmode mode=std::ios_base::in)
+ void open(const path&amp; p, std::ios_base::openmode mode=std::ios_base::in);
+ };
+
+ template &lt; class charT, class traits = std::char_traits&lt;charT&gt; &gt;
+ class basic_ofstream : public std::basic_ofstream&lt;charT,traits&gt;
+ {
+ public:
+ explicit basic_ofstream(const path&amp; p, std::ios_base::openmode mode=std::ios_base::out);
+ void open(const path&amp; p, std::ios_base::openmode mode=std::ios_base::out);
+ };
+
+ template &lt; class charT, class traits = std::char_traits&lt;charT&gt; &gt;
+ class basic_fstream : public std::basic_fstream&lt;charT,traits&gt;
+ {
+ public:
+ explicit basic_fstream(const path&amp; p,
+ std::ios_base::openmode mode=std::ios_base::in | std::ios_base::out);
+ void open(const path&amp; p,
+ std::ios_base::openmode mode=std::ios_base::in | std::ios_base::out);
+ };
+
+ typedef basic_filebuf&lt;char&gt; filebuf;
+ typedef basic_ifstream&lt;char&gt; ifstream;
+ typedef basic_ofstream&lt;char&gt; ofstream;
+ typedef basic_fstream&lt;char&gt; fstream;
+
+ typedef basic_filebuf&lt;wchar_t&gt; wfilebuf;
+ typedef basic_ifstream&lt;wchar_t&gt; wifstream;
+ typedef basic_fstream&lt;wchar_t&gt; wfstream;
+ typedef basic_ofstream&lt;wchar_t&gt; wofstream;
+
+ } // namespace filesystem
+} // namespace boost</pre>
+
+
<h2><a name="Path-decomposition-table">Path decomposition table</a></h2>
<p>The table is generated by a program compiled with the Boost implementation.</p>
-<p>Shaded entries indicate cases where <i>POSIX</i> and <i>Windows</i>
-implementations yield different results. The top value is the
-<i>POSIX</i> result and the bottom value is the <i>Windows</i> result. <br>
+<p>Shaded entries indicate cases where <i>ISO/IEC 9945</i> and <i>Windows</i> implementations yield different results. The top value is the <i>
+ISO/IEC 9945</i> result and the bottom value is the <i>Windows</i> result. <br>
<table border="1" cellspacing="0" cellpadding="5">
<p>
<tr><td><b>Constructor<br>argument</b></td>
@@ -3493,8 +3414,7 @@ is MAX_PATH, which is defined as 260 characters.</p>
<p>The Windows API has many functions that also have Unicode versions to permit
an extended-length path for a maximum total path length of 32,767 characters.
... To specify an extended-length path, use the <b>&quot;\\?\&quot; prefix</b>. For
-example, &quot;\\?\D:\<em>very long path</em>&quot;.&nbsp;
-<i>[C++ string literals require backslashes be doubled, of course.]</i></p>
+example, &quot;\\?\D:\<em>very long path</em>&quot;.&nbsp; <i>[C++ string literals require backslashes be doubled, of course.]</i></p>
</blockquote>
<p>Because most Boost.Filesystem operational functions just pass the contents of
a class path object to the Windows API, they do work with the extended-length
@@ -3521,9 +3441,7 @@ support necessary to see both a trial implementation and the proposal itself
through to completion. She gave me the strength to continue after a difficult
year of cancer treatment in the middle of it all.</p>
<p>Many people contributed technical comments, ideas, and suggestions to the
-Boost Filesystem Library. See
-<a href="http://www.boost.org/libs/filesystem/doc/index.htm#Acknowledgements">
-http://www.boost.org/libs/filesystem/doc/index.htm#Acknowledgements</a>.</p>
+Boost Filesystem Library. See <a href="http://www.boost.org/libs/filesystem/doc/index.htm#Acknowledgements">http://www.boost.org/libs/filesystem/doc/index.htm#Acknowledgements</a>.</p>
<p>Dietmar Kuehl contributed the original Boost Filesystem Library directory_iterator design. Peter Dimov, Walter Landry, Rob Stewart, and Thomas
Witt were particularly helpful in refining the library.</p>
<p>The create_directories, extension, basename, and replace_extension functions
@@ -3538,25 +3456,26 @@ multiple string types. His idea became the basis for the version 3 path design.<
<h2><a name="References">References</a></h2>
<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
<tr>
- <td width="16%" valign="top">[<a name="ISO_POSIX">ISO-POSIX</a>]</td>
+ <td width="16%" valign="top">[<a name="ISO_POSIX">ISO-ISO/IEC 9945</a>]</td>
<td width="84%">ISO/IEC 9945:2003, IEEE&nbsp;Std&nbsp;1003.1-2001, and The Open Group
Base Specifications, Issue 6. Also known as The Single Unix<font face="Times New Roman">®
Specification, Version 3. Available from each of the organizations involved
- in its creation. For example, read online or download from
- <a href="http://www.unix.org/single_unix_specification/">
- www.unix.org/single_unix_specification/</a>.</font> The ISO JTC1/SC22/WG15 -
- POSIX homepage is <a href="http://www.open-std.org/jtc1/sc22/WG15/">
- www.open-std.org/jtc1/sc22/WG15/</a></td>
+ in its creation. For example, read online or download from <a href="http://www.unix.org/single_unix_specification/">www.unix.org/single_unix_specification/</a>.</font> The ISO JTC1/SC22/WG15 -
+ POSIX homepage is <a href="http://www.open-std.org/jtc1/sc22/WG15/">www.open-std.org/jtc1/sc22/WG15/</a></td>
</tr>
<tr>
<td width="16%" valign="top">[Abrahams]</td>
- <td width="84%">Dave Abrahams, Error and Exception Handling,
- <a href="http://www.boost.org/more/error_handling.html">
- www.boost.org/more/error_handling.html</a></td>
+ <td width="84%">Dave Abrahams, Error and Exception Handling, <a href="http://www.boost.org/more/error_handling.html">www.boost.org/more/error_handling.html</a></td>
</tr>
</table>
<hr>
-$snippet backmatter "$SNIPPET_FILE;"
-</body>
+>
+<p><font size="2">© Copyright Beman Dawes, 2002, 2006, 2007, 2009, 2010, 2011</font></p>
+<p><font size="2">Distributed under the Boost Software License, Version 1.0. See
+</font>
+<a href="http://www.boost.org/LICENSE_1_0.txt"><font size="2">www.boost.org/LICENSE_1_0.txt</font></a></p>
+<p><font size="2">Revised
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B %Y" startspan -->09 August 2012<!--webbot bot="Timestamp" endspan i-checksum="31334" --></font></p>
+
-</html> \ No newline at end of file
+</body></html> \ No newline at end of file
diff --git a/libs/filesystem/v3/doc/release_history.html b/libs/filesystem/doc/release_history.html
index daff2203b8..abc32ea9ed 100644
--- a/libs/filesystem/v3/doc/release_history.html
+++ b/libs/filesystem/doc/release_history.html
@@ -6,7 +6,7 @@
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Filesystem Release History</title>
-<link rel="stylesheet" type="text/css" href="../../../../doc/src/minimal.css">
+<link rel="stylesheet" type="text/css" href="../../../doc/src/minimal.css">
</head>
<body>
@@ -14,8 +14,8 @@
<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
<tr>
<td width="277">
-<a href="../../../../index.htm">
-<img src="../../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
+<a href="../../../index.htm">
+<img src="../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
<td align="middle">
<font size="7">Filesystem Release History</font>
</td>
@@ -24,7 +24,7 @@
<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
<tr>
- <td><a href="../../../../index.htm">Boost Home</a> &nbsp;&nbsp;
+ <td><a href="../../../index.htm">Boost Home</a> &nbsp;&nbsp;
<a href="index.htm">Library Home</a> &nbsp;&nbsp; <a href="reference.html">Reference</a> &nbsp;&nbsp;
<a href="tutorial.html">Tutorial</a> &nbsp;&nbsp;
<a href="faq.htm">FAQ</a> &nbsp;&nbsp;
@@ -36,6 +36,62 @@
</tr>
</table>
+<h2>1.51.0</h2>
+<ul>
+ <li>Fix a Linux fchmodat problem affecting symlink permissions reported during
+ discussion of <a href="https://svn.boost.org/trac/boost/ticket/6659">#6659</a>.</li>
+ <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/6659">#6659</a> and
+ <a href="https://svn.boost.org/trac/boost/ticket/7051">#7051</a>, fchmodat
+ supported only on Solaris 11. Fix for both Sun and GCC compilers. </li>
+ <li>Add missing copy_directory semantics docs. Fixes
+ <a href="https://svn.boost.org/trac/boost/ticket/5879">#5879</a>.</li>
+</ul>
+
+<h2>1.50.0</h2>
+<ul>
+ <li>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.</li>
+ <li>Add <code>constexpr value_type preferred_separator</code> to class path.</li>
+ <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5118">#5118</a>,
+ <code>replace_extension</code> 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.</li>
+ <li>Fix <a href="http://svn.boost.org/trac/boost/ticket/3737">#3737</a>,
+ Boost.Filesystem does not compile on Windows Mobile. On Windows, &lt;sys/stat.h&gt;
+ is no longer included.</li>
+ <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/4065">#4065</a>,
+ Boost Filesystem lexicographic path comparison inconsistent. This required
+ multiple source code bug fixes and code cleanup, correcting problems not
+ related to lexicographical issues.</li>
+ <li>Add class path member function <code>compare</code> for consistency with
+ std::string.</li>
+ <li>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.</li>
+ <li>Fix <a href="http://svn.boost.org/trac/boost/ticket/6690">#6690</a> and
+ <a href="http://svn.boost.org/trac/boost/ticket/6737">#6737</a>, resolving
+ static linking related problems with VC++ 8 through 11. Note that this fix may
+ reintroduce codecvt thread safety problems
+ <a href="http://svn.boost.org/trac/boost/ticket/4889">#4889</a>,
+ <a href="http://svn.boost.org/trac/boost/ticket/6320">#6320</a>, for these
+ compilers if static linking is used.</li>
+ <li>Add path::operator+= and concat functions to tack on things like suffixes
+ or numbers. Suggested by Ed Smith-Rowland and others.</li>
+ <li>Fix <a href="http://svn.boost.org/trac/boost/ticket/6809">#6809</a>,
+ 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.</li>
+ <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
+ treated as empty, even if it wasn't empty. Such arrays can occur in unions or
+ in code using C variable length array idioms.</li>
+ <li>Fix <a href="http://svn.boost.org/trac/boost/ticket/6932">#6932</a>,
+ create_directories throws exception even if error_code is specified.</li>
+</ul>
+
<h2>1.49.0</h2>
<ul>
<li>Fix <a href="https://svn.boost.org/trac/boost/ticket/3714">#3714</a>,
@@ -118,7 +174,7 @@
</ul>
<hr>
<p>Revised
-<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->24 January, 2012<!--webbot bot="Timestamp" endspan i-checksum="38510" --></p>
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->13 August, 2012<!--webbot bot="Timestamp" endspan i-checksum="34443" --></p>
<p>© Copyright Beman Dawes, 2011</p>
<p> Use, modification, and distribution are subject to the Boost Software
License, Version 1.0. See <a href="http://www.boost.org/LICENSE_1_0.txt">
diff --git a/libs/filesystem/v3/doc/src/README b/libs/filesystem/doc/src/README
index 7b2433e0e9..7b2433e0e9 100644
--- a/libs/filesystem/v3/doc/src/README
+++ b/libs/filesystem/doc/src/README
diff --git a/libs/filesystem/doc/src/boost-no-inspect b/libs/filesystem/doc/src/boost-no-inspect
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/libs/filesystem/doc/src/boost-no-inspect
diff --git a/libs/filesystem/v3/doc/src/boost_snippets.html b/libs/filesystem/doc/src/boost_snippets.html
index 16851aaee3..d0a38d143d 100644
--- a/libs/filesystem/v3/doc/src/boost_snippets.html
+++ b/libs/filesystem/doc/src/boost_snippets.html
@@ -13,8 +13,8 @@ $id frontmatter=
<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
<tr>
<td width="277">
-<a href="../../../../index.htm">
-<img src="../../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
+<a href="../../../index.htm">
+<img src="../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
<td align="middle">
<font size="7">Filesystem Library<br>
</font>
@@ -22,7 +22,8 @@ $id frontmatter=
</tr>
</table>
-<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
+ bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
<tr>
<td><a href="index.htm">Filesystem Home</a> &nbsp;&nbsp;
<a href="release_history.html">Releases</a> &nbsp;&nbsp;
@@ -48,11 +49,85 @@ $id wording_prefix=
<p>This reference documentation describes components that C++ programs may use
to perform operations involving file systems, including paths, regular files,
and directories.</p>
+
+<blockquote>
+<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
+ bordercolor="#111111" bgcolor="#D7EEFF" width="90%">
+ <tr>
+ <td width="100%" align="center" colspan="2">
+ <p align="center"><b>C++11 Support</b><p align="left">This reference
+ documentation is written as if all compilers supported C++11. Where
+ possible, the implementation falls back to C++03 if a C++11 feature is not
+ available.</td>
+ </tr>
+ <tr>
+ <td width="35%" align="center">
+ <b>C++11 Feature</b></td>
+ <td width="65%" align="center">
+ <b>Action if not supported by compiler</b></td>
+ </tr>
+ <tr>
+ <td width="35%" align="left">
+ <code>noexcept</code></td>
+ <td width="65%" align="left">
+ Keyword omitted.</td>
+ </tr>
+ <tr>
+ <td width="35%" align="left">
+ <code>constexpr</code></td>
+ <td width="65%" align="left">
+ Keyword omitted.</td>
+ </tr>
+ <tr>
+ <td width="35%" align="left">
+ <p dir="rtl">R-value references</td>
+ <td width="65%" align="left">
+ Function signature omitted.</td>
+ </tr>
+ <tr>
+ <td width="35%" align="left">
+ New character types</td>
+ <td width="65%" align="left">
+ <p dir="ltr">The <code>boost::filesystem</code> interface doesn't use the
+ new types directly. It does use <code>u16string</code> and <code>u32string</code>
+ in namespace <code>boost</code>. These are typedefs to <code>std::u16string</code>
+ and <code>std::u32string</code> for C++11, or to <code>
+ std::basic_string&lt;boost::u16_t&gt;</code> and <code>
+ std::basic_string&lt;boost::u32_t&gt;</code> for C++03.</td>
+ </tr>
+ <tr>
+ <td width="35%" align="left">
+ Defaulted and deleted functions</td>
+ <td width="65%" align="left">
+ Workaround replacement functions provided.</td>
+ </tr>
+ <tr>
+ <td width="35%" align="left">
+ Initializer lists</td>
+ <td width="65%" align="left">
+ Not currently used.</td>
+ </tr>
+ <tr>
+ <td width="35%" align="left">
+ Variadic templates</td>
+ <td width="65%" align="left">
+ Not currently used.</td>
+ </tr>
+ <tr>
+ <td width="35%" align="left">
+ Range-based for statements</td>
+ <td width="65%" align="left">
+ Supporting functions always provided; they do no harm even for C++03
+ compilers.</td>
+ </tr>
+</table>
+</blockquote>
+
$endid
$id wording_suffix=
<h3><a name="File-streams">File streams</a> -
-<a href="../../../../boost/filesystem/fstream.hpp">&lt;boost/filesystem/fstream.hpp&gt;</a></h3>
+<a href="../../../boost/filesystem/fstream.hpp">&lt;boost/filesystem/fstream.hpp&gt;</a></h3>
<p>Replacements are provided for the file stream classes from the C++ standard
library's <code>&lt;fstream&gt;</code> header. These replacement classes
publicly inherit from the standard library classes. In the Boost.Filesystem
@@ -115,7 +190,7 @@ $id backmatter=>
</font>
<a href="http://www.boost.org/LICENSE_1_0.txt"><font size="2">www.boost.org/LICENSE_1_0.txt</font></a></p>
<p><font size="2">Revised
-<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B %Y" startspan -->13 January 2012<!--webbot bot="Timestamp" endspan i-checksum="32267" --></font></p>
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B %Y" startspan -->16 July 2012<!--webbot bot="Timestamp" endspan i-checksum="18787" --></font></p>
$endid
diff --git a/libs/filesystem/doc/src/build.bat b/libs/filesystem/doc/src/build.bat
new file mode 100644
index 0000000000..95b7f40d0f
--- /dev/null
+++ b/libs/filesystem/doc/src/build.bat
@@ -0,0 +1,8 @@
+@echo off
+rem Copyright Beman Dawes 2012
+rem Distributed under the Boost Software License, Version 1.0.
+del tr2.html 2>nul
+mmp TARGET=TR2 source.html tr2.html
+del reference.html 2>nul
+mmp TARGET=BOOST source.html reference.html
+echo run "hoist" to hoist reference.html to doc directory
diff --git a/libs/filesystem/doc/src/hoist.bat b/libs/filesystem/doc/src/hoist.bat
new file mode 100644
index 0000000000..2d84c16b3a
--- /dev/null
+++ b/libs/filesystem/doc/src/hoist.bat
@@ -0,0 +1,5 @@
+@echo off
+rem Copyright Beman Dawes 2012
+rem Distributed under the Boost Software License, Version 1.0.
+copy /y reference.html ..
+echo reference.html copied to ..
diff --git a/libs/filesystem/v3/doc/reference.html b/libs/filesystem/doc/src/source.html
index f700275015..9e0f4480a2 100644
--- a/libs/filesystem/v3/doc/reference.html
+++ b/libs/filesystem/doc/src/source.html
@@ -1,55 +1,55 @@
<html>
+<!-- © Copyright Beman Dawes, 2002, 2006, 2007, 2009, 2010, 2011 -->
+<!-- Distributed under the Boost Software License, Version 1.0. -->
+<!-- See http://www.boost.org/LICENSE_1_0.txt -->
+
+<!-- generate-section-numbers=false -->
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<title>Filesystem V3 Reference
+<title>
+$if $TARGET; == BOOST
+ Filesystem Reference
+ $def WHAT "reference documentation"
+ $def SNIPPET_FILE "boost_snippets.html"
+ $def HEADER "boost/filesystem.hpp"
+ $def NAMESPACE boost
+ $def SUBNAMESPACE filesystem
+ $def NAMESPACE_BEGIN "namespace boost
+{
+ namespace filesystem
+ {"
+ $def NAMESPACE_END " } // namespace filesystem
+} // namespace boost"
+ $def CODECVT_ARG "const codecvt_type&amp; cvt"
+ $def CODECVT_ARG2 ", const codecvt_type&amp; cvt"
+ $def CODECVT_DEFAULT "=codecvt()"
+$else
+ Filesystem Proposal
+ $def WHAT "Clause"
+ $def SNIPPET_FILE "tr2_snippets.html"
+ $def HEADER "filesystem"
+ $def NAMESPACE std
+ $def SUBNAMESPACE filesystem
+ $def NAMESPACE_BEGIN "namespace std { namespace tbd { namespace filesystem {
+"
+ $def NAMESPACE_END "} } } // namespaces std::tbd::filesystem"
+ $def CODECVT_ARG ""
+ $def CODECVT_ARG2 ""
+ $def CODECVT_DEFAULT ""
+$endif
</title>
-<link rel="stylesheet" type="text/css" href="../../../../doc/src/minimal.css">
<style type="text/css">
- pre {background-color:#D7EEFF}
- body
- {
- font-family: sans-serif;
- max-width : 8.5in;
- margin: 1em;
- }
+$include "../../../../doc/src/minimal.css"
</style>
</head>
<body>
-<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
- <tr>
- <td width="277">
-<a href="../../../../index.htm">
-<img src="../../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
- <td align="middle">
- <font size="7">Filesystem Library<br>
- </font>
- <font size="6">Version 3</font></td>
- </tr>
-</table>
-
-<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
- <tr>
- <td><a href="index.htm">Filesystem Home</a> &nbsp;&nbsp;
- <a href="release_history.html">Releases</a> &nbsp;&nbsp;
- <a href="reference.html">Reference</a> &nbsp;&nbsp;
- <a href="tutorial.html">Tutorial</a> &nbsp;&nbsp;
- <a href="faq.htm">FAQ</a> &nbsp;&nbsp;
- <a href="portability_guide.htm">Portability</a> &nbsp;&nbsp;
- <a href="v3.html">V3 Intro</a> &nbsp;&nbsp;
- <a href="v3_design.html">V3 Design</a> &nbsp;&nbsp;
- <a href="deprecated.html">Deprecated</a> &nbsp;&nbsp;
- </td>
- </td>
- </tr>
-</table>
-
-<h1>Reference Documentation</h1>
+$snippet frontmatter "$SNIPPET_FILE;"
<h2><a name="TOC">Table of Contents</a></h2>
@@ -59,7 +59,7 @@
<a href="#Definitions">Definitions</a><br>
<a href="#Conformance">Conformance</a><br>
<a href="#Header-filesystem-synopsis">
- Header <code>&lt;boost/filesystem.hpp&gt;</code> synopsis</a><br>
+ Header <code>&lt;$HEADER;&gt;</code> synopsis</a><br>
<a href="#Error-reporting">Error reporting</a><br>
<a href="#class-path">Class <code>path</code></a><br>
&nbsp;&nbsp;&nbsp; <a href="#path-Conversions"><code>path</code> conversions</a><br>
@@ -72,16 +72,20 @@
&nbsp;&nbsp;&nbsp; <a href="#path-Requirements"><code>path</code> requirements</a><br>
&nbsp;&nbsp;&nbsp; <a href="#path-constructors"><code>path</code> constructors</a><br>
&nbsp;&nbsp;&nbsp; <a href="#path-assignments"><code>path</code> assignments</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#path-appends"><code>path</code> appends</a><br>
+ &nbsp;&nbsp;&nbsp;&nbsp;<a href="#path-appends"><code>path</code> appends</a><br>
+ &nbsp;&nbsp; &nbsp;<a href="#path-concatenation"><code>path</code> concatenation</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="#path-modifiers"><code>path</code> modifiers</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="#path-native-format-observers"><code>path</code> native
format observers</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="#path-generic-format-observers"><code>path</code> generic
format observers</a><br>
+&nbsp;&nbsp;&nbsp; <a href="#path-compare"><code>path</code> compare</a><br>
&nbsp;&nbsp;&nbsp; <a href="#path-decomposition"><code>path</code> decomposition</a><br>
&nbsp;&nbsp;&nbsp; <a href="#path-query"><code>path</code> query</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="#path-iterators"><code>path</code> iterators</a><br>
+$if $TARGET; == BOOST
&nbsp;&nbsp;&nbsp;&nbsp;<a href="#path-deprecated-functions"><code>path</code> deprecated functions</a><br>
+$endif
&nbsp;&nbsp;&nbsp;&nbsp;<a href="#path-non-member-functions"><code>path</code> non-member functions</a><br>
&nbsp;&nbsp;&nbsp;&nbsp;<a href="#path-inserter-extractor"><code>path</code> inserters and extractors</a><br>
&nbsp;<a href="#Class-filesystem_error">Class <code>filesystem_error</code></a><br>
@@ -135,7 +139,7 @@
&nbsp;&nbsp;&nbsp;&nbsp <a href="#is_regular_file">is_regular_file</a><br>
&nbsp;&nbsp;&nbsp;&nbsp <a href="#is_symlink">is_symlink</a><br>
&nbsp;&nbsp;&nbsp;&nbsp <a href="#last_write_time">last_write_time</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp; permissions<br>
+&nbsp;&nbsp;&nbsp;&nbsp; <a href="#permissions">permissions</a><br>
&nbsp;&nbsp;&nbsp;&nbsp; <a href="#read_symlink">read_symlink</a><br>
&nbsp;&nbsp;&nbsp;&nbsp <a href="#remove">remove</a><br>
&nbsp;&nbsp;&nbsp;&nbsp <a href="#remove_all">remove_all</a><br>
@@ -158,74 +162,179 @@
</tr>
</table>
-<h2><a name="Introduction">Introduction</a></h2>
+$snippet wording_prefix "$SNIPPET_FILE;"
+
+<h2><a name="Conformance">Conformance</a> [fs.conformance]</h2>
-<p>This reference documentation describes components that C++ programs may use
-to perform operations involving file systems, including paths, regular files,
-and directories.</p>
-<h2><a name="Definitions">Definitions</a></h2>
-<p>The following definitions shall apply throughout this reference documentation:</p>
-<p><i><b><a name="File">File</a>:</b> </i>An object that can be written to, or read from, or both. A file
-has certain attributes, including type. Common types of files include regular files
+<h3>ISO/IEC 9945 conformance [fs.conform.9945]</h3>
+<p>Some behavior in this $WHAT; is specified by reference to ISO/IEC 9945. How such behavior is actually implemented is unspecified.</p>
+<blockquote>
+<p>[<i>Note:</i> This constitutes an &quot;as if&quot; rule for implementation of
+operating system dependent behavior. In practice implementations will usually call native
+operating system API's. <i>--end note</i>]</p>
+</blockquote>
+<p>Implementations are encouraged to provide such behavior
+
+as it is defined by ISO/IEC 9945. Implementations shall document any
+behavior that differs from the behavior defined by ISO/IEC 9945. Implementations that do not support exact
+ISO/IEC 9945 behavior are
+encouraged to provide behavior as close to ISO/IEC 9945 behavior as is reasonable given the
+limitations of actual operating systems and file systems. If an implementation cannot provide any
+reasonable behavior, the implementation shall report an error in an
+implementation-defined manner.</p>
+<blockquote>
+<p>[<i>Note:</i> Such errors might be reported by an #error directive, a <code>
+static_assert</code>, a <code>filesystem_error</code> exception, a special
+return value, or some other manner. <i>--end note</i>]</p>
+</blockquote>
+<p>Implementations are not required to provide behavior that is not supported by
+a particular file system.</p>
+<blockquote>
+<p>[<i>Example:</i> The <a href="http://en.wikipedia.org/wiki/FAT_filesystem">
+FAT file system</a> used by some memory cards, camera memory, and floppy discs
+does not support hard links, symlinks, and many other features of more capable
+file systems. Implementations are only required to support the FAT features
+supported by the host operating system. <i>-- end example</i>]</p>
+</blockquote>
+<p>The behavior of functions described in this
+reference
+may differ from their specification in
+the presence of <a href="#Race-condition">file system races</a>. No diagnostic is required.</p>
+<p>If the possibility of a file system race would make it unreliable for a program to
+test for a precondition before calling a function described in this $WHAT;, <i>
+Requires</i> is not specified for the condition. Instead, the condition is
+specified as a <i>Throws</i> condition.</p>
+<blockquote>
+<p>[<i>Note:</i> As a design practice, preconditions are not specified when it
+is unreasonable for a program to detect them prior to calling the function. <i>
+-- end note</i>]</p>
+</blockquote>
+<h3>Operating system dependent conformance [fs.conform.os]</h3>
+<p>Some behavior is specified in this $WHAT; as being
+operating system dependent ([fs.def.osdep]). The operation system an
+implementation is dependent upon is implementation defined.</p>
+<p>It is permissible for an implementation to be dependent upon an operating
+system emulator rather than the actual operating system.</p>
+<blockquote>
+<p>[<i>Example:</i> An implementation uses Cygwin, a Linux® API emulator for
+some Windows® operating system versions. The implementation would define Cygwin
+as its operating system. Users could refer to the Cygwin documentation to find
+details of the operating system dependent behavior.&nbsp; <i>--end example</i>]</p>
+<p><span style="background-color: #E0E0E0"><i>It is user and conformance test
+detectable that such an implementation is running on Cygwin. Users would be
+misled and conformance tests would fail if the implementation defined Linux or
+Windows rather than Cygwin as the operating system, since real behavior is a
+blend of the two.</i></span> </p>
+</blockquote>
+<h2><a name="Definitions">Definitions</a> [fs.definitions]</h2>
+<p>The following definitions shall apply throughout this $WHAT;:</p>
+<h3><a name="operating system dependent">operating system dependent</a> behavior
+[fs.def.osdep]</h3>
+<p>Behavior that is dependent upon the behavior
+and characteristics of an operating system. See [fs.conform.os].</p>
+<h3><a name="file">file</a> [fs.def.file]</h3>
+<p>An object that can be written to, or read from, or both. A file
+has certain attributes, including type. File types include regular files
and directories. Other types of files, such as symbolic links, may be supported by the
implementation.</p>
-<p><b><i><a name="File-system">File system</a>:</i></b> A collection of files and certain of their attributes.</p>
-<p><b><i><a name="Filename">Filename</a>:</i></b> The name of a file. Slash and
-0x00
-characters are not permitted. Implementations may define additional
-characters or specific names that are not permitted. Filenames <code>.</code>&nbsp;
-and <code>..</code>&nbsp; have special meaning. Implementations may define
-additional filenames that have special meaning.</p>
-<blockquote>
- <p><i>[Note:</i> Most operating systems prohibit the ASCII control characters
- (0x00-0x1F) in filenames.</p>
- <p>Windows prohibits the characters 0x00-0x1F, <code>&quot;</code>,<code>
- *</code>,<code>&nbsp;:</code>,<code> &lt;</code>,<code> &gt;</code>,<code>&nbsp;?</code>,<code>
- \</code>,<code> /</code>, and<code> |</code>&nbsp;<i>--end note]</i></p>
-</blockquote>
-<p><b><i><a name="Path">Path</a>:</i></b> A sequence of elements that identify
+<h3><a name="file-system">file system</a> [fs.def.filesystem]</h3>
+<p>A collection of files and certain of their attributes.</p>
+<h3><a name="filename">filename</a> [fs.def.filename]</h3>
+ <p>The name of a file. Filenames <code>
+ &quot;.&quot;</code>&nbsp;
+and <code>&quot;..&quot;</code>&nbsp; have special meaning. The follow characteristics of
+ filenames are operating system dependent:</p>
+<ul>
+ <li>
+ <p>The permitted characters. See [<a href="#Operating-system-examples">fs.os.example</a>s].</p>
+ </li>
+ <li>
+ <p>Specific filenames that are not permitted.</p>
+ </li>
+ <li>
+ <p>Additional filenames that have special meaning.</p>
+ </li>
+ <li>
+ <p>Case awareness and sensitivity during path resolution.</p>
+ </li>
+ <li>
+ <p>Special rules that may apply to file types other than regular
+ files, such as directories.</p>
+ </li>
+</ul>
+<h3><a name="path">path</a> [fs.def.path]</h3>
+<p>A sequence of elements that identify
the location of a file within a filesystem. The elements are the <i>root-name<sub>opt</sub></i>, <i>
root-directory<sub>opt</sub></i>, and an optional sequence of filenames. [<i>Note:</i>
A <a href="#Pathname">pathname</a> is the concrete representation of a path. <i>--end note</i>]</p>
-<p><b><i><a name="Absolute-path">Absolute path</a>:</i></b> A path that
+
+<h3><a name="Absolute-path">absolute path</a> [fs.def.absolute-path]</h3>
+<p>A path that
unambiguously
-identifies the location of a file within a filesystem without reference to an
-additional starting location. The format is implementation defined. </p>
-<blockquote>
- <p><i>[Note:</i> For POSIX-like implementations, including<b> </b>Unix
- variants, Linux, and Mac OS X, only paths
- that begin with a slash are absolute paths.</p>
- <p>For Windows-like implementations, including <a href="http://www.cygwin.com/">
- Cygwin</a> and
- <a href="http://www.mingw.org/">MinGW</a>, only paths that begin with a drive
- specifier followed by a slash, or begin with two slashes, are absolute paths.&nbsp;<i>--end
- note]</i></p>
-</blockquote>
-<p><b><a name="Relative-path">Relative path</a>:</b> A path that only
+identifies the location of a file without reference to an additional starting
+location. The elements of a path that determine if it is absolute are
+operating system dependent.</p>
+
+<h3><a name="Relative-path">relative path</a> [fs.def.relative-path]</h3>
+<p>A path that
+is not absolute, and so only
unambiguously
-identifies the location of a file within a filesystem when resolved relative to
-a starting location. The format is implementation defined. [<i>Note:</i>
-Paths &quot;.&quot; and &quot;..&quot; are considered to be relative paths. <i>--end note</i>]</p>
-<p><b><a name="Canonical-path">Canonical path</a>:</b> An absolute path that has
-no elements which are symbolic links, and no dot or dot dot elements.</p>
-<p><i><b><a name="Pathname">Pathname</a>:</b> </i>A character string that represents a
-path. Pathnames are formatted according to the generic pathname format or the
-implementation defined
+identifies the location of a file when resolved relative to
+an implied starting location. The elements of a path that determine if it is
+relative are operating system dependent.&nbsp; [<i>Note:</i>
+Paths <code>&quot;.&quot;</code> and <code>&quot;..&quot;</code> are relative paths. <i>--end note</i>]</p>
+<h3><a name="canonical-path">canonical path</a> [fs.def.cannonical-path]</h3>
+<p>An absolute path that has
+no elements that are symbolic links, and no <code>&quot;.&quot;</code> or <code>&quot;..&quot;</code> elements.</p>
+<h3>pathname [fs.def.pathname]</h3>
+<p>A character string that represents
+the name of a
+path. Pathnames are formatted according to the generic pathname grammar or an
+operating system dependent
native pathname format.</p>
-<p><b><i><a name="generic-pathname-format">Generic pathname format:</a></i></b></p>
+
+<h3>native pathname format [fs.def.native]</h3>
+<p>The operating system dependent pathname format accepted by the host operating system.</p>
+<h3><a name="link">link</a> [fs.def.link]</h3>
+<p>A directory entry object that associates a
+filename with a file. On some file systems, several directory entries can
+associate names with the same file.</p>
+<h3><a name="hard-link">hard link</a> [fs.def.hardlink]</h3>
+<p>A link to an existing file. Some
+file systems support multiple hard links to a file. If the last hard link to a
+file is removed, the file itself is removed.</p>
<blockquote>
+<p>[<i>Note:</i> A hard link can be thought of as a shared-ownership smart
+pointer to a file.<i> -- end note</i>]<i> </i></p>
+</blockquote>
+<h3><a name="symbolic-link">symbolic link</a> [fs.def.symlink]</h3>
+<p>A type of file with the
+property that when the file is encountered during pathname resolution, a string
+stored by the file is used to modify the pathname resolution.</p>
+<blockquote>
+<p>[<i>Note:</i> A symbolic link can be thought of as a raw pointer to a file.
+If the file pointed to does not exist, the symbolic link is said to be a
+&quot;dangling&quot; symbolic link.<i> -- end note</i>]<i> </i></p>
+</blockquote>
+<h3><a name="file-system-race">file system race</a> [fs.def.race]</h3>
+<p>The condition that occurs
+when multiple threads, processes, or computers interleave access and
+modification of
+the same object within a file system.</p>
+<h2><a name="Generic-pathname-grammar">Generic pathname format</a> [path.generic]</h2>
<p><i>pathname:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root-name<sub>opt</sub>
root-directory<sub>opt</sub> relative-path<sub>opt</sub></i></p>
<p><i>root-name:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-implementation-defined</i></p>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </i>An
+operating system dependent name that identifies the starting location for
+absolute paths. </p>
<blockquote>
<blockquote>
-<p>[<i>Note:</i> Most POSIX and Windows based operating system define a name
-beginning with two slashes (or backslashes, for Windows) as a root-name
-identifying network locations. Windows defines a single letter followed by a
-<code>&quot;:&quot;</code> as a root-name identifying a disc drive. <i>--end note</i>]</p>
+<p>[<i>Note:</i> Many operating systems define a name
+beginning with two <i>directory-separator</i> characters as a <i>root-name</i>
+that identifies network or other resource locations. Some operating systems define a single letter followed by a colon as a drive
+specifier - a <i>root-name</i> identifying a specific device such as a disc drive. <i>--end note</i>]</p>
</blockquote>
</blockquote>
<p><i>root-directory:<br>
@@ -243,292 +352,372 @@ directory-separator filename</i></p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </i><code>&quot;.&quot;</code><i><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </i><code>
&quot;..&quot;</code></p>
+<p><i>preferred-separator:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </i>An
+operating system dependent directory separator character. May be a synonym for <i> <code>&quot;/&quot;</code>.</i></p>
<p><i>directory-separator:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <code>&quot;/&quot;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;/&quot;</code> directory-separator</i></p>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;/&quot;</code> directory-separator<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+preferred-separator<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+preferred-separator directory-separator</i></p>
<p>Multiple successive <i>directory-separator</i> characters are considered to
-be the same as one <i>directory-separator</i> character. The <i>filename</i>
+be the same as one <i>directory-separator</i> character.</p>
+<p>The <i>filename</i>
<code>&quot;.&quot;</code> is considered to be a reference to the current directory. The
-<i>filename</i> <code>&quot;..&quot;</code> is considered to be a reference to the current
-directory. Specific <i>filenames</i> may have special meaning for a particular
+<i>filename</i> <code>&quot;..&quot;</code> is considered to be a reference to the
+parent
+directory. Specific <i>filenames</i> may have special meanings for a particular
operating system.</p>
-</blockquote>
-<p><b><i><a name="native-pathname-format">Native pathname format:</a></i></b>&nbsp;
-An implementation defined format. [<i>Note:</i> For POSIX-like operating
-systems, the native format is the same as the generic format. For Windows, the
-native format is similar to the generic format, but the directory-separator
-characters can be either slashes or backslashes. <i>--end note</i>]</p>
-<p><i><b><a name="Link">Link</a>:</b> </i>A directory entry object that associates a
-filename with a file. On some file systems, several directory entries can
-associate names with the same file.</p>
-<p><b><i><a name="Hard-link">Hard link</a>:</i></b> A link to an existing file. Some
-file systems support multiple hard links to a file. If the last hard link to a
-file is removed, the file itself is removed.</p>
-<blockquote>
-<p>[<i>Note:</i> A hard link can be thought of as a shared-ownership smart
-pointer to a file.<i> -- end note</i>]<i> </i></p>
-</blockquote>
-<p><i><a name="Symbolic-link">S<b>ymbolic link</b></a><b>:</b> </i>A type of file with the
-property that when the file is encountered during pathname resolution, a string
-stored by the file is used to modify the pathname resolution.</p>
-<blockquote>
-<p>[<i>Note:</i> A symbolic link can be thought of as a raw pointer to a file.
-If the file pointed to does not exist, the symbolic link is said to be a
-&quot;dangling&quot; symbolic link.<i> -- end note</i>]<i> </i></p>
-</blockquote>
-<p><b><i><a name="Race-condition">Race condition</a>:</i></b> The condition that occurs
-when multiple threads, processes, or computers interleave access and
-modification of
-the same object within a file system.</p>
-<p><b><i><a name="Dot">Dot</a>, Dot Dot:</i></b> Synonyms for the filenames <code>&quot;.&quot;</code>
-and <code>&quot;..&quot;</code>, respectively. The dot filename names the current
-directory. The dot dot filename names the parent directory.</p>
-<h2><a name="Conformance">Conformance</a></h2>
-<p>Behavior is sometimes specified by reference to ISO/IEC 9945:2003, <i>
-<a href="http://www.unix.org/single_unix_specification/">POSIX</a></i>. How such behavior is actually implemented is unspecified.</p>
-<blockquote>
-<p>[<i>Note:</i> This constitutes an &quot;as if&quot; rule for implementation of
-operating system dependent behavior. Presumably implementations will usually call native
-operating system API's. <i>--end note</i>]</p>
-</blockquote>
-<p>Implementations are encouraged, but not required, to support such behavior
-
-as it is defined by <i>POSIX</i>. Implementations shall document any
-behavior that differs from the <i>POSIX</i> defined behavior. Implementations that do not support exact <i>POSIX</i> behavior are
-encouraged to provide behavior as close to <i>POSIX</i> behavior as is reasonable given the
-limitations of actual operating systems and file systems. If an implementation cannot provide any
-reasonable behavior, the implementation shall report an error in an
-implementation-defined manner.</p>
-<blockquote>
-<p>[<i>Note:</i> Such errors might be reported by an #error directive, a <code>
-static_assert</code>, a <code>filesystem_error</code> exception, a special
-return value, or some other manner. <i>--end note</i>]</p>
-</blockquote>
-<p>Implementations are not required to provide behavior that is not supported by
-a particular file system.</p>
-<blockquote>
-<p>[<i>Example:</i> The <a href="http://en.wikipedia.org/wiki/FAT_filesystem">
-FAT file system</a> used by some memory cards, camera memory, and floppy discs
-does not support hard links, symlinks, and many other features of more capable
-file systems. Implementations are only required to support the FAT features
-supported by the host operating system. <i>-- end example</i>]</p>
-</blockquote>
-<p>Specific operating systems such as <i>OpenMVS</i>,
-<i>UNIX</i>, and <i>Windows</i> are mentioned only for purposes of illustration or to
-give guidance to users and implementers. No slight to other operating systems is implied
-or intended. When unlikely to cause confusion, the term <i>POSIX</i> is
-sometimes used to refer to &quot;POSIX-compliant operating systems&quot;.</p>
-<p>The behavior of functions described in this
-reference
-may not be achieved in
-the presence of <a href="#Race-condition">race conditions</a>. No diagnostic is required.</p>
-<p>If the possibility of race conditions would make it unreliable for a program to
-test for a precondition before calling a function described in this clause, <i>
-Requires</i> is not specified for the condition. Instead, the condition is
-specified as a <i>Throws</i> condition.</p>
-<blockquote>
-<p>[<i>Note:</i> As a design practice, preconditions are not specified when it
-is unreasonable for a program to detect them prior to calling the function. <i>
--- end note</i>]</p>
-</blockquote>
-<h2><a name="Header-filesystem-synopsis">Header <code>&lt;boost/filesystem.hpp&gt;</code> synopsis</a></h2>
-<pre> namespace boost
- {
- namespace filesystem
+<h2><a name="Operating-system-examples">Operating system dependent examples</a> (Informative) [fs.os.examples]</h2>
+<p>Certain features are specified in this $WHAT; as being operating system dependent. The following table shows the application of those
+specifications for operating systems that use the ISO/IEC 9945 or Windows® application program interfaces
+(APIs).<sup>[footnote1]</sup></p>
+<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
+ <tr>
+ <td><b>Feature</b></td>
+ <td><b>Section</b></td>
+ <td><b>ISO/IEC 9945 API</b></td>
+ <td><b>Windows</b>®<b> API</b></td>
+ <td><b>Notes</b></td>
+ </tr>
+ <tr>
+ <td><code>path::value_type</code></td>
+ <td>[<a href="#class-path">class.path</a>]</td>
+ <td><code>char</code></td>
+ <td><code>wchar_t</code></td>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td><code>path::preferred_separator</code></td>
+ <td>[<a href="#class-path">class.path</a>]</td>
+ <td><code>'/'</code></td>
+ <td><code>L'\\'</code> (single backslash)</td>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td><code>path(&quot;/&quot;).is_absolute()<br>
+ path(&quot;c:/&quot;).is_absolute()</code></td>
+ <td>[<a href="#path-query">path.query</a>]</td>
+ <td><code>true<br>
+ false</code></td>
+ <td><code>false<br>
+ true</code></td>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td><code>path</code> argument disambiguation between generic format and
+ native format</td>
+ <td>[<a href="#path-Conversions-to-native-format">path.arg.fmt.cvt</a>]</td>
+ <td>Not required</td>
+ <td>Not required</td>
+ <td>There is no need to distinguish between the generic format and native
+ format for these operating systems.</td>
+ </tr>
+ <tr>
+ <td><code>path</code> argument format conversion</td>
+ <td>[<a href="#path-Conversions-to-native-format">path.arg.fmt.cvt</a>]</td>
+ <td>No conversion performed</td>
+ <td>No conversion performed</td>
+ <td>The generic format is already acceptable to the native API of these operating systems.</td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <p><code>path(&quot;/cats/jane&quot;).c_str()<br>
+ path(&quot;/cats/jane/&quot;).c_str()</code></td>
+ <td>[<a href="#path-Conversions-to-native-format">path.arg.fmt.cvt</a>]</td>
+ <td valign="top"> <code>&quot;/cats/jane&quot;<br>
+ &quot;/cats/jane/&quot;</code></td>
+ <td valign="top">
+ <p><code>L&quot;/cats/jane&quot;<br>
+ L&quot;/cats/jane/&quot;</code></td>
+ <td>These operating systems accept the same native separator between
+ directory names and a final file name, so no format conversion is performed.
+ Other operating systems might require conversion.</td>
+ </tr>
+ <tr>
+ <td>Format conversion by <code>path</code> native format observers</td>
+ <td>[<a href="#path-native-format-observers">path.native.obs</a>]</td>
+ <td>No conversion performed</td>
+ <td>No conversion performed</td>
+ <td>For efficiency, <code>path</code> objects are required to store pathnames in the native
+ format regardless of operating system.</td>
+ </tr>
+ <tr>
+ <td>
+ <p>Format conversion by <code>path</code> generic format observers</td>
+ <td>[<a href="#path-generic-format-observers">path.generic.obs</a>]</td>
+ <td>No conversion performed</td>
+ <td>Backslashes converted to slashes</td>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td><code>p.make_preferred()</code></td>
+ <td>[<a href="#path-modifiers">fs.path.modifiers</a>]</td>
+ <td>No change</td>
+ <td>Slashes converted to backslashes</td>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td>Characters prohibited in filenames</td>
+ <td>[<a href="#filename">fs.def.filename</a>]</td>
+ <td>0x00, <code>'/'</code></td>
+ <td>0x00-0x1F, <code>'&quot;'</code>, <code>'*'</code>,<code>&nbsp;'*'</code>,
+ <code>'&lt;'</code>,
+ <code>'&gt;'</code>, <code>'?'</code>, <code>'\\'</code> (single backslash),
+ <code>'/'</code>, <code>'|'</code></td>
+ <td>Many operating systems prohibit the ASCII control characters (0x00-0x1F)
+ in filenames.</td>
+ </tr>
+ <tr>
+ <td>Initial imbued <code>path</code> locale</td>
+ <td>[<a href="#path-imbued-locale">path.imbued.locale</a>]</td>
+ <td> <code>std::locale(&quot;&quot;)<br>
+ </code><sup>[footnote 2]</sup></td>
+ <td>Implementation supplied locale using <code>MultiByteToWideChar</code>
+ and <code>WideCharToMultiByte</code> with a codepage of <code>CP_ACP</code>
+ if <code>AreFileApisANSI()</code>is true, otherwise codepage <code>CP_OEMCP</code>.<sup>[footnote
+ 3]</sup></td>
+ <td>Apple OS X®:&nbsp; Implementation supplied locale providing UTF-8 <code>codecvt</code>
+ facet.<sup>[footnote 4]</sup></td>
+ </tr>
+</table>
+<p><sup>[footnote1]</sup> OS X® and Windows® are examples of commercially
+available operating systems. This information is given for the convenience of
+users of this document and does not constitute an endorsement by ISO or IEC of
+these products.</p>
+<p><sup>[footnote 2] </sup>Rationale: ISO C specifies <code>std::locale(&quot;&quot;)</code> as &quot;the locale-specific native
+environment&quot;, while ISO/IEC 9945 says it &quot;Specifies an implementation-defined native
+environment.&quot;</p>
+<p><sup>[footnote 3] </sup>Rationale: This is the current behavior of C and C++
+standard library functions that perform file operations using narrow character
+strings to identify paths. Changing this behavior would be surprising and at
+variance with existing code, particularly where user input is involved.</p>
+<p><sup>[footnote 4]</sup> Rationale: Vendor's documentation states &quot;All BSD
+system functions expect their string parameters to be in UTF-8 encoding and
+nothing else.&quot;</p>
+<h2><a name="Header-filesystem-synopsis">Header <code>&lt;$HEADER;&gt;</code> synopsis</a>
+[filesystem.synopsis]</h2>
+<pre>$NAMESPACE_BEGIN;
+ class <a href="#class-path">path</a>;
+
+$if $TARGET; == BOOST bool lexicographical_compare(path::iterator first1, path::iterator last1,
+ path::iterator first2, path::iterator last2);
+$endif; void swap(path&amp; lhs, path&amp; rhs);
+ std::size_t <a href="#hash_value">hash_value</a>(const path&amp; p);
+
+ bool operator==(const path&amp; lhs, const path&amp; rhs);
+ bool operator!=(const path&amp; lhs, const path&amp; rhs);
+ bool operator&lt; (const path&amp; lhs, const path&amp; rhs);
+ bool operator&lt;=(const path&amp; lhs, const path&amp; rhs);
+ bool operator&gt; (const path&amp; lhs, const path&amp; rhs);
+ bool operator&gt;=(const path&amp; lhs, const path&amp; rhs);
+
+ path operator/ (const path&amp; lhs, const path&amp; rhs);
+
+ std::ostream&amp; operator&lt;&lt;( std::ostream&amp; os, const path&amp; p );
+ std::wostream&amp; operator&lt;&lt;( std::wostream&amp; os, const path&amp; p );
+ std::istream&amp; operator&gt;&gt;( std::istream&amp; is, path&amp; p );
+ std::wistream&amp; operator&gt;&gt;( std::wistream&amp; is, path&amp; p )
+
+ class <a href="#Class-filesystem_error">filesystem_error</a>;
+ class <a href="#Class-directory_entry">directory_entry</a>;
+
+ class <a href="#Class-directory_iterator">directory_iterator</a>;
+
+ // enable c++11 range-based for statements
+ const directory_iterator&amp; <a href="#directory_iterator-non-member-functions">begin</a>(const directory_iterator&amp; iter);
+ directory_iterator <a href="#directory_iterator-non-member-functions">end</a>(const directory_iterator&amp;);
+
+$if $TARGET; == BOOST
+ // enable BOOST_FOREACH
+ directory_iterator&amp; range_begin(directory_iterator&amp; iter);
+ directory_iterator range_begin(const directory_iterator&amp; iter);
+ directory_iterator range_end(const directory_iterator&amp;);
+
+$endif
+ class <a href="#Class-recursive_directory_iterator">recursive_directory_iterator</a>;
+
+ // enable c++11 range-based for statements
+ const recursive_directory_iterator&amp; <a href="#recursive_directory_iterator-non-member-functions">begin</a>(const recursive_directory_iterator&amp; iter);
+ recursive_directory_iterator <a href="#recursive_directory_iterator-non-member-functions">end</a>(const recursive_directory_iterator&amp;);
+
+$if $TARGET; == BOOST
+ // enable BOOST_FOREACH
+ recursive_directory_iterator&amp; range_begin(recursive_directory_iterator&amp; iter);
+ recursive_directory_iterator range_begin(const recursive_directory_iterator&amp; iter);
+ recursive_directory_iterator range_end(const recursive_directory_iterator&amp;);
+
+$endif
+ enum <a name="file_type" href="#Enum-file_type">file_type</a>
{
- class <a href="#class-path">path</a>;
-
- void swap(path&amp; lhs, path&amp; rhs);
- bool lexicographical_compare(path::iterator first1, path::iterator last1,
- path::iterator first2, path::iterator last2);
- std::size_t <a href="#hash_value">hash_value</a>(const path&amp; p);
-
- bool operator==(const path&amp; lhs, const path&amp; rhs);
- bool operator!=(const path&amp; lhs, const path&amp; rhs);
- bool operator&lt; (const path&amp; lhs, const path&amp; rhs);
- bool operator&lt;=(const path&amp; lhs, const path&amp; rhs);
- bool operator&gt; (const path&amp; lhs, const path&amp; rhs);
- bool operator&gt;=(const path&amp; lhs, const path&amp; rhs);
-
- path operator/ (const path&amp; lhs, const path&amp; rhs);
-
- std::ostream&amp; operator&lt;&lt;( std::ostream&amp; os, const path&amp; p );
- std::wostream&amp; operator&lt;&lt;( std::wostream&amp; os, const path&amp; p );
- std::istream&amp; operator&gt;&gt;( std::istream&amp; is, path&amp; p );
- std::wistream&amp; operator&gt;&gt;( std::wistream&amp; is, path&amp; p )
-
- class <a href="#Class-filesystem_error">filesystem_error</a>;
- class <a href="#Class-directory_entry">directory_entry</a>;
+ status_error, file_not_found, regular_file, directory_file,
+ symlink_file, block_file, character_file, fifo_file, socket_file,
+ type_unknown
+ };
- class <a href="#Class-directory_iterator">directory_iterator</a>;
+ enum <a href="#Enum-perms">perms</a>
+ {
+ no_perms,
+ owner_read, owner_write, owner_exe, owner_all,
+ group_read, group_write, group_exe, group_all,
+ others_read, others_write, others_exe, others_all, all_all,
+ set_uid_on_exe, set_gid_on_exe, sticky_bit,
+ perms_mask, perms_not_known,
+ add_perms, remove_perms, symlink_perms
+ };
- class <a href="#Class-recursive_directory_iterator">recursive_directory_iterator</a>;
+ class <a href="#file_status">file_status</a>;
- enum <a name="file_type" href="#Enum-file_type">file_type</a>
- {
- status_error, file_not_found, regular_file, directory_file,
- symlink_file, block_file, character_file, fifo_file, socket_file,
- type_unknown
- };
-
- enum <a href="#Enum-perms">perms</a>
- {
- no_perms,
- owner_read, owner_write, owner_exe, owner_all,
- group_read, group_write, group_exe, group_all,
- others_read, others_write, others_exe, others_all, all_all,
- set_uid_on_exe, set_gid_on_exe, sticky_bit,
- perms_mask, perms_not_known,
- add_perms, remove_perms, symlink_perms
- };
+ struct <a name="space_info">space_info</a> // returned by <a href="#space" style="text-decoration: none">space</a> function
+ {
+ uintmax_t capacity;
+ uintmax_t free;
+ uintmax_t available; // free space available to a non-privileged process
+ };
- class <a href="#file_status">file_status</a>;
+ enum class <a name="copy_option">copy_option</a>
+ {
+ none
+ fail_if_exists = none,
+ overwrite_if_exists
+ };
- struct <a name="space_info">space_info</a> // returned by <a href="#space" style="text-decoration: none">space</a> function
- {
- uintmax_t capacity;
- uintmax_t free;
- uintmax_t available; // free space available to a non-privileged process
- };
+ enum class <a name="symlink_option">symlink_option</a>
+ {
+ none
+ no_recurse = none,
+ recurse
+ };
- BOOST_SCOPED_ENUM_START(<a name="copy_option">copy_option</a>)
- {
- none
- fail_if_exists = none,
- overwrite_if_exists
- };
- BOOST_SCOPED_ENUM_END
+ // <a href="#Operational-functions">operational functions</a>
- BOOST_SCOPED_ENUM_START(<a name="symlink_option">symlink_option</a>)
- {
- none
- no_recurse = none,
- recurse
- };
- BOOST_SCOPED_ENUM_END
+ path <a href="#absolute">absolute</a>(const path&amp; p, const path&amp; base=current_path());
- // <a href="#Operational-functions">operational functions</a>
+ path <a href="#canonical">canonical</a>(const path&amp; p, const path&amp; base = current_path());
+ path <a href="#canonical">canonical</a>(const path&amp; p, system::error_code&amp; ec);
+ path <a href="#canonical">canonical</a>(const path&amp; p, const path&amp; base, system::error_code&amp; ec);
- path <a href="#absolute">absolute</a>(const path&amp; p, const path&amp; base=current_path());
+ void <a href="#copy">copy</a>(const path&amp; from, const path&amp; to);
+ void <a href="#copy">copy</a>(const path&amp; from, const path&amp; to, system::error_code&amp; ec);
- path <a href="#canonical">canonical</a>(const path&amp; p, const path&amp; base = current_path());
- path <a href="#canonical">canonical</a>(const path&amp; p, system::error_code&amp; ec);
- path <a href="#canonical">canonical</a>(const path&amp; p, const path&amp; base, system::error_code&amp; ec);
+ void <a href="#create_directory">copy_directory</a>(const path&amp; from, const path&amp; to);
+ void <a href="#create_directory">copy_directory</a>(const path&amp; from, const path&amp; to, system::error_code&amp; ec);
- void <a href="#copy">copy</a>(const path&amp; from, const path&amp; to);
- void <a href="#copy">copy</a>(const path&amp; from, const path&amp; to, system::error_code&amp; ec);
+ void <a href="#copy_file">copy_file</a>(const path&amp; from, const path&amp; to);
+ void <a href="#copy_file">copy_file</a>(const path&amp; from, const path&amp; to, system::error_code&amp; ec);
+ void <a href="#copy_file">copy_file</a>(const path&amp; from, const path&amp; to, <a href="#copy_option">copy_option</a> option);
+ void <a href="#copy_file">copy_file</a>(const path&amp; from, const path&amp; to, <a href="#copy_option">copy_option</a> option,
+ system::error_code&amp; ec);
- void <a href="#create_directory">copy_directory</a>(const path&amp; from, const path&amp; to);
- void <a href="#create_directory">copy_directory</a>(const path&amp; from, const path&amp; to, system::error_code&amp; ec);
+ void <a href="#copy_symlink">copy_symlink</a>(const path&amp; existing_symlink, const path&amp; new_symlink);
+ void <a href="#copy_symlink">copy_symlink</a>(const path&amp; existing_symlink, const path&amp; new_symlink,
+ system::error_code&amp; ec);
- void <a href="#copy_file">copy_file</a>(const path&amp; from, const path&amp; to);
- void <a href="#copy_file">copy_file</a>(const path&amp; from, const path&amp; to, system::error_code&amp; ec);
- void <a href="#copy_file">copy_file</a>(const path&amp; from, const path&amp; to, BOOST_SCOPED_ENUM(<a href="#copy_option">copy_option</a>) option);
- void <a href="#copy_file">copy_file</a>(const path&amp; from, const path&amp; to, BOOST_SCOPED_ENUM(<a href="#copy_option">copy_option</a>) option,
- system::error_code&amp; ec);
+ bool <a href="#create_directories">create_directories</a>(const path&amp; p);
+ bool <a href="#create_directories">create_directories</a>(const path&amp; p, system::error_code&amp; ec);
- void <a href="#copy_symlink">copy_symlink</a>(const path&amp; existing_symlink, const path&amp; new_symlink);
- void <a href="#copy_symlink">copy_symlink</a>(const path&amp; existing_symlink, const path&amp; new_symlink, system::error_code&amp; ec);
+ bool <a href="#create_directory">create_directory</a>(const path&amp; p);
+ bool <a href="#create_directory">create_directory</a>(const path&amp; p, system::error_code&amp; ec);
- bool <a href="#create_directories">create_directories</a>(const path&amp; p);
- bool <a href="#create_directories">create_directories</a>(const path&amp; p, system::error_code&amp; ec);
+ void <a href="#create_directory_symlink">create_directory_symlink</a>(const path&amp; to, const path&amp; new_symlink);
+ void <a href="#create_directory_symlink">create_directory_symlink</a>(const path&amp; to, const path&amp; new_symlink,
+ system::error_code&amp; ec);
- bool <a href="#create_directory">create_directory</a>(const path&amp; p);
- bool <a href="#create_directory">create_directory</a>(const path&amp; p, system::error_code&amp; ec);
+ void <a href="#create_hard_link">create_hard_link</a>(const path&amp; to, const path&amp; new_hard_link);
+ void <a href="#create_hard_link">create_hard_link</a>(const path&amp; to, const path&amp; new_hard_link,
+ system::error_code&amp; ec);
- void <a href="#create_directory_symlink">create_directory_symlink</a>(const path&amp; to, const path&amp; new_symlink);
- void <a href="#create_directory_symlink">create_directory_symlink</a>(const path&amp; to, const path&amp; new_symlink, system::error_code&amp; ec);
+ void <a href="#create_symlink">create_symlink</a>(const path&amp; to, const path&amp; new_symlink);
+ void <a href="#create_symlink">create_symlink</a>(const path&amp; to, const path&amp; new_symlink,
+ system::error_code&amp; ec);
- void <a href="#create_hard_link">create_hard_link</a>(const path&amp; to, const path&amp; new_hard_link);
- void <a href="#create_hard_link">create_hard_link</a>(const path&amp; to, const path&amp; new_hard_link, system::error_code&amp; ec);
+ path <a href="#current_path">current_path</a>();
+ path <a href="#current_path">current_path</a>(system::error_code&amp; ec);
+ void <a href="#current_path">current_path</a>(const path&amp; p);
+ void <a href="#current_path">current_path</a>(const path&amp; p, system::error_code&amp; ec);
- void <a href="#create_symlink">create_symlink</a>(const path&amp; to, const path&amp; new_symlink);
- void <a href="#create_symlink">create_symlink</a>(const path&amp; to, const path&amp; new_symlink, system::error_code&amp; ec);
+ bool <a href="#exists">exists</a>(file_status s) noexcept;
+ bool <a href="#exists">exists</a>(const path&amp; p);
+ bool <a href="#exists">exists</a>(const path&amp; p, system::error_code&amp; ec) noexcept;
- path <a href="#current_path">current_path</a>();
- path <a href="#current_path">current_path</a>(system::error_code&amp; ec);
- void <a href="#current_path">current_path</a>(const path&amp; p);
- void <a href="#current_path">current_path</a>(const path&amp; p, system::error_code&amp; ec);
+ bool <a href="#equivalent">equivalent</a>(const path&amp; p1, const path&amp; p2);
+ bool <a href="#equivalent">equivalent</a>(const path&amp; p1, const path&amp; p2, system::error_code&amp; ec);
- bool <a href="#exists">exists</a>(file_status s);
- bool <a href="#exists">exists</a>(const path&amp; p);
- bool <a href="#exists">exists</a>(const path&amp; p, system::error_code&amp; ec);
+ uintmax_t <a href="#file_size">file_size</a>(const path&amp; p);
+ uintmax_t <a href="#file_size">file_size</a>(const path&amp; p, system::error_code&amp; ec);
- bool <a href="#equivalent">equivalent</a>(const path&amp; p1, const path&amp; p2);
- bool <a href="#equivalent">equivalent</a>(const path&amp; p1, const path&amp; p2, system::error_code&amp; ec);
+ uintmax_t <a href="#hard_link_count">hard_link_count</a>(const path&amp; p);
+ uintmax_t <a href="#hard_link_count">hard_link_count</a>(const path&amp; p, system::error_code&amp; ec);
- uintmax_t <a href="#file_size">file_size</a>(const path&amp; p);
- uintmax_t <a href="#file_size">file_size</a>(const path&amp; p, system::error_code&amp; ec);
- uintmax_t <a href="#hard_link_count">hard_link_count</a>(const path&amp; p);
- uintmax_t <a href="#hard_link_count">hard_link_count</a>(const path&amp; p, system::error_code&amp; ec);
+ const path&amp; <a href="#initial_path">initial_path</a>();
+ const path&amp; <a href="#initial_path">initial_path</a>(<code>system::error_code&amp; ec</code>);
- const path&amp; <a href="#initial_path">initial_path</a>();
- const path&amp; <a href="#initial_path">initial_path</a>(<code>system::error_code&amp; ec</code>);
+ bool <a href="#is_directory">is_directory</a>(file_status s) noexcept;
+ bool <a href="#is_directory2">is_directory</a>(const path&amp; p);
+ bool <a href="#is_directory2">is_directory</a>(const path&amp; p, system::error_code&amp; ec) noexcept;
- bool <a href="#is_directory">is_directory</a>(file_status s);
- bool <a href="#is_directory2">is_directory</a>(const path&amp; p);
- bool <a href="#is_directory2">is_directory</a>(const path&amp; p, system::error_code&amp; ec);
+ bool <a href="#is_empty">is_empty</a>(const path&amp; p);
+ bool <a href="#is_empty">is_empty</a>(const path&amp; p, system::error_code&amp; ec);
- bool <a href="#is_empty">is_empty</a>(const path&amp; p);
- bool <a href="#is_empty">is_empty</a>(const path&amp; p, system::error_code&amp; ec);
+ bool <a href="#is_other">is_other</a>(file_status s) noexcept;
+ bool <a href="#is_other2">is_other</a>(const path&amp; p,);
+ bool <a href="#is_other2">is_other</a>(const path&amp; p, system::error_code&amp; ec) noexcept;
- bool <a href="#is_other">is_other</a>(file_status s);
- bool <a href="#is_other2">is_other</a>(const path&amp; p,);
- bool <a href="#is_other2">is_other</a>(const path&amp; p, system::error_code&amp; ec);
+ bool <a href="#is_regular_file">is_regular_file</a>(file_status s) noexcept;
+ bool i<a href="#is_regular_file2">s_regular_file</a>(const path&amp; p);
+ bool i<a href="#is_regular_file2">s_regular_file</a>(const path&amp; p, system::error_code&amp; ec) noexcept;
- bool <a href="#is_regular_file">is_regular_file</a>(file_status s);
- bool i<a href="#is_regular_file2">s_regular_file</a>(const path&amp; p);
- bool i<a href="#is_regular_file2">s_regular_file</a>(const path&amp; p, system::error_code&amp; ec);
+ bool <a href="#is_symlink">is_symlink</a>(file_status s noexcept);
+ bool <a href="#is_symlink2">is_symlink</a>(const path&amp; p);
+ bool <a href="#is_symlink2">is_symlink</a>(const path&amp; p, system::error_code&amp; ec) noexcept;
- bool <a href="#is_symlink">is_symlink</a>(file_status s);
- bool <a href="#is_symlink2">is_symlink</a>(const path&amp; p);
- bool <a href="#is_symlink2">is_symlink</a>(const path&amp; p, system::error_code&amp; ec);
+ std::time_t <a href="#last_write_time">last_write_time</a>(const path&amp; p);
+ std::time_t <a href="#last_write_time">last_write_time</a>(const path&amp; p, system::error_code&amp; ec);
+ void <a href="#last_write_time2">last_write_time</a>(const path&amp; p, const std::time_t new_time);
+ void <a href="#last_write_time2">last_write_time</a>(const path&amp; p, const std::time_t new_time,
+ system::error_code&amp; ec);
- std::time_t <a href="#last_write_time">last_write_time</a>(const path&amp; p);
- std::time_t <a href="#last_write_time">last_write_time</a>(const path&amp; p, system::error_code&amp; ec);
- void <a href="#last_write_time2">last_write_time</a>(const path&amp; p, const std::time_t new_time);
- void <a href="#last_write_time2">last_write_time</a>(const path&amp; p, const std::time_t new_time, system::error_code&amp; ec);
+ path <a href="#read_symlink">read_symlink</a>(const path&amp; p);
+ path <a href="#read_symlink">read_symlink</a>(const path&amp; p, system::error_code&amp; ec);
- path <a href="#read_symlink">read_symlink</a>(const path&amp; p);
- path <a href="#read_symlink">read_symlink</a>(const path&amp; p, system::error_code&amp; ec);
+ bool <a href="#remove">remove</a>(const path&amp; p);
+ bool <a href="#remove">remove</a>(const path&amp; p, system::error_code&amp; ec);
- bool <a href="#remove">remove</a>(const path&amp; p);
- bool <a href="#remove">remove</a>(const path&amp; p, system::error_code&amp; ec);
+ uintmax_t <a href="#remove_all">remove_all</a>(const path&amp; p);
+ uintmax_t <a href="#remove_all">remove_all</a>(const path&amp; p, system::error_code&amp; ec);
- uintmax_t <a href="#remove_all">remove_all</a>(const path&amp; p);
- uintmax_t <a href="#remove_all">remove_all</a>(const path&amp; p, system::error_code&amp; ec);
+ void <a href="#rename">rename</a>(const path&amp; from, const path&amp; to);
+ void <a href="#rename">rename</a>(const path&amp; from, const path&amp; to, system::error_code&amp; ec);
- void <a href="#rename">rename</a>(const path&amp; from, const path&amp; to);
- void <a href="#rename">rename</a>(const path&amp; from, const path&amp; to, system::error_code&amp; ec);
+ void <a href="#resize_file">resize_file</a>(const path&amp; p, uintmax_t size);
+ void <a href="#resize_file2">resize_file</a>(const path&amp; p, uintmax_t size, system::error_code&amp; ec);
- void <a href="#resize_file">resize_file</a>(const path&amp; p, uintmax_t size);
- void <a href="#resize_file2">resize_file</a>(const path&amp; p, uintmax_t size, system::error_code&amp; ec);
+ <a href="#space_info">space_info</a> <a href="#space">space</a>(const path&amp; p);
+ <a href="#space_info">space_info</a> <a href="#space">space</a>(const path&amp; p, system::error_code&amp; ec);
- <a href="#space_info">space_info</a> <a href="#space">space</a>(const path&amp; p);
- <a href="#space_info">space_info</a> <a href="#space">space</a>(const path&amp; p, system::error_code&amp; ec);
- <a href="#file_status">file_status</a> <a href="#status">status</a>(const path&amp; p);
- <a href="#file_status">file_status</a> <a href="#status">status</a>(const path&amp; p, system::error_code&amp; ec);
+ <a href="#file_status">file_status</a> <a href="#status">status</a>(const path&amp; p);
+ <a href="#file_status">file_status</a> <a href="#status">status</a>(const path&amp; p, system::error_code&amp; ec) noexcept;
- bool <a href="#status_known">status_known</a>(file_status s);
+ bool <a href="#status_known">status_known</a>(file_status s) noexcept;
- <a href="#file_status">file_status</a> <a href="#symlink_status">symlink_status</a>(const path&amp; p);
- <a href="#file_status">file_status</a> <a href="#symlink_status">symlink_status</a>(const path&amp; p, system::error_code&amp; ec);
+ <a href="#file_status">file_status</a> <a href="#symlink_status">symlink_status</a>(const path&amp; p);
+ <a href="#file_status">file_status</a> <a href="#symlink_status">symlink_status</a>(const path&amp; p, system::error_code&amp; ec) noexcept;
- path <a href="#system_complete">system_complete</a>(const path&amp; p);
- path <a href="#system_complete">system_complete</a>(const path&amp; p, system::error_code&amp; ec);
+ path <a href="#system_complete">system_complete</a>(const path&amp; p);
+ path <a href="#system_complete">system_complete</a>(const path&amp; p, system::error_code&amp; ec);
- path <a href="#temp_directory_path">temp_directory_path</a>();
- path <a href="#temp_directory_path">temp_directory_path</a>(system::error_code&amp; ec);
+ path <a href="#temp_directory_path">temp_directory_path</a>();
+ path <a href="#temp_directory_path">temp_directory_path</a>(system::error_code&amp; ec);
- path <a href="#unique_path">unique_path</a>(const path&amp; model=&quot;%%%%-%%%%-%%%%-%%%%&quot;);
- path <a href="#unique_path">unique_path</a>(const path&amp; model, system::error_code&amp; ec);
+ path <a href="#unique_path">unique_path</a>(const path&amp; model=&quot;%%%%-%%%%-%%%%-%%%%&quot;);
+ path <a href="#unique_path">unique_path</a>(const path&amp; model, system::error_code&amp; ec);
- } // namespace filesystem
- } // namespace boost</pre>
-<h2><a name="Error-reporting">Error reporting</a></h2>
+$NAMESPACE_END;</pre>
+<h2><a name="Error-reporting">Error reporting</a> [fs.err.report]</h2>
<p>Filesystem library functions often provide two overloads, one that
-throws an exception to report file system errors, and another that sets an
-<code>error_code</code>.</p>
+throws an exception to report file system errors, and another that sets an <code>error_code</code>.</p>
<blockquote>
<p>[<i>Note:</i> This supports two common use cases:</p>
<ul>
@@ -543,9 +732,7 @@ errors are truly exceptional and indicate a serious failure. Throwing an
</ul>
<p><i>--end note</i>]</p>
</blockquote>
-<p>Functions <b>not</b> having an argument of type
-<code>system::error_code&amp;</code>
-report errors as follows, unless otherwise specified:</p>
+<p>Functions <b>not</b> having an argument of type <code>system::error_code&amp;</code> report errors as follows, unless otherwise specified:</p>
<ul>
<li>When a call by the
implementation to an operating system or other underlying API results in an
@@ -558,8 +745,7 @@ report errors as follows, unless otherwise specified:</p>
&nbsp;</li>
<li>Destructors throw nothing.</li>
</ul>
- <p>Functions having an argument of type
-<code>system::error_code&amp;</code> report errors as follows, unless otherwise
+ <p>Functions having an argument of type <code>system::error_code&amp;</code> report errors as follows, unless otherwise
specified:</p>
<ul>
<li>If a call by the
@@ -574,51 +760,46 @@ report errors as follows, unless otherwise specified:</p>
throwing an exception as described in the C++ standard,
17.6.4.10 [res.on.exception.handling].</li>
</ul>
-<h2><a name="class-path">Class <code>path</code></a></h2>
+<h2><a name="class-path">Class <code>path</code> [class.path]</a></h2>
<p>An object of class <code>path</code> represents a <a href="#Path">path</a>,
and contains a <a href="#Pathname">pathname</a> Such an object is concerned only with the lexical and syntactic aspects
of a path. The path does not necessarily exist in external storage, and the
pathname is not necessarily valid for the current operating
system or for a particular file system.</p>
-<blockquote>
-<p>[<i>Example:</i> A <a href="#long-path-warning">long path name on Windows</a>
-is an example of an innocuous appearing path that is not actually valid. <i>--
-end example</i>]</p>
-</blockquote>
-<pre> namespace boost
- {
- namespace filesystem
- {
+<pre>$NAMESPACE_BEGIN;
class path
{
public:
- typedef <b><i><a href="#value_type">see below</a></i></b> value_type; // char for POSIX, wchar_t for Windows
+ typedef <b><i><a href="#value_type">see below</a></i></b> value_type;
typedef std::basic_string&lt;value_type&gt; string_type;
typedef std::codecvt&lt;wchar_t, char, std::mbstate_t&gt; codecvt_type;
+ constexpr value_type preferred_separator;
// <a href="#path-constructors">constructors</a> and destructor
path();
path(const path&amp; p);
+ path(path&amp;&amp; p) noexcept;
template &lt;class <a href="#Source">Source</a>&gt;
- path(Source const&amp; source, const codecvt_type&amp; cvt=codecvt());
+ path(Source const&amp; source$CODECVT_ARG2;$CODECVT_DEFAULT;);
template &lt;class <a href="#InputIterator">InputIterator</a>&gt;
- path(InputIterator begin, InputIterator end, const codecvt_type&amp; cvt=codecvt());
+ path(InputIterator begin, InputIterator end$CODECVT_ARG2;$CODECVT_DEFAULT;);
~path();
// <a href="#path-assignments">assignments</a>
path&amp; operator=(const path&amp; p);
+ path&amp; operator=(path&amp;&amp; p) noexcept;
template &lt;class <a href="#Source">Source</a>&gt;
path&amp; operator=(Source const&amp; source);
- template &lt;class <a href="#Source">Source</a>&gt;
- path&amp; assign(Source const&amp; source, const codecvt_type&amp; cvt)
+$if $TARGET; == BOOST template &lt;class <a href="#Source">Source</a>&gt;
+ path&amp; assign(Source const&amp; source$CODECVT_ARG2;)
- template &lt;class <a href="#InputIterator">InputIterator</a>&gt;
- path&amp; assign(InputIterator begin, InputIterator end, const codecvt_type&amp; cvt=codecvt());
+$endif; template &lt;class <a href="#InputIterator">InputIterator</a>&gt;
+ path&amp; assign(InputIterator begin, InputIterator end$CODECVT_ARG2;$CODECVT_DEFAULT;);
// <a href="#path-appends">appends</a>
path&amp; operator/=(const path&amp; p);
@@ -626,40 +807,61 @@ end example</i>]</p>
template &lt;class <a href="#Source">Source</a>&gt;
path&amp; operator/=(Source const&amp; source);
- template &lt;class <a href="#Source">Source</a>&gt;
- path&amp; append(Source const&amp; source, const codecvt_type&amp; cvt);
-
- template &lt;class <a href="#InputIterator">InputIterator</a>&gt;
- path&amp; append(InputIterator begin, InputIterator end, const codecvt_type&amp; cvt=codecvt());
-
+$if $TARGET; == BOOST template &lt;class <a href="#Source">Source</a>&gt;
+ path&amp; append(Source const&amp; source$CODECVT_ARG2;);
+
+$endif; template &lt;class <a href="#InputIterator">InputIterator</a>&gt;
+ path&amp; append(InputIterator begin, InputIterator end$CODECVT_ARG2;$CODECVT_DEFAULT;);
+
+ // <a href="#path-concatenation">concatenation</a>
+ path&amp; operator+=(const path&amp; x);
+ path&amp; operator+=(const string_type&amp; x);
+ path&amp; operator+=(const value_type* x);
+ path&amp; operator+=(value_type x);
+ template &lt;class Source&gt;
+ path&amp; operator+=(Source const&amp; x);
+ template &lt;class CharT&gt;
+ path&amp; operator+=(CharT x);
+$if $TARGET; == BOOST template &lt;class Source&gt;
+ path&amp; concat(Source const&amp; x$CODECVT_ARG2;);
+$endif; template &lt;class InputIterator&gt;
+ path&amp; concat(InputIterator begin, InputIterator end);
+ template &lt;class InputIterator&gt;
+ path&amp; concat(InputIterator begin, InputIterator end$CODECVT_ARG2;);
+
// <a href="#path-modifiers">modifiers</a>
void <a href="#path-clear">clear</a>();
path&amp; <a href="#absolute">make_absolute</a>(const path&amp; base);
- path&amp; <a href="#path-make_preferred">make_preferred</a>(); // POSIX: no effect. Windows: convert slashes to backslashes
+ path&amp; <a href="#path-make_preferred">make_preferred</a>();
path&amp; <a href="#path-remove_filename">remove_filename</a>();
path&amp; <a href="#path-replace_extension">replace_extension</a>(const path&amp; new_extension = path());
void <a href="#path-swap">swap</a>(path&amp; rhs);
// <a href="#path-native-format-observers">native format observers</a>
- const string_type&amp; <a href="#native">native</a>() const; // native format, encoding
- const value_type* <a href="#c_str">c_str</a>() const; // native().c_str()
+ const string_type&amp; <a href="#native">native</a>() const noexcept; // native format, encoding
+ const value_type* <a href="#c_str">c_str</a>() const noexcept; // native().c_str()
template &lt;class String&gt;
- String <a href="#string-template">string</a>(const codecvt_type&amp; cvt=codecvt()) const; // native format
+ String <a href="#string-template">string</a>($CODECVT_ARG;$CODECVT_DEFAULT;) const; // native format
- const string <a href="#string">string</a>(const codecvt_type&amp; cvt=codecvt()) const; // native format
- const wstring <a href="#wstring">wstring</a>(const codecvt_type&amp; cvt=codecvt()) const; // ditto
- const u16string <a href="#u16string">u16string</a>() const; // ditto
- const u32string <a href="#u32wstring">u32string</a>() const; // ditto
+ string <a href="#string">string</a>($CODECVT_ARG;$CODECVT_DEFAULT;) const; // native format
+ wstring <a href="#wstring">wstring</a>($CODECVT_ARG;$CODECVT_DEFAULT;) const; // native format
+ u16string <a href="#u16string">u16string</a>() const; // native format
+ u32string <a href="#u32wstring">u32string</a>() const; // native format
// <a href="#path-generic-format-observers">generic format observers</a>
template &lt;class String&gt;
- String <a href="#generic_string-template">generic_string</a>() const;
+ String <a href="#generic_string-template">generic_string</a>() const;
+
+ string <a href="#generic_string">generic_string</a>($CODECVT_ARG;$CODECVT_DEFAULT;) const; // generic format
+ wstring <a href="#generic_wstring">generic_wstring</a>($CODECVT_ARG;$CODECVT_DEFAULT;) const; // generic format
+ u16string <a href="#generic_u16string">generic_u16string</a>() const; // generic format
+ u32string <a href="#generic_u32wstring">generic_u32string</a>() const; // generic format
- const string <a href="#generic_string">generic_string</a>(const codecvt_type&amp; cvt=codecvt()) const; // generic format
- const wstring <a href="#generic_wstring">generic_wstring</a>(const codecvt_type&amp; cvt=codecvt()) const; // ditto
- const u16string <a href="#generic_u16string">generic_u16string</a>() const; // ditto
- const u32string <a href="#generic_u32wstring">generic_u32string</a>() const; // ditto
+ // <a href="#path-compare">compare</a>
+ int <a href="#path-compare">compare</a>(const path&amp; p) const noexcept;
+ int <a href="#path-compare">compare</a>(const std::string&amp; s) const;
+ int <a href="#path-compare">compare</a>(const value_type* s) const;
// <a href="#path-decomposition">decomposition</a>
path <a href="#path-root_name">root_name</a>() const;
@@ -691,140 +893,57 @@ end example</i>]</p>
iterator begin() const;
iterator end() const;
- // <a href="#path_encoding">encoding conversion</a>
- static std::locale <a href="#path-imbue">imbue</a>( const std::locale&amp; loc );
+ // <a href="#path-imbued-locale">imbued locale</a>
+ static std::locale <a href="#path-imbue">imbue</a>(const std::locale&amp; loc);
static const codecvt_type &amp; <a href="#path-codecvt">codecvt</a>();
private:
string_type pathname; // <b><i>exposition only</i></b>
};
- } // namespace filesystem
- } // namespace boost</pre>
-<p><code><a name="value_type">value_type</a></code> is an implementation-defined
-<code>typedef</code> for the
+$NAMESPACE_END;</pre>
+<p><code><a name="value_type">value_type</a></code> is a <code>typedef</code> for the
character type used by the operating system to represent pathnames.</p>
-<p>Member functions described as returning <code>const string</code>, <code>
-const wstring</code>, <code>const u16string</code>, or <code>const u32string</code> are permitted to return <code>const string&amp;</code>, <code>const
-wstring&amp;</code>, <code>const u16string&amp;</code>, or <code>const u32string&amp;</code>,
-respectively.</p>
-<blockquote>
-<p>[<i>Note:</i> This allows implementations to avoid unnecessary copies when no
-conversion is required.
-Return-by-value is specified as
-<code>const</code> to ensure programs won't break if moved to a return-by-reference
-implementation. <i>--
-end note</i>]</p>
-</blockquote>
-<h3><a name="path-Conversions"><code>path</code> Conversions</a></h3>
-<h4><a name="path-Conversions-to-native-format"><code>path</code> Conversions to
-native format</a></h4>
+<h3><a name="path-Conversions"><code>path</code> Conversions</a> [path.cvt]</h3>
+<h4><code>path</code> argument conversions [<a name="path.arg.convert">path.arg.cvt</a>]</h4>
+<h5><a name="path-Conversions-to-native-format"><code>path</code> argument
+format conversions</a> [path.arg.fmt.cvt]</h5>
<p>Member function arguments that take character sequences representing paths
may use the <a href="#generic-pathname-format">generic pathname format</a> or
-the <a href="#native-pathname-format">native pathname format</a>. If such an
-argument uses the generic format, an implementation defined conversion to native format is performed
-during the processing of the argument. </p>
-<blockquote>
-<p>[<i>Note:</i> No conversion occurs on POSIX and Windows since they have
-native formats that conform to the generic format. <i>--end note</i>]</p>
-<p>[<i>Rationale:</i> There is no unambiguous way for an implementation to
-always be able distinguish between native format and generic format arguments.
-This is by design as it simplifies use. Should an implementation encounter an
-operating system where disambiguation is required, an implementation defined
-native format prefix can be introduced to identify the native format. <i>-- end
-rationale</i>]</p>
-</blockquote>
-
-<table align="center" border="1" cellpadding="3" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%">
- <tr>
- <td style="font-size: 10pt">
- Class <code>path</code> does not currently map invalid characters in
- filenames to valid characters. In the future we might add something like
- this:<blockquote>
-<p>When converting filenames to the native operating system format,
-implementations are encouraged, but not required, to convert otherwise invalid
-characters or character sequences to valid characters or character sequences.
-Such conversions are implementation-defined.</p>
-<blockquote>
-<p>[<i>Note:</i> Filename conversion allows much wider portability of both
-programs and filenames that would otherwise be possible.</p>
-<p>Implementations are encouraged to base conversion on existing standards or
-practice. Examples include the Uniform Resource Locator escape syntax of a percent sign (<code>'%'</code>)
-followed by two hex digits representing the character value. On
-<i>OpenVMS</i>, which does not allow percent signs in filenames, a dollar sign (<code>'$'</code>)
-followed by two hex digits is the existing practice, as is converting lowercase
-letters to uppercase.<i> -- end note.</i>]</p>
+the <a href="#native-pathname-format">native pathname format</a>. Iff such arguments
+are in the generic format and the generic format is not acceptable to the
+operating system as a native path, conversion to native format shall be performed
+during the processing of the argument. See [<a href="#Operating-system-examples">fs.os.examples</a>].</p>
+<blockquote>
+<p>[<i>Note:</i> Depending on the operating system, there may be no unambiguous way for an implementation to
+always be able to distinguish between native format and generic format arguments.
+This is by design as it simplifies use for operating systems that do not require
+disambiguation. Should an implementation encounter an
+operating system where disambiguation is required, an implementation can defined
+an extension to distinguish between the formats. <i>
+-- end note</i>]</p>
</blockquote>
- </blockquote>
- </td>
- </tr>
-</table>
<p>If the native format requires
paths for regular files to be formatted differently from paths for directories, the
path shall be treated as a directory path if last element is a separator,
otherwise it shall be treated as a regular file path.</p>
-<blockquote>
-
-<p>[<i>Note</i>: The above paragraph does not apply to POSIX and Windows since
-they use the same format
-for both regular file and directory pathnames. <i>--end note</i>]</p>
-
-<p>[<i>Example:</i>
-On <a href="http://en.wikipedia.org/wiki/OpenVMS">OpenVMS</a>, a path
-constructed from <code>&quot;/cats/jane&quot;</code> would considered a regular file
-path, and have a native format of <code>&quot;[CATS]JANE&quot;</code>, while a
-path constructed from <code>&quot;/cats/jane/&quot;</code> would be considered a
-directory path, and have a native format of <code>&quot;[CATS.JANE]&quot;</code>.
-<i>--end example</i>]</p>
-
-</blockquote>
+<h5><a name="path-Encoding-conversions"><code>
+path</code> argument encoding conversions</a>
+[path.arg.encoding.cvt]</h5>
+<p>For member function arguments that take character sequences representing
+paths, if the value type of the argument is not <code>value_type and </code>one
+of the value types is <code>char</code> and the other is <code>wchar_t</code>, conversion to <code>value_type</code>
+shall be performed by the <code>path::codecvt()</code> facet. ([<a href="#path-imbued-locale">path.imbued.locale</a>]).</p>
<h4><a name="path-Conversions-to-generic-format"><code>path</code> Conversions
-to generic format</a></h4>
-<p><a href="#path-generic-format-observers">Generic format observer</a>
-functions return strings formatted according to the
-<a href="#generic-pathname-format">generic pathname format</a>. The conversion
-from generic to native formats is implementation defined.</p>
-<blockquote>
-<p>[<i>Note:</i> For POSIX, no conversion is performed. For Windows, backslashes are converted to
-forward slashes. <i>-- end note</i>]</p>
-</blockquote>
-<h4><a name="path-Encoding-conversions"><code>path</code> Encoding conversions</a></h4>
-<p>If the value type of member function arguments that are character sequences
-representing paths is not <code>value_type</code>,
-and no <code>cvt</code> argument is supplied, conversion to <code>value_type</code>
-occurs using an imbued locale. This imbued locale is initialized with a <code>
-codecvt</code> facet appropriate for the operating system.</p>
-<blockquote>
-<p>For Apple OS X implementations, <code>path::value_type</code>
-is <code>char</code>. The default imbued locale provides a UTF-8 <code>codecvt</code>
-facet. [<i>Rationale:</i> &quot;All BSD system functions expect their string
-parameters to be in UTF-8 encoding and nothing else.&quot; See
-<a href="http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPInternational/Articles/FileEncodings.html">
-Apple docs</a>. <i>-- end rationale</i>]</p>
-<p>For Windows-like implementations, including
-<a href="http://www.mingw.org/">MinGW</a>, <code>path::value_type</code> is <code>
-wchar_t</code>. The default imbued locale provides a <code>codecvt</code> facet
-that invokes Windows <code>MultiByteToWideChar</code> or <code>
-WideCharToMultiByte</code> API with a codepage of <code>CP_THREAD_ACP</code>
-if Windows <code>AreFileApisANSI()</code>is true, otherwise codepage <code>
-CP_OEMCP</code>. [<i>Rationale:</i> this is the current behavior of C and C++
-programs that perform file operations using narrow character string to identify
-paths. Changing this in the Filesystem library would be too surprising,
-particularly where user input is involved. <i>-- end rationale</i>]</p>
-<p>For all other implementations, including<b> </b>Linux, <code>path::value_type</code>
-is <code>char</code>. The default imbued locale is <code>std::locale(&quot;&quot;)</code>.
-[<i>Rationale:</i> ISO C specifies this as &quot;the locale-specific native
-environment&quot;, while POSIX says it &quot;Specifies an implementation-defined native
-environment.&quot; <i>-- end rationale</i>]</p>
-</blockquote>
-<h3><a name="path-Requirements"><code>path</code> Requirements</a></h3>
-<p>Template parameters named <code><a name="InputIterator">InputIterator</a></code>
-are required meet the
-requirements for a C++ standard library <code>RandomIterator</code>
-compliant iterator. The iterator's value type is required to be <code>char</code>, <code>
- wchar_t</code>, <code>char16_t</code>, or <code>char32_t</code>.</p>
+to generic format</a> [fs.cvt.to.generic]</h4>
+<p><a href="#path-generic-format-observers">Generic format observer</a> functions
+shall return strings formatted according to the <a href="#generic-pathname-format">generic pathname format</a>
+using <i>preferred-separator</i>. See [<a href="#Operating-system-examples">fs.os.examples</a>].</p>
+<h3><a name="path-Requirements"><code>path</code> Requirements</a> [path.req]</h3>
+<p>Template parameters named <code><a name="InputIterator">InputIterator</a></code> are required meet the
+requirements for a C++ standard library <code>RandomIterator</code> compliant iterator. The iterator's value type is required to be <code>char</code>, <code>wchar_t</code>, <code>char16_t</code>, or <code>char32_t</code>.</p>
<p>Template parameters named <code><a name="Source">Source</a></code> are required to be one of:</p>
<ul>
<li>A container with a value type of <code>char</code>, <code>
@@ -834,236 +953,219 @@ compliant iterator. The iterator's value type is required to be <code>char</code
char32_t</code>.</li>
<li>A C-array. The value type is required to be <code>char</code>, <code>
wchar_t</code>, <code>char16_t</code>, or <code>char32_t</code>.</li>
- <li>A <code>boost::filesystem::directory_entry</code>.</li>
+ <li>A <code>$NAMESPACE;::$SUBNAMESPACE;::directory_entry</code>.</li>
</ul>
<h3> <a name="path-constructors"> <code>
-<font size="4">path</font></code> constructors</a></h3>
-<pre><span style="background-color: #D7EEFF">path();</span></pre>
-<blockquote>
- <p><i>Postcondition:</i> <code>empty()</code>.</p>
- </blockquote>
+<font size="4">path</font></code> constructors</a> [path.construct]</h3>
<pre>template &lt;class <a href="#Source">Source</a>&gt;
- path(Source const&amp; source, const codecvt_type&amp; cvt=codecvt());</pre>
+ path(Source const&amp; source$CODECVT_ARG2;$CODECVT_DEFAULT;);</pre>
<pre>template &lt;class <a href="#InputIterator">InputIterator</a>&gt;
- path(InputIterator begin, InputIterator end, const codecvt_type&amp; cvt=codecvt());</pre>
+ path(InputIterator begin, InputIterator end$CODECVT_ARG2;$CODECVT_DEFAULT;);</pre>
<blockquote>
<p><i>Effects:</i> Stores the contents [<code>begin</code>,<code>end</code>)
- or <code>source</code> in <code>pathname</code>. If the contents are in the
- generic format and the generic format is unacceptable to the operating
- system's API, they are converted to the native format. [<i>Note:</i> For
- POSIX and Windows implementations, the generic format is already
- acceptable as a native format, so no generic to native conversion is
- performed. <i>--end note</i>]</p>
- <p>
- <i>Remarks:</i> If the value type of&nbsp; [<code>begin</code>,<code>end</code>)
- or <code>source</code> is not <code>value_type</code>, conversion is performed
- by <code>cvt</code>.</p>
+ or <code>source</code> in <code>pathname</code>, converting format and
+ encoding if required ([<a href="#path.arg.convert">path.arg.convert</a>]).</p>
</blockquote>
<h3> <a name="path-assignments"> <code>
-<font size="4">path</font></code> assignments</a></h3>
-<pre>template &lt;class <a href="#Source">Source</a>&gt;
- path&amp; operator=(Source const&amp; source);</pre>
+<font size="4">path</font></code> assignments</a> [path.assign]</h3>
<pre>template &lt;class <a href="#Source">Source</a>&gt;
- path&amp; assign(Source const&amp; source, const codecvt_type&amp; cvt);</pre>
-<pre>template &lt;class <a href="#InputIterator">InputIterator</a>&gt;
- path&amp; assign(InputIterator begin, InputIterator end, const codecvt_type&amp; cvt=codecvt());</pre>
+ path&amp; operator=(Source const&amp; source);
+$if $TARGET; == BOOST template &lt;class <a href="#Source">Source</a>&gt;
+ path&amp; assign(Source const&amp; source$CODECVT_ARG2;);
+$endif; template &lt;class <a href="#InputIterator">InputIterator</a>&gt;
+ path&amp; assign(InputIterator begin, InputIterator end$CODECVT_ARG2;$CODECVT_DEFAULT;);</pre>
<blockquote>
<p><i>Effects:</i> Stores the contents [<code>begin</code>,<code>end</code>)
- or <code>source</code> in <code>pathname</code>. If the contents are in the
- generic format, they are converted to the native format. [<i>Note:</i> For
- POSIX and Windows based implementations, the generic format is already
- acceptable as a native format, so no generic to native conversion is
- performed. <i>--end note</i>]</p>
+ or <code>source</code> in <code>pathname</code>, converting format and
+ encoding if required ([<a href="#path.arg.convert">path.arg.convert</a>]). </p>
<p>
<i>Returns: </i><code>*this</code></p>
- <p>
- <i>Remarks:</i> If the value type of&nbsp; [<code>begin</code>,<code>end</code>)
- or <code>source</code> is not <code>value_type</code>, conversion is performed
- by <code>cvt</code>.</p>
</blockquote>
-<h3> <a name="path-appends"><code><font size="4"> path</font></code> appends</a></h3>
- <p>The append operations use <code>operator/=</code> to denote their semantic
- effect of appending the platform's preferred directory separator when needed. The
- preferred
- directory separator is implementation-defined.</p>
-<blockquote>
- <p align="left">[<i>Note: </i>For POSIX-like implementations, including<b> </b>
- Unix variants, Linux, and Mac OS X, the preferred directory separator is a
- single forward slash.</p>
- <p align="left">For Windows-like implementations, including
- <a href="http://www.cygwin.com/">Cygwin</a> and
- <a href="http://www.mingw.org/">MinGW</a>, the preferred directory
- separator is a single backslash.<i>--end note</i>]</p>
- </blockquote>
+<h3><a name="path-appends"><code><font size="4"> path</font></code> appends</a>
+[path.append]</h3>
+ <p>The append operations use <code>
+ operator/=</code> to denote their semantic effect of appending <i>
+ preferred-separator</i> when needed. </p>
<pre>path&amp; operator/=(const path&amp; p);</pre>
<blockquote>
<p><i>Effects:</i></p>
<blockquote>
- Appends the preferred directory separator to the contained pathname, unless:<ul>
+ Appends <code>path::preferred_separator</code> to <code>pathname</code>,
+ converting format and encoding if required ([<a href="#path.arg.convert">path.arg.convert</a>]), unless:<ul>
<li>an added separator
would be redundant, or</li>
<li>would change an relative path to an absolute path, or</li>
<li><code>p.empty()</code>, or</li>
<li><code>*p.native().cbegin()</code> is a directory separator.</li>
</ul>
- <p>Appends <code>p.native()</code> to <code>pathname</code>.</p>
+ <p>Then appends <code>p.native()</code> to <code>pathname</code>.</p>
</blockquote>
<p><i>Returns: </i><code>*this</code></p>
</blockquote>
<pre>template &lt;class <a href="#Source">Source</a>&gt;
- path&amp; operator/=(Source const &amp; source);</pre>
-<pre>template &lt;class <a href="#Source">Source</a>&gt;
- path&amp; append(Source const &amp; source, const codecvt_type&amp; cvt);</pre>
-<pre>template &lt;class <a href="#InputIterator">InputIterator</a>&gt;
- path&amp; append(InputIterator begin, InputIterator end, const codecvt_type&amp; cvt=codecvt());</pre>
+ path&amp; operator/=(Source const &amp; source);
+$if $TARGET; == BOOST template &lt;class <a href="#Source">Source</a>&gt;
+ path&amp; append(Source const &amp; source$CODECVT_ARG2;);
+$endif; template &lt;class <a href="#InputIterator">InputIterator</a>&gt;
+ path&amp; append(InputIterator begin, InputIterator end$CODECVT_ARG2;$CODECVT_DEFAULT;);</pre>
<blockquote>
<p><i>Effects:</i></p>
<blockquote>
- <p>Appends a native directory separator to the contained pathname, unless:</p>
+ <p>Appends <code>path::preferred_separator</code> to <code>pathname</code>, converting
+ format and encoding if required ([<a href="#path.arg.convert">path.arg.convert</a>]), unless:</p>
<ul>
<li>an added separator
would be redundant, or</li>
- <li>would change an relative path to an absoute path, or</li>
+ <li>would change an relative path to an absolute path, or</li>
<li><code>p.empty()</code>, or</li>
<li><code>*p.native().cbegin()</code> is a separator.</li>
</ul>
<p>Appends the contents [<code>begin</code>,<code>end</code>)
- or <code>source</code> to <code>pathname</code>. If the contents are in the
- generic format, they are converted to the native format. [<i>Note:</i> For
- POSIX and Windows based implementations, the generic format is already
- acceptable as a native format, so no generic to native conversion is
- performed. <i>--end note</i>]</p>
+ or <code>source</code> to <code>pathname</code>, converting format and
+ encoding if required ([<a href="#path.arg.convert">path.arg.convert</a>]).</p>
</blockquote>
- <p><i>Remarks:</i> If the value type of&nbsp; [<code>begin</code>,<code>end</code>)
- or <code>source</code> is not <code>value_type</code>, conversion is performed
- by <code>cvt</code>.</p>
<p><i>Returns: </i><code>*this</code></p>
</blockquote>
-<h3> <a name="path-modifiers"> <code>
-<font size="4">path</font></code> modifiers</a></h3>
-<pre>void <a name="path-clear">clear</a>();</pre>
+<h3><a name="path-concatenation"><code>path</code> concatenation</a> [path.concat]</h3>
+<pre>path&amp; operator+=(const path&amp; x);
+path&amp; operator+=(const string_type&amp; x);
+path&amp; operator+=(const value_type* x);
+path&amp; operator+=(value_type x);
+template &lt;class Source&gt;
+ path&amp; operator+=(Source const&amp; x);
+template &lt;class CharT&gt;
+ path&amp; operator+=(CharT x);
+template &lt;class InputIterator&gt;
+ path&amp; concat(InputIterator begin, InputIterator end);
+template &lt;class InputIterator&gt;
+ path&amp; concat(InputIterator begin, InputIterator end$CODECVT_ARG2;);</pre>
+<blockquote><p><i>Postcondition:</i> <code>native() == prior_native + <i>effective-argument</i></code>,
+ where <code>prior_native</code> is <code>native()</code> prior to the call to <code>operator+=</code>,
+ and <code><i>effective-argument</i></code> is:</p>
+ <ul><li><code>x.native()</code> if <code>x</code> is present and is <code>const path&amp;</code>, otherwise</li>
+ <li><code>s</code>, where <code>s</code> is
+ <code>std::basic_string&lt;typename std::iterator_traits&lt;InputIterator&gt;::value_type&gt;<br>s(begin, end)</code>,
+ if <code>begin</code> and <code>end</code> arguments are present, otherwise</li>
+ <li><code>x</code>.</li></ul><p>If the value type of <code><i>effective-argument</i></code> would not be <code>path::value_type</code>, the actual argument or argument range is first
+ converted so that <code><i>effective-argument</i></code> has value type <code>path::value_type</code>.</li> </p>
+ <p><i>Returns: </i><code>*this</code></p>
+ </blockquote>
+<h3><a name="path-modifiers"> <code>
+path</code> modifiers</a> [path.modifiers]</h3><pre>void <a name="path-clear">clear</a>();</pre>
<blockquote>
<p><i>Postcondition:</i> <code>this-&gt;empty()</code> is true.</p>
</blockquote>
<pre>path&amp; <a name="path-make_preferred">make_preferred</a>();</pre>
<blockquote>
- <p><i>Effects:</i> The contained pathname is converted to the preferred native
- format. [<i>Note:</i> On Windows, the effect is to replace slashes with
- backslashes. On POSIX, there is no effect. <i>-- end note</i>]</p>
+ <p><i>Effects:</i> <i>directory-separator</i>s are converted to <i>prefered-separator</i>s.
+ See [<a href="#Operating-system-examples">fs.os.examples</a>].</p>
<p><i>Returns:</i> <code>*this</code></p>
</blockquote>
<pre>path&amp; <a name="path-remove_filename">remove_filename</a>();</pre>
<blockquote>
<p><i>Returns: </i>As if, <code>*this = parent_path();</code></p>
- <p>[<i>Note:</i> This function is needed to efficiently implement <code>
- directory_iterator</code>. It is exposed to allow additional uses. The actual
+ <p>[<i>Note:</i> This function is needed to efficiently implement <code>directory_iterator</code>. It is exposed to allow additional uses. The actual
implementation may be much more efficient than <code>*this = parent_path()</code>&nbsp; <i>-- end
note</i>]</p>
</blockquote>
<pre>path&amp; <a name="path-replace_extension">replace_extension</a>(const path&amp; new_extension = path());</pre>
<blockquote>
- <p><i>Postcondition: </i> <code>extension() == <i>replacement</i></code>,
- where <code><i>replacement</i></code> is <code>new_extension</code> if <code>
- new_extension.empty() || new_extension[0] ==</code> the dot character,
- otherwise <code><i>replacement</i></code> is the dot character followed by
- <code>new_extension</code>.</p>
+ <p><i>Effects:</i></p>
+ <ul>
+ <li>Any existing <code>extension()</code> is removed from the stored path,
+ then</li>
+ <li>iff
+ <code>new_extension</code> is not empty and does not begin with a dot
+ character, a dot character is appended to the stored path, then</li>
+ <li>
+ <code>new_extension</code> is appended to the stored path.</li>
+ </ul>
<p><i>Returns:</i> <code>*this</code></p>
</blockquote>
-<pre><code>void <a name="path-swap">swap</a>(path&amp; rhs);</code></pre>
+<pre><code>void <a name="path-swap">swap</a>(path&amp; rhs) noexcept;</code></pre>
<blockquote>
- <p><i>Effects:</i>
- Swaps the contents of the two paths.</p>
- <p><i>Throws: </i>
- nothing.</p>
- <p><i>Complexity: </i>
- constant time.</p>
+ <p><i>Effects:</i> Swaps the contents of the two paths.</p>
+ <p><i>Complexity: </i>constant time.</p>
</blockquote>
-<h3> <a name="path-native-format-observers"><code><font size="4">path</font></code>
-native format observers</a></h3>
-<p>The string returned by all native format observers is in the
-<a href="#native-pathname-format">native pathname format</a>.</p>
-<pre>const string_type&amp; <a name="native">native</a>() const;</pre>
+<h3> <a name="path-native-format-observers"><code><font size="4">path</font></code> native format observers</a>
+[path.native.obs]</h3>
+<p>The string returned by all native format observers is in the <a href="#native-pathname-format">native pathname format</a>.</p>
+<pre>const string_type&amp; <a name="native">native</a>() const noexcept;</pre>
<blockquote>
<p><i>Returns:</i> <code>pathname</code>.</p>
-<p><i>Throws:</i> nothing.</p>
</blockquote>
-<pre>const value_type* <a name="c_str">c_str</a>() const;</pre>
+<pre>const value_type* <a name="c_str">c_str</a>() const noexcept;</pre>
<blockquote>
<p><i>Returns:</i> <code>pathname.c_str()</code>.</p>
-<p><i>Throws:</i> nothing.</p>
</blockquote>
<pre>template &lt;class String&gt;
-String <a name="string-template">string</a>(const codecvt_type&amp; cvt=codecvt()) const;</pre>
+String <a name="string-template">string</a>($CODECVT_ARG;$CODECVT_DEFAULT;) const;</pre>
<blockquote>
<p><i>Returns:</i> <code>pathname</code>.</p>
-<p><i>Remarks:</i> If <code>string_type</code> is a different type than <code>
-String</code>, conversion is performed by <code>cvt</code>.</p>
+<p><i>Remarks:</i> If <code>string_type</code> is a different type than <code>String</code>, conversion is performed by <code>cvt</code>.</p>
</blockquote>
-<pre>const string <a name="string">string</a>(const codecvt_type&amp; cvt=codecvt()) const;
-const wstring <a name="wstring">wstring</a>(const codecvt_type&amp; cvt=codecvt()) const;
-const u16string <a name="u16string">u16string</a>() const;
-const u32wstring <a name="u32wstring">u32wstring</a>() const; </pre>
+<pre>string <a name="string">string</a>($CODECVT_ARG;$CODECVT_DEFAULT;) const;
+wstring <a name="wstring">wstring</a>($CODECVT_ARG;$CODECVT_DEFAULT;) const;
+u16string <a name="u16string">u16string</a>() const;
+u32wstring <a name="u32wstring">u32wstring</a>() const; </pre>
<blockquote>
<p><i>Returns:</i> <code>pathname</code>.</p>
<p><i>Remarks:</i> If <code>string_type</code> is a different type than
function's return type, conversion is performed by <code>cvt</code>.</p>
-<p>If <code>string_type</code> is the same type as the
-function's return type, the function is permitted to return by <code>const&amp;</code>
-rather than <code>const</code> value. [<i>Note:</i> For POSIX, this occurs for
-<code>string()</code>, for Windows, <code>wstring()</code>. <i>--end note</i>]</p>
-</blockquote>
-
-<h3> <a name="path-generic-format-observers"><code><font size="4">path</font></code>
-generic format observers</a></h3>
-<p>The string returned by all generic format observers is in the
-<a href="#generic-pathname-format">generic pathname format</a>.</p>
-<p>[<i>Note:</i> For POSIX, no conversion occurs, since the native format and
-generic format are the same. For Windows, backslashes are converted to slashes
-<i>--end note</i>]</p>
+</blockquote>
+
+<h3> <a name="path-generic-format-observers"><code><font size="4">path</font></code> generic format observers</a>
+[path.generic.obs]</h3>
+<p>The string returned by all generic format observers is in the <a href="#generic-pathname-format">generic pathname format</a>.</p>
<pre>template &lt;class String&gt;
-String <a name="generic_string-template">generic_string</a>(const codecvt_type&amp; cvt=codecvt()) const;</pre>
+String <a name="generic_string-template">generic_string</a>($CODECVT_ARG;$CODECVT_DEFAULT;) const;</pre>
<blockquote>
<p><i>Returns:</i> <code>pathname</code>.</p>
-<p><i>Remarks:</i> If <code>string_type</code> is a different type than <code>
-String</code>, conversion is performed by
-<code>cvt</code>.</p>
+<p><i>Remarks:</i> If <code>string_type</code> is a different type than <code>String</code>, conversion is performed by <code>cvt</code>.</p>
</blockquote>
-<pre>const string <a name="generic_string">generic_string</a>(const codecvt_type&amp; cvt=codecvt()) const;
-const wstring <a name="generic_wstring">generic_wstring</a>(const codecvt_type&amp; cvt=codecvt()) const;
-const u16string <a name="generic_u16string">generic_u16string</a>() const;
-const u32wstring <a name="generic_u32wstring">generic_u32wstring</a>() const; </pre>
+<pre>string <a name="generic_string">generic_string</a>($CODECVT_ARG;$CODECVT_DEFAULT;) const;
+wstring <a name="generic_wstring">generic_wstring</a>($CODECVT_ARG;$CODECVT_DEFAULT;) const;
+u16string <a name="generic_u16string">generic_u16string</a>() const;
+u32wstring <a name="generic_u32wstring">generic_u32wstring</a>() const; </pre>
<blockquote>
<p><i>Returns:</i> <code>pathname</code>.</p>
<p><i>Remarks:</i>&nbsp; If <code>string_type</code> is a different type than
function's return type, conversion is performed by <code>cvt</code>.</p>
-<p>If <code>string_type</code> is of the same type as the
-function's return type, and the generic format is the same as the native format,
-the function is permitted to return by <code>const&amp;</code> rather than <code>
-const</code> value. [<i>Note:</i> For POSIX, this occurs for <code>string()</code>.
-It never occurs for Windows, because backslashes must be converted to slashes.
-<i>--end note</i>]</p>
-</blockquote>
-
-<h3> <a name="path-decomposition"> <code><font size="4">path</font></code>
-decomposition</a></h3>
-<p><span style="background-color: #E0E0E0"><i>See the
-<a href="#Path-decomposition-table">Path decomposition table</a> for examples
-for values returned by decomposition functions. The
-<a href="tutorial.html#Using-path-decomposition">Tutorial</a> may also be
+</blockquote>
+
+<h3> <a name="path-compare"><code>path</code> compare</a> [path.compare]</h3>
+<pre>int compare(const path&amp; p) const noexcept;</pre>
+<blockquote>
+ <p><i>Returns:</i> A value less than 0 if the elements of <code>*this</code> are lexicographically less than the elements of <code>p</code>, otherwise a
+ value greater than 0 if the elements of <code>*this</code> are
+ lexicographically greater than the elements of <code>p</code>, otherwise 0.</p>
+ <p>Remark: The elements are determined as if by iteration over the half-open
+ range [<code>begin()</code>, <code>end()</code>) for <code>*this</code> and&nbsp; <code>p</code>.</p>
+</blockquote>
+<pre>int compare(const std::string&amp; s) const</pre>
+<blockquote>
+ <p><i>Returns:</i> <code>compare(path(s))</code>.</p>
+</blockquote>
+<pre>int compare(const value_type* s) const</pre>
+<blockquote>
+ <p><i>Returns:</i> <code>compare(path(s))</code>.</p>
+</blockquote>
+<h3> <a name="path-decomposition"> <code><font size="4">path</font></code> decomposition</a>
+[path.decompose]</h3>
+<p><span style="background-color: #E0E0E0"><i>See the <a href="#Path-decomposition-table">Path decomposition table</a> for examples
+for values returned by decomposition functions. The <a href="tutorial.html#Using-path-decomposition">Tutorial</a> may also be
helpful.</i></span></p>
<pre>path <a name="path-root_name">root_name</a>() const;</pre>
<blockquote>
-<p><i>Returns:</i> <i>root-name,</i> if <code>pathname</code> includes <i>
-root-name</i>, otherwise <code>path()</code>. </p>
+<p><i>Returns:</i> <i>root-name,</i> if <code>pathname</code> includes <i>root-name</i>, otherwise <code>path()</code>. </p>
</blockquote>
<pre>path <a name="path-root_directory">root_directory</a>() const;</pre>
<blockquote>
-<p><i>Returns:</i> <i>root-directory</i>, if <code>pathname</code> includes <i>
-root-directory</i>, otherwise <code>path()</code>.</p>
+<p><i>Returns:</i> <i>root-directory</i>, if <code>pathname</code> includes <i>root-directory</i>, otherwise <code>path()</code>.</p>
<p>If <i>root-directory</i> is composed of <i>slash name</i>, <i>slash</i> is
excluded from the returned string.</p>
</blockquote>
@@ -1073,17 +1175,13 @@ excluded from the returned string.</p>
</blockquote>
<pre>path <a name="path-relative_path">relative_path</a>() const;</pre>
<blockquote>
-<p><i>Returns:</i> A <code>path</code> composed from <code>pathname</code>, if <code>
-!empty()</code>, beginning
+<p><i>Returns:</i> A <code>path</code> composed from <code>pathname</code>, if <code>!empty()</code>, beginning
with the first <i>filename</i> after <i>root-path</i>. Otherwise, <code>path()</code>.</p>
</blockquote>
<pre>path <a name="path-parent_path">parent_path</a>() const;</pre>
<blockquote>
- <p><i>Returns:</i> <code>(empty() || begin() == --end()) ? path() : <i>pp</i></code>, where
- <code><i>pp</i></code> is constructed as if by
- starting with an empty <code>path</code> and successively applying <code>
- operator/=</code> for each element in the range <code>begin()</code>, <code>
- --end()</code>.</p>
+ <p><i>Returns:</i> <code>(empty() || begin() == --end()) ? path() : <i>pp</i></code>, where <code><i>pp</i></code> is constructed as if by
+ starting with an empty <code>path</code> and successively applying <code>operator/=</code> for each element in the range <code>begin()</code>, <code>--end()</code>.</p>
</blockquote>
<pre>path <a name="path-filename">filename</a>() const;</pre>
<blockquote>
@@ -1096,12 +1194,11 @@ with the first <i>filename</i> after <i>root-path</i>. Otherwise, <code>path()</
</blockquote>
<pre>path <a name="path-stem">stem</a>(const path&amp; p) const;</pre>
<blockquote>
- <p><i>Returns:</i> if <code>p.filename()</code>contains a dot but does not
+ <p><i>Returns:</i> if <code>p.filename()</code> contains a dot but does not
consist solely of one or to two dots, returns
the substring of <code>p.filename()</code> starting at its beginning and
ending at the last dot (the dot is not included). Otherwise,
- returns <code>
- p.filename()</code>.</p>
+ returns <code>p.filename()</code>.</p>
<p>[<i>Example:</i></p>
<blockquote>
<pre><code>std::cout &lt;&lt; path(&quot;/foo/bar.txt&quot;).stem();</code> // outputs &quot;<code>bar</code>&quot;
@@ -1119,8 +1216,7 @@ for (; !p.extension().empty(); p = p.stem())
<p><i>Returns:</i> if <code>p.filename()</code> contains a dot but does not
consist solely of one or to two dots, returns
the substring of <code>p.filename()</code> starting at the rightmost dot
- and ending at the path's end. Otherwise, returns an empty <code>path</code>
- object. </p>
+ and ending at the path's end. Otherwise, returns an empty <code>path</code> object. </p>
<p><i>Remarks:</i> Implementations are permitted but not required to define additional
behavior for file systems which append additional elements to extensions, such
as alternate data streams or partitioned dataset names.</p>
@@ -1129,13 +1225,14 @@ for (; !p.extension().empty(); p = p.stem())
<pre><code>std::cout &lt;&lt; path(&quot;/foo/bar.txt&quot;).extension(); //</code> outputs &quot;<code>.txt</code>&quot;</pre>
</blockquote>
<p> <i>--end example</i>]</p>
- <p>[<i>Note:<b> </b></i>The dot is included in the return value so that
- it is possible to distinguish between no extension and an empty extension. See
- <a href="http://permalink.gmane.org/gmane.comp.lib.boost.devel/199744">
- http://permalink.gmane.org/gmane.comp.lib.boost.devel/199744</a> for more
- extensive rationale.&nbsp; <i>-- end note</i>]</p>
-</blockquote>
-<h3> <a name="path-query"> <code><font size="4">path</font></code> query</a></h3>
+ <p>[<i>Note:<b> </b></i>The dot is included in the return value so that it is
+ possible to distinguish between no extension and an empty extension. <span style="background-color: #FFFF00">
+ See
+ </span> <a href="http://permalink.gmane.org/gmane.comp.lib.boost.devel/199744">
+ <span style="background-color: #FFFF00">http://permalink.gmane.org/gmane.comp.lib.boost.devel/199744</span></a><span style="background-color: #FFFF00"> for more
+ extensive rationale.&nbsp; </span> <i><span style="background-color: #FFFF00">-- end note</span></i><span style="background-color: #FFFF00">]</span></p>
+</blockquote>
+<h3> <a name="path-query"> <code><font size="4">path</font></code> query</a> [path.query]</h3>
<pre>bool <a name="path-empty">empty</a>() const;</pre>
<blockquote>
<p><i>Returns:</i> <code>m_pathname.empty()</code>.</p>
@@ -1174,28 +1271,26 @@ for (; !p.extension().empty(); p = p.stem())
</blockquote>
<pre>bool <a name="path-is_absolute">is_absolute</a>() const;</pre>
<blockquote>
- <p><i>Returns:</i> <code>true</code>
- if the elements of <code>root_path()</code> uniquely identify a directory, else <code>false</code>.</p>
- <p>[<i>Note:</i> On POSIX,<code>
- path(&quot;/foo&quot;).is_absolute()</code> returns <code>true</code>. On Windows, <code>
- path(&quot;/foo&quot;).is_absolute()</code> returns <code>false</code>. <i>--end note</i>]</p>
+ <p><i>Returns:</i> <code>true</code> if the elements of <code>root_path()</code> uniquely identify a directory, else <code>false</code>.</p>
</blockquote>
<pre>bool <a name="path-is_relative">is_relative</a>() const;</pre>
<blockquote>
<p><i>Returns:</i> <code>!is_absolute()</code>.</p>
</blockquote>
<h3> <a name="path-iterators"> <code>
-<font size="4">path</font></code> iterators</a></h3>
+<font size="4">path</font></code> iterators</a> [path.itr]</h3>
+<p> Path iterators iterate over the elements of the stored pathname.</p>
<p> A <code>path::iterator</code> is a constant iterator satisfying all
the requirements of a bidirectional iterator (C++ Std, 24.1.4 Bidirectional
-iterators [lib.bidirectional.iterators]). Its <code>value_type</code> is <code>
-path</code>.</p>
+iterators [lib.bidirectional.iterators]). Its <code>value_type</code> is <code>path</code>.</p>
<p>Calling any non-const member function of a <code>path</code> object
invalidates all iterators referring to elements of that object.</p>
<p> The forward traversal order is as follows:</p>
<ul>
<li>The <i>root-name</i> element, if present.</li>
- <li>The <i>root-directory</i> element, if present.</li>
+ <li>The <i>root-directory</i> element, if present, in the generic format. <i>
+ [note:</i> the generic format is required to ensure lexicographical
+ comparison works correctly. <i>-- end note</i>]</li>
<li>Each successive <i>filename</i> element, if present.</li>
<li><i>Dot</i>, if one or more trailing non-root <i>slash</i>
characters are present.</li>
@@ -1210,25 +1305,37 @@ path</code>.</p>
<blockquote>
<p><i>Returns:</i> The end iterator.</p>
</blockquote>
- <h3><a name="path_encoding"><code><font size="4"> path</font></code> encoding</a> conversion</h3>
+ <h3><a name="path-imbued-locale"><code><font size="4"> path</font></code>
+ imbued locale</a> [path.imbued.locale]</h3>
+ <p><code>path</code> operations sometimes require encoding conversions between
+ <code>pathname</code> and some other string object where one of the value types
+ is <code>char</code> and the other is <code>wchar_t</code>. Such conversions
+ shall be performed by the <code>path::codecvt()</code> facet.</p>
+ <blockquote>
+ <p><span style="background-color: #FFFF00">[</span><i><span style="background-color: #FFFF00">Example:</span></i><span style="background-color: #FFFF00">
+ ... </span><i><span style="background-color: #FFFF00">--end example</span></i><span style="background-color: #FFFF00">]</span></p>
+ </blockquote>
<pre>static std::locale <a name="path-imbue">imbue</a>(const std::locale&amp; loc);</pre>
<blockquote>
- <p><i>Effects:</i> Stores <code>loc</code> as the default locale for all
- objects of type <code>path</code>.</p>
- <p><i>Returns:</i> The previous default locale for all objects of type <code>
- path</code>.</p>
+ <p><i>Effects:</i> Stores a copy of <code>loc</code> as the imbued <code>path</code>
+ locale.</p>
+ <p><i>Returns:</i> The previous imbued <code>path</code> locale.</p>
+ <p><i>Remarks:</i> The initial value of the imbued <code>path</code> locale is
+ operating system dependent. It shall be a locale with a <code>codecvt</code>
+ facet for a <code>char</code> string encoding appropriate for the operating
+ system. See ([<a href="#Operating-system-examples">fs.os.examples</a>]).&nbsp; </p>
</blockquote>
<pre>static const codecvt_type&amp; <a name="path-codecvt">codecvt</a>();</pre>
<blockquote>
- <p><i>Returns:</i> The <code>codecvt</code> facet for the default locale for
- all objects of type <code>path</code>.</p>
+ <p><i>Returns:</i> The <code>codecvt</code> facet for the imbued<code> path</code>
+ locale .</p>
</blockquote>
+
+$if $TARGET; == BOOST
<h3> <a name="path-deprecated-functions"><code><font size="4"> path</font></code> deprecated functions</a></h3>
-<p> Several member functions from previous versions of <code>class path</code>
-have been deprecated, either because they have been renamed or because the
+<p> Several member functions from previous versions of <code>class path</code> have been deprecated, either because they have been renamed or because the
functionality is no longer desirable or has become obsolete.</p>
-<p> Deprecated functions available by default; will be suppressed if <code>
-BOOST_FILESYSTEM_NO_DEPRECATED</code> is defined:</p>
+<p> Deprecated functions available by default; will be suppressed if <code>BOOST_FILESYSTEM_NO_DEPRECATED</code> is defined:</p>
<blockquote>
<pre>path&amp; remove_leaf() { return remove_filename(); }
path leaf() const { return filename(); }
@@ -1236,31 +1343,27 @@ path branch_path() const { return parent_path(); }
bool has_leaf() const { return !m_path.empty(); }
bool has_branch_path() const { return !parent_path().empty(); }</pre>
</blockquote>
-<p> Deprecated functions not available by default; will be supplied if <code>
-BOOST_FILESYSTEM_DEPRECATED</code> is defined:</p>
+<p> Deprecated functions not available by default; will be supplied if <code>BOOST_FILESYSTEM_DEPRECATED</code> is defined:</p>
<blockquote>
- <pre>const std::string file_string() const { return native_string(); }
+<pre>const std::string file_string() const { return native_string(); }
const std::string directory_string() const { return native_string(); }
const std::string native_file_string() const { return native_string(); }
const std::string native_directory_string() const { return native_string(); }
const string_type external_file_string() const { return native(); }
const string_type external_directory_string() const { return native(); }</pre>
</blockquote>
-<h3> <a name="path-non-member-functions"> <code><font size="4">path</font></code>
-non-member functions</a></h3>
-<pre>void swap( path&amp; lhs, path&amp; rhs )</pre>
-<blockquote>
- <p><i>Effects: </i><code>
- lhs.swap(rhs)</code>.</p>
-</blockquote>
+
+$endif
+
+<h3> <a name="path-non-member-functions"> <code><font size="4">path</font></code> non-member functions</a>
+[path.non-member]</h3>
+$if $TARGET; == BOOST
<pre>bool lexicographical_compare(path::iterator first1, path::iterator last1,
- path::iterator first2, path::iterator last2)</pre>
+ path::iterator first2, path::iterator last2);</pre>
<blockquote>
- <p><i>Returns:</i> <code>true</code> if the sequence of <code>native()</code>
- strings for the elements defined by the range <code>[first1,last1)</code> is
+ <p><i>Returns:</i> <code>true</code> if the sequence of <code>native()</code> strings for the elements defined by the half-open range <code>[first1,last1)</code> is
lexicographically less than the sequence of <code>native()</code> strings for
- the elements defined by the range <code>[first2,last2)</code>. Returns <code>
- false</code> otherwise.</p>
+ the elements defined by the half-open range <code>[first2,last2)</code>. Returns <code>false</code> otherwise.</p>
<p><i>Remarks:</i> If two sequences have the same number of elements and their
corresponding elements are equivalent, then neither sequence is
lexicographically less than the other. If one sequence is a prefix of the
@@ -1268,28 +1371,22 @@ non-member functions</a></h3>
sequence. Otherwise, the lexicographical comparison of the sequences yields
the same result as the comparison of the first corresponding pair of elements
that are not equivalent.</p>
- <pre> for ( ; first1 != last1 &amp;&amp; first2 != last2 ; ++first1, ++first2) {
- if (first1-&gt;native() &lt; first2-&gt;native()) return true;
- if (first2-&gt;native() &lt; first1-&gt;native()) return false;
- }
- return first1 == last1 &amp;&amp; first2 != last2;</pre>
- <p>[<i>Note:</i> A <code>path</code> aware<code> lexicographical_compare</code>
- is provided to avoid infinite recursion in <code>std::lexicographical_compare</code>
- due to the <code>path</code> iterator's value type itself being <code>path</code>.
- <i>--end note</i>]</p>
+ <p>[<i>Note:</i> A <code>path</code> aware <code>lexicographical_compare</code> algorithm is provided for historical reasons. <i>--end note</i>]</p>
+</blockquote>
+$endif
+<pre>void swap( path&amp; lhs, path&amp; rhs )</pre>
+<blockquote>
+ <p><i>Effects: </i><code>lhs.swap(rhs)</code>.</p>
</blockquote>
<pre>std::size_t <a name="hash_value">hash_value</a> (const path&amp; p);</pre>
<blockquote>
<p><i>Returns:</i> A hash value for the path <code>p</code>. If
- for two paths, <code>p1 == p2</code> then
- <code>hash_value(p1) == hash_value(p2)</code>.</p>
- <p>This allows paths to be used with
- <a href="../../../functional/hash/index.html">Boost.Hash</a>.</p>
+ for two paths, <code>p1 == p2</code> then <code>hash_value(p1) == hash_value(p2)</code>.</p>
+ <p>This allows paths to be used with <a href="../../functional/hash/index.html">Boost.Hash</a>.</p>
</blockquote>
<pre>bool operator&lt; (const path&amp; lhs, const path&amp; rhs);</pre>
<blockquote>
- <p><i>Returns:</i> <code>return lexicographical_compare(lhs.begin(), lhs.end(),
- rhs.begin(), rhs.end())</code>.</p>
+ <p><i>Returns:</i> <code>return lhs.compare(rhs.begin) &lt; 0</code>.</p>
</blockquote>
<pre>bool operator&lt;=(const path&amp; lhs, const path&amp; rhs);</pre>
<blockquote>
@@ -1306,22 +1403,15 @@ non-member functions</a></h3>
<pre>bool operator==(const path&amp; lhs, const path&amp; rhs);</pre>
<blockquote>
<p><i>Returns:</i> <code>!(lhs &lt; rhs) &amp;&amp; !(rhs &lt; lhs)</code>.</p>
- <p>[<i>Note:</i> Actual implementations may use an equivalent, but more
- efficient, algorithm. <i>--end note</i>]</p>
<p>[<i>Note:</i> <a name="Path-equality">Path equality</a> and path
equivalence have different semantics.</p>
- <p>Equality is determined by the <code>path</code>
- non-member <code>operator==</code>, which considers the two path's lexical
- representations only. Thus <code>path(&quot;foo&quot;) == &quot;bar&quot;</code> is never
- <code>true</code>.</p>
- <p>Equivalence is determined by the <a href="#equivalent"><code>equivalent()</code></a>
- non-member function, which determines if two paths <a href="#Path">resolve</a> to the same file system entity.
- Thus <code>equivalent(&quot;foo&quot;, &quot;bar&quot;)</code> will be <code>true</code>
- when both paths resolve to the same file.</p>
+ <p>Equality is determined by the <code>path</code> non-member <code>operator==</code>, which considers the two path's lexical
+ representations only. Thus <code>path(&quot;foo&quot;) == &quot;bar&quot;</code> is never <code>true</code>.</p>
+ <p>Equivalence is determined by the <a href="#equivalent"><code>equivalent()</code></a> non-member function, which determines if two paths <a href="#Path">resolve</a> to the same file system entity.
+ Thus <code>equivalent(&quot;foo&quot;, &quot;bar&quot;)</code> will be <code>true</code> when both paths resolve to the same file.</p>
<p>Programmers wishing to determine if two paths are &quot;the same&quot; must decide if
&quot;the same&quot; means &quot;the same representation&quot; or &quot;resolve to the same actual
- file&quot;, and choose the appropriate function accordingly. <i>
- -- end note</i>]</p>
+ file&quot;, and choose the appropriate function accordingly. <i>-- end note</i>]</p>
</blockquote>
<pre>bool operator!=(const path&amp; lhs, const path&amp; rhs);</pre>
<blockquote>
@@ -1332,41 +1422,63 @@ non-member functions</a></h3>
<p><i>Returns:</i> <code>path(lhs) /= rhs</code>.</p>
</blockquote>
<h3> <a name="path-non-member-operators"><code><font size="4">path</font></code></a><a name="path-inserter-extractor"> inserter
- and extractor</a></h3>
+ and extractor</a> [path.io]</h3>
<p> The inserter and extractor delimit the string with double-quotes (<code>&quot;</code>)
-to ensure that paths with embedded spaces will round trip correctly. Ampersand (<code>&amp;</code>)
-is used as an escape character, so the path can itself contain double quotes.</p>
+so that paths with embedded spaces will round trip correctly. Ampersand (<code>&amp;</code>)
+is as an escape character, so the path can itself contain double quotes.</p>
<pre>template &lt;class Char, class Traits&gt;
std::basic_ostream&lt;Char, Traits&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;Char, Traits&gt;&amp; os,
const path&amp; p)
</pre>
<blockquote>
- <p><i>Effects:</i>&nbsp;
- <code>os &lt;&lt; <a href="../../../io/doc/quoted_manip.html">
- boost::io::quoted</a>(p.string&lt;std::basic_string&lt;Char&gt;&gt;(), static_cast&lt;Char&gt;('&amp;'));</code></p>
- <p><i>Returns:</i>
- <code>os</code></p>
+ <p><i>Effects: </i>Insert characters into <code>os</code>:</p>
+ <ul>
+ <li>
+ <p>A double-quote.</p>
+ </li>
+ <li>
+ <p>Each character in <code>p.string&lt;std::basic_string&lt;Char&gt;&gt;()</code>.
+ If the character to be inserted is equal to the escape character or a
+ double-quote, as determined by <code>operator==</code>, first insert the
+ escape character.</p>
+ </li>
+ <li>
+ <p>A double-quote.</p>
+ </li>
+ </ul>
+ <p><i>Returns:</i> <code>os</code></p>
</blockquote>
<pre>template &lt;class Char, class Traits&gt;
inline std::basic_istream&lt;Char, Traits&gt;&amp; operator&gt;&gt;(std::basic_istream&lt;Char, Traits&gt;&amp; is,
path&amp; p)
</pre>
<blockquote>
- <p><i>Effects:&nbsp; </i>
- <code>&nbsp;std::basic_string&lt;Char&gt; str;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; is &gt;&gt;
- <a href="../../../io/doc/quoted_manip.html">boost::io::quoted</a>(str,
- static_cast&lt;Char&gt;('&amp;'));<br>
+ <p><i>Effects:&nbsp; </i><code>&nbsp;std::basic_string&lt;Char&gt; str;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; is &gt;&gt; <a href="../../io/doc/quoted_manip.html">boost::io::quoted</a>(str, static_cast&lt;Char&gt;('&amp;'));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p = str;</code></p>
- <p><i>Returns:</i>
- <code>is</code></p>
+ <p><i>Effects:&nbsp; </i>Extract characters from os:</p>
+ <ul>
+ <li>If the first character that would be extracted is equal to double-quote,
+ as determined by <code>operator==</code>, then:<ul>
+ <li>Discard the initial double-quote.</li>
+ <li>Save the value and then turn off the <code>skipws</code> flag.</li>
+ <li><code>p.clear()</code></li>
+ <li>Until an unescaped double-quote character is reached or <code>
+ is.not_good()</code>, extract characters from <code>os</code> and append
+ them to <code>p</code>, except that if an escape character is reached,
+ ignore it and append the next character to <code>p</code>.</li>
+ <li>Discard the final double-quote character.</li>
+ <li>Restore the <code>skipws</code> flag to its original value.</li>
+ </ul>
+ </li>
+ <li>Otherwise, <code>os &gt;&gt; p</code>.</li>
+ </ul>
+ <p><i>Returns:</i> <code>is</code></p>
</blockquote>
-<h3><a name="Class-filesystem_error">Class <code>filesystem_error</code></a></h3>
-<pre> namespace boost
- {
- namespace filesystem
- {
- class basic_filesystem_error : public system_error
+<h2><a name="Class-filesystem_error">Class <code>filesystem_error</code>
+[class.filesystem_error]</a></h2>
+<pre>$NAMESPACE_BEGIN;
+ class filesystem_error : public system_error
{
public:
filesystem_error();
@@ -1388,12 +1500,12 @@ inline std::basic_istream&lt;Char, Traits&gt;&amp; operator&gt;&gt;(std::basic_i
const char * <a href="#filesystem_error-what">what</a>() const;
};
- } // namespace filesystem
- } // namespace boost</pre>
-<p>The class template <code>basic_filesystem_error</code> defines the type of
+$NAMESPACE_END;</pre>
+<p>The class template <code>filesystem_error</code> defines the type of
objects thrown as exceptions to report file system errors from functions described in this
-clause.</p>
-<h4> <a name="filesystem_error-members"> <code>filesystem_error</code> members</a></h4>
+$WHAT;.</p>
+<h3> <a name="filesystem_error-members"> <code>filesystem_error</code> members</a>
+[filesystem_error.members]</h3>
<pre><a name="filesystem_error-2-arg">filesystem_error</a>(const std::string&amp; what_arg, error_code ec);</pre>
<blockquote>
<p><i>Postcondition:</i></p>
@@ -1442,8 +1554,7 @@ clause.</p>
</tr>
<tr>
<td width="18%" valign="top"><code>path1()</code></td>
- <td width="82%">Reference to stored copy of
- <code>p1</code></td>
+ <td width="82%">Reference to stored copy of <code>p1</code></td>
</tr>
<tr>
<td width="18%" valign="top"><code>path2().empty()</code></td>
@@ -1472,13 +1583,11 @@ clause.</p>
</tr>
<tr>
<td width="18%"><code>path1()</code></td>
- <td width="82%">Reference to stored copy of
- <code>p1</code></td>
+ <td width="82%">Reference to stored copy of <code>p1</code></td>
</tr>
<tr>
<td width="18%"><code>path2()</code></td>
- <td width="82%">Reference to stored copy of
- <code>p2</code></td>
+ <td width="82%">Reference to stored copy of <code>p2</code></td>
</tr>
</table>
</blockquote>
@@ -1495,12 +1604,11 @@ clause.</p>
<pre>const char* <a name="filesystem_error-what">what</a>() const;</pre>
<blockquote>
<p><i>Returns: </i>A string containing <code>runtime_error::what()</code>. The exact format is unspecified.
- Implementations are encouraged but not required to include <code>
- path1.native_string()</code>if not empty, <code>path2.native_string()</code>if
+ Implementations are encouraged but not required to include <code>path1.native_string()</code>if not empty, <code>path2.native_string()</code>if
not empty, and <code>system_error::what()</code> strings in the returned
string.</p>
</blockquote>
-<h3><a name="Enum-file_type">Enum file_type</a></h3>
+<h2><a name="Enum-file_type">Enum file_type</a> [enum.file_type]</h2>
<p>This enum specifies constants uses to identify file types.</p>
<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
<tr>
@@ -1510,8 +1618,7 @@ clause.</p>
<tr>
<td><code>status_error</code></td>
<td>An error occurred while trying to obtain the status of the file. The
- file simply not being found is <b><u>not</u></b> considered a status error.
- </td>
+ file simply not being found is <b><u>not</u></b> considered a status error. </td>
</tr>
<tr>
<td><code>file_not_found</code></td>
@@ -1551,38 +1658,31 @@ clause.</p>
of the above cases.</td>
</tr>
</table>
-<h3><a name="Enum-perms">Enum perms</a></h3>
-<p>This enum specifies bitmask constants uses to identify file
-permissions. The POSIX standard specifies actual values, and those values have
-been adopted here because they are very familiar and ingrained for many POSIX
-users.</p>
-<blockquote>
-<p>Caution: Operating systems do not always support permissions as described in
-the table.</p>
-<p>There is much variation in the meaning of <code><a href="#sticky_bit">
-sticky_bit</a></code>; do not use it unless you understand what it means for
-your operating system.</p>
-<p>There is much variation in how operating systems treat symlinks. See <code>
-<a href="#symlink_perms">symlink_perms</a></code>.</p>
-<p>Windows: All permissions except write are currently ignored. There is only a
+<h2><a name="Enum-perms">Enum perms</a> [enum.perms]</h2>
+<p>This <code>enum</code> specifies bitmask constants uses to identify file
+permissions. <i><span style="background-color: #E0E0E0">ISO/</span><span style="background-color: #E0E0E0">IEC</span><span style="background-color: #E0E0E0"> 9945
+(POSIX) specifies actual values, and those values have been adopted here because
+they are very familiar and ingrained for many POSIX
+users.</span></i></p>
+<blockquote>
+<p><span style="background-color: #FFFF00">Windows: All permissions except write are currently ignored. There is only a
single write permission; setting write permission for owner, group, or others
sets write permission for all, and removing write permission for owner, group,
-or others removes write permission for all. </p>
+or others removes write permission for all. </span> </p>
</blockquote>
<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
<tr>
<td><b>Name</b></td>
<td align="center"><b>Value<br>
(octal)</b></td>
- <td align="center"><b>POSIX<br>
+ <td align="center"><b>ISO/IEC 9945<br>
macro</b></td>
<td><b>Definition or notes</b></td>
</tr>
<tr><td>
- <p dir="ltr"><code>no_perms</code></td><td><code>0</code></td><td></td>
- <td>There are no permissions set for the file. Note: <code>file_not_found</code> is
- <code>no_perms</code> rather than <code>perms_not_known</code></td>
+ <p><code>no_perms</code></td><td><code>0</code></td><td></td>
+ <td>There are no permissions set for the file. Note: <code>file_not_found</code> is <code>no_perms</code> rather than <code>perms_not_known</code></td>
</tr>
<tr><td><code>owner_read</code></td><td><code>0400</code></td><td> <code>S_IRUSR</code></td>
<td> Read permission, owner</td>
@@ -1606,8 +1706,7 @@ or others removes write permission for all. </p>
<td> Execute/search permission, group</td>
</tr>
<tr><td><code>group_all</code></td><td><code>070</code></td><td> <code>S_IRWXG</code></td>
- <td> Read, write, execute/search by group; <code>group_read | group_write |
- group_exe</code></td>
+ <td> Read, write, execute/search by group; <code>group_read | group_write | group_exe</code></td>
</tr>
<tr><td><code>others_read</code></td><td><code>04</code></td><td> <code>S_IROTH</code></td>
<td> Read permission, others</td>
@@ -1629,10 +1728,11 @@ or others removes write permission for all. </p>
<tr><td><code>set_gid_on_exe</code></td><td><code>02000</code></td><td> <code>S_ISGID</code></td>
<td> Set-group-ID on execution</td>
</tr>
-<tr><td><code><a name="sticky_bit">sticky_bit</a> </code> </td><td><code>01000</code></td><td> <code>S_ISVTX</code></td>
- <td> Meaning varies; see <a href="http://en.wikipedia.org/wiki/Sticky_bit">http:en.wikipedia.org/wiki/Sticky_bit</a></td>
+<tr><td><code><a name="sticky_bit">sticky_bit</a> </code></td><td><code>01000</code></td><td> <code>S_ISVTX</code></td>
+ <td> Operating system dependent. Inherently non-portable, even between ISO/IEC 9945
+ operating systems.</td>
</tr>
-<tr><td><code>perms_mask</code></td><td><code>07777</code></td><td> &nbsp;</td>
+<tr><td><code><a name="perms_mask">perms_mask</a></code></td><td><code>07777</code></td><td> &nbsp;</td>
<td><code>all_all | set_uid_on_exe | set_gid_on_exe | sticky_bit</code></td>
</tr>
<tr><td><code>perms_not_known</code></td><td><code>0xFFFF</code></td><td></td><td>
@@ -1640,8 +1740,8 @@ or others removes write permission for all. </p>
is created without specifying the permissions</td>
</tr>
<tr><td>
- <p dir="ltr"><code>add_perms</code></td><td><code>0x1000</code></td><td></td><td>
- <p dir="ltr"><code>permissions()</code> adds the argument permission bits to the
+ <p><code>add_perms</code></td><td><code>0x1000</code></td><td></td><td>
+ <p><code>permissions()</code> adds the argument permission bits to the
file's current bits</td>
</tr>
<tr><td><code>remove_perms</code></td><td><code>0x2000</code></td><td></td><td>
@@ -1649,19 +1749,18 @@ or others removes write permission for all. </p>
file's current bits</td>
</tr>
<tr><td><code><a name="symlink_perms">symlink_perms</a></code></td><td><code>0x4000</code></td><td></td><td>
- On POSIX <code>permissions()</code> resolves symlinks unless <code>symlink_perms</code>
- is specified.
- Meaningless on Windows as <code>permissions()</code> never resolves symlinks.
- Meaningless on Mac OS X and some other BSD systems as <code>permissions()</code>
- always resolves symlinks. Get over it.</td>
+ <span style="background-color: #FFFF00">On ISO/</span><span style="background-color: #FFFF00">IEC</span><span style="background-color: #FFFF00"> 9945
+ </span> <code><span style="background-color: #FFFF00">permissions()</span></code><span style="background-color: #FFFF00"> resolves symlinks unless
+ </span> <code><span style="background-color: #FFFF00">symlink_perms</span></code><span style="background-color: #FFFF00"> is specified.
+ Meaningless on Windows as </span> <code>
+ <span style="background-color: #FFFF00">permissions()</span></code><span style="background-color: #FFFF00"> never resolves symlinks.
+ Meaningless on Mac OS X and some other BSD systems as </span> <code>
+ <span style="background-color: #FFFF00">permissions()</span></code><span style="background-color: #FFFF00"> always resolves symlinks. Get over it.</span></td>
</tr>
</table>
-<h3><a name="file_status">Class file_status</a></h3>
-<pre> namespace boost
- {
- namespace filesystem
- {
+<h2><a name="file_status">Class file_status</a> [class.file_status]</h2>
+<pre>$NAMESPACE_BEGIN;
class file_status
{
public:
@@ -1683,51 +1782,40 @@ or others removes write permission for all. </p>
void type(<a href="#file_type">file_type</a> ft) noexcept;
void permissions(<a href="#Enum-perms">perms</a> prms) noexcept;
};
- } // namespace filesystem
- } // namespace boost</pre>
+$NAMESPACE_END;</pre>
<p>An object of type <code>file_status</code> stores information about the type
and permissions of a file.</p>
-<h4 dir="ltr"><a name="file_status-constructors"><code>file_status</code>
-constructors</a></h4>
+<h3><a name="file_status-constructors"><code>file_status</code> constructors</a>
+[file_status.cons]</h3>
<pre>explicit file_status() noexcept;</pre>
<blockquote>
- <p><i>Postconditions:</i> <code>type() == status_error</code>, <code>
- permissions() == perms_not_known</code>.</p>
+ <p><i>Postconditions:</i> <code>type() == status_error</code>, <code>permissions() == perms_not_known</code>.</p>
</blockquote>
<pre>explicit file_status(<a href="#file_type">file_type</a> ft, <a href="#Enum-perms">perms</a> prms = perms_not_known) noexcept;</pre>
<blockquote>
- <p><i>Postconditions:</i> <code>type() == ft</code>, <code>permissions() ==
- prms</code>.</p>
+ <p><i>Postconditions:</i> <code>type() == ft</code>, <code>permissions() == prms</code>.</p>
</blockquote>
- <h4 dir="ltr"><a name="file_status-observers"><code>file_status</code>
- observers</a></h4>
+ <h3><a name="file_status-observers"><code>file_status</code> observers</a> [file_status.obs]</h3>
<pre><a href="#file_type">file_type</a> type() const noexcept;</pre>
<blockquote>
- <p><i>Returns: </i>The value of <code>type()</code> specified by the <i>
- postconditions</i> of the most recent call to a constructor, operator=, or
- <code>type(file_type)</code> function.</p>
+ <p><i>Returns: </i>The value of <code>type()</code> specified by the <i>postconditions</i> of the most recent call to a constructor, operator=, or <code>type(file_type)</code> function.</p>
</blockquote>
<pre><a href="#Enum-perms">perms</a> permissions() const noexcept;</pre>
<blockquote>
- <p><i>Returns: </i>The value of <code>permissions()</code> specified by the <i>
- postconditions</i> of the most recent call to a constructor, operator=, or
- <code>permissions(perms)</code> function.</p>
+ <p><i>Returns: </i>The value of <code>permissions()</code> specified by the <i>postconditions</i> of the most recent call to a constructor, operator=, or <code>permissions(perms)</code> function.</p>
</blockquote>
-<h4 dir="ltr"><a name="file_status-modifiers"><code>file_status</code> modifiers</a></h4>
+<h3><a name="file_status-modifiers"><code>file_status</code> modifiers</a> [file_status.mods]</h3>
<pre>void type(<a href="#file_type">file_type</a> ft) noexcept;</pre>
<blockquote>
- <p dir="ltr"><i>Postconditions:</i> <code>type() == ft</code>.</p>
+ <p><i>Postconditions:</i> <code>type() == ft</code>.</p>
</blockquote>
<pre>void permissions(<a href="#Enum-perms">perms</a> prms) noexcept;</pre>
<blockquote>
- <p dir="ltr"><i>Postconditions:</i> <code>permissions() == prms</code>.</p>
+ <p><i>Postconditions:</i> <code>permissions() == prms</code>.</p>
</blockquote>
-<h3><a name="Class-directory_entry">Class <code>directory_entry</code></a></h3>
-<div dir="ltr">
-<pre> namespace boost
- {
- namespace filesystem
- {
+<h2><a name="Class-directory_entry">Class <code>directory_entry</code></a> [class.directory_entry]</h2>
+<div>
+<pre>$NAMESPACE_BEGIN;
class directory_entry
{
public:
@@ -1766,25 +1854,23 @@ constructors</a></h4>
mutable file_status m_symlink_status; // for exposition only; lstat()-like
};
- } // namespace filesystem
- } // namespace boost</pre>
+$NAMESPACE_END;</pre>
</div>
<p>A <code>directory_entry</code> object stores a <code>path object</code>,
-a <code>file_status</code> object for non-symbolic link status, and a <code>
-file_status</code> object for symbolic link status. The <code>file_status</code>
-objects act as value caches.</p>
+a <code>file_status</code> object for non-symbolic link status, and a <code>file_status</code> object for symbolic link status. The <code>file_status</code> objects act as value caches.</p>
<blockquote>
-<p>[<i>Note:</i> Because <code>status()</code>on a pathname may be a very expensive operation,
+<p>[<i>Note:</i> Because <code>status()</code>on a pathname may be a relatively expensive operation,
some operating systems provide status information as a byproduct of directory
iteration. Caching such status information can result is significant time savings. Cached and
-non-cached results may differ in the presence of race conditions. <i>-- end note</i>]</p>
+non-cached results may differ in the presence of file system races. <i>-- end note</i>]</p>
<p><span style="background-color: #E0E0E0"><i>Actual cold-boot timing of iteration over
a directory with 15,047 entries was six seconds for non-cached status queries
versus one second for cached status queries. Windows XP, 3.0 GHz processor, with
a moderately fast hard-drive. Similar speedups are expected on Linux and BSD-derived
systems that provide status as a by-product of directory iteration.</i></span></p>
</blockquote>
-<h4> <a name="directory_entry-constructors"> <code>directory_entry </code>constructors</a></h4>
+<h3> <a name="directory_entry-constructors"> <code>directory_entry </code>constructors</a>
+[directory_entry.cons]</h3>
<pre>directory_entry();</pre>
<blockquote>
<p><i>Postcondition:</i></p>
@@ -1829,7 +1915,8 @@ systems that provide status as a by-product of directory iteration.</i></span></
</tr>
</table>
</blockquote>
-<h4> <a name="directory_entry-modifiers"> <code>directory_entry </code>modifiers</a></h4>
+<h3> <a name="directory_entry-modifiers"> <code>directory_entry </code>modifiers</a>
+[directory_entry.mods]</h3>
<pre>void assign(const path_type&amp; p, file_status st=file_status(), file_status symlink_st=file_status());</pre>
<blockquote>
<p><i>Postcondition:</i></p>
@@ -1874,7 +1961,8 @@ systems that provide status as a by-product of directory iteration.</i></span></
</tr>
</table>
</blockquote>
-<h4> <a name="directory_entry-observers"> <code>directory_entry</code> observers</a></h4>
+<h3> <a name="directory_entry-observers"> <code>directory_entry</code> observers</a>
+[directory_entry.obs]</h3>
<pre>const path&amp; path() const;</pre>
<blockquote>
<p><i>Returns:</i> <code>m_path</code></p>
@@ -1882,8 +1970,7 @@ systems that provide status as a by-product of directory iteration.</i></span></
<pre>file_status status() const;
file_status status(system::error_code&amp; ec) const;</pre>
<blockquote>
-<p><i>Effects:</i>
-As if,</p>
+<p><i>Effects:</i> As if,</p>
<blockquote>
<pre>if ( !status_known( m_status ) )
{
@@ -1894,78 +1981,60 @@ As if,</p>
</blockquote>
<p><i>Returns:</i> <code>m_status</code></p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>file_status symlink_status() const;
file_status symlink_status(system::error_code&amp; ec) const;</pre>
<blockquote>
<p>
- <i>Effects:</i>
-As if,</p>
+ <i>Effects:</i> As if,</p>
<blockquote>
<pre>if ( !status_known( m_symlink_status ) )
{
m_symlink_status = symlink_status(m_path<i>[, ec]</i>);
}</pre>
</blockquote>
- <p><i>Returns:</i> <code>
- m_symlink_status</code></p>
+ <p><i>Returns:</i> <code>m_symlink_status</code></p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>bool operator==(const directory_entry&amp; rhs);</pre>
<blockquote>
- <p><i>Returns:</i> <code>m_path ==
- rhs.m_path</code>.</p>
+ <p><i>Returns:</i> <code>m_path == rhs.m_path</code>.</p>
</blockquote>
<pre>bool operator!=(const directory_entry&amp; rhs);</pre>
<blockquote>
- <p><i>Returns:</i> <code>m_path !=
- rhs.m_path</code>.</p>
+ <p><i>Returns:</i> <code>m_path != rhs.m_path</code>.</p>
</blockquote>
<pre>bool operator&lt; (const directory_entry&amp; rhs);</pre>
<blockquote>
- <p><i>Returns:</i> <code>m_path &lt;
- rhs.m_path</code>.</p>
+ <p><i>Returns:</i> <code>m_path &lt; rhs.m_path</code>.</p>
</blockquote>
<pre>bool operator&lt;=(const directory_entry&amp; rhs);</pre>
<blockquote>
- <p><i>Returns:</i> <code>m_path &lt;=
- rhs.m_path</code>.</p>
+ <p><i>Returns:</i> <code>m_path &lt;= rhs.m_path</code>.</p>
</blockquote>
<pre>bool operator&gt; (const directory_entry&amp; rhs);</pre>
<blockquote>
- <p><i>Returns:</i> <code>m_path &gt;
- rhs.m_path</code>.</p>
+ <p><i>Returns:</i> <code>m_path &gt; rhs.m_path</code>.</p>
</blockquote>
<pre>bool operator&gt;=(const directory_entry&amp; rhs);</pre>
<blockquote>
- <p><i>Returns:</i> <code>m_path &gt;=
- rhs.m_path</code>.</p>
+ <p><i>Returns:</i> <code>m_path &gt;= rhs.m_path</code>.</p>
</blockquote>
-<h3><a name="Class-directory_iterator">Class <code>directory_iterator</code></a></h3>
+<h2><a name="Class-directory_iterator">Class <code>directory_iterator</code>
+[class.directory_iterator]</a></h2>
<p>Objects of type <code>directory_iterator</code> provide standard library
-compliant iteration over the contents of a directory. Also see class <code>
-<a href="#Class-recursive_directory_iterator">recursive_directory_iterator</a></code>.</p>
-<pre> namespace boost
- {
- namespace filesystem
- {
+compliant iteration over the contents of a directory. Also see class <code><a href="#Class-recursive_directory_iterator">recursive_directory_iterator</a></code>.</p>
+<pre>$NAMESPACE_BEGIN;
class directory_iterator
- : public boost::iterator_facade&lt; directory_iterator,
- <a href="#Class-directory_entry">directory_entry</a>,
- boost::single_pass_traversal_tag &gt;
{
public:
// <a href="#directory_iterator-members">member functions</a>
- directory_iterator(); // creates the &quot;end&quot; iterator
+ directory_iterator() noexcept; // creates the &quot;end&quot; iterator
directory_iterator(const directory_iterator&amp;);
explicit directory_iterator(const path&amp; p);
directory_iterator(const path&amp; p, system::error_code&amp; ec);
@@ -1980,43 +2049,30 @@ compliant iteration over the contents of a directory. Also see class <code>
// C++ Std, 24.1.1 Input iterators [input.iterators]
};
- } // namespace filesystem
- } // namespace boost</pre>
+$NAMESPACE_END;</pre>
<p> <code>directory_iterator</code> satisfies the requirements of an
input iterator (C++ Std, 24.2.1, Input iterators [input.iterators]).</p>
<p>A <code>directory_iterator</code> reads successive elements from the directory for
-which it was constructed, as if by calling <i>POSIX</i>
-<code>
-<a href="http://www.opengroup.org/onlinepubs/000095399/functions/readdir_r.html">readdir_r()</a></code>. After a <code>directory_iterator</code> is constructed, and every time
-<code>operator++</code> is called,
-it reads a directory element and stores information about it in a object of type <code>
-<a href="#Class-directory_entry">directory_entry</a></code>.
-<code>operator++</code> is not equality preserving; that is, <code>i == j</code> does not imply that
-<code>++i == ++j</code>. </p>
+which it was constructed, as if by calling ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/readdir_r.html">readdir_r()</a></code>. After a <code>directory_iterator</code> is constructed, and every time <code>operator++</code> is called,
+it reads a directory element and stores information about it in a object of type <code><a href="#Class-directory_entry">directory_entry</a></code>. <code>operator++</code> is not equality preserving; that is, <code>i == j</code> does not imply that <code>++i == ++j</code>. </p>
<blockquote>
<p>[<i>Note:</i> The practical consequence of not preserving equality is that directory iterators
can only be used for single-pass algorithms. <i>--end note</i>]</p>
</blockquote>
-<p>If the end of the directory elements is reached, the iterator becomes equal to
-the end iterator value. The constructor <code>directory_iterator()</code>
-with no arguments always constructs an end iterator object, which is the only
-legitimate iterator to be used for the end condition. The result of <code>
-operator*</code> on an end iterator is not defined. For any other iterator value
-a <code>const directory_entry&amp;</code> is returned. The result of
-<code>operator-&gt;</code> on an end iterator is not defined. For any other iterator value a <code>const directory_entry*</code> is
+<p>If the end of the directory elements is reached, the iterator shall become equal to
+the end iterator value. The constructor <code>directory_iterator()</code> with no arguments always constructs an end iterator object, which
+shall be the only valid iterator for the end condition. The result of <code>operator*</code> on an end iterator is not defined. For any other iterator value
+a <code>const directory_entry&amp;</code> is returned. The result of <code>operator-&gt;</code> on an end iterator is
+undefined behavior. For any other iterator value a <code>const directory_entry*</code> is
returned. </p>
-<p>Two end iterators are always equal. An end iterator is not equal to a non-end
+<p>Two end iterators are always equal. An end iterator shall not be equal to a non-end
iterator.</p>
<blockquote>
<p><i><span style="background-color: #E0E0E0">The above wording is based on the
Standard Library's istream_iterator wording.</span></i></p>
</blockquote>
-<p>The result of calling the <code>path()</code> member of the <code>
-directory_entry</code> object obtained by dereferencing a <code>
-directory_iterator</code> is a reference to a <code>path</code>
-object composed of the directory argument from which the iterator was
-constructed with filename of the directory entry appended as if by <code>
-operator/=</code>. </p>
+<p>The result of calling the <code>path()</code> member of the <code>directory_entry</code> object obtained by dereferencing a <code>directory_iterator</code> is a reference to a <code>path</code> object composed of the directory argument from which the iterator was
+constructed with filename of the directory entry appended as if by <code>operator/=</code>. </p>
<p>Directory iteration shall not yield directory entries for the current (<i>dot</i>)
and parent (<i>dot dot</i>) directories.</p>
<p>The order of directory entries obtained by dereferencing successive
@@ -2032,21 +2088,18 @@ to avoid following symbolic links.</p>
construction of a <code>directory_iterator</code> for the directory, it is
unspecified whether or not subsequent incrementing of the iterator will ever
result in an iterator whose value is the removed or added directory entry. See
-<i>POSIX</i>
-<code>
-<a href="http://www.opengroup.org/onlinepubs/000095399/functions/readdir_r.html">readdir_r()</a></code>. <i>
---end note</i>]</p>
+ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/readdir_r.html">readdir_r()</a></code>. <i>--end note</i>]</p>
</blockquote>
-<h4><a name="directory_iterator-members"><code>directory_iterator</code> members</a></h4>
+<h3><a name="directory_iterator-members"><code>directory_iterator</code> members</a>
+[directory_iterator.members]</h3>
-<p><code><a name="directory_iterator-default-ctor">directory_iterator</a>();</code></p>
+<p><code><a name="directory_iterator-default-ctor">directory_iterator</a>()
+noexcept;</code></p>
<blockquote>
<p><i>Effects:</i> Constructs the end iterator.</p>
-<p><i>Throws:</i> Nothing.</p>
-
</blockquote>
<pre><code>explicit <a name="directory_iterator-ctor-path">directory_iterator</a>(</code>const path&amp; p<code>);
@@ -2056,13 +2109,9 @@ directory_iterator(</code>const path&amp; p, system::error_code&amp; ec<code>);<
<p><i>Effects:</i> Constructs a iterator representing the first
entry in the directory <code>p</code> resolves to, if any; otherwise, the end iterator.</p>
-<p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+<p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
-<p>[<i>Note:</i> To iterate over the current directory, use <code>
-directory_iterator(&quot;.&quot;)</code> rather than <code>directory_iterator(&quot;&quot;)</code>.
-<i>-- end note</i>]</p>
+<p>[<i>Note:</i> To iterate over the current directory, use <code>directory_iterator(&quot;.&quot;)</code> rather than <code>directory_iterator(&quot;&quot;)</code>. <i>-- end note</i>]</p>
</blockquote>
<pre>directory_iterator&amp; <a name="directory_iterator-increment">operator++</a>();
directory_iterator&amp; increment(system::error_code&amp; ec);</pre>
@@ -2072,37 +2121,42 @@ directory_iterator&amp; increment(system::error_code&amp; ec);</pre>
<p><i>Returns:</i> <code>*this</code>.</p>
-<p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+<p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
-<h3><a name="Class-recursive_directory_iterator">Class <code>recursive_directory_iterator</code></a></h3>
+<h3><a name="directory_iterator-non-member-functions"><code>directory_iterator</code> non-member functions</a></h3>
+<pre>const directory_iterator&amp; begin(const directory_iterator&amp; iter);</pre>
+<blockquote>
+ <p><i>Returns: </i><code>iter</code>.</p>
+</blockquote>
+<pre>directory_iterator end(const directory_iterator&amp;);</pre>
+<blockquote>
+ <p><i>Returns: </i><code>directory_iterator()</code>.</p>
+</blockquote>
+<h2><a name="Class-recursive_directory_iterator">Class <code>recursive_directory_iterator</code>
+[class.rec.dir.itr]</a></h2>
<p>Objects of type <code>recursive_directory_iterator</code> provide standard library
compliant iteration over the contents of a directory, including recursion into
its sub-directories.</p>
-<pre> namespace boost
- {
- namespace filesystem
- {
+<pre>$NAMESPACE_BEGIN;
class recursive_directory_iterator :
public iterator&lt;input_iterator_tag, directory_entry&gt;
{
public:
// constructors and destructor
- recursive_directory_iterator();
+ recursive_directory_iterator() noexcept;
recursive_directory_iterator(const recursive_directory_iterator&amp;);
explicit recursive_directory_iterator(const path&amp; p,
- BOOST_SCOPED_ENUM(<a href="#symlink_option">symlink_option</a>) opt = symlink_option::none);
+ <a href="#symlink_option">symlink_option</a> opt = symlink_option::none);
recursive_directory_iterator(const path&amp; p,
- BOOST_SCOPED_ENUM(<a href="#symlink_option">symlink_option</a>) opt, system::error_code&amp; ec);
+ <a href="#symlink_option">symlink_option</a> opt, system::error_code&amp; ec);
recursive_directory_iterator(const path&amp; p, system::error_code&amp; ec);
~recursive_directory_iterator();
// observers
- int level() const;
- bool no_push<code>_pending</code>() const;
+ int level() const noexcept;
+ bool no_push<code>_pending</code>() const noexcept;
// modifiers
recursive_directory_iterator&amp; operator=(const recursive_directory_iterator&amp;);
@@ -2114,18 +2168,18 @@ its sub-directories.</p>
void no_push(bool value=true);
// other members as required by
- // C++ Std, 24.1.2 Input iterators [input.iterators]
+ // C++ Std, Input iterators [input.iterators]
private:
-<i><b> // actual data members will probably be stored in a shared pimpl object,
- // or some similar mechanism, to achieve the required input iterator copy semantics
-</b></i> int m_level; <b><i> // for exposition only</i></b>
- bool m_no_<code>push</code>; <i><b> // for exposition only
- </b></i>BOOST_SCOPED_ENUM(<a href="#symlink_option">symlink_option</a>) m_options; <i><b>// for exposition only</b></i>
+<i><b> // actual data members will probably be stored in a shared object,
+ // or some similar mechanism, to achieve the required input iterator
+ // copy semantics
+</b></i> int m_level; <b><i> // for exposition only</i></b>
+ bool m_no_<code>push</code>; <i><b>// for exposition only
+ </b></i><a href="#symlink_option">symlink_option</a> m_options; <i><b>// for exposition only</b></i>
};
- } // namespace filesystem
- } // namespace boost</pre>
+$NAMESPACE_END;</pre>
<p>The behavior of a <code>recursive_directory_iterator</code> is the same
as a <code>directory_iterator</code> unless otherwise specified.</p>
@@ -2138,52 +2192,40 @@ as a <code>directory_iterator</code> unless otherwise specified.</p>
over, or when <code>pop()</code> is called, <code>m_level</code> is
decremented, and iteration of the parent directory continues.</li>
</ul>
-<pre>recursive_directory_iterator();</pre>
+<pre>recursive_directory_iterator() noexcept;</pre>
<blockquote>
<p><i>Effects:</i> Constructs the end iterator.</p>
-<p><i>Throws:</i> Nothing.</p>
-
</blockquote>
-<pre>explicit recursive_directory_iterator(const path&amp; p, BOOST_SCOPED_ENUM(<a href="#symlink_option">symlink_option</a>) opt = symlink_option::none);
-recursive_directory_iterator(const path&amp; p, BOOST_SCOPED_ENUM(<a href="#symlink_option">symlink_option</a>) opt, system::error_code&amp; ec);
+<pre>explicit recursive_directory_iterator(const path&amp; p, <a href="#symlink_option">symlink_option</a> opt = symlink_option::none);
+recursive_directory_iterator(const path&amp; p, <a href="#symlink_option">symlink_option</a> opt, system::error_code&amp; ec);
recursive_<code>directory_iterator(</code>const path&amp; p, system::error_code&amp; ec<code>);</code></pre>
<blockquote>
<p><i>Effects:</i>&nbsp; Constructs a iterator representing the first
entry in the directory <code>p</code> resolves to, if any; otherwise, the end iterator.</p>
-<p dir="ltr"><i>Postcondition: </i>Unless the end iterator was constructed,<i> </i>
-<code>level() == 0 &amp;&amp; no_push_pending() == false &amp;&amp; m_options == opt</code>.
-For the signature without a <code>symlink_option</code> argument, <code>opt</code>
-is assumed to be <code>symlink_option::none</code>.</p>
+<p><i>Postcondition: </i>Unless the end iterator was constructed,<i> </i><code>level() == 0 &amp;&amp; no_push_pending() == false &amp;&amp; m_options == opt</code>.
+For the signature without a <code>symlink_option</code> argument, <code>opt</code> is assumed to be <code>symlink_option::none</code>.</p>
-<p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+<p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
-<p>[<i>Note:</i> To iterate over the current directory, use <code>recursive_directory_iterator(&quot;.&quot;)</code> rather than
-<code>recursive_directory_iterator(&quot;&quot;)</code>.
-<i>-- end note</i>]</p>
+<p>[<i>Note:</i> To iterate over the current directory, use <code>recursive_directory_iterator(&quot;.&quot;)</code> rather than <code>recursive_directory_iterator(&quot;&quot;)</code>. <i>-- end note</i>]</p>
<p>[<i>Note:</i> By default, <code>recursive_directory_iterator</code> does not
-follow directory symlinks. To follow directory symlinks, specify <code>opt</code>
-as <code>symlink_option::recurse</code>
-<i>-- end note</i>]</p>
+follow directory symlinks. To follow directory symlinks, specify <code>opt</code> as <code>symlink_option::recurse</code> <i>-- end note</i>]</p>
</blockquote>
-<pre>int level() const;</pre>
+<pre>int level() const noexcept;</pre>
<blockquote>
<p><i>Requires:</i> <code>*this != recursive_directory_iterator()</code>.</p>
<p><i>Returns:</i> <code>m_level</code>.</p>
- <p><i>Throws:</i> Nothing.</p>
</blockquote>
-<pre>bool <code>no_push_pending</code>() const;</pre>
+<pre>bool <code>no_push_pending</code>() const noexcept;</pre>
<blockquote>
<p><i>Requires:</i> <code>*this != recursive_directory_iterator()</code>.</p>
<p><i>Returns:</i> <code>m_no_push</code>.</p>
- <p><i>Throws:</i> Nothing.</p>
</blockquote>
<pre><code>recursive_directory_iterator</code>&amp; <a name="recursive_directory_iterator-increment">operator++</a>();
recursive_directory_iterator&amp; increment(system::error_code&amp; ec);</pre>
@@ -2193,12 +2235,10 @@ recursive_directory_iterator&amp; increment(system::error_code&amp; ec);</pre>
except:</p>
<ul>
- <li dir="ltr">
+ <li>
-<p dir="ltr">if <code>!no_push_pending() &amp;&amp; is_directory(this-&gt;status())
-&amp;&amp; (!is_symlink(this-&gt;symlink_status()) || (m_options
-&amp; symlink_option::recurse) != 0)</code> then&nbsp; <code>m_level</code>
-is incremented and directory <code>(*this)-&gt;path()</code> is recursively iterated into.<br>
+<p>if <code>!no_push_pending() &amp;&amp; is_directory(this-&gt;status())
+&amp;&amp; (!is_symlink(this-&gt;symlink_status()) || (m_options &amp; symlink_option::recurse) != 0)</code> then&nbsp; <code>m_level</code> is incremented and directory <code>(*this)-&gt;path()</code> is recursively iterated into.<br>
&nbsp;</p>
</li>
@@ -2210,9 +2250,7 @@ is decremented and iteration of the parent directory resumes.</li>
<p><i>Returns:</i> <code>*this</code>.</p>
-<p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+<p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>void pop();</pre>
@@ -2221,30 +2259,33 @@ is decremented and iteration of the parent directory resumes.</li>
<p><i>Effects:</i> If <code>level() == 0</code>, set <code>*this</code> to <code>recursive_directory_iterator()</code>.
Otherwise, <code>--m_level</code>, cease iteration of the directory currently being
iterated over, and continue iteration over the parent directory.</p>
- <p><i>Throws:</i> Nothing.</p>
</blockquote>
<pre>void no_push(bool value=true);</pre>
<blockquote>
<p><i>Requires:</i> <code>*this != recursive_directory_iterator()</code>.</p>
<p><i>Postcondition:</i> <code>no_push_pending() == value</code>.</p>
- <p><i>Throws:</i> Nothing.</p>
<p>[<i>Note:</i> <code>no_push()</code> is used to prevent
unwanted recursion into a directory. <i>--end note</i>]</p>
</blockquote>
-<h3><a name="Operational-functions">Operational functions</a></h3>
+<h3><a name="recursive_directory_iterator-non-member-functions"><code>recursive_directory_iterator</code> non-member functions</a></h3>
+<pre>const recursive_directory_iterator&amp; begin(const recursive_directory_iterator&amp; iter);</pre>
+<blockquote>
+ <p><i>Returns: </i><code>iter</code>.</p>
+</blockquote>
+<pre>recursive_directory_iterator end(const recursive_directory_iterator&amp;);</pre>
+<blockquote>
+ <p><i>Returns: </i><code>recursive_directory_iterator()</code>.</p>
+</blockquote>
+<h2><a name="Operational-functions">Operational functions</a> [fs.op.funcs]</h2>
<p>Operational functions query or modify files, including directories, in external
storage.</p>
-<p style="font-size: 10pt">Operational functions access a file by resolving an
+<p>Operational functions access a file by resolving an
object of class <code>path</code> to a particular file in a file hierarchy. The
-path is resolved as if by the <i>POSIX</i>
-<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap04.html#tag_04_11">
-Pathname Resolution</a> mechanism.</p>
-<p>[<i>Note: </i>Because hardware failures, network failures,
-<a href="#Race-condition">race conditions</a>, and many
+path is resolved as if by the ISO/IEC 9945 <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap04.html#tag_04_11">Pathname Resolution</a> mechanism.</p>
+<p>[<i>Note: </i>Because hardware failures, network failures, <a href="#Race-condition">file system races</a>, and many
other kinds of errors occur frequently in file system operations, users should be aware
that any filesystem operational function, no matter how apparently innocuous, may encounter
an error.&nbsp;See <a href="#Error-reporting">Error reporting</a>. <i>-- end note</i>]</p>
-<h4><a name="Function-specifications">Operational function specifications</a></h4>
<pre>path <a name="absolute">absolute</a>(const path&amp; p, const path&amp; base=current_path());</pre>
<blockquote>
<p><i>Returns:</i> A <a href="#Absolute-path">absolute path</a> composed according to the
@@ -2258,8 +2299,7 @@ an error.&nbsp;See <a href="#Error-reporting">Error reporting</a>. <i>-- end not
<tr>
<td align="center"><b><code>p.has_root_name()</code></b></td>
<td align="center"><code>return p</code></td>
- <td align="center"><code>return p.root_name() /
- absolute(base).root_directory()<br>
+ <td align="center"><code>return p.root_name() / absolute(base).root_directory()<br>
/ absolute(base).relative_path() / p.relative_path()</code></td>
</tr>
<tr>
@@ -2269,8 +2309,7 @@ an error.&nbsp;See <a href="#Error-reporting">Error reporting</a>. <i>-- end not
<td align="center"><code>return absolute(base) / p</code></td>
</tr>
</table>
- <p dir="ltr">[<i>Note:</i> For the returned path, <code>rp,</code> <code>
- rp.is_absolute()</code> is true. <i>-- end note</i>]</p>
+ <p>[<i>Note:</i> For the returned path, <code>rp,</code> <code>rp.is_absolute()</code> is true. <i>-- end note</i>]</p>
<p><i>Throws:</i> If <code>base.is_absolute()</code> is true, throws only if
memory allocation fails.</p>
</blockquote>
@@ -2284,9 +2323,7 @@ or <a href="#Dot">dot-dot</a> elements. </p>
<p><i>Returns:</i> A <a href="#Canonical-path">canonical path</a> that refers to
the same file system object as <code>absolute(p,base)</code>. For the overload
without a <code>base</code> argument, <code>base</code> is <code>current_path()</code>.</p>
- <p><i>Throws:</i>&nbsp; As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i>&nbsp; As specified in <a href="#Error-reporting">Error reporting</a>.</p>
<p><i>Remarks:</i> <code>!exists(p)</code> is an error.</p>
@@ -2310,118 +2347,112 @@ else if(is_regular_file(s))
else
<i> Report error as specified in <a href="#Error-reporting">Error reporting</a>.</i></pre>
</blockquote>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>void <a name="copy_directory">copy_directory</a>(const path&amp; from, const path&amp; to);
void copy_directory(const path&amp; from, const path&amp; to, system::error_code&amp; ec);</pre>
<blockquote>
- <p><i>Effects: </i></p>
+ <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
+ bordercolor="#111111" width="90%" bgcolor="#E0E0E0">
+ <tr>
+ <td width="100%">
+ <p><i>This function is poorly named; it should probably be an overload of
+ <code>create_directory</code> with an additional argument.</i></td>
+ </tr>
+ </table>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Effects: </i>Creates directory <code>to</code>, with
+ attributes copied from directory <code>from</code>. The set of attributes
+ copied is operating system dependent.</p>
+<blockquote>
+ <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
+ bordercolor="#111111" width="90%" bgcolor="#E8FFE8">
+ <tr>
+ <td width="100%">
+ <p>[<i>Note:</i> For ISO 9945/POSIX based operating systems the
+ attributes are those copied by native API <code>stat(from.c_str(), &amp;from_stat)</code>
+ followed by <code>mkdir(to.c_str(),from_stat.st_mode)</code>.&nbsp; For
+ Windows based operating systems the attributes are those copied by native
+ API <code>CreateDirectoryExW(from.c_str(), to.c_str(), 0)</code>.&nbsp; <i>
+ --end note</i>]</td>
+ </tr>
+ </table>
</blockquote>
+
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+
+</blockquote>
+
<pre>void copy_file(const path&amp; from, const path&amp; to);
void copy_file(const path&amp; from, const path&amp; to, system::error_code&amp; ec);</pre>
<blockquote>
- <p><i>Effects: </i><code>copy_file(from, to,
- copy_option::fail_if_exists</code><i>[</i><code>, ec</code><i>]</i><code>)</code>.</p>
+ <p><i>Effects: </i><code>copy_file(from, to, copy_option::fail_if_exists</code><i>[</i><code>, ec</code><i>]</i><code>)</code>.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
-<pre>void <a name="copy_file">copy_file</a>(const path&amp; from, const path&amp; to, BOOST_SCOPED_ENUM(<a href="#copy_option">copy_option</a>) option);
-void <a name="copy_file2">copy_file</a>(const path&amp; from, const path&amp; to, BOOST_SCOPED_ENUM(<a href="#copy_option">copy_option</a>) option, system::error_code&amp; ec);</pre>
+<pre>void <a name="copy_file">copy_file</a>(const path&amp; from, const path&amp; to, <a href="#copy_option">copy_option</a> option);
+void <a name="copy_file2">copy_file</a>(const path&amp; from, const path&amp; to, <a href="#copy_option">copy_option</a> option, system::error_code&amp; ec);</pre>
<blockquote>
- <p><i>Effects:</i> If <code>option == copy_option::</code><code>fail_if_exists
- &amp;&amp; exists(to)</code>, an error is reported. Otherwise, the contents and attributes of the file <code>from</code>
- resolves to are copied to the file <code>to</code> resolves to.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Effects:</i> If <code>option == copy_option::</code><code>fail_if_exists &amp;&amp; exists(to)</code>, an error is reported. Otherwise, the contents and attributes of the file <code>from</code> resolves to are copied to the file <code>to</code> resolves to.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>void <a name="copy_symlink">copy_symlink</a>(const path&amp; existing_symlink, const path&amp; new_symlink);
void copy_symlink(const path&amp; existing_symlink, const path&amp; new_symlink, system::error_code&amp; ec);</pre>
<blockquote>
- <p><i>Effects: </i><code>create_symlink(read_symlink(existing_symlink</code><i>[</i><code>, ec</code><i>]</i><code>),
- new_symlink</code><i>[</i><code>, ec</code><i>]</i><code>)</code>.</p>
+ <p><i>Effects: </i><code>create_symlink(read_symlink(existing_symlink</code><i>[</i><code>, ec</code><i>]</i><code>), new_symlink</code><i>[</i><code>, ec</code><i>]</i><code>)</code>.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>bool <a name="create_directories">create_directories</a>(const path&amp; p);
bool <a name="create_directories2">create_directories</a>(const path&amp; p, system::error_code&amp; ec);</pre>
<blockquote>
- <p><i>Requires:</i> <code>p.empty() || <br>
- forall px: px == p || is_parent(px, p): is_directory(px) || !exists( px )</code>
- </p>
+ <p><i>Effects:</i> Establishes the postcondition by calling <code>
+ create_directory()</code> for any element of <code>p</code> that does not
+ exist.</p>
<p><i>Postcondition:</i> <code>is_directory(p)</code></p>
- <p><i>Returns:</i> The value of <code>!exists(p)</code> prior to the
- establishment of the postcondition.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Returns:</i> <code>true</code> if a new directory was created, otherwise <code>
+ false</code>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+ <p><i>Complexity:</i> <i>O(n+1)</i> where <i>n</i> is the number of elements
+ of <code>p</code> that do not exist.</p>
</blockquote>
<pre>bool <a name="create_directory">create_directory</a>(const path&amp; p);
bool <a name="create_directory2">create_directory</a>(const path&amp; p, system::error_code&amp; ec);</pre>
<blockquote>
- <p><i>Effects:</i> Attempts to create the directory <code>p</code> resolves to,
- as if by<i> POSIX </i><code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/mkdir.html">mkdir()</a></code> with a second argument of S_IRWXU|S_IRWXG|S_IRWXO. </p>
+ <p><i>Effects:</i> Establishes the postcondition by attempting to create the
+ directory <code>p</code> resolves to, as if by ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/mkdir.html">
+ mkdir()</a></code> with a second argument of S_IRWXU|S_IRWXG|S_IRWXO. Creation
+ failure because <code>p</code> resolves to an existing directory shall not be
+ treated as an error. </p>
<p><i>Postcondition:</i> <code>is_directory(p)</code></p>
- <p><i>Returns:</i> <code>true</code> if a new directory was created, otherwise
- <code>false</code>.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Returns:</i> <code>true</code> if a new directory was created, otherwise <code>false</code>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>void <a name="create_directory_symlink">create_directory_symlink</a>(const path&amp; to, const path&amp; new_symlink);
void create_directory_symlink(const path&amp; to, const path&amp; new_symlink, system::error_code&amp; ec);</pre>
-<blockquote style="font-size: 10pt">
- <p style="font-size: 10pt"><i>Effects:</i>
- Establishes the postcondition, as if by <i>
- POSIX</i>
- <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/symlink.html">
- symlink()</a></code>.</p>
- <p style="font-size: 10pt"><i>
+<blockquote>
+ <p><i>Effects:</i> Establishes the postcondition, as if by ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/symlink.html">symlink()</a></code>.</p>
+ <p><i>
Postcondition:</i> <code>new_symlink</code> resolves to a symbolic link file that
contains an unspecified representation of <code>to</code>.</p>
- <p style="font-size: 10pt"><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
- <p style="font-size: 10pt">[<i>Note:</i>
- Some <b>operating systems</b>, such as Windows, require symlink creation to
- identify that the link is to a directory. Portable code should use <code>
- create_directory_symlink()</code> to create directory symlinks rather than
- <code>create_symlink()</code> <i>-- end note</i>]</p>
- <p>[<i>Note:</i>
- Some <b>operating systems</b> do not support symbolic links at all or support
- them only for regular files. Windows prior to Vista, for example, did not
- support symbolic links.
- Some <b>file systems</b> do not
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+ <p>[<i>Note:</i> Some operating systems, such as Windows, require symlink creation to
+ identify that the link is to a directory. Portable code should use <code>create_directory_symlink()</code> to create directory symlinks rather than <code>create_symlink()</code> <i>-- end note</i>]</p>
+ <p>[<i>Note:</i> Some operating systems do not support symbolic links at all or support
+ them only for regular files.
+ Some file systems do not
support
- symbolic links regardless of the operating system - the FAT system used on floppy discs, memory cards and flash
- drives,
- for example. Thus symbolic links should only be used if these situations are
- not concerns, or if workarounds are provided. <i>-- end note</i>]</p>
+ symbolic links regardless of the operating system - the FAT file system used on
+ memory cards and flash drives, for example. <i>-- end note</i>]</p>
</blockquote>
<pre>void <a name="create_hard_link">create_hard_link</a>(const path&amp; to, const path&amp; new_hard_link);
void <a name="create_hard_link2">create_hard_link</a>(const path&amp; to, const path&amp; new_hard_link, system::error_code&amp; ec);</pre>
<blockquote>
- <p><i>Effects:</i> Establishes the postcondition, as if by
- <i>POSIX</i>
- <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/link.html">
- link()</a></code>.</p>
+ <p><i>Effects:</i> Establishes the postcondition, as if by ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/link.html">link()</a></code>.</p>
<p><i>Postcondition:</i></p>
<ul>
<li>&nbsp;<code>exists(to) &amp;&amp;
@@ -2431,55 +2462,35 @@ void <a name="create_hard_link2">create_hard_link</a>(const path&amp; to, const
<li>The contents of the file or directory
<code>to</code> resolves to are unchanged.</li>
</ul>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
- <p>[<i>Note:</i>
- Some <b>operating systems</b> do not support hard links at all or support
- them only for regular files. Some <b>file systems</b> do not support hard
- links regardless of the operating system - the FAT system used on floppy
- discs, memory cards and flash drives, for example. Some file systems limit the
- number of links per file. Thus hard links should only be used if these
- situations are not concerns, or if workarounds are provided. <i>-- end note</i>]</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+ <p>[<i>Note:</i> Some operating systems do not support hard links at all or support
+ them only for regular files. Some file systems do not support hard
+ links regardless of the operating system - the FAT file system used on memory
+ cards and flash drives, for example. Some file systems limit the number of
+ links per file. <i>-- end note</i>]</p>
</blockquote>
<pre>void <a name="create_symlink">create_symlink</a>(const path&amp; to, const path&amp; new_symlink);
void <a name="create_symlink2">create_symlink</a>(const path&amp; to, const path&amp; new_symlink, system::error_code&amp; ec);</pre>
-<blockquote style="font-size: 10pt">
- <p style="font-size: 10pt"><i>Effects:</i>
- Establishes the postcondition, as if by <i>
- POSIX</i>
- <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/symlink.html">
- symlink()</a></code>.</p>
- <p style="font-size: 10pt"><i>
+<blockquote>
+ <p><i>Effects:</i> Establishes the postcondition, as if by ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/symlink.html">symlink()</a></code>.</p>
+ <p><i>
Postcondition:</i> <code>new_symlink</code> resolves to a symbolic link file that
contains an unspecified representation of <code>to</code>.</p>
- <p style="font-size: 10pt"><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
- <p>[<i>Note:</i>
- Some <b>operating systems</b> do not support symbolic links at all or support
- them only for regular files. Windows prior to Vista, for example, did not
- support symbolic links.
- Some <b>file systems</b> do not
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+ <p>[<i>Note:</i> Some operating systems do not support symbolic links at all or support
+ them only for regular files.
+ Some file systems do not
support
- symbolic links regardless of the operating system - the FAT system used on floppy discs, memory cards and flash
- drives,
- for example. Thus symbolic links should only be used if these situations are
- not concerns, or if workarounds are provided. <i>-- end note</i>]</p>
+ symbolic links regardless of the operating system - the FAT system used on
+ memory cards and flash drives, for example. <i>-- end note</i>]</p>
</blockquote>
<pre>path <a name="current_path">current_path</a>();
path <a name="current_path2">current_path</a>(system::error_code&amp; ec);</pre>
<blockquote>
- <p><i>Returns:</i> The current working directory path, as if by <i>POSIX</i>
- <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/getcwd.html">
- getcwd()</a></code>. <code>is_absolute()</code> is true for the returned path.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
- <p>[<i>Note: </i>The <code>
- current_path()</code> name was chosen to emphasize that the return is a
+ <p><i>Returns:</i> The current working directory path, as if by ISO/IEC
+ 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/getcwd.html">getcwd()</a></code>. <code>is_absolute()</code> is true for the returned path.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+ <p>[<i>Note: </i>The <code>current_path()</code> name was chosen to emphasize that the return is a
path, not just a single directory name.</p>
<p>The current path as returned by many operating systems is a dangerous
global variable. It may be changed unexpectedly by a third-party or system
@@ -2488,124 +2499,84 @@ path <a name="current_path2">current_path</a>(system::error_code&amp; ec);</pre>
<pre>void current_path(const path&amp; p);
void current_path(const path&amp; p, system::error_code&amp; ec);</pre>
<blockquote>
- <p style="font-size: 10pt"><i>Effects:</i>
- Establishes the postcondition, as if by <i>
- POSIX</i>
- <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/chdir.html">
- chdir()</a></code>.</p>
+ <p><i>Effects:</i> Establishes the postcondition, as if by ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/chdir.html">chdir()</a></code>.</p>
<p><i>Postcondition:</i> <code>equivalent(p, current_path())</code>.</p>
-<p><i>Throws:</i> As specified in
-<a href="#Error-reporting">
-Error reporting</a>.</p>
+<p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
<p>[<i>Note: </i>The current path for many operating systems is a dangerous
global state. It may be changed unexpectedly by a third-party or system
library functions, or by another thread.&nbsp; <i>-- end note</i>]</p>
</blockquote>
-<pre>bool <a name="exists">exists</a>(file_status s);</pre>
+<pre>bool <a name="exists">exists</a>(file_status s) noexcept;</pre>
<blockquote>
- <p><i>Returns:</i>
- <code>status_known(s) &amp;&amp; s.type() != file_not_found</code></p>
- <p><i>Throws:</i> Nothing.</p>
+ <p><i>Returns:</i> <code>status_known(s) &amp;&amp; s.type() != file_not_found</code></p>
</blockquote>
<pre>bool <a name="exists2">exists</a>(const path&amp; p);
-bool <a name="exists3">exists</a>(const path&amp; p, system::error_code&amp; ec);</pre>
+bool <a name="exists3">exists</a>(const path&amp; p, system::error_code&amp; ec) noexcept;</pre>
<blockquote>
<p><i>Returns:</i> <code>exists(status(p))</code> or <code>exists(status(p, ec))</code>,
- respectively.</p>
-<p><i>Throws:</i> <code>filesystem_error</code>; overload with <code>error_code&amp;</code> throws
-nothing.</p>
+ respectively. If ec != 0 and an error</p>
+<p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre><code>bool <a name="equivalent">equivalent</a>(const path&amp; p1, const path&amp; p2);
bool <a name="equivalent2">equivalent</a>(const path&amp; p1, const path&amp; p2, system::error_code&amp; ec);</code></pre>
-<blockquote style="font-size: 10pt">
- <p style="font-size: 10pt"><i>Effects:</i> Determines <code>file_status s1</code>
- and <code>s2</code>, as if by <code>status(p1)</code> and&nbsp; <code>status(p2)</code>,
+<blockquote>
+ <p><i>Effects:</i> Determines <code>file_status s1</code> and <code>s2</code>, as if by <code>status(p1)</code> and&nbsp; <code>status(p2)</code>,
respectively.</p>
- <p style="font-size: 10pt"><i>Returns:</i> <code>true</code>, if <code>sf1 ==
+ <p><i>Returns:</i> <code>true</code>, if <code>sf1 ==
sf2</code> and <code>p1</code> and <code>p2</code> resolve to the same file
system entity, else <code>false</code>.</p>
<blockquote>
- <p style="font-size: 10pt">Two paths are considered to resolve to the same
+ <p>Two paths are considered to resolve to the same
file system entity if two candidate entities reside on the same device at the
- same location. This is determined as if by the values of the <i>POSIX</i>
- <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">
- stat</a></code> structure<code>,</code> obtained as if by <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">
- stat()</a></code> for the two paths, having equal <code>st_dev</code> values
+ same location. This is determined as if by the values of the ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">stat</a></code> structure<code>,</code> obtained as if by <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code> for the two paths, having equal <code>st_dev</code> values
and equal <code>st_ino</code> values.</p>
- <p style="font-size: 10pt">[<i>Note:</i> <i>POSIX</i> requires that <i>&quot;st_dev</i>
- must be unique within a Local Area Network&quot;. Conservative <i>POSIX</i>
- implementations may also wish to check for equal <code>st_size</code> and
- <code>st_mtime</code> values. <i>Windows</i> implementations may use <code>
- GetFileInformationByHandle()</code> as a surrogate for <code>stat()</code>,
- and consider &quot;same&quot; to be equal values for <code>dwVolumeSerialNumber</code>,
- <code>nFileIndexHigh</code>, <code>nFileIndexLow</code>, <code>nFileSizeHigh</code>,
- <code>nFileSizeLow</code>, <code>ftLastWriteTime.dwLowDateTime</code>, and
- <code>ftLastWriteTime.dwHighDateTime</code>. <i>-- end note</i>]</p>
+ <p>[<i>Note:</i> ISO/IEC 9945 requires that <i>&quot;st_dev</i> must be unique within a Local Area Network&quot;. Conservative
+ ISO/IEC 9945 implementations may also wish to check for equal <code>st_size</code> and <code>st_mtime</code> values. <i>Windows</i> implementations may use <code>GetFileInformationByHandle()</code> as a surrogate for <code>stat()</code>,
+ and consider &quot;same&quot; to be equal values for <code>dwVolumeSerialNumber</code>, <code>nFileIndexHigh</code>, <code>nFileIndexLow</code>, <code>nFileSizeHigh</code>, <code>nFileSizeLow</code>, <code>ftLastWriteTime.dwLowDateTime</code>, and <code>ftLastWriteTime.dwHighDateTime</code>. <i>-- end note</i>]</p>
</blockquote>
- <p style="font-size: 10pt"><i>Throws:</i> <code>filesystem_error</code>
- if <code>(!exists(s1) &amp;&amp; !exists(s2)) || (is_other(s1) &amp;&amp; is_other(s2))</code>,
- otherwise as specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> <code>filesystem_error</code> if <code>(!exists(s1) &amp;&amp; !exists(s2)) || (is_other(s1) &amp;&amp; is_other(s2))</code>,
+ otherwise as specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
-<div dir="ltr">
+<div>
<pre>uintmax_t <a name="file_size">file_size</a>(const path&amp; p);
uintmax_t <a name="file_size2">file_size</a>(const path&amp; p, system::error_code&amp; ec);</pre>
</div>
<blockquote>
- <p>
- <span style="background-color: #FFFF00">Remarks: </span>
- </p>
<p><i>Returns:</i> If <code>exists(p) &amp;&amp; is_regular_file(p)</code>, the size
in bytes
of the file <code>p</code> resolves to, determined as if by the value of
- the <i>POSIX</i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">stat</a></code> structure member <code>st_size</code>
- obtained as if by <i>POSIX</i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code>.
+ the ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">stat</a></code> structure member <code>st_size</code> obtained as if by
+ ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code>.
Otherwise, <code>static_cast&lt;uintmax_t&gt;(-1)</code>.</p>
- <p style="font-size: 10pt"><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>uintmax_t <a name="hard_link_count">hard_link_count</a>(const path&amp; p);
uintmax_t hard_link_count(const path&amp; p, system::error_code&amp; ec);</pre>
<blockquote>
<p><i>Returns:</i> The number of hard links for <code>p</code>.</p>
- <p style="font-size: 10pt"><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>const path&amp; <a name="initial_path">initial_path</a>();
-const path&amp; <a name="initial_path">initial_path</a>(<code>system::error_code&amp; ec</code>);</pre>
+const path&amp; <a name="initial_path2">initial_path</a>(<code>system::error_code&amp; ec</code>);</pre>
<blockquote>
- <p><i>Returns:</i>
- <code>current_path()</code> as of the first call to <code>initial_path()</code>.</p>
- <p>[<i>Note:</i> <code>
- initial_path()</code> is not thread safe, and may return an undesirable result
+ <p><i>Returns:</i> <code>current_path()</code> as of the first call to <code>initial_path()</code>.</p>
+ <p>[<i>Note:</i> <code>initial_path()</code> is not thread safe, and may return an undesirable result
if called subsequent to a change to the current directory. These problems can
be avoided by calling <code>initial_path()</code> immediately on entry to
main().&nbsp; <i>--end note</i>]</p>
- <p><i>Throws:</i> For the first call, as specified in
- <a href="#Error-reporting">
- Error reporting</a>. Subsequent calls throw nothing.</p>
+ <p><i>Throws:</i> For the first call, as specified in <a href="#Error-reporting">Error reporting</a>. Subsequent calls throw nothing.</p>
</blockquote>
-<pre>bool <code><a name="is_directory">is_directory</a></code>(file_status s);</pre>
+<pre>bool <code><a name="is_directory">is_directory</a></code>(file_status s) noexcept;</pre>
<blockquote>
- <p><i>Returns:</i>
- <code>s.type() == directory_file</code></p>
- <p><i>Throws:</i> Nothing.</p>
+ <p><i>Returns:</i> <code>s.type() == directory_file</code></p>
</blockquote>
<pre><code>bool <a name="is_directory2">is_directory</a>(const path&amp; p);
-bool <a name="is_directory3">is_directory</a>(const path&amp; p, system::error_code&amp; ec);</code></pre>
+bool <a name="is_directory3">is_directory</a>(const path&amp; p, system::error_code&amp; ec) noexcept;</code></pre>
<blockquote>
- <p dir="ltr"><i>Returns:</i> <code>is_directory(status(p))</code> or <code>is_directory(status(p, ec))</code>,
+ <p><i>Returns:</i> <code>is_directory(status(p))</code> or <code>is_directory(status(p, ec))</code>,
respectively.</p>
<p><i>Throws:</i> <code>filesystem_error</code>; overload with <code>error_code&amp;</code> throws
nothing.</p>
@@ -2613,62 +2584,44 @@ nothing.</p>
<pre><code>bool <a name="is_empty">is_empty</a>(const path&amp; p);
bool <a name="is_empty2">is_empty</a></a>(const path&amp; p, system::error_code&amp; ec);</code></pre>
<blockquote>
- <p><i>Effects:</i> Determines <code>file_status s</code>, as if by <code>
- status(p, ec)</code>.</p>
+ <p><i>Effects:</i> Determines <code>file_status s</code>, as if by <code>status(p, ec)</code>.</p>
<p><i>Returns:</i> <code>is_directory(s)<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ?
- directory_iterator(p) == directory_iterator()<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ? directory_iterator(p) == directory_iterator()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : file_size(p) == 0;</code></p>
</blockquote>
-<pre>bool <code><a name="is_regular_file">is_regular_file</a></code>(file_status s);</pre>
+<pre>bool <code><a name="is_regular_file">is_regular_file</a></code>(file_status s) noexcept;</pre>
<blockquote>
- <p><i>Returns:</i>
- <code>s.type() == regular_file</code></p>
- <p><i>Throws:</i> Nothing.</p>
+ <p><i>Returns:</i> <code>s.type() == regular_file</code></p>
</blockquote>
<pre><code>bool <a name="is_regular_file2">is_regular_file</a>(const path&amp; p);</code></pre>
<blockquote>
<p><i>Returns:</i> <code>is_regular_file(status(p))</code>.</p>
- <p><i>Throws:</i> <code>filesystem_error</code>
- if <code>status(p)</code> would throw <code>filesystem_error.</code></p>
+ <p><i>Throws:</i> <code>filesystem_error</code> if <code>status(p)</code> would throw <code>filesystem_error.</code></p>
</blockquote>
-<pre><code>bool <a name="is_regular_file3">is_regular_file</a>(const path&amp; p, system::error_code&amp; ec);</code></pre>
-<blockquote>
- <p><i>Effects:</i> Sets <code>ec</code> as if by <code>status(p, ec)</code>. [<i>Note:</i>
- <code>status_error</code>,
- <code>file_not_found</code>
- and
- <code>type_unknown</code>
- cases set <code>ec</code>
- to error values. To distinguish between cases, call the <code>
- status</code>
- function directly. <i>-- end
+<pre><code>bool <a name="is_regular_file3">is_regular_file</a>(const path&amp; p, system::error_code&amp; ec) noexcept;</code></pre>
+<blockquote>
+ <p><i>Effects:</i> Sets <code>ec</code> as if by <code>status(p, ec)</code>. [<i>Note:</i> <code>status_error</code>, <code>file_not_found</code> and <code>type_unknown</code> cases set <code>ec</code> to error values. To distinguish between cases, call the <code>status</code> function directly. <i>-- end
note</i>] </p>
<p><i>Returns:</i> <code>is_regular_file(status(p, ec))</code>.</p>
- <p><i>Throws:</i> Nothing.</p>
</blockquote>
-<pre>bool <a name="is_other">is_other</a>(file_status s);</pre>
+<pre>bool <a name="is_other">is_other</a>(file_status s) noexcept;</pre>
<blockquote>
- <p><i>Returns:</i>
- <code>return exists(s) &amp;&amp; !is_regular_file(s) &amp;&amp; !is_directory(s) &amp;&amp; !is_symlink(s)</code></p>
- <p><i>Throws:</i> Nothing.</p>
+ <p><i>Returns:</i> <code>return exists(s) &amp;&amp; !is_regular_file(s) &amp;&amp; !is_directory(s) &amp;&amp; !is_symlink(s)</code></p>
</blockquote>
<pre><code>bool <a name="is_other2">is_other</a>(const path&amp; p);
-bool <a name="is_other3">is_other</a>(const path&amp; p, system::error_code&amp; ec);</code></pre>
+bool <a name="is_other3">is_other</a>(const path&amp; p, system::error_code&amp; ec) noexcept;</code></pre>
<blockquote>
<p><i>Returns:</i> <code>is_other(status(p))</code> or <code>is_other(status(p, ec))</code>,
respectively.</p>
<p><i>Throws:</i> <code>filesystem_error</code>; overload with <code>error_code&amp;</code> throws
nothing.</p>
</blockquote>
-<pre>bool <a name="is_symlink">is_symlink</a>(file_status s);</pre>
+<pre>bool <a name="is_symlink">is_symlink</a>(file_status s) noexcept;</pre>
<blockquote>
- <p><i>Returns:</i>
- <code>s.type() == symlink_file</code></p>
- <p><i>Throws:</i> Nothing.</p>
+ <p><i>Returns:</i> <code>s.type() == symlink_file</code></p>
</blockquote>
<pre><code>bool <a name="is_symlink2">is_symlink</a>(const path&amp; p);
-bool <a name="is_symlink3">is_symlink</a>(const path&amp; p, system::error_code&amp; ec);</code></pre>
+bool <a name="is_symlink3">is_symlink</a>(const path&amp; p, system::error_code&amp; ec) noexcept;</code></pre>
<blockquote>
<p><i>Returns:</i> <code>is_symlink(symlink_status(p))</code> or <code>is_symlink(symlink_status(p, ec))</code>,
respectively.</p>
@@ -2679,40 +2632,28 @@ bool <a name="is_symlink3">is_symlink</a>(const path&amp; p, system::error_code&
std::time_t <a name="last_write_time2">last_write_time</a>(const path&amp; p<code>, system::error_code&amp; ec</code>);</pre>
<blockquote>
<p><i>Returns:</i> The time of last data modification of <code>p</code>, determined as if by the
- value of the <i>POSIX</i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">stat</a></code> structure member <code>st_mtime</code>&nbsp; obtained
- as if by <i>POSIX</i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code>.</p>
+ value of the ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">stat</a></code> structure member <code>st_mtime</code>&nbsp; obtained
+ as if by ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>void <a name="last_write_time3">last_write_time</a>(const path&amp; p, const std::time_t new_time);
void <a name="last_write_time4">last_write_time</a>(const path&amp; p, const std::time_t new_time<code>, system::error_code&amp; ec</code>);</pre>
<blockquote>
<p><i>Effects:</i> Sets the time of last data modification of the file
- resolved to by <code>p</code>
- to <code>new_time</code>, as if by <i>POSIX</i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code>
- followed by <i>POSIX</i>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/utime.html">
- <code>utime()</code></a>.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
- <p>[<i>Note:</i> A postcondition of <code>last_write_time(p) ==
- new_time</code> is not specified since it might not hold for file systems
+ resolved to by <code>p</code> to <code>new_time</code>, as if by ISO/IEC
+ 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code> followed by
+ ISO/IEC 9945 <a href="http://www.opengroup.org/onlinepubs/000095399/functions/utime.html"><code>utime()</code></a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+ <p>[<i>Note:</i> A postcondition of <code>last_write_time(p) == new_time</code> is not specified since it might not hold for file systems
with coarse time granularity. <i>-- end note</i>]</p>
</blockquote>
-<pre>void permissions(const path&amp; p, <a href="#symlink_perms">perms</a> prms);
+<pre>void <a name="permissions">permissions</a>(const path&amp; p, <a href="#symlink_perms">perms</a> prms);
void permissions(const path&amp; p, <a href="#symlink_perms">perms</a> prms, system::error_code&amp; ec);</pre>
<blockquote>
- <p dir="ltr">Applies an operating system set of permissions to a file. See
- <a href="#symlink_perms">perms</a> for specifics.<br>
- <i><br>
- Requires:</i> <code>!((prms &amp; add_perms) &amp;&amp; (prms &amp; remove_perms))</code>.</p>
- <p dir="ltr"><i>Effects:</i> Applies the effective permissions bits from <code>
- prms</code> to the file <code>p</code> resolves to, as if by <i>POSIX</i>
- <code>
- <a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/fchmodat.html">
- fchmodat()</a></code>. The effective permission bits are determined as
+ <p>
+ <i>Requires:</i> <code>!((prms &amp; add_perms) &amp;&amp; (prms &amp; remove_perms))</code>.</p>
+ <p><i>Effects:</i> Applies the effective permissions bits from <code>prms</code> to the file <code>p</code> resolves to, as if by
+ ISO/IEC 9945 <code><a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/fchmodat.html">fchmodat()</a></code>. The effective permission bits are determined as
specified by the following table. </p>
<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
<tr>
@@ -2726,26 +2667,24 @@ void permissions(const path&amp; p, <a href="#symlink_perms">perms</a> prms, sys
<tr>
<td><code>add_perms</code></td>
<td>
- <p dir="ltr">current_status.permissions() | (<code>prms &amp; perms_mask</code>)
- </td>
+ <p><code>status(p).permissions() | (prms &amp; <a href="#perms_mask">perms_mask</a>)</code> </td>
</tr>
<tr>
<td><code>remove_perms</code></td>
- <td>current_status.permissions() &amp; ~(<code>prms &amp; perms_mask</code>) </td>
+ <td><code>status(p)</code><code>.permissions() &amp; ~(prms &amp; <a href="#perms_mask">perms_mask</a>) </code></td>
</tr>
</table>
<p>[<i>Note:</i> Conceptually permissions are viewed as bits, but the actual
- implementation by a file system may use some other mechanism. -- <i>end note</i>]</p>
+ implementation may use some other mechanism. -- <i>end note</i>]</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>path <a name="read_symlink">read_symlink</a>(const path&amp; p);
path read_symlink(const path&amp; p, system::error_code&amp; ec);</pre>
<blockquote>
- <p dir="ltr"><i>Returns:</i>&nbsp; If <code>p</code> resolves to a symbolic
+ <p><i>Returns:</i>&nbsp; If <code>p</code> resolves to a symbolic
link, a <code>path</code> object containing the contents of that symbolic
link. Otherwise an empty <code>path</code> object.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>. [<i>Note:</i> It is an error if <code>p</code> does not
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>. [<i>Note:</i> It is an error if <code>p</code> does not
resolve to a symbolic link. <i>-- end note</i>]</p>
</blockquote>
<pre>bool <a name="remove">remove</a>(const path&amp; p);
@@ -2753,8 +2692,7 @@ bool <a name="remove2">remove</a>(const path&amp; p, system::error_code&amp; ec)
<blockquote>
<p><i>Effects:</i>&nbsp; If <code>exists(symlink_status(p,ec))</code>, it is
removed
- as if by<i> POSIX </i><code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/remove.html">remove()</a></code>.</p>
+ as if by ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/remove.html">remove()</a></code>.</p>
<blockquote>
<p>[<i>Note:</i> A symbolic link is itself removed, rather than the file it
resolves to being removed. <i>-- end note</i>]</p>
@@ -2762,74 +2700,56 @@ bool <a name="remove2">remove</a>(const path&amp; p, system::error_code&amp; ec)
<p><i>Postcondition:</i> <code>!exists(symlink_status(p))</code>.</p>
<p><i>Returns:</i>&nbsp; <code>false</code> if p did not exist in the first
place, otherwise <code>true</code>.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>uintmax_t <a name="remove_all">remove_all</a>(const path&amp; p);
uintmax_t <a name="remove_all2">remove_all</a>(const path&amp; p, system::error_code&amp; ec);</pre>
<blockquote>
<p><i>Effects:</i>&nbsp; Recursively deletes the contents of p if it exists,
then deletes file <code>p</code> itself,
- as if by<i> POSIX </i><code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/remove.html">remove()</a></code>.</p>
+ as if by ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/remove.html">remove()</a></code>.</p>
<blockquote>
<p>[<i>Note:</i> A symbolic link is itself removed, rather than the file it
resolves to being removed. <i>-- end note</i>]</p>
</blockquote>
<p><i>Postcondition:</i> <code>!exists(p)</code></p>
<p><i>Returns:</i> The number of files removed.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>void <a name="rename">rename</a>(const path&amp; old_p, const path&amp; new_p);
void <a name="rename2">rename</a>(const path&amp; old_p, const path&amp; new_p, system::error_code&amp; ec);</pre>
<blockquote>
<p><i>Effects:</i> Renames <code>old_p</code> to <code>new_p</code>, as if by
- <i>POSIX</i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/rename.html">
- rename()</a></code>.</p>
+ ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/rename.html">rename()</a></code>.</p>
<blockquote>
<p>[<i>Note:</i> If <code>old_p</code> and <code>new_p</code> resolve to the
same existing file, no action is taken. Otherwise, if <code>new_p</code> resolves to an
existing non-directory file, it is removed, while if <code>new_p</code> resolves to an
- existing directory, it is removed if empty on POSIX but is an error on Windows. A symbolic link is itself renamed, rather than
+ existing directory, it is removed if empty on ISO/IEC 9945 but is an error on Windows. A symbolic link is itself renamed, rather than
the file it resolves to being renamed. <i>-- end note</i>]</p>
</blockquote>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre>void <a name="resize_file">resize_file</a>(const path&amp; p, uintmax_t new_size);
void <a name="resize_file2">resize_file</a>(const path&amp; p, uintmax_t new_size, system::error_code&amp; ec);</pre>
<blockquote>
<p><i>Postcondition:</i> <code>file_size() == new_size</code>.</p>
-<p><i>Throws:</i> As specified in
-<a href="#Error-reporting">
-Error reporting</a>.</p>
- <p style="font-size: 10pt"><i>Remarks:</i> Achieves its postconditions as if by
- POSIX <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/truncate.html">
- truncate()</a></code>.</p>
+<p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+ <p><i>Remarks:</i> Achieves its postconditions as if by ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/truncate.html">truncate()</a></code>.</p>
</blockquote>
<pre>space_info <a name="space">space</a>(const path&amp; p);
space_info <a name="space2">space</a>(const path&amp; p, system::error_code&amp; ec);</pre>
<blockquote>
- <p><i>Returns:</i> An object of type <code>
- <a href="#space_info">space_info</a></code>. The value of the <code>space_info</code> object is determined as if by
- using <i>POSIX</i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/statvfs.html" style="text-decoration: none">
- statvfs()</a></code> to obtain a <i>POSIX</i> struct <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/statvfs.h.html" style="text-decoration: none">
- statvfs</a></code>, and then multiplying its <code>f_blocks</code>, <code>
- f_bfree</code>, and <code>f_bavail</code> members by its <code>f_frsize</code>
- member, and assigning the results to the <code>capacity</code>, <code>free</code>,
+ <p><i>Returns:</i> An object of type <code><a href="#space_info">space_info</a></code>. The value of the <code>space_info</code> object is determined as if by
+ using ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/statvfs.html"
+ style="text-decoration: none">statvfs()</a></code> to obtain a ISO/IEC 9945 struct
+ <code><a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/statvfs.h.html" style="text-decoration: none">statvfs</a></code>,
+ and then multiplying its <code>f_blocks</code>, <code>f_bfree</code>,
+ and <code>f_bavail</code> members by its <code>f_frsize</code> member,
+ and assigning the results to the <code>capacity</code>, <code>free</code>,
and <code>available</code> members respectively. Any members for which the
value cannot be determined shall be set to -1.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
</blockquote>
<pre><a href="#file_status">file_status</a> <a name="status">status</a>(const path&amp; p);</pre>
<blockquote>
@@ -2843,26 +2763,21 @@ return result;</pre>
</blockquote>
<p><i>Returns:</i> See above.</p>
<p><i>Throws:</i> <code>filesystem_error</code>.
-[<i>Note:</i> <code>result</code> values of <code>
- file_status(file_not_found)</code>and <code>
- file_status(type_unknown)</code> are not considered failures and do not
+[<i>Note:</i> <code>result</code> values of <code>file_status(file_not_found)</code>and <code>file_status(type_unknown)</code> are not considered failures and do not
cause an exception to be
thrown.<i> -- end note</i>] </p>
</blockquote>
-<pre><a href="#file_status">file_status</a> <a name="status2">status</a>(const path&amp; p, system::error_code&amp; ec);</pre>
+<pre><a href="#file_status">file_status</a> <a name="status2">status</a>(const path&amp; p, system::error_code&amp; ec) noexcept;</pre>
<blockquote>
<p><i>Effects: </i></p>
<blockquote>
<p>If possible, determines the attributes
- of the file
- <code>p</code> resolves to, as if by<i> POSIX </i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code>.</p>
+ of the file <code>p</code> resolves to, as if by ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code>.</p>
If, during attribute determination, the underlying file system API reports
an error, sets <code>ec</code> to indicate the specific error reported.
Otherwise, <code>ec.clear()</code>.<blockquote>
<p>[<i>Note:</i> This allows users to inspect the specifics of underlying
- API errors even when the value returned by <code>status()</code> is not <code>
- file_status(status_error)</code>.&nbsp; <i>--end note</i>]</p>
+ API errors even when the value returned by <code>status()</code> is not <code>file_status(status_error)</code>.&nbsp; <i>--end note</i>]</p>
</blockquote>
</blockquote>
<p><i>Returns:</i></p>
@@ -2871,7 +2786,7 @@ thrown.<i> -- end note</i>] </p>
<ul>
<li>If the specific error indicates that <code>p</code> cannot be resolved
because some element of the path does not exist, return <code>
- file_status(file_not_found)</code>. [<i>Note:</i> POSIX errors that
+ file_status(file_not_found)</code>. [<i>Note:</i> ISO/IEC 9945 errors that
indicate this are ENOENT or ENOTDIR. Windows equivalents
include ERROR_FILE_NOT_FOUND, ERROR_PATH_NOT_FOUND, ERROR_INVALID_NAME,
ERROR_INVALID_PARAMETER, ERROR_BAD_PATHNAME, and ERROR_BAD_NETPATH. <i>--
@@ -2880,55 +2795,55 @@ thrown.<i> -- end note</i>] </p>
<li>Otherwise, if the specific error indicates that <code>p</code> can be resolved
but the attributes cannot be determined, return <code>
file_status(type_unknown)</code>. [<i>Note: </i>For example, Windows
- ERROR_SHARING_VIOLATION errors. For POSIX, the case never arises. <i>-- end
+ ERROR_SHARING_VIOLATION errors. For ISO/IEC 9945, the case never arises. <i>-- end
note</i>]<br>
&nbsp;</li>
<li>Otherwise, return <code>
file_status(status_error)</code>.</li>
</ul>
<blockquote>
- <p>[<i>Note:</i> These semantics distinguish between
- <code>p</code> being known not to exist,
- <code>p</code> existing but not being able to determine its attributes,
- and there being an error that prevents even knowing if
- <code>p</code> exists. These
+ <p>[<i>Note:</i> These semantics distinguish between <code>p</code> being known not to exist, <code>p</code> existing but not being able to determine its attributes,
+ and there being an error that prevents even knowing if <code>p</code> exists. These
distinctions are important to some use cases.&nbsp;<i>--end note</i>]</p>
</blockquote>
<p>Otherwise,</p>
<ul>
- <li>If the attributes indicate a regular file, as if by <i>POSIX</i>&nbsp;<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">S_ISREG()</a>,
+ <li>If the attributes indicate a regular file, as if by ISO/IEC 9945&nbsp;<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">S_ISREG()</a>,
return <code>
file_status(regular_file)</code>. [<i>Note:</i> <code>
regular_file</code> implies appropriate <code>&lt;fstream&gt;</code> operations
- would succeed, assuming no hardware, permission, access, or race condition
+ would succeed, assuming no hardware, permission, access, or file system
+ race
errors. Lack of
<code>regular_file</code> does not necessarily imply <code>&lt;fstream&gt;</code> operations would
fail on a directory.
<i>-- end note</i>]<br>
&nbsp;</li>
- <li>Otherwise, if the attributes indicate a directory, as if by <i>POSIX</i>
+ <li>Otherwise, if the attributes indicate a directory, as if by ISO/IEC 9945
<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">S_ISDIR()</a>,
return <code>
file_status(directory_file)</code>. [<i>Note:</i> <code>directory_file</code> implies <code>
directory_iterator(p)</code>would succeed.
<i>-- end note</i>]<br>
&nbsp;</li>
- <li>Otherwise, if the attributes indicate a block special file, as if by <i>POSIX</i>
+ <li>Otherwise, if the attributes indicate a block special file, as if by ISO/IEC 9945
<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">S_ISBLK()</a>,
return <code>
file_status(block_file)</code>.<br>
&nbsp;</li>
- <li>Otherwise, if the attributes indicate a character special file, as if by <i>POSIX</i>
+ <li>Otherwise, if the attributes indicate a character special file, as if by ISO/IEC 9945
<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">S_ISCHR()</a>,
return <code>
file_status(character_file)</code>.<br>
&nbsp;</li>
- <li>Otherwise, if the attributes indicate a fifo or pipe file, as if by <i>POSIX</i>
+ <li>Otherwise, if the attributes indicate a fifo or pipe file, as if by
+ ISO/IEC 9945
<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">S_ISFIFO()</a>,
return <code>
file_status(fifo_file)</code>.<br>
&nbsp;</li>
- <li>Otherwise, if the attributes indicate a socket, as if by <i>POSIX</i>
+ <li>Otherwise, if the attributes indicate a socket, as if by ISO/IEC
+ 9945
<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">S_ISSOCK()</a>,
return <code>
file_status(socket_file)</code>.<br>
@@ -2937,34 +2852,27 @@ directory_iterator(p)</code>would succeed.
file_status(type_unknown)</code>.</li>
</ul>
</blockquote>
-<p><i>Throws:</i> Nothing.</p>
<p><i>Remarks:</i> If a symbolic link is encountered during pathname
resolution,
pathname resolution continues using the contents of the symbolic link.</p>
</blockquote>
-<pre>bool <a name="status_known">status_known</a>(file_status s);</pre>
+<pre>bool <a name="status_known">status_known</a>(file_status s) noexcept;</pre>
<blockquote>
- <p><i>Returns:</i>
- <code>s.type() != status_error</code></p>
- <p><i>Throws:</i> Nothing.</p>
+ <p><i>Returns:</i> <code>s.type() != status_error</code></p>
</blockquote>
<pre>file_status <a name="symlink_status">symlink_status</a>(const path&amp; p);
-file_status <a name="symlink_status2">symlink_status</a>(const path&amp; p, system::error_code&amp; ec);</pre>
+file_status <a name="symlink_status2">symlink_status</a>(const path&amp; p, system::error_code&amp; ec) noexcept;</pre>
<blockquote>
<p><i>Effects:</i>&nbsp; Same as <a href="#status">status()</a>, above,
except that the attributes
- of
- <code>p</code> are determined as if by<i> POSIX </i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/lstat.html">
- lstat()</a></code>.</p>
+ of <code>p</code> are determined as if by ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/lstat.html">lstat()</a></code>.</p>
</blockquote>
<blockquote>
<p><i>Returns:</i> Same as <a href="#status">status()</a>, above, except
- that if the attributes indicate a symbolic link, as if by <i>POSIX</i>
- <a class="external" href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">
- S_ISLNK()</a>, return <code>file_status(symlink_file)</code>.</p>
-<p><i>Throws:</i> Nothing.</p>
+ that if the attributes indicate a symbolic link, as if by ISO/IEC 9945 <a class="external" href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">S_ISLNK()</a>, return <code>file_status(symlink_file)</code>.</p>
<p><i>Remarks:</i> Pathname resolution terminates if <code>p</code> names a symbolic link.</p>
+ <p><i>Throws:</i> <code>filesystem_error</code>; overload with <code>error_code&amp;</code> throws
+ nothing.</p>
</blockquote>
<pre>path <a name="system_complete">system_complete</a>(const path&amp; p);
path <a name="system_complete2">system_complete</a>(const path&amp; p, system::error_code&amp; ec);</pre>
@@ -2973,22 +2881,17 @@ path <a name="system_complete2">system_complete</a>(const path&amp; p, system::e
same rules used by the operating system to resolve a path passed as the
filename argument to standard library open functions.</p>
<p><i>Returns:</i> The composed path.</p>
- <p><i>Postcondition:</i> For the returned path, <code>rp,</code> <code>
- rp.is_absolute()</code> is true.</p>
- <p>[<i>Note:</i> For <i>POSIX</i>, <code>system_complete(p)</code> has the same semantics as
- <code>complete(p, current_path())</code>.</p>
+ <p><i>Postcondition:</i> For the returned path, <code>rp,</code> <code>rp.is_absolute()</code> is true.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+ <p>[<i>Note:</i> For ISO/IEC 9945, <code>system_complete(p)</code> has the same semantics as <code>complete(p, current_path())</code>.</p>
<p><a name="windows_effects">For <i>Windows</i></a>, <code>system_complete(p)</code> has the
- same semantics as <code>complete(ph, current_path())</code> if
- <code>p.is_absolute() || !p.has_root_name()</code> or <code>p</code> and <code>base</code> have the same
- <code>root_name()</code>.
- Otherwise it acts like <code>complete(p, kinky)</code>, where <code>kinky</code>
- is the current directory for the <code>p.root_name()</code> drive. This will
+ same semantics as <code>complete(ph, current_path())</code> if <code>p.is_absolute() || !p.has_root_name()</code> or <code>p</code> and <code>base</code> have the same <code>root_name()</code>.
+ Otherwise it acts like <code>complete(p, kinky)</code>, where <code>kinky</code> is the current directory for the <code>p.root_name()</code> drive. This will
be the current directory of that drive the last time it was set, and thus may
be <b>residue left over from a prior program</b> run by the command
processor! Although these semantics are often useful, they are also very
error-prone.</p>
- <p>See <a href="#complete_note">
- <i>complete()</i> note</a> for usage suggestions. <i>-- end note</i>]</p>
+ <p>See <a href="#complete_note"><i>complete()</i> note</a> for usage suggestions. <i>-- end note</i>]</p>
</blockquote>
<pre>path <a name="temp_directory_path">temp_directory_path</a>();
path temp_directory_path(system::error_code&amp; ec);</pre>
@@ -2997,11 +2900,10 @@ path temp_directory_path(system::error_code&amp; ec);</pre>
conventions of the operating system. The specifics of how this path is
determined are implementation defined. An error shall be reported if<code> !exists(p)
|| !is_directory(p)</code>, where <code>p</code> is the path to be returned.</p>
- <p><i>POSIX:</i> The path supplied by the first environment variable found in the
+ <p>ISO/IEC 9945: The path supplied by the first environment variable found in the
list TMPDIR, TMP, TEMP, TEMPDIR. If none of these are found, <code>&quot;/tmp&quot;</code>.</p>
<p><i>Windows:</i> The path reported by the <i>Windows</i> <code>GetTempPath</code> API function.</p>
- <p><i>Throws:</i> As specified in <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
<p>[<i>Note: </i>The <code>temp_directory_path()</code> name was chosen to emphasize that the return is a
path, not just a single directory name.&nbsp; <i>-- end note</i>]</p>
</blockquote>
@@ -3019,80 +2921,22 @@ path unique_path(const path&amp; model, system::error_code&amp; ec);</pre>
<p><i>Returns:</i> A path identical to <code>model</code>, except that each
occurrence of a percent sign character is replaced by a random hexadecimal
digit character in the range 0-9, a-f.</p>
- <p><i>Throws:</i> As specified in
- <a href="#Error-reporting">
- Error reporting</a>.</p>
+ <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
<p><i>Remarks:</i> Implementations are encouraged to obtain the required
- randomness via a
- <a href="http://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator">
- cryptographically secure pseudo-random number generator</a>, such as one
+ randomness via a <a href="http://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator">cryptographically secure pseudo-random number generator</a>, such as one
provided by the operating system. [<i>Note</i>: Such generators may block
until sufficient entropy develops. <i>--end note</i>]</p>
</blockquote>
-<h3><a name="File-streams">File streams</a> -
-<a href="../../../../boost/filesystem/fstream.hpp">&lt;boost/filesystem/fstream.hpp&gt;</a></h3>
-<p>Replacements are provided for the file stream classes from the C++ standard
-library's <code>&lt;fstream&gt;</code> header. These replacement classes
-publicly inherit from the standard library classes. In the Boost.Filesystem
-version, constructors and open functions take <code>const path&amp;</code> arguments
-instead of <code>
-const char*</code> arguments. There are no other differences in syntax or
-semantics.</p>
-<pre>namespace boost
-{
- namespace filesystem
- {
- template &lt; class charT, class traits = std::char_traits&lt;charT&gt; &gt;
- class basic_filebuf : public std::basic_filebuf&lt;charT,traits&gt;
- {
- public:
- basic_filebuf&lt;charT,traits&gt;*
- open(const path&amp; p, std::ios_base::openmode mode);
- };
-
- template &lt; class charT, class traits = std::char_traits&lt;charT&gt; &gt;
- class basic_ifstream : public std::basic_ifstream&lt;charT,traits&gt;
- {
- public:
- explicit basic_ifstream(const path&amp; p, std::ios_base::openmode mode=std::ios_base::in)
- void open(const path&amp; p, std::ios_base::openmode mode=std::ios_base::in);
- };
+<hr>
- template &lt; class charT, class traits = std::char_traits&lt;charT&gt; &gt;
- class basic_ofstream : public std::basic_ofstream&lt;charT,traits&gt;
- {
- public:
- explicit basic_ofstream(const path&amp; p, std::ios_base::openmode mode=std::ios_base::out);
- void open(const path&amp; p, std::ios_base::openmode mode=std::ios_base::out);
- };
+<!-- generate-section-numbers=false -->
- template &lt; class charT, class traits = std::char_traits&lt;charT&gt; &gt;
- class basic_fstream : public std::basic_fstream&lt;charT,traits&gt;
- {
- public:
- explicit basic_fstream(const path&amp; p,
- std::ios_base::openmode mode=std::ios_base::in | std::ios_base::out);
- void open(const path&amp; p,
- std::ios_base::openmode mode=std::ios_base::in | std::ios_base::out);
- };
+$snippet wording_suffix "$SNIPPET_FILE;"
- typedef basic_filebuf&lt;char&gt; filebuf;
- typedef basic_ifstream&lt;char&gt; ifstream;
- typedef basic_ofstream&lt;char&gt; ofstream;
- typedef basic_fstream&lt;char&gt; fstream;
-
- typedef basic_filebuf&lt;wchar_t&gt; wfilebuf;
- typedef basic_ifstream&lt;wchar_t&gt; wifstream;
- typedef basic_fstream&lt;wchar_t&gt; wfstream;
- typedef basic_ofstream&lt;wchar_t&gt; wofstream;
-
- } // namespace filesystem
-} // namespace boost</pre>
<h2><a name="Path-decomposition-table">Path decomposition table</a></h2>
<p>The table is generated by a program compiled with the Boost implementation.</p>
-<p>Shaded entries indicate cases where <i>POSIX</i> and <i>Windows</i>
-implementations yield different results. The top value is the
-<i>POSIX</i> result and the bottom value is the <i>Windows</i> result. <br>
+<p>Shaded entries indicate cases where ISO/IEC 9945 (POSIX) and Windows implementations yield different results. The top value is the
+ISO/IEC 9945 result and the bottom value is the Windows result. <br>
<table border="1" cellspacing="0" cellpadding="5">
<p>
<tr><td><b>Constructor<br>argument</b></td>
@@ -3596,8 +3440,7 @@ is MAX_PATH, which is defined as 260 characters.</p>
<p>The Windows API has many functions that also have Unicode versions to permit
an extended-length path for a maximum total path length of 32,767 characters.
... To specify an extended-length path, use the <b>&quot;\\?\&quot; prefix</b>. For
-example, &quot;\\?\D:\<em>very long path</em>&quot;.&nbsp;
-<i>[C++ string literals require backslashes be doubled, of course.]</i></p>
+example, &quot;\\?\D:\<em>very long path</em>&quot;.&nbsp; <i>[C++ string literals require backslashes be doubled, of course.]</i></p>
</blockquote>
<p>Because most Boost.Filesystem operational functions just pass the contents of
a class path object to the Windows API, they do work with the extended-length
@@ -3624,9 +3467,7 @@ support necessary to see both a trial implementation and the proposal itself
through to completion. She gave me the strength to continue after a difficult
year of cancer treatment in the middle of it all.</p>
<p>Many people contributed technical comments, ideas, and suggestions to the
-Boost Filesystem Library. See
-<a href="http://www.boost.org/libs/filesystem/doc/index.htm#Acknowledgements">
-http://www.boost.org/libs/filesystem/doc/index.htm#Acknowledgements</a>.</p>
+Boost Filesystem Library. See <a href="http://www.boost.org/libs/filesystem/doc/index.htm#Acknowledgements">http://www.boost.org/libs/filesystem/doc/index.htm#Acknowledgements</a>.</p>
<p>Dietmar Kuehl contributed the original Boost Filesystem Library directory_iterator design. Peter Dimov, Walter Landry, Rob Stewart, and Thomas
Witt were particularly helpful in refining the library.</p>
<p>The create_directories, extension, basename, and replace_extension functions
@@ -3638,35 +3479,21 @@ identified a number of mistakes or weaknesses, resulting in a more polished
final document.</p>
<p>Peter Dimov suggested a single class path, with member templates to adapt to
multiple string types. His idea became the basis for the version 3 path design.</p>
-<p>&nbsp;</p>
<h2><a name="References">References</a></h2>
<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
<tr>
- <td width="16%" valign="top">[<a name="ISO_POSIX">ISO-POSIX</a>]</td>
+ <td width="16%" valign="top">[<a name="ISO_POSIX">ISO/IEC 9945</a>]</td>
<td width="84%">ISO/IEC 9945:2003, IEEE&nbsp;Std&nbsp;1003.1-2001, and The Open Group
- Base Specifications, Issue 6. Also known as The Single Unix<font face="Times New Roman">®
+ Base Specifications, Issue 6. Also known as The Single Unix<font face="Times New Roman">®
Specification, Version 3. Available from each of the organizations involved
- in its creation. For example, read online or download from
- <a href="http://www.unix.org/single_unix_specification/">
- www.unix.org/single_unix_specification/</a>.</font> The ISO JTC1/SC22/WG15 -
- POSIX homepage is <a href="http://www.open-std.org/jtc1/sc22/WG15/">
- www.open-std.org/jtc1/sc22/WG15/</a></td>
+ in its creation. For example, read online or download from <a href="http://www.unix.org/single_unix_specification/">www.unix.org/single_unix_specification/</a>.</font> The ISO JTC1/SC22/WG15 -
+ POSIX homepage is <a href="http://www.open-std.org/jtc1/sc22/WG15/">www.open-std.org/jtc1/sc22/WG15/</a></td>
</tr>
<tr>
<td width="16%" valign="top">[Abrahams]</td>
- <td width="84%">Dave Abrahams, Error and Exception Handling,
- <a href="http://www.boost.org/more/error_handling.html">
- www.boost.org/more/error_handling.html</a></td>
+ <td width="84%">Dave Abrahams, Error and Exception Handling, <a href="http://www.boost.org/more/error_handling.html">www.boost.org/more/error_handling.html</a></td>
</tr>
</table>
<hr>
-<p><font size="2">© Copyright Beman Dawes, 2002, 2006, 2007, 2009, 2010, 2011</font></p>
-<p><font size="2">Distributed under the Boost Software License, Version 1.0. See
-</font>
-<a href="http://www.boost.org/LICENSE_1_0.txt"><font size="2">www.boost.org/LICENSE_1_0.txt</font></a></p>
-<p><font size="2">Revised
-<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B %Y" startspan -->31 October 2011<!--webbot bot="Timestamp" endspan i-checksum="32182" --></font></p>
-
-</body>
-
-</html> \ No newline at end of file
+$snippet backmatter "$SNIPPET_FILE;"
+</body></html> \ No newline at end of file
diff --git a/libs/filesystem/doc/src/tr2_snippets.html b/libs/filesystem/doc/src/tr2_snippets.html
new file mode 100644
index 0000000000..7eef9d1a37
--- /dev/null
+++ b/libs/filesystem/doc/src/tr2_snippets.html
@@ -0,0 +1,398 @@
+<html>
+<!-- © Copyright Beman Dawes 2012 -->
+<!-- Distributed under the Boost Software License, Version 1.0. -->
+<!-- See http://www.boost.org/LICENSE_1_0.txt -->
+<head>
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>Filesystem Proposal</title>
+</head>
+
+<body>
+
+$id frontmatter=
+ <table border="0">
+ <tr>
+ <td>Document number:&nbsp;&nbsp; </td>
+ <td><span style="background-color: #FFFF00">D????=12-????</span></td>
+ </tr>
+ <tr>
+ <td>Date:</td>
+ <td>
+ <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%Y-%m-%d" startspan -->2012-06-02<!--webbot bot="Timestamp" endspan i-checksum="12362" --></td>
+ </tr>
+ <tr>
+ <td>Project:</td>
+ <td>Programming Language C++</td>
+ </tr>
+ <tr>
+ <td valign="top">Reply-to:</td>
+ <td>Beman Dawes &lt;bdawes at acm dot org&gt;</td>
+ </tr>
+ </table>
+
+
+<h1><span style="background-color: #FFFF00">Draft</span><br>
+Filesystem Library Proposal (Revision 3)</h1>
+
+
+<p>This paper proposes a filesystem library component suitable for a <i>C++
+Standard Library Technical Specification</i> or for the <i>C++ Standard Library</i>.
+The proposed library is based on Version 3 of the Boost Filesystem
+Library (see <a href="http://www.boost.org/libs/filesystem">
+www.boost.org/libs/filesystem</a>). Preliminary wording is provided. A
+<a href="#TODO">TODO</a> list identifies remaining work to be done.</p>
+
+
+<p><span style="font-style: italic; background-color: #FFFF00">Material in this
+document high-lighted in yellow is known to be incomplete, incorrect, or
+otherwise require further refinement.</span></p>
+
+
+<h2>Revision history</h2>
+
+
+<p><span style="background-color: #FFFF00">D????=12-???? </span>, Filesystem
+Library Proposal (Revision 3). Changes include:</p>
+
+
+<ul>
+ <li>Add path::operator+= and concat functions to tack on things like suffixes
+ or numbers. Suggested by Ed Smith-Rowland and others.</li>
+ <li>Add section tags and section numbers, per LWG
+ discussion in Kona.</li>
+ <li>Bring use of trademarked names into ISO compliance, and minimize use of
+ such names by moving into a single examples section. Thanks to Stefanus Du
+ Toit for advice on how to do this.</li>
+ <li>Introduce a definition for &quot;operating system dependent&quot;, and then use it
+ to replace most &quot;implementation defined behavior&quot;.</li>
+ <li>Replace uses of&nbsp; const string return types with non-const string
+ return types, per LWG discussion in Kona.</li>
+ <li>Remove permission for implementations to return const string&amp; in certain
+ cases, per LWG discussion in Kona.</li>
+ <li>Remove path inserter and extractor dependency on Boost quoted manip (Issue
+ 7).</li>
+</ul>
+
+
+<p><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3365.html">N3365=12-0055</a>, Filesystem Library Proposal (Revision
+2). Changes
+include:</p>
+
+
+<ul>
+ <li>Namespaces changed to <code>std::tbd::filesystem</code> per
+ <a href="#Issues-List">issue
+ 1</a> discussion in Kona.</li>
+ <li>Removed references to Boost within the proposed wording.</li>
+ <li>Minor fixes to the proposed wording.</li>
+ <li>Added Issue 7: How should class path inserter and extractor be specified?</li>
+ <li>Marked up all issues to reflect Kona LWG discussions.</li>
+</ul>
+
+
+<p><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3335.html">
+N3335=12-0025</a>, Filesystem Library for C++11/TR2 (Revision 1). Changes
+include:</p>
+
+
+ <ul>
+ <li>Regenerated the proposed wording from the Boost Filesystem library
+ reference documentation, using an automated process. This process reduces
+ the likelihood of inadvertent discrepancies between descriptions.</li>
+ <li>An <a href="#Issues-List">Issues list</a> was added, seeded with issues
+ raised by the LWG review of N3239 at the Bloomington meeting, and private
+ communications from LWG members.</li>
+ <li>Namespace changed to <code>files</code> as an experiment. Made this
+ issue number 1 so the LWG can pass judgment.</li>
+ <li>New functions were added, suggested by David Svoboda, to generate
+ canonical paths and manage permissions.</li>
+ <li>More C++11 functionality was applied. This process is still incomplete,
+ however.</li>
+ <li>Added proposed changes to header &lt;fstream&gt;. The previous paper had
+ inadvertently supplied the wrong wording.</li>
+ <li>Continued the general cleanup of wording.</li>
+</ul>
+
+
+<p><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3239.html">
+N3239 = 11-0009</a>, Filesystem Library Update for TR2 (Preliminary), reflected
+changes made to the Boost library version 3 since the previously accepted
+committee paper:</p>
+
+
+ <ul>
+ <li>A single class <code>path</code> handles all aspects of
+ internationalization, replacing the previous template and its <code>path</code>
+ and <code>wpath</code> instantiations. Character types <code>char</code>,
+ <code>wchar_t</code>, <code>char16_t</code>, and <code>char32_t</code> are
+ supported. This is a major simplification of the path abstraction,
+ particularly for functions that take path arguments. This change was based
+ on a suggestion by Peter Dimov.</li>
+ <li>Several operational functions have been added, including much better
+ symlink support, the ability to resize a file, and the ability to generate a
+ unique path.</li>
+ <li>Support for error reporting via <code>error_code</code> is now uniform
+ throughout the operations functions.</li>
+ <li>Several functions have been renamed, based on feedback from users.</li>
+ </ul>
+
+
+<p><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1975.html">
+N1975 = 06-0045</a>, Filesystem Library Proposal for TR2 (Revision 3), was
+adopted by the committee in April, 2006, at the Berlin meeting. Shortly
+afterward the Library Working Group set aside work on TR2 to concentrate on
+C++0x.</p>
+
+
+<h2>Motivation and Scope</h2>
+
+
+<p>The motivation and scope for a filesystem library were described in <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1975.html">
+N1975</a>, and are not repeated here. A minor scope reduction is that an
+addition to the current C++ runtime library is no longer needed.</p>
+
+
+<p>Boost Filesystem Version 3 introduced a single path type that interoperates well with both <code>
+basic_string</code> and user defined string types. Thus the following Design
+alternatives paragraph is no long applicable:</p>
+
+
+ <blockquote>
+
+
+<p><strike><i>Single path type which can at runtime accept narrow or wide character
+pathnames.</i> Although certainly interesting, and possibly superior, such a
+design would not interoperate well with the current Standard Library's
+compile-time typed <code>basic_string</code>. A new runtime polymorphic string
+class would be the best place to experiment with this concept, not a path class.</strike></p>
+
+
+ </blockquote>
+
+
+ <h2><a name="TODO">TODO</a></h2>
+ <ul>
+ <li>Apply more C++0X features. Boost.Filesystem needs to implement these to verify their
+ application is correct.</li>
+ <li>Ion Todirel suggests &quot;Would be nice if path::append was variadic, to
+ improve usability&quot;.</li>
+ <li>Boost.Filesystem needs to implement <code>char16_t</code> and <code>char32_t</code> support to verify the
+ specification for these is correct.</li>
+ <li>The Boost implementation has more class path non-member relational
+ functions that shown in the docs, and the specific set of relational
+ functions varies between Windows and POSIX. Figure out what's happening and
+ document it.</li>
+ <li><code><a href="#Source">Source</a></code> is not specified as actually
+ implemented. Expose <code>path_traits</code>?</li>
+ <li><i>Effects</i> for <code>copy</code> and <code>copy_directory</code>
+ need to be reviewed, revised, tested, peer reviewed.</li>
+ <li>Dinkumware/Microsoft report slightly different results for Decomposition
+ table. Rerun table. Check discrepancies.</li>
+ <li>Apply issue resolutions from Kona. Complete except some remaining
+ codecvt arguments</li>
+ <li>Review Nick Stoughton's email for suggestions, action items.</li>
+ <li>Change <code>time_t</code> to <code>chrono system_clock::time_point</code>,
+ per LWG discussion in Kona. </li>
+ <li>Ed Smith-Rowland:<br>
+ &gt; I found it less confusing to switch to positive logic for
+ recursive_directory_iterator:<br>
+ &gt; bool no_push_pending() const noexcept;<br>
+ &gt; to say<br>
+ &gt; bool is_push_pending() const noexcept;<br>
+ &gt;<br>
+ &gt; and<br>
+ &gt; void no_push(bool value=true);<br>
+ &gt; to say<br>
+ &gt; void push_pending(bool value=false);<br>
+ &gt; or<br>
+ &gt; void set_push_pending(bool value=false);<br>
+ &gt; I found it less confusing and I think other parts of the library strive
+ for this.</li>
+ <li>recursive_directory_iterator is specified in terms of private data
+ members. Remove these (including the comment!) and specify in terms of
+ behavior only.</li>
+ <li>Ion Todirel: Would be nice to have a make_relative. Need to review
+ similar suggestions.</li>
+ </ul>
+
+ $endid
+
+$id wording_prefix=
+<h1>Proposed Wording</h1>
+
+<!-- generate-section-numbers=true -->
+
+<p><span style="font-style: italic; background-color: rgb(224, 224, 224);">
+Gray-shaded italic text is commentary on the proposal. It is not to be added to
+the working paper.</span></p>
+<h1>Filesystem Library [filesystem]</h1>
+
+<p>This clause describes components that perform operations on file systems and
+their components, such as paths, regular files, and directories.</p>
+
+<p>ISO/IEC 9945 contains provisions which, through reference in this
+text, constitute provisions of this clause. At the time of
+publication, the editions indicated were valid. All standards are subject to
+revision, and parties to agreements based on this clause are
+encouraged to investigate the possibility of applying the most recent editions
+of the standard indicated below. Members of IEC and ISO maintain registers of
+currently valid International Standards.</p>
+<ul>
+ <li>ISO/IEC 9945:2003, <i>Portable Operating System Interface (POSIX</i>®<i>),
+ part 1 (Base Definitions) and part 2 (System Interfaces)</i>, both as
+ corrected by their respective 2004 Correction 1 documents.<p><i>
+ <span style="background-color: #E0E0E0">ISO/</span><span style="background-color: #E0E0E0">IEC</span><span style="background-color: #E0E0E0"> 9945:2003 is also IEEE&nbsp;Std&nbsp;1003.1-2001, and The Open Group Base
+ Specifications, Issue 6, and is also known as The Single Unix®</span></i><font face="Times New Roman"><i><b><span style="background-color: #E0E0E0">
+ </span>
+ </b></i><span style="font-style: italic; background-color: #E0E0E0">Specification, Version 3. It is available from each of those
+ organizations, and may be read online or downloaded from
+ <a href="http://www.unix.org/single_unix_specification/">
+ www.unix.org/single_unix_specification/</a></span></font></li>
+</ul>
+
+$endid
+
+$id wording_suffix=
+<p><span style="font-style: italic; background-color: #E0E0E0">End of new
+Clause.</span></p>
+<hr>
+<h2><a name="Issues-List">Issues List</a></h2>
+<hr>
+<h3>Issue 1: What is the appropriate namespace?&nbsp;&nbsp;&nbsp; Status:
+Tentatively resolved</h3>
+<h4>Discussion</h4>
+<p>The N3335 proposal places the library in namespace <code>std::tr2::files</code>.
+Rationale for a sub-namespace is that the library uses several names that don't
+seem appropriate for namespace <code>tr2</code> since full standardization would
+then put the names into <code>std</code>. The function names <code>remove</code>
+and <code>rename</code> are of particular concern because these functions differ
+in behavior from current standard library functions with those names. It also
+doesn't seem desirable to preempt names like <code>equivalent</code> and <code>
+status</code>.</p>
+<h4>Resolution</h4>
+<p><i>Kona: Strong support for <code>filesystem</code> as the library's
+namespace. Strong support for a technical specification namespace that alerts uses that
+contents are likely to change if and when they later get moved into the
+standard. </i></p>
+<p><i>No decision yet on a TR namespace; <code>tbs</code> being used as
+a placeholder. Thus the full namespace is changed to <code>
+std::tbs::filesystem.</code></i></p>
+<hr>
+<h3>Issue 2: Excessive use of <code>const codecvt_type&amp;</code> arguments&nbsp;&nbsp;&nbsp;
+Status: Open</h3>
+<h4>Discussion</h4>
+<p>Users sometimes need to do path conversions that use something other than the
+imbued codecvt facet. The need is particularly acute in multi-threaded
+applications where changing the imbued facet would introduce a data race. That
+said, providing an optional <code>const codecvt_type&amp;</code> argument for every
+function where the need might possibly arise is excessive because its use is so
+rare and it adds considerable interface clutter.</p>
+<h4>Proposed resolution</h4>
+<p dir="ltr"><i>Kona:</i></p>
+<p dir="ltr"><i>Remove all existing class path <code>const codecvt_type&amp;</code>
+arguments. </i></p>
+<p dir="ltr"><i>Beman to pursue separate encoding conversion functionality, per
+Thursday N3336 &quot;Adapting standard library strings and IO to a Unicode World&quot;
+discussion. See Kona wiki.</i></p>
+<p dir="ltr"><i>If a separate encoding conversion facility isn't possible, then
+some form of minimal class path encoding conversion facility will be needed.
+But..., the LWG would like to see use cases and clearer explanation of
+motivation before deciding on specifics, and be very sure that there is no way
+to achieve with existing std library functionality, albeit with some loss of
+efficiency.</i></p>
+<hr>
+<h3>Issue 3: Possible &quot;implicit cast to native type&quot;?&nbsp;&nbsp;&nbsp;&nbsp;
+Status: Open</h3>
+<h4>Discussion</h4>
+<p>In Bloomington there was discussion of &quot;implicit cast to implicit cast to
+native OS type to inter operate with existing iostream library and native
+functions instead of modifying fstream&quot;.</p>
+<h4>Proposed resolution</h4>
+<p><i>Kona: The Dinkumware/Microsoft implementation has added an implicit
+conversion to the string type, eliminating any need to modify fstream.
+(Discussion: might be safer to make the implicit conversion protected, then make
+fstream classes friends).</i></p>
+<p><i>Action: Beman to investigate, test, as avoiding modification of existing
+header and classes is much desired.</i></p>
+<hr>
+<h3>Issue 4: Given move semantics, it is best not to return const strings.&nbsp;&nbsp;&nbsp;&nbsp;
+Status: Resolved</h3>
+<h4>Discussion</h4>
+<p>The issue title pretty much says it all.</p>
+<h4>Proposed resolution</h4>
+<p><i>Kona: Return plain strings. Remove the permission for implementations to
+return const refs, since uses are not in performace critical code and subtle
+portability bugs may occur.</i></p>
+<p><i>Action: Beman to apply to proposed wording.</i></p>
+<p><i>Version 3: Resolution applied.</i></p>
+<hr>
+<h3>Issue 5: Is there a way to handle characters that are illegal for particular
+OS?&nbsp;&nbsp;&nbsp;&nbsp; Status: NAD</h3>
+<h4>Discussion</h4>
+<p>Question raised by Pablo in Bloomington.</p>
+<h4>Proposed resolution</h4>
+<p>Beman suggests NAD, Future. I've done some work on this, including looking at
+systems like OpenVMS that have an escape mechanism to handle otherwise
+unrepresentable characters. There was a comment to that effect in N3239. I
+believe it should be deferred to some future release since (1) it is complex
+enough that I'd like to see actual implementation and use experience (presumably
+via Boost), and (2) I can't recall a user ever requesting such a feature.</p>
+<p><i>Kona: No consensus for change, since there doesn't appear to be any
+compelling use case.</i></p>
+<hr>
+<h3>Issue 6: Could allocator support be added to class path?&nbsp;&nbsp;&nbsp;&nbsp;
+Status: Open</h3>
+<h4>Discussion</h4>
+<p>Question raised by a committee member in private email.</p>
+<p><i>Kona: Much discussion.</i></p>
+<p><i>Action: Alisdair to write paper, based on a real implementation, so that
+it is possible to assess the impact on interface, performance, etc.</i></p>
+<p><i>Post-Kona: Alisdair will defer paper until after TR. </i></p>
+<hr>
+<h3>Issue 7: How should class path inserter and extractor be specified?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+Status: Resolved</h3>
+<h4>Discussion</h4>
+<p>Class <code>path</code> currently is specified to used the Boost detail <code>
+quoted</code> stream manipulator. A path object is inserted delimited by quotes,
+and extracted accordingly, ensuring that paths containing spaces are
+round-tripped correctly.&nbsp; Quotes in the path itself are escaped, and io
+state is saved and restored.</p>
+<p>See
+<a href="http://www.boost.org/doc/libs/1_48_0/libs/io/doc/quoted_manip.html">
+http://www.boost.org/doc/libs/1_48_0/libs/io/doc/quoted_manip.html</a></p>
+<p>Since the standard can't specify behavior in terms of something in Boost, we
+have to change the specification. Since the <code>quoted</code> stream
+manipulator is a handy little component, the issue is raised as to whether it
+should go in TR2.</p>
+<h4>Resolution</h4>
+<p><i>Kona: Specify the path inserter and extractor to have the desired
+behavior without reference to how it is achieved. (If someone wants to propose a
+quoted manipulator, that's a separate proposal for a different TR.)</i></p>
+<p><i>Action:&nbsp; Beman to apply to proposed wording.</i></p>
+<p><i>Version 3: Resolution applied.</i></p>
+<hr>
+<h3>Issue 8: Rename <code>rename</code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+Status: New</h3>
+<h4>Discussion</h4>
+<p>There are minor problems with the name of the <code>rename()</code> function:</p>
+<ul>
+ <li>There is already a &quot;rename&quot; function, albeit in namespace std, and it has
+ different semantics as regards error handling. Thus giving the function a
+ different name might reduce the chance of user error.</li>
+ <li>The name &quot;move&quot; would&nbsp; better reflect the actual semantics,
+ particularly for moves between directories., and this is the name used by some
+ API's, console commands, and GUI file managers for that functionality.</li>
+</ul>
+<h4>Proposed resolution</h4>
+<p>Change the name of the <code>rename()</code> function to <code>move()</code>.</p>
+<hr>
+<p>$endid
+
+$id backmatter=
+$endid </p>
+
+</body>
+
+</html> \ No newline at end of file
diff --git a/libs/filesystem/v3/doc/tutorial.html b/libs/filesystem/doc/tutorial.html
index f275cb60e6..0dbebec097 100644
--- a/libs/filesystem/v3/doc/tutorial.html
+++ b/libs/filesystem/doc/tutorial.html
@@ -6,7 +6,7 @@
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Filesystem Tutorial</title>
-<link rel="stylesheet" type="text/css" href="../../../../doc/src/minimal.css">
+<link rel="stylesheet" type="text/css" href="../../../doc/src/minimal.css">
</head>
<body>
@@ -14,8 +14,8 @@
<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
<tr>
<td width="277">
-<a href="../../../../index.htm">
-<img src="../../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
+<a href="../../../index.htm">
+<img src="../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
<td align="middle">
<font size="7">Filesystem Tutorial</font>
</td>
@@ -158,7 +158,7 @@ containing the size of the file named by the argument. The declaration looks
like this:</p>
<blockquote>
- <pre><span style="background-color: #FFFFFF; ">uintmax_t</span> <a name="file_size">file_size</a>(const path&amp; p);</pre>
+ <pre><span style="background-color: #FFFFFF; ">uintmax_t</span> file_size(const path&amp; p);</pre>
</blockquote>
<p>For now, all you need to know is that class path has constructors that take
<code>const char *</code> and many other useful types. (If you can't wait to
@@ -1095,7 +1095,7 @@ on an
operational error. <code>filesystem_error</code> is derived from <code>std::runtime_error</code>.
It has a
member function to obtain the <code>
-<a href="../../../system/doc/reference.html#Class-error_code">error_code</a></code> reported by the source
+<a href="../../system/doc/reference.html#Class-error_code">error_code</a></code> reported by the source
of the error. It also has member functions to obtain the path or paths that caused
the error.</p>
@@ -1121,7 +1121,7 @@ It has a
<p>Distributed under the Boost Software License, Version 1.0. See
<a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a></p>
<p>Revised
-<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B %Y" startspan -->20 February 2011<!--webbot bot="Timestamp" endspan i-checksum="40667" --></p>
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B %Y" startspan -->20 March 2012<!--webbot bot="Timestamp" endspan i-checksum="27254" --></p>
</body>
diff --git a/libs/filesystem/v3/doc/v3.html b/libs/filesystem/doc/v3.html
index 83dafbfab5..3b75140a20 100644
--- a/libs/filesystem/v3/doc/v3.html
+++ b/libs/filesystem/doc/v3.html
@@ -5,15 +5,15 @@
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Filesystem V3 Intro</title>
-<link rel="stylesheet" type="text/css" href="../../../../doc/src/minimal.css">
+<link rel="stylesheet" type="text/css" href="../../../doc/src/minimal.css">
<body>
<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
<tr>
<td width="277">
-<a href="../../../../index.htm">
-<img src="../../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
+<a href="../../../index.htm">
+<img src="../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
<td align="middle">
<font size="7">Filesystem
Version 3<br>
@@ -144,7 +144,7 @@ cycle, and then Version 3 will become the default version.</p>
<p>Distributed under the Boost Software License, Version 1.0. See
<a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a></p>
<p>Revised
-<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B %Y" startspan -->20 February 2011<!--webbot bot="Timestamp" endspan i-checksum="40667" --></p>
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B %Y" startspan -->20 March 2012<!--webbot bot="Timestamp" endspan i-checksum="27254" --></p>
</body>
diff --git a/libs/filesystem/v3/doc/v3_design.html b/libs/filesystem/doc/v3_design.html
index c5204fff85..cea4f12254 100644
--- a/libs/filesystem/v3/doc/v3_design.html
+++ b/libs/filesystem/doc/v3_design.html
@@ -6,7 +6,7 @@
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Filesystem V3 Design</title>
-<link rel="stylesheet" type="text/css" href="../../../../doc/src/minimal.css">
+<link rel="stylesheet" type="text/css" href="../../../doc/src/minimal.css">
</head>
<body>
@@ -14,8 +14,8 @@
<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
<tr>
<td>
-<a href="../../../../index.htm">
-<img src="../../../../boost.png" alt="boost.png (6897 bytes)" align="middle" border="0" width="300" height="86"></a></td>
+<a href="../../../index.htm">
+<img src="../../../boost.png" alt="boost.png (6897 bytes)" align="middle" border="0" width="300" height="86"></a></td>
<td align="middle">
<font size="7">Filesystem Version 3<br>
Design</font></td>
@@ -180,7 +180,7 @@ copy_directory, copy_symlink, and read_symlink functions.</p>
<hr>
<p>Revised
-<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->20 February, 2011<!--webbot bot="Timestamp" endspan i-checksum="40524" --></p>
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->20 March, 2012<!--webbot bot="Timestamp" endspan i-checksum="28814" --></p>
<p>© Copyright Beman Dawes, 2008</p>
<p> Use, modification, and distribution are subject to the Boost Software
diff --git a/libs/filesystem/v3/example/Jamfile.v2 b/libs/filesystem/example/Jamfile.v2
index 2d2ea27fcd..2d2ea27fcd 100644
--- a/libs/filesystem/v3/example/Jamfile.v2
+++ b/libs/filesystem/example/Jamfile.v2
diff --git a/libs/filesystem/v3/example/error_demo.cpp b/libs/filesystem/example/error_demo.cpp
index ce16b3bc47..ce16b3bc47 100644
--- a/libs/filesystem/v3/example/error_demo.cpp
+++ b/libs/filesystem/example/error_demo.cpp
diff --git a/libs/filesystem/v3/example/file_size.cpp b/libs/filesystem/example/file_size.cpp
index 3fbfa4ea53..3fbfa4ea53 100644
--- a/libs/filesystem/v3/example/file_size.cpp
+++ b/libs/filesystem/example/file_size.cpp
diff --git a/libs/filesystem/v3/example/file_status.cpp b/libs/filesystem/example/file_status.cpp
index 5d3774fdde..e46887575a 100644
--- a/libs/filesystem/v3/example/file_status.cpp
+++ b/libs/filesystem/example/file_status.cpp
@@ -11,7 +11,12 @@
#include <boost/config.hpp>
#include <boost/version.hpp>
#include <boost/filesystem.hpp>
-#include <boost/detail/lightweight_main.hpp>
+
+#ifndef BOOST_LIGHTWEIGHT_MAIN
+# include <boost/test/prg_exec_monitor.hpp>
+#else
+# include <boost/detail/lightweight_main.hpp>
+#endif
using std::cout; using std::endl;
using namespace boost::filesystem;
diff --git a/libs/filesystem/v3/example/mbcopy.cpp b/libs/filesystem/example/mbcopy.cpp
index 2b1f603823..2b1f603823 100644
--- a/libs/filesystem/v3/example/mbcopy.cpp
+++ b/libs/filesystem/example/mbcopy.cpp
diff --git a/libs/filesystem/v3/example/mbpath.cpp b/libs/filesystem/example/mbpath.cpp
index 43590010f3..43590010f3 100644
--- a/libs/filesystem/v3/example/mbpath.cpp
+++ b/libs/filesystem/example/mbpath.cpp
diff --git a/libs/filesystem/v3/example/mbpath.hpp b/libs/filesystem/example/mbpath.hpp
index f752b3fd0d..f752b3fd0d 100644
--- a/libs/filesystem/v3/example/mbpath.hpp
+++ b/libs/filesystem/example/mbpath.hpp
diff --git a/libs/filesystem/v3/example/path_info.cpp b/libs/filesystem/example/path_info.cpp
index 5c32b205a0..5c32b205a0 100644
--- a/libs/filesystem/v3/example/path_info.cpp
+++ b/libs/filesystem/example/path_info.cpp
diff --git a/libs/filesystem/v3/example/simple_ls.cpp b/libs/filesystem/example/simple_ls.cpp
index 9c4b638052..9c4b638052 100644
--- a/libs/filesystem/v3/example/simple_ls.cpp
+++ b/libs/filesystem/example/simple_ls.cpp
diff --git a/libs/filesystem/v3/example/stems.cpp b/libs/filesystem/example/stems.cpp
index 3699fa81f3..3699fa81f3 100644
--- a/libs/filesystem/v3/example/stems.cpp
+++ b/libs/filesystem/example/stems.cpp
diff --git a/libs/filesystem/v3/example/tchar.cpp b/libs/filesystem/example/tchar.cpp
index 5f33d69e06..5f33d69e06 100644
--- a/libs/filesystem/v3/example/tchar.cpp
+++ b/libs/filesystem/example/tchar.cpp
diff --git a/libs/filesystem/v3/example/test/Jamfile.v2 b/libs/filesystem/example/test/Jamfile.v2
index 3b3dde5f45..3b3dde5f45 100644
--- a/libs/filesystem/v3/example/test/Jamfile.v2
+++ b/libs/filesystem/example/test/Jamfile.v2
diff --git a/libs/filesystem/v3/example/test/bld.bat b/libs/filesystem/example/test/bld.bat
index 97686006d2..97686006d2 100644
--- a/libs/filesystem/v3/example/test/bld.bat
+++ b/libs/filesystem/example/test/bld.bat
diff --git a/libs/filesystem/v3/example/test/bld.sh b/libs/filesystem/example/test/bld.sh
index 0754fc9d6f..0754fc9d6f 100755
--- a/libs/filesystem/v3/example/test/bld.sh
+++ b/libs/filesystem/example/test/bld.sh
diff --git a/libs/filesystem/v3/example/test/setup.bat b/libs/filesystem/example/test/setup.bat
index 23a73f4693..23a73f4693 100644
--- a/libs/filesystem/v3/example/test/setup.bat
+++ b/libs/filesystem/example/test/setup.bat
diff --git a/libs/filesystem/v3/example/test/setup.sh b/libs/filesystem/example/test/setup.sh
index c2f3c79815..c2f3c79815 100755
--- a/libs/filesystem/v3/example/test/setup.sh
+++ b/libs/filesystem/example/test/setup.sh
diff --git a/libs/filesystem/v3/example/tut0.cpp b/libs/filesystem/example/tut0.cpp
index 4055100996..4055100996 100644
--- a/libs/filesystem/v3/example/tut0.cpp
+++ b/libs/filesystem/example/tut0.cpp
diff --git a/libs/filesystem/v3/example/tut1.cpp b/libs/filesystem/example/tut1.cpp
index 3ac85b9035..3ac85b9035 100644
--- a/libs/filesystem/v3/example/tut1.cpp
+++ b/libs/filesystem/example/tut1.cpp
diff --git a/libs/filesystem/v3/example/tut2.cpp b/libs/filesystem/example/tut2.cpp
index 2ca8562d2b..2ca8562d2b 100644
--- a/libs/filesystem/v3/example/tut2.cpp
+++ b/libs/filesystem/example/tut2.cpp
diff --git a/libs/filesystem/v3/example/tut3.cpp b/libs/filesystem/example/tut3.cpp
index bb4494eaf0..bb4494eaf0 100644
--- a/libs/filesystem/v3/example/tut3.cpp
+++ b/libs/filesystem/example/tut3.cpp
diff --git a/libs/filesystem/v3/example/tut4.cpp b/libs/filesystem/example/tut4.cpp
index 5888c3acbf..5888c3acbf 100644
--- a/libs/filesystem/v3/example/tut4.cpp
+++ b/libs/filesystem/example/tut4.cpp
diff --git a/libs/filesystem/v3/example/tut5.cpp b/libs/filesystem/example/tut5.cpp
index d665b0db05..d665b0db05 100644
--- a/libs/filesystem/v3/example/tut5.cpp
+++ b/libs/filesystem/example/tut5.cpp
diff --git a/libs/filesystem/example/tut6a.cpp b/libs/filesystem/example/tut6a.cpp
new file mode 100644
index 0000000000..f579a42752
--- /dev/null
+++ b/libs/filesystem/example/tut6a.cpp
@@ -0,0 +1,48 @@
+// filesystem tut6a.cpp --------------------------------------------------------------//
+
+// Copyright Beman Dawes 2010
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <exception>
+#include <boost/filesystem.hpp>
+using namespace boost::filesystem;
+
+int main(int argc, char* argv[])
+{
+ if (argc < 2)
+ {
+ std::cout << "Usage: tut6a path\n";
+ return 1;
+ }
+
+ try
+ {
+ for (recursive_directory_iterator it (argv[1]);
+ it != recursive_directory_iterator();
+ ++it)
+ {
+ if (it.level() > 1)
+ it.pop();
+ else
+ {
+ for (int i = 0; i <= it.level(); ++i)
+ std::cout << " ";
+
+ std::cout << it->path() << '\n';
+ }
+ }
+ }
+
+ catch (const std::exception& ex)
+ {
+ std::cout << "************* exception *****************\n";
+ std::cout << ex.what() << '\n';
+ }
+
+ return 0;
+}
diff --git a/libs/filesystem/example/tut6b.cpp b/libs/filesystem/example/tut6b.cpp
new file mode 100644
index 0000000000..90f54efc0f
--- /dev/null
+++ b/libs/filesystem/example/tut6b.cpp
@@ -0,0 +1,50 @@
+// filesystem tut6b.cpp --------------------------------------------------------------//
+
+// Copyright Beman Dawes 2010
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <exception>
+#include <boost/filesystem.hpp>
+using namespace boost::filesystem;
+
+int main(int argc, char* argv[])
+{
+ if (argc < 2)
+ {
+ std::cout << "Usage: tut6b path\n";
+ return 1;
+ }
+
+ try
+ {
+ for (recursive_directory_iterator it (argv[1]);
+ it != recursive_directory_iterator();
+ )
+ {
+ for (int i = 0; i <= it.level(); ++i)
+ std::cout << " ";
+
+ std::cout << it->path() << '\n';
+
+ try { ++it; }
+ catch (const filesystem_error& ex)
+ {
+ std::cout << "************* filesystem_error *****************\n";
+ std::cout << ex.what() << '\n';
+ }
+ }
+ }
+
+ catch (const std::exception& ex)
+ {
+ std::cout << "************* exception *****************\n";
+ std::cout << ex.what() << '\n';
+ }
+
+ return 0;
+}
diff --git a/libs/filesystem/example/tut6c.cpp b/libs/filesystem/example/tut6c.cpp
new file mode 100644
index 0000000000..2b73f774ad
--- /dev/null
+++ b/libs/filesystem/example/tut6c.cpp
@@ -0,0 +1,40 @@
+// filesystem tut6c.cpp --------------------------------------------------------------//
+
+// Copyright Beman Dawes 2010
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <exception>
+#include <boost/filesystem.hpp>
+#include <boost/system/error_code.hpp>
+
+using namespace boost::filesystem;
+using namespace boost::system;
+
+int main(int argc, char* argv[])
+{
+ if (argc < 2)
+ {
+ std::cout << "Usage: tut6c path\n";
+ return 1;
+ }
+
+ error_code ec;
+ for (recursive_directory_iterator it (argv[1], ec);
+ it != recursive_directory_iterator();
+ )
+ {
+ for (int i = 0; i <= it.level(); ++i)
+ std::cout << " ";
+
+ std::cout << it->path() << '\n';
+
+ it.increment(ec);
+ }
+
+ return 0;
+}
diff --git a/libs/filesystem/index.html b/libs/filesystem/index.html
index 13caa287b3..1803c23ca2 100644
--- a/libs/filesystem/index.html
+++ b/libs/filesystem/index.html
@@ -1,14 +1,13 @@
<html>
<head>
-<meta http-equiv="refresh" content="0; URL=v3/doc/index.htm">
+<meta http-equiv="refresh" content="0; URL=doc/index.htm">
</head>
<body>
Automatic redirection failed, please go to
-<a href="v3/doc/index.htm">v3/doc/index.htm</a>.
+<a href="doc/index.htm">doc/index.htm</a>.
<hr>
<p>&copy; Copyright Beman Dawes, 2003</p>
-<p> Distributed under the Boost Software
-License, Version 1.0. (See accompanying file <a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
-www.boost.org/LICENSE_1_0.txt</a>)</p>
+<p> Distributed under the Boost Software License, Version 1.0.
+See http://www.boost.org/LICENSE_1_0.txt</p>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/libs/filesystem/v3/src/codecvt_error_category.cpp b/libs/filesystem/src/codecvt_error_category.cpp
index b35b4a9ae7..245c3f3ec6 100644
--- a/libs/filesystem/v3/src/codecvt_error_category.cpp
+++ b/libs/filesystem/src/codecvt_error_category.cpp
@@ -9,13 +9,6 @@
//--------------------------------------------------------------------------------------//
-#include <boost/config.hpp>
-#if !defined( BOOST_NO_STD_WSTRING )
-// Boost.Filesystem V3 and later requires std::wstring support.
-// During the transition to V3, libraries are compiled with both V2 and V3 sources.
-// On old compilers that don't support V3 anyhow, we just skip everything so the compile
-// will succeed and the library can be built.
-
#include <boost/config/warning_disable.hpp>
// define BOOST_FILESYSTEM_SOURCE so that <boost/filesystem/config.hpp> knows
@@ -26,8 +19,8 @@
# define BOOST_SYSTEM_NO_DEPRECATED
#endif
-#include <boost/filesystem/v3/config.hpp>
-#include <boost/filesystem/v3/path_traits.hpp>
+#include <boost/filesystem/config.hpp>
+#include <boost/filesystem/path_traits.hpp>
#include <boost/system/error_code.hpp>
#include <locale>
#include <vector>
@@ -78,7 +71,7 @@ namespace
namespace boost
{
- namespace filesystem3
+ namespace filesystem
{
BOOST_FILESYSTEM_DECL const boost::system::error_category& codecvt_error_category()
@@ -87,7 +80,5 @@ namespace boost
return codecvt_error_cat_const;
}
- } // namespace filesystem3
+ } // namespace filesystem
} // namespace boost
-
-#endif // no wide character support
diff --git a/libs/filesystem/v3/src/operations.cpp b/libs/filesystem/src/operations.cpp
index 226f107690..16a336f690 100644
--- a/libs/filesystem/v3/src/operations.cpp
+++ b/libs/filesystem/src/operations.cpp
@@ -29,16 +29,8 @@
#define _FILE_OFFSET_BITS 64
#endif
-#include <boost/config.hpp>
-#if !defined( BOOST_NO_STD_WSTRING )
-// Boost.Filesystem V3 and later requires std::wstring support.
-// During the transition to V3, libraries are compiled with both V2 and V3 sources.
-// On old compilers that don't support V3 anyhow, we just skip everything so the compile
-// will succeed and the library can be built.
-
// define BOOST_FILESYSTEM_SOURCE so that <boost/filesystem/config.hpp> knows
// the library is being built (possibly exporting rather than importing code)
-
#define BOOST_FILESYSTEM_SOURCE
#ifndef BOOST_SYSTEM_NO_DEPRECATED
@@ -49,12 +41,11 @@
# define _POSIX_PTHREAD_SEMANTICS // Sun readdir_r()needs this
#endif
-#include <boost/filesystem/v3/operations.hpp>
+#include <boost/filesystem/operations.hpp>
#include <boost/scoped_array.hpp>
#include <boost/detail/workaround.hpp>
#include <vector>
#include <cstdlib> // for malloc, free
-#include <sys/stat.h> // even on Windows some functions use stat()
#include <cstring>
#include <cstdio> // for remove, rename
#if defined(__QNXNTO__) // see ticket #5355
@@ -66,10 +57,10 @@
# include <iostream>
#endif
-namespace fs = boost::filesystem3;
-using boost::filesystem3::path;
-using boost::filesystem3::filesystem_error;
-using boost::filesystem3::perms;
+namespace fs = boost::filesystem;
+using boost::filesystem::path;
+using boost::filesystem::filesystem_error;
+using boost::filesystem::perms;
using boost::system::error_code;
using boost::system::error_category;
using boost::system::system_category;
@@ -81,6 +72,7 @@ using std::wstring;
const fs::path dot_path(".");
const fs::path dot_dot_path("..");
# include <sys/types.h>
+# include <sys/stat.h>
# if !defined(__APPLE__) && !defined(__OpenBSD__)
# include <sys/statvfs.h>
# define BOOST_STATVFS statvfs
@@ -231,7 +223,7 @@ typedef struct _REPARSE_DATA_BUFFER {
# define BOOST_DELETE_FILE(P)(::DeleteFileW(P)!= 0)
# define BOOST_COPY_DIRECTORY(F,T)(::CreateDirectoryExW(F, T, 0)!= 0)
# define BOOST_COPY_FILE(F,T,FailIfExistsBool)(::CopyFileW(F, T, FailIfExistsBool)!= 0)
-# define BOOST_MOVE_FILE(OLD,NEW)(::MoveFileExW(OLD, NEW, MOVEFILE_REPLACE_EXISTING)!= 0)
+# define BOOST_MOVE_FILE(OLD,NEW)(::MoveFileExW(OLD, NEW, MOVEFILE_REPLACE_EXISTING|MOVEFILE_COPY_ALLOWED)!= 0)
# define BOOST_RESIZE_FILE(P,SZ)(resize_file_api(P, SZ)!= 0)
# define BOOST_READ_SYMLINK(P,T)
@@ -251,7 +243,7 @@ namespace
fs::file_type query_file_type(const path& p, error_code* ec);
- boost::filesystem3::directory_iterator end_dir_itr;
+ boost::filesystem::directory_iterator end_dir_itr;
const std::size_t buf_size(128);
const error_code ok;
@@ -707,7 +699,7 @@ namespace
namespace boost
{
-namespace filesystem3
+namespace filesystem
{
BOOST_FILESYSTEM_DECL
@@ -921,27 +913,43 @@ namespace detail
# endif
}
- BOOST_FILESYSTEM_DECL
+ BOOST_FILESYSTEM_DECL
bool create_directories(const path& p, system::error_code* ec)
{
- if (p.empty() || exists(p))
+ error_code local_ec;
+ file_status p_status = status(p, local_ec);
+
+ if (p_status.type() == directory_file)
{
- if (!p.empty() && !is_directory(p))
+ if (ec != 0)
+ ec->clear();
+ return false;
+ }
+
+ path parent = p.parent_path();
+ if (!parent.empty())
+ {
+ // determine if the parent exists
+ file_status parent_status = status(parent, local_ec);
+
+ // if the parent does not exist, create the parent
+ if (parent_status.type() == file_not_found)
{
- if (ec == 0)
- BOOST_FILESYSTEM_THROW(filesystem_error(
- "boost::filesystem::create_directories", p,
- error_code(system::errc::file_exists, system::generic_category())));
- else ec->assign(system::errc::file_exists, system::generic_category());
+ create_directories(parent, local_ec);
+ if (local_ec)
+ {
+ if (ec == 0)
+ BOOST_FILESYSTEM_THROW(filesystem_error(
+ "boost::filesystem::create_directories", parent, local_ec));
+ else
+ *ec = local_ec;
+ return false;
+ }
}
- return false;
}
- // First create branch, by calling ourself recursively
- create_directories(p.parent_path(), ec);
- // Now that parent's path exists, create the directory
- create_directory(p, ec);
- return true;
+ // create the directory
+ return create_directory(p, ec);
}
BOOST_FILESYSTEM_DECL
@@ -949,7 +957,8 @@ namespace detail
{
if (BOOST_CREATE_DIRECTORY(p.c_str()))
{
- if (ec != 0) ec->clear();
+ if (ec != 0)
+ ec->clear();
return true;
}
@@ -958,7 +967,8 @@ namespace detail
error_code dummy;
if (errval == BOOST_ERROR_ALREADY_EXISTS && is_directory(p, dummy))
{
- if (ec != 0) ec->clear();
+ if (ec != 0)
+ ec->clear();
return false;
}
@@ -1385,9 +1395,20 @@ namespace detail
else if (prms & remove_perms)
prms = current_status.permissions() & ~prms;
- // Mac OS X Lion and some other platforms don't support fchmodat()
+ // Mac OS X Lion and some other platforms don't support fchmodat().
+ // Solaris (SunPro and gcc) only support fchmodat() on Solaris 11 and higher,
+ // and a runtime check is too much trouble.
+ // Linux does not support permissions on symbolic links and has no plans to
+ // support them in the future. The chmod() code is thus more practical,
+ // rather than always hitting ENOTSUP when sending in AT_SYMLINK_NO_FOLLOW.
+ // - See the 3rd paragraph of
+ // "Symbolic link ownership, permissions, and timestamps" at:
+ // "http://man7.org/linux/man-pages/man7/symlink.7.html"
+ // - See the fchmodat() Linux man page:
+ // "http://man7.org/linux/man-pages/man2/fchmodat.2.html"
# if defined(AT_FDCWD) && defined(AT_SYMLINK_NOFOLLOW) \
- && (!defined(__SUNPRO_CC) || __SUNPRO_CC > 0x5100)
+ && !(defined(__SUNPRO_CC) || defined(sun)) \
+ && !(defined(linux) || defined(__linux) || defined(__linux__))
if (::fchmodat(AT_FDCWD, p.c_str(), mode_cast(prms),
!(prms & symlink_perms) ? 0 : AT_SYMLINK_NOFOLLOW))
# else // fallback if fchmodat() not supported
@@ -1860,7 +1881,7 @@ namespace path_traits
}
} // namespace path_traits
-} // namespace filesystem3
+} // namespace filesystem
} // namespace boost
//--------------------------------------------------------------------------------------//
@@ -2083,7 +2104,7 @@ namespace
namespace boost
{
-namespace filesystem3
+namespace filesystem
{
namespace detail
@@ -2203,7 +2224,5 @@ namespace detail
}
}
} // namespace detail
-} // namespace filesystem3
+} // namespace filesystem
} // namespace boost
-
-#endif // no wide character support
diff --git a/libs/filesystem/v3/src/path.cpp b/libs/filesystem/src/path.cpp
index c64cad2b3b..c740decccb 100644
--- a/libs/filesystem/v3/src/path.cpp
+++ b/libs/filesystem/src/path.cpp
@@ -7,12 +7,12 @@
// Library home page: http://www.boost.org/libs/filesystem
+// Old standard library configurations, particularly MingGW, don't support wide strings.
+// Report this with an explicit error message.
#include <boost/config.hpp>
-#if !defined( BOOST_NO_STD_WSTRING )
-// Boost.Filesystem V3 and later requires std::wstring support.
-// During the transition to V3, libraries are compiled with both V2 and V3 sources.
-// On old compilers that don't support V3 anyhow, we just skip everything so the compile
-// will succeed and the library can be built.
+# if defined( BOOST_NO_STD_WSTRING )
+# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
// define BOOST_FILESYSTEM_SOURCE so that <boost/system/config.hpp> knows
// the library is being built (possibly exporting rather than importing code)
@@ -22,8 +22,8 @@
# define BOOST_SYSTEM_NO_DEPRECATED
#endif
-#include <boost/filesystem/v3/config.hpp>
-#include <boost/filesystem/v3/path.hpp>
+#include <boost/filesystem/config.hpp>
+#include <boost/filesystem/path.hpp>
#include <boost/scoped_array.hpp>
#include <boost/system/error_code.hpp>
#include <boost/assert.hpp>
@@ -44,9 +44,9 @@
# include <iomanip>
#endif
-namespace fs = boost::filesystem3;
+namespace fs = boost::filesystem;
-using boost::filesystem3::path;
+using boost::filesystem::path;
using std::string;
using std::wstring;
@@ -78,7 +78,6 @@ namespace
# ifdef BOOST_WINDOWS_API
const wchar_t separator = L'/';
- const wchar_t preferred_separator = L'\\';
const wchar_t* const separators = L"/\\";
const wchar_t* separator_string = L"/";
const wchar_t* preferred_separator_string = L"\\";
@@ -88,10 +87,14 @@ namespace
const fs::path dot_path(L".");
const fs::path dot_dot_path(L"..");
+ inline bool is_letter(wchar_t c)
+ {
+ return (c >= L'a' && c <=L'z') || (c >= L'A' && c <=L'Z');
+ }
+
# else
const char separator = '/';
- const char preferred_separator = '/';
const char* const separators = "/";
const char* separator_string = "/";
const char* preferred_separator_string = "/";
@@ -106,12 +109,12 @@ namespace
{
return c == separator
# ifdef BOOST_WINDOWS_API
- || c == preferred_separator
+ || c == path::preferred_separator
# endif
;
}
- bool is_non_root_separator(const string_type& str, size_type pos);
+ bool is_root_separator(const string_type& str, size_type pos);
// pos is position of the separator
size_type filename_pos(const string_type& str,
@@ -142,9 +145,8 @@ namespace
namespace boost
{
-namespace filesystem3
+namespace filesystem
{
-
path& path::operator/=(const path& p)
{
if (p.empty())
@@ -186,6 +188,11 @@ namespace filesystem3
return *this;
}
+ int path::compare(const path& p) const BOOST_NOEXCEPT
+ {
+ return detail::lex_compare(begin(), end(), p.begin(), p.end());
+ }
+
# ifdef BOOST_WINDOWS_API
const std::string path::generic_string(const codecvt_type& cvt) const
@@ -250,17 +257,18 @@ namespace filesystem3
return *this;
}
- path & path::replace_extension(const path & source)
+ path& path::replace_extension(const path& new_extension)
{
- // erase existing extension if any
- size_type pos(m_pathname.rfind(dot));
- if (pos != string_type::npos && pos >= filename_pos(m_pathname, m_pathname.size()))
- m_pathname.erase(pos);
+ // erase existing extension, including the dot, if any
+ m_pathname.erase(m_pathname.size()-extension().m_pathname.size());
- // append source extension if any
- pos = source.m_pathname.rfind(dot);
- if (pos != string_type::npos)
- m_pathname += source.c_str() + pos;
+ if (!new_extension.empty())
+ {
+ // append new_extension, adding the dot if necessary
+ if (new_extension.m_pathname[0] != dot)
+ m_pathname.push_back(dot);
+ m_pathname.append(new_extension.m_pathname);
+ }
return *this;
}
@@ -350,7 +358,7 @@ namespace filesystem3
return (m_pathname.size()
&& pos
&& is_separator(m_pathname[pos])
- && is_non_root_separator(m_pathname, pos))
+ && !is_root_separator(m_pathname, pos))
? dot_path
: path(m_pathname.c_str() + pos);
}
@@ -442,7 +450,7 @@ namespace filesystem3
return *this;
}
-} // namespace filesystem3
+} // namespace filesystem
} // namespace boost
//--------------------------------------------------------------------------------------//
@@ -454,9 +462,9 @@ namespace filesystem3
namespace
{
- // is_non_root_separator -------------------------------------------------//
+ // is_root_separator ---------------------------------------------------------------//
- bool is_non_root_separator(const string_type & str, size_type pos)
+ bool is_root_separator(const string_type & str, size_type pos)
// pos is position of the separator
{
BOOST_ASSERT_MSG(!str.empty() && is_separator(str[pos]),
@@ -466,13 +474,21 @@ namespace
while (pos > 0 && is_separator(str[pos-1]))
--pos;
- return pos != 0
- && (pos <= 2 || !is_separator(str[1])
- || str.find_first_of(separators, 2) != pos)
-# ifdef BOOST_WINDOWS_API
- && (pos !=2 || str[1] != colon)
-# endif
- ;
+ // "/" [...]
+ if (pos == 0)
+ return true;
+
+# ifdef BOOST_WINDOWS_API
+ // "c:/" [...]
+ if (pos == 2 && is_letter(str[0]) && str[1] == colon)
+ return true;
+# endif
+
+ // "//" name "/"
+ if (pos < 3 || !is_separator(str[0]) || !is_separator(str[1]))
+ return false;
+
+ return str.find_first_of(separators, 2) == pos;
}
// filename_pos --------------------------------------------------------------------//
@@ -523,16 +539,16 @@ namespace
&& is_separator(path[1])) return string_type::npos;
# ifdef BOOST_WINDOWS_API
- // case "\\?\"
- if (size > 4
- && is_separator(path[0])
- && is_separator(path[1])
- && path[2] == questionmark
- && is_separator(path[3]))
- {
- string_type::size_type pos(path.find_first_of(separators, 4));
+ // case "\\?\"
+ if (size > 4
+ && is_separator(path[0])
+ && is_separator(path[1])
+ && path[2] == questionmark
+ && is_separator(path[3]))
+ {
+ string_type::size_type pos(path.find_first_of(separators, 4));
return pos < size ? pos : string_type::npos;
- }
+ }
# endif
// case "//net {/}"
@@ -617,7 +633,32 @@ namespace
return;
}
-} // unnammed namespace
+} // unnamed namespace
+
+
+namespace boost
+{
+namespace filesystem
+{
+ namespace detail
+ {
+ BOOST_FILESYSTEM_DECL
+ int lex_compare(path::iterator first1, path::iterator last1,
+ path::iterator first2, path::iterator last2)
+ {
+ for (; first1 != last1 && first2 != last2;)
+ {
+ if (first1->native() < first2->native()) return -1;
+ if (first2->native() < first1->native()) return 1;
+ BOOST_ASSERT(first2->native() == first1->native());
+ ++first1;
+ ++first2;
+ }
+ if (first1 == last1 && first2 == last2)
+ return 0;
+ return first1 == last1 ? -1 : 1;
+ }
+ }
//--------------------------------------------------------------------------------------//
// //
@@ -625,11 +666,6 @@ namespace
// //
//--------------------------------------------------------------------------------------//
-namespace boost
-{
-namespace filesystem3
-{
-
path::iterator path::begin() const
{
iterator itr;
@@ -655,13 +691,14 @@ namespace filesystem3
BOOST_ASSERT_MSG(it.m_pos < it.m_path_ptr->m_pathname.size(),
"path::basic_iterator increment past end()");
- // increment to position past current element
+ // increment to position past current element; if current element is implicit dot,
+ // this will cause it.m_pos to represent the end iterator
it.m_pos += it.m_element.m_pathname.size();
- // if end reached, create end basic_iterator
+ // if the end is reached, we are done
if (it.m_pos == it.m_path_ptr->m_pathname.size())
{
- it.m_element.clear();
+ it.m_element.clear(); // aids debugging, may release unneeded memory
return;
}
@@ -682,18 +719,18 @@ namespace filesystem3
# endif
)
{
- it.m_element.m_pathname = separator;
+ it.m_element.m_pathname = separator; // generic format; see docs
return;
}
- // bypass separators
+ // skip separators until it.m_pos points to the start of the next element
while (it.m_pos != it.m_path_ptr->m_pathname.size()
&& is_separator(it.m_path_ptr->m_pathname[it.m_pos]))
{ ++it.m_pos; }
// detect trailing separator, and treat it as ".", per POSIX spec
if (it.m_pos == it.m_path_ptr->m_pathname.size()
- && is_non_root_separator(it.m_path_ptr->m_pathname, it.m_pos-1))
+ && !is_root_separator(it.m_path_ptr->m_pathname, it.m_pos-1))
{
--it.m_pos;
it.m_element = dot_path;
@@ -701,9 +738,10 @@ namespace filesystem3
}
}
- // get next element
+ // get m_element
size_type end_pos(it.m_path_ptr->m_pathname.find_first_of(separators, it.m_pos));
- if (end_pos == string_type::npos) end_pos = it.m_path_ptr->m_pathname.size();
+ if (end_pos == string_type::npos)
+ end_pos = it.m_path_ptr->m_pathname.size();
it.m_element = it.m_path_ptr->m_pathname.substr(it.m_pos, end_pos - it.m_pos);
}
@@ -717,7 +755,7 @@ namespace filesystem3
if (it.m_pos == it.m_path_ptr->m_pathname.size()
&& it.m_path_ptr->m_pathname.size() > 1
&& is_separator(it.m_path_ptr->m_pathname[it.m_pos-1])
- && is_non_root_separator(it.m_path_ptr->m_pathname, it.m_pos-1)
+ && !is_root_separator(it.m_path_ptr->m_pathname, it.m_pos-1)
)
{
--it.m_pos;
@@ -738,11 +776,11 @@ namespace filesystem3
it.m_pos = filename_pos(it.m_path_ptr->m_pathname, end_pos);
it.m_element = it.m_path_ptr->m_pathname.substr(it.m_pos, end_pos - it.m_pos);
- if (it.m_element.m_pathname == preferred_separator_string)
- it.m_element.m_pathname = separator_string; // needed for Windows, harmless on POSIX
+ if (it.m_element.m_pathname == preferred_separator_string) // needed for Windows, harmless on POSIX
+ it.m_element.m_pathname = separator_string; // generic format; see docs
}
-} // namespace filesystem3
+} // namespace filesystem
} // namespace boost
//--------------------------------------------------------------------------------------//
@@ -758,12 +796,36 @@ namespace
// locale helpers //
//------------------------------------------------------------------------------------//
-#ifdef BOOST_WINDOWS_API
+#if defined(BOOST_WINDOWS_API) && defined(BOOST_FILESYSTEM_STATIC_LINK)
+
+ inline std::locale default_locale()
+ {
+ std::locale global_loc = std::locale();
+ std::locale loc(global_loc, new windows_file_codecvt);
+ return loc;
+ }
+
+ inline std::locale& path_locale()
+ {
+ static std::locale loc(default_locale());
+ return loc;
+ }
+
+ inline const path::codecvt_type*& codecvt_facet_ptr()
+ {
+ static const std::codecvt<wchar_t, char, std::mbstate_t>*
+ facet(
+ &std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t> >
+ (path_locale()));
+ return facet;
+ }
+
+#elif defined(BOOST_WINDOWS_API) && !defined(BOOST_FILESYSTEM_STATIC_LINK)
std::locale path_locale(std::locale(), new windows_file_codecvt);
const std::codecvt<wchar_t, char, std::mbstate_t>*
- codecvt_facet(&std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t> >
+ codecvt_facet_ptr(&std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t> >
(path_locale));
#elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)
@@ -791,7 +853,7 @@ namespace
new boost::filesystem::detail::utf8_codecvt_facet);
const std::codecvt<wchar_t, char, std::mbstate_t>*
- codecvt_facet(&std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t> >
+ codecvt_facet_ptr(&std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t> >
(path_locale));
#else // Other POSIX
@@ -803,8 +865,8 @@ namespace
// or LANG are wrong, for example), so lazy initialization is used to ensure
// that exceptions occur after main() starts and so can be caught.
- std::locale path_locale; // initialized by path::wchar_t_codecvt_facet() below
- const std::codecvt<wchar_t, char, std::mbstate_t>* codecvt_facet; // ditto
+ std::locale path_locale; // initialized by path::codecvt() below
+ const std::codecvt<wchar_t, char, std::mbstate_t>* codecvt_facet_ptr; // ditto
# endif
@@ -816,10 +878,29 @@ namespace
namespace boost
{
-namespace filesystem3
+namespace filesystem
{
- const path::codecvt_type*& path::wchar_t_codecvt_facet()
+#if defined(BOOST_WINDOWS_API) && defined(BOOST_FILESYSTEM_STATIC_LINK)
+
+ const path::codecvt_type& path::codecvt()
+ {
+ BOOST_ASSERT_MSG(codecvt_facet_ptr(), "codecvt_facet_ptr() facet hasn't been properly initialized");
+ return *codecvt_facet_ptr();
+ }
+
+ std::locale path::imbue(const std::locale & loc)
+ {
+ std::locale temp(path_locale());
+ path_locale() = loc;
+ codecvt_facet_ptr() =
+ &std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t> >(path_locale());
+ return temp;
+ }
+
+#else
+
+ const path::codecvt_type& path::codecvt()
{
# if defined(BOOST_POSIX_API) && \
!(defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__))
@@ -829,19 +910,20 @@ namespace filesystem3
// exception if a valid std::locale("") is actually needed.
static std::locale posix_lazy_initialization(path::imbue(std::locale("")));
# endif
- return codecvt_facet;
+ return *codecvt_facet_ptr;
}
std::locale path::imbue(const std::locale& loc)
{
std::locale temp(path_locale);
path_locale = loc;
- codecvt_facet =
+ codecvt_facet_ptr =
&std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t> >(path_locale);
return temp;
}
-} // namespace filesystem3
-} // namespace boost
-#endif // has wide character support
+#endif
+
+} // namespace filesystem
+} // namespace boost
diff --git a/libs/filesystem/v3/src/path_traits.cpp b/libs/filesystem/src/path_traits.cpp
index 66064370bc..06ac798160 100644
--- a/libs/filesystem/v3/src/path_traits.cpp
+++ b/libs/filesystem/src/path_traits.cpp
@@ -9,13 +9,6 @@
//--------------------------------------------------------------------------------------//
-#include <boost/config.hpp>
-#if !defined( BOOST_NO_STD_WSTRING )
-// Boost.Filesystem V3 and later requires std::wstring support.
-// During the transition to V3, libraries are compiled with both V2 and V3 sources.
-// On old compilers that don't support V3 anyhow, we just skip everything so the compile
-// will succeed and the library can be built.
-
// define BOOST_FILESYSTEM_SOURCE so that <boost/system/config.hpp> knows
// the library is being built (possibly exporting rather than importing code)
#define BOOST_FILESYSTEM_SOURCE
@@ -24,16 +17,16 @@
# define BOOST_SYSTEM_NO_DEPRECATED
#endif
-#include <boost/filesystem/v3/config.hpp>
-#include <boost/filesystem/v3/path_traits.hpp>
+#include <boost/filesystem/config.hpp>
+#include <boost/filesystem/path_traits.hpp>
#include <boost/system/system_error.hpp>
#include <boost/scoped_array.hpp>
#include <locale> // for codecvt_base::result
#include <cstring> // for strlen
#include <cwchar> // for wcslen
-namespace pt = boost::filesystem3::path_traits;
-namespace fs = boost::filesystem3;
+namespace pt = boost::filesystem::path_traits;
+namespace fs = boost::filesystem;
namespace bs = boost::system;
//--------------------------------------------------------------------------------------//
@@ -130,7 +123,7 @@ namespace {
// path_traits //
//--------------------------------------------------------------------------------------//
-namespace boost { namespace filesystem3 { namespace path_traits {
+namespace boost { namespace filesystem { namespace path_traits {
//--------------------------------------------------------------------------------------//
// convert const char* to wstring //
@@ -204,6 +197,4 @@ namespace boost { namespace filesystem3 { namespace path_traits {
convert_aux(from, from_end, buf, buf+default_codecvt_buf_size, to, cvt);
}
}
-}}} // namespace boost::filesystem3::path_traits
-
-#endif // no wide character support
+}}} // namespace boost::filesystem::path_traits
diff --git a/libs/filesystem/v3/src/portability.cpp b/libs/filesystem/src/portability.cpp
index 31e0176271..b1a1352d9a 100644
--- a/libs/filesystem/v3/src/portability.cpp
+++ b/libs/filesystem/src/portability.cpp
@@ -9,13 +9,6 @@
//--------------------------------------------------------------------------------------//
-#include <boost/config.hpp>
-#if !defined( BOOST_NO_STD_WSTRING )
-// Boost.Filesystem V3 and later requires std::wstring support.
-// During the transition to V3, libraries are compiled with both V2 and V3 sources.
-// On old compilers that don't support V3 anyhow, we just skip everything so the compile
-// will succeed and the library can be built.
-
// define BOOST_FILESYSTEM_SOURCE so that <boost/filesystem/config.hpp> knows
// the library is being built (possibly exporting rather than importing code)
#define BOOST_FILESYSTEM_SOURCE
@@ -24,10 +17,10 @@
# define BOOST_SYSTEM_NO_DEPRECATED
#endif
-#include <boost/filesystem/v3/config.hpp>
-#include <boost/filesystem/v3/path.hpp>
+#include <boost/filesystem/config.hpp>
+#include <boost/filesystem/path.hpp>
-namespace fs = boost::filesystem3;
+namespace fs = boost::filesystem;
#include <cstring> // SGI MIPSpro compilers need this
@@ -54,7 +47,7 @@ namespace
namespace boost
{
- namespace filesystem3
+ namespace filesystem
{
// name_check functions ----------------------------------------------//
@@ -122,7 +115,5 @@ namespace boost
;
}
- } // namespace filesystem3
+ } // namespace filesystem
} // namespace boost
-
-#endif // no wide character support
diff --git a/libs/filesystem/v3/src/unique_path.cpp b/libs/filesystem/src/unique_path.cpp
index 1569b32e91..c25c3159c9 100644
--- a/libs/filesystem/v3/src/unique_path.cpp
+++ b/libs/filesystem/src/unique_path.cpp
@@ -1,4 +1,4 @@
-// filesystem system_crypt_random.cpp ------------------------------------------------//
+// filesystem unique_path.cpp --------------------------------------------------------//
// Copyright Beman Dawes 2010
@@ -9,13 +9,6 @@
//--------------------------------------------------------------------------------------//
-#include <boost/config.hpp>
-#if !defined( BOOST_NO_STD_WSTRING )
-// Boost.Filesystem V3 and later requires std::wstring support.
-// During the transition to V3, libraries are compiled with both V2 and V3 sources.
-// On old compilers that don't support V3 anyhow, we just skip everything so the compile
-// will succeed and the library can be built.
-
// define BOOST_FILESYSTEM_SOURCE so that <boost/filesystem/config.hpp> knows
// the library is being built (possibly exporting rather than importing code)
#define BOOST_FILESYSTEM_SOURCE
@@ -24,7 +17,7 @@
# define BOOST_SYSTEM_NO_DEPRECATED
#endif
-#include <boost/filesystem/v3/operations.hpp>
+#include <boost/filesystem/operations.hpp>
# ifdef BOOST_POSIX_API
# include <fcntl.h>
@@ -112,7 +105,7 @@ void system_crypt_random(void* buf, std::size_t len, boost::system::error_code*
} // unnamed namespace
-namespace boost { namespace filesystem3 { namespace detail {
+namespace boost { namespace filesystem { namespace detail {
BOOST_FILESYSTEM_DECL
path unique_path(const path& model, system::error_code* ec)
@@ -147,5 +140,3 @@ path unique_path(const path& model, system::error_code* ec)
}
}}}
-
-#endif // no wide character support
diff --git a/libs/filesystem/v3/src/utf8_codecvt_facet.cpp b/libs/filesystem/src/utf8_codecvt_facet.cpp
index ed0b422af8..8a5af1e07c 100644
--- a/libs/filesystem/v3/src/utf8_codecvt_facet.cpp
+++ b/libs/filesystem/src/utf8_codecvt_facet.cpp
@@ -20,7 +20,7 @@
#define BOOST_UTF8_END_NAMESPACE }}}
#define BOOST_UTF8_DECL BOOST_FILESYSTEM_DECL
-#include "libs/detail/utf8_codecvt_facet.cpp"
+#include <boost/detail/utf8_codecvt_facet.ipp>
#undef BOOST_UTF8_BEGIN_NAMESPACE
#undef BOOST_UTF8_END_NAMESPACE
diff --git a/libs/filesystem/v3/src/windows_file_codecvt.cpp b/libs/filesystem/src/windows_file_codecvt.cpp
index 85de59eee1..998db60221 100644
--- a/libs/filesystem/v3/src/windows_file_codecvt.cpp
+++ b/libs/filesystem/src/windows_file_codecvt.cpp
@@ -9,13 +9,6 @@
//--------------------------------------------------------------------------------------//
-#include <boost/config.hpp>
-#if !defined( BOOST_NO_STD_WSTRING )
-// Boost.Filesystem V3 and later requires std::wstring support.
-// During the transition to V3, libraries are compiled with both V2 and V3 sources.
-// On old compilers that don't support V3 anyhow, we just skip everything so the compile
-// will succeed and the library can be built.
-
// define BOOST_FILESYSTEM_SOURCE so that <boost/system/config.hpp> knows
// the library is being built (possibly exporting rather than importing code)
#define BOOST_FILESYSTEM_SOURCE
@@ -24,7 +17,7 @@
# define BOOST_SYSTEM_NO_DEPRECATED
#endif
-#include <boost/filesystem/v3/config.hpp>
+#include <boost/filesystem/config.hpp>
#include <cwchar> // for mbstate_t
#ifdef BOOST_WINDOWS_API
@@ -80,4 +73,3 @@
# endif // BOOST_WINDOWS_API
-#endif // no wide character support
diff --git a/libs/filesystem/v3/src/windows_file_codecvt.hpp b/libs/filesystem/src/windows_file_codecvt.hpp
index d845d37942..52deab1b8f 100644
--- a/libs/filesystem/v3/src/windows_file_codecvt.hpp
+++ b/libs/filesystem/src/windows_file_codecvt.hpp
@@ -10,7 +10,7 @@
#ifndef BOOST_FILESYSTEM3_WIN_FILE_CODECVT_HPP
#define BOOST_FILESYSTEM3_WIN_FILE_CODECVT_HPP
-#include <boost/filesystem/v3/config.hpp>
+#include <boost/filesystem/config.hpp>
#include <locale>
//------------------------------------------------------------------------------------//
diff --git a/libs/filesystem/test/Jamfile.v2 b/libs/filesystem/test/Jamfile.v2
index 43063177bd..5be791d65e 100644
--- a/libs/filesystem/test/Jamfile.v2
+++ b/libs/filesystem/test/Jamfile.v2
@@ -2,31 +2,34 @@
# (C) Copyright Beman Dawes 2002-2006
# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or www.boost.org/LICENSE_1_0.txt)
+# See www.boost.org/LICENSE_1_0.txt
project
: requirements
<library>/boost/filesystem//boost_filesystem
<library>/boost/system//boost_system
+ <library>/boost/test//boost_prg_exec_monitor
<toolset>msvc:<asynch-exceptions>on
;
+# Some tests are run both statically and as shared libraries since Filesystem
+# has a history of bugs that appear only in one type of build or the other.
+
test-suite "filesystem" :
- [ run ../v2/test/path_test.cpp : : : : v2_path_test ]
- [ run ../v2/test/operations_test.cpp : : : : v2_operations_test ]
- [ run ../v2/test/fstream_test.cpp : : : : v2_fstream_test ]
- [ run ../v2/test/convenience_test.cpp : : : : v2_convenience_test ]
- [ run ../v2/test/large_file_support_test.cpp : : : : v2_large_file_support_test ]
-
- [ run ../v3/test/path_unit_test.cpp : : : : v3_path_unit_test ]
- [ run ../v3/test/path_test.cpp : : : : v3_path_test ]
- [ run ../v3/test/operations_unit_test.cpp : : : : v3_operations_unit_test ]
- [ run ../v3/test/operations_test.cpp : : : <test-info>always_show_run_output : v3_operations_test ]
- [ run ../v3/test/fstream_test.cpp : : : : v3_fstream_test ]
- [ run ../v3/test/convenience_test.cpp : : : : v3_convenience_test ]
- [ run ../v3/test/large_file_support_test.cpp : : : : v3_large_file_support_test ]
- [ run ../v3/test/deprecated_test.cpp : : : : v3_deprecated_test ]
- [ run ../v3/example/simple_ls.cpp : : : : v3_simple_ls ]
+ [ run convenience_test.cpp ]
+ [ compile macro_default_test.cpp ]
+ [ run deprecated_test.cpp ]
+ [ run fstream_test.cpp ]
+ [ run large_file_support_test.cpp ]
+ [ run locale_info.cpp : : : <test-info>always_show_run_output ]
+ [ run operations_test.cpp : : : <link>shared <test-info>always_show_run_output ]
+ [ run operations_test.cpp : : : <link>static : operations_test_static ]
+ [ run operations_unit_test.cpp : : : <link>shared <test-info>always_show_run_output ]
+ [ run path_test.cpp : : : <link>shared ]
+ [ run path_test.cpp : : : <link>static : path_test_static ]
+ [ run path_unit_test.cpp : : : <link>shared ]
+ [ run path_unit_test.cpp : : : <link>static : path_unit_test_static ]
+ [ run ../example/simple_ls.cpp ]
+ [ run ../example/file_status.cpp ]
- [ run ../v3/test/locale_info.cpp : : : <test-info>always_show_run_output ]
;
diff --git a/libs/filesystem/v3/test/convenience_test.cpp b/libs/filesystem/test/convenience_test.cpp
index 17675a6826..0083eb7d58 100644
--- a/libs/filesystem/v3/test/convenience_test.cpp
+++ b/libs/filesystem/test/convenience_test.cpp
@@ -8,14 +8,6 @@
// See library home page at http://www.boost.org/libs/filesystem
-#define BOOST_FILESYSTEM_VERSION 3
-
-#include <boost/config.hpp>
-
-# if defined( BOOST_NO_STD_WSTRING )
-# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
-# endif
-
#include <boost/config/warning_disable.hpp>
// See deprecated_test for tests of deprecated features
@@ -27,16 +19,28 @@
#endif
#include <boost/filesystem/convenience.hpp>
-namespace fs = boost::filesystem;
-using fs::path;
-namespace sys = boost::system;
+
+#include <boost/config.hpp>
+# if defined( BOOST_NO_STD_WSTRING )
+# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
#include <boost/detail/lightweight_test.hpp>
-#include <boost/detail/lightweight_main.hpp>
+
+#ifndef BOOST_LIGHTWEIGHT_MAIN
+# include <boost/test/prg_exec_monitor.hpp>
+#else
+# include <boost/detail/lightweight_main.hpp>
+#endif
+
#include <boost/bind.hpp>
#include <fstream>
#include <iostream>
+namespace fs = boost::filesystem;
+using fs::path;
+namespace sys = boost::system;
+
namespace
{
template< typename F >
@@ -64,8 +68,7 @@ int cpp_main(int, char*[])
// create_directories() tests --------------------------------------------------------//
- BOOST_TEST(!fs::create_directories("")); // should be harmless
- BOOST_TEST(!fs::create_directories("/")); // ditto
+ BOOST_TEST(!fs::create_directories("/")); // should be harmless
path unique_dir = fs::unique_path(); // unique name in case tests running in parallel
path unique_yy = unique_dir / "yy";
diff --git a/libs/filesystem/v3/test/deprecated_test.cpp b/libs/filesystem/test/deprecated_test.cpp
index de82ff8b26..60f83497ce 100644
--- a/libs/filesystem/v3/test/deprecated_test.cpp
+++ b/libs/filesystem/test/deprecated_test.cpp
@@ -11,19 +11,22 @@
// This test verifies that various deprecated names still work. This is
// important to preserve existing code that uses the old names.
-#define BOOST_FILESYSTEM_VERSION 3
+#define BOOST_FILESYSTEM_DEPRECATED
-#include <boost/config.hpp>
+#include <boost/filesystem.hpp>
+#include <boost/config.hpp>
# if defined( BOOST_NO_STD_WSTRING )
# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
# endif
-#define BOOST_FILESYSTEM_DEPRECATED
-
-#include <boost/filesystem.hpp>
#include <boost/detail/lightweight_test.hpp>
-#include <boost/detail/lightweight_main.hpp>
+
+#ifndef BOOST_LIGHTWEIGHT_MAIN
+# include <boost/test/prg_exec_monitor.hpp>
+#else
+# include <boost/detail/lightweight_main.hpp>
+#endif
namespace fs = boost::filesystem;
using boost::filesystem::path;
diff --git a/libs/filesystem/v3/test/design_use_cases.cpp b/libs/filesystem/test/design_use_cases.cpp
index 49b0c28c08..49b0c28c08 100644
--- a/libs/filesystem/v3/test/design_use_cases.cpp
+++ b/libs/filesystem/test/design_use_cases.cpp
diff --git a/libs/filesystem/v2/test/equivalent.cpp b/libs/filesystem/test/equivalent.cpp
index be3089afd6..be3089afd6 100644
--- a/libs/filesystem/v2/test/equivalent.cpp
+++ b/libs/filesystem/test/equivalent.cpp
diff --git a/libs/filesystem/v3/test/fstream_test.cpp b/libs/filesystem/test/fstream_test.cpp
index d194033ff8..09c3721d7e 100644
--- a/libs/filesystem/v3/test/fstream_test.cpp
+++ b/libs/filesystem/test/fstream_test.cpp
@@ -7,14 +7,6 @@
// Library home page: http://www.boost.org/libs/filesystem
-#define BOOST_FILESYSTEM_VERSION 3
-
-#include <boost/config.hpp>
-
-# if defined( BOOST_NO_STD_WSTRING )
-# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
-# endif
-
#include <boost/config/warning_disable.hpp>
// See deprecated_test for tests of deprecated features
@@ -26,6 +18,12 @@
#endif
#include <boost/filesystem/fstream.hpp>
+
+#include <boost/config.hpp>
+# if defined( BOOST_NO_STD_WSTRING )
+# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
#include <boost/filesystem/operations.hpp>
#include <string>
#include <iostream>
@@ -43,11 +41,6 @@ namespace fs = boost::filesystem;
#include <boost/detail/lightweight_test.hpp>
#include <boost/detail/lightweight_main.hpp>
-#if defined(_MSC_VER)
-# pragma warning(push) // Save warning settings.
-# pragma warning(disable : 4428) // Disable universal-character-name encountered in source warning.
-#endif
-
namespace
{
bool cleanup = true;
@@ -154,7 +147,7 @@ int cpp_main(int argc, char*[])
// test narrow characters
std::cout << "narrow character tests:\n";
- test("v3_fstream_test");
+ test("narrow_fstream_test");
// So that tests are run with known encoding, use Boost UTF-8 codecvt
@@ -167,7 +160,10 @@ int cpp_main(int argc, char*[])
// \u2781 is circled 2 against white background == e2 9e 81 in UTF-8
// \u263A is a white smiling face
std::cout << "\nwide character tests:\n";
- test(L"fstream_test_\u2780\u263A");
+ std::wstring ws(L"wide_fstream_test_");
+ ws += 0x2780;
+ ws += 0x263A;
+ test(ws);
return ::boost::report_errors();
}
diff --git a/libs/filesystem/test/issues/fchmodat_AT_SYMLINK_NOFOLLOW_6659.cpp b/libs/filesystem/test/issues/fchmodat_AT_SYMLINK_NOFOLLOW_6659.cpp
new file mode 100644
index 0000000000..e69f9ba21b
--- /dev/null
+++ b/libs/filesystem/test/issues/fchmodat_AT_SYMLINK_NOFOLLOW_6659.cpp
@@ -0,0 +1,38 @@
+// Test program to demonstrate that Linux does not support AT_SYMLINK_NOFOLLOW
+
+// Copyright Duncan Exon Smith 2012
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Test this by running:
+//
+// rm -rf data && mkdir data && g++ -otest-fchmodat fchmodat_AT_SYMLINK_NOFOLLOW_6659.cpp && (cd data && ../test-fchmodat)
+//
+// If no assertions go off, then it looks like fchmodat is supported,
+// but AT_SYMLINK_NOFOLLOW is not supported.
+
+#include <fstream>
+#include <cassert>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <cerrno>
+
+#ifdef NDEBUG
+# error This program depends on assert() so makes no sense if NDEBUG is defined
+#endif
+
+int main(int argc, char *argv[])
+{
+ { std::ofstream file("out"); file << "contents"; }
+
+ assert(!::symlink("out", "sym"));
+
+ assert(!::fchmodat(AT_FDCWD, "out", S_IRUSR | S_IWUSR | S_IXUSR, 0));
+ assert(!::fchmodat(AT_FDCWD, "sym", S_IRUSR | S_IWUSR | S_IXUSR, 0));
+
+ assert(::fchmodat(AT_FDCWD, "sym", S_IRUSR | S_IWUSR | S_IXUSR, AT_SYMLINK_NOFOLLOW) == -1);
+ assert(errno == ENOTSUP);
+
+ return 0;
+}
diff --git a/libs/filesystem/test/issues/readme.txt b/libs/filesystem/test/issues/readme.txt
new file mode 100644
index 0000000000..cf8198e5c0
--- /dev/null
+++ b/libs/filesystem/test/issues/readme.txt
@@ -0,0 +1,9 @@
+This directory contains tests related to specific issues.
+
+The names are intended to indicate both the function or condition being tested
+and the issue number.
+
+-----
+Copyright Beman Dawes 2012
+Distributed under the Boost Software License, Version 1.0.
+See http://www.boost.org/LICENSE_1_0.txt
diff --git a/libs/filesystem/v3/test/large_file_support_test.cpp b/libs/filesystem/test/large_file_support_test.cpp
index 287490efea..553e09d8ca 100644
--- a/libs/filesystem/v3/test/large_file_support_test.cpp
+++ b/libs/filesystem/test/large_file_support_test.cpp
@@ -7,20 +7,17 @@
// See library home page at http://www.boost.org/libs/filesystem
+// See deprecated_test for tests of deprecated features
+#define BOOST_FILESYSTEM_NO_DEPRECATED
+#define BOOST_SYSTEM_NO_DEPRECATED
-#define BOOST_FILESYSTEM_VERSION 3
+#include <boost/filesystem/operations.hpp>
#include <boost/config.hpp>
-
# if defined( BOOST_NO_STD_WSTRING )
# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
# endif
-// See deprecated_test for tests of deprecated features
-#define BOOST_FILESYSTEM_NO_DEPRECATED
-#define BOOST_SYSTEM_NO_DEPRECATED
-
-#include <boost/filesystem/operations.hpp>
namespace fs = boost::filesystem;
#include <iostream>
diff --git a/libs/filesystem/v3/test/locale_info.cpp b/libs/filesystem/test/locale_info.cpp
index db57bb1588..db57bb1588 100644
--- a/libs/filesystem/v3/test/locale_info.cpp
+++ b/libs/filesystem/test/locale_info.cpp
diff --git a/libs/filesystem/v3/test/long_path_test.cpp b/libs/filesystem/test/long_path_test.cpp
index 65be7cb4e1..b6b9f66846 100644
--- a/libs/filesystem/v3/test/long_path_test.cpp
+++ b/libs/filesystem/test/long_path_test.cpp
@@ -9,8 +9,6 @@
// See http://msdn.microsoft.com/en-us/library/aa365247%28v=vs.85%29.aspx
-#define BOOST_FILESYSTEM_VERSION 3
-
#include <boost/config/warning_disable.hpp>
#include <boost/filesystem.hpp>
@@ -20,7 +18,12 @@
using namespace boost::filesystem;
#include <boost/detail/lightweight_test.hpp>
-#include <boost/detail/lightweight_main.hpp>
+
+#ifndef BOOST_LIGHTWEIGHT_MAIN
+# include <boost/test/prg_exec_monitor.hpp>
+#else
+# include <boost/detail/lightweight_main.hpp>
+#endif
namespace
{
diff --git a/libs/filesystem/test/macro_default_test.cpp b/libs/filesystem/test/macro_default_test.cpp
new file mode 100644
index 0000000000..4f8de1960e
--- /dev/null
+++ b/libs/filesystem/test/macro_default_test.cpp
@@ -0,0 +1,36 @@
+// macro_default_test program --------------------------------------------------------//
+
+// Copyright Beman Dawes 2012
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+#undef BOOST_ALL_DYN_LINK
+#undef BOOST_ALL_STATIC_LINK
+#undef BOOST_FILESYSTEM_DYN_LINK
+#undef BOOST_FILESYSTEM_STATIC_LINK
+#undef BOOST_SYSTEM_DYN_LINK
+#undef BOOST_SYSTEM_STATIC_LINK
+
+#ifndef BOOST_ALL_NO_LIB
+# define BOOST_ALL_NO_LIB
+#endif
+
+#include <boost/filesystem/config.hpp>
+#include <boost/system/config.hpp>
+
+#ifndef BOOST_FILESYSTEM_STATIC_LINK
+# error BOOST_FILESYSTEM_STATIC_LINK not set by default
+#endif
+
+
+#ifndef BOOST_SYSTEM_STATIC_LINK
+# error BOOST_SYSTEM_STATIC_LINK not set by default
+#endif
+
+int main()
+{
+ return 0;
+}
diff --git a/libs/filesystem/v3/test/msvc10/common.props b/libs/filesystem/test/msvc10/common.props
index a341a589c5..b89fc2849f 100644
--- a/libs/filesystem/v3/test/msvc10/common.props
+++ b/libs/filesystem/test/msvc10/common.props
@@ -7,8 +7,8 @@
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
- <AdditionalIncludeDirectories>../../../../../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>BOOST_FILESYSTEM_VERSION=3;BOOST_SYSTEM_NO_DEPRECATED;BOOST_ALL_NO_LIB;BOOST_ALL_DYN_LINK;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>../../../../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>BOOST_SYSTEM_NO_DEPRECATED;BOOST_ALL_NO_LIB;BOOST_ALL_DYN_LINK;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ExceptionHandling>Async</ExceptionHandling>
<DisableLanguageExtensions>false</DisableLanguageExtensions>
<WarningLevel>Level4</WarningLevel>
diff --git a/libs/filesystem/v3/test/msvc10/convenience_test/convenience_test.vcxproj b/libs/filesystem/test/msvc10/convenience_test/convenience_test.vcxproj
index 437ebf6b90..48bfef939e 100644
--- a/libs/filesystem/v3/test/msvc10/convenience_test/convenience_test.vcxproj
+++ b/libs/filesystem/test/msvc10/convenience_test/convenience_test.vcxproj
@@ -92,6 +92,9 @@
<ClCompile Include="..\..\convenience_test.cpp" />
</ItemGroup>
<ItemGroup>
+ <ProjectReference Include="..\exec_monitor_dll\exec_monitor_dll.vcxproj">
+ <Project>{0ea788ca-fa52-4290-a4d0-f616390b203b}</Project>
+ </ProjectReference>
<ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
<Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
diff --git a/libs/filesystem/v3/test/msvc10/deprecated_test/deprecated_test.vcxproj b/libs/filesystem/test/msvc10/deprecated_test/deprecated_test.vcxproj
index c16b17707a..efde5a7af3 100644
--- a/libs/filesystem/v3/test/msvc10/deprecated_test/deprecated_test.vcxproj
+++ b/libs/filesystem/test/msvc10/deprecated_test/deprecated_test.vcxproj
@@ -92,6 +92,9 @@
<ClCompile Include="..\..\deprecated_test.cpp" />
</ItemGroup>
<ItemGroup>
+ <ProjectReference Include="..\exec_monitor_dll\exec_monitor_dll.vcxproj">
+ <Project>{0ea788ca-fa52-4290-a4d0-f616390b203b}</Project>
+ </ProjectReference>
<ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
<Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
diff --git a/libs/filesystem/test/msvc10/exec_monitor_dll/exec_monitor_dll.vcxproj b/libs/filesystem/test/msvc10/exec_monitor_dll/exec_monitor_dll.vcxproj
new file mode 100644
index 0000000000..301f5a4a6a
--- /dev/null
+++ b/libs/filesystem/test/msvc10/exec_monitor_dll/exec_monitor_dll.vcxproj
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{0EA788CA-FA52-4290-A4D0-F616390B203B}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>exec_monitor_dll</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="..\common.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;EXEC_MONITOR_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;EXEC_MONITOR_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\..\test\src\cpp_main.cpp" />
+ <ClCompile Include="..\..\..\..\test\src\debug.cpp" />
+ <ClCompile Include="..\..\..\..\test\src\execution_monitor.cpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/libs/filesystem/test/msvc10/exec_monitor_lib/exec_monitor_lib.vcxproj b/libs/filesystem/test/msvc10/exec_monitor_lib/exec_monitor_lib.vcxproj
new file mode 100644
index 0000000000..84190d5542
--- /dev/null
+++ b/libs/filesystem/test/msvc10/exec_monitor_lib/exec_monitor_lib.vcxproj
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\..\test\src\cpp_main.cpp" />
+ <ClCompile Include="..\..\..\..\test\src\debug.cpp" />
+ <ClCompile Include="..\..\..\..\test\src\execution_monitor.cpp" />
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{272DFC15-6292-49DF-B457-6784A183EAC3}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>exec_monitor_lib</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup />
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>BOOST_ALL_NO_LIB;BOOST_ALL_STATIC_LINK;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>../../../../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>BOOST_ALL_NO_LIB;BOOST_ALL_STATIC_LINK;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>../../../../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/libs/filesystem/v3/test/msvc10/file_status/file_status.vcxproj b/libs/filesystem/test/msvc10/file_status/file_status.vcxproj
index dc8adc23dd..3f9956ed9d 100644
--- a/libs/filesystem/v3/test/msvc10/file_status/file_status.vcxproj
+++ b/libs/filesystem/test/msvc10/file_status/file_status.vcxproj
@@ -87,6 +87,9 @@
<ClCompile Include="..\..\..\example\file_status.cpp" />
</ItemGroup>
<ItemGroup>
+ <ProjectReference Include="..\exec_monitor_dll\exec_monitor_dll.vcxproj">
+ <Project>{0ea788ca-fa52-4290-a4d0-f616390b203b}</Project>
+ </ProjectReference>
<ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
<Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
</ProjectReference>
diff --git a/libs/filesystem/v3/test/msvc10/filesystem-v3.sln b/libs/filesystem/test/msvc10/filesystem-v3.sln
index 7f92726173..98af77c571 100644
--- a/libs/filesystem/v3/test/msvc10/filesystem-v3.sln
+++ b/libs/filesystem/test/msvc10/filesystem-v3.sln
@@ -2,12 +2,18 @@
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual C++ Express 2010
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "path_unit_test", "path_unit_test\path_unit_test.vcxproj", "{3C77F610-2E31-4087-9DF2-7CD45198A02D}"
+ ProjectSection(ProjectDependencies) = postProject
+ {0EA788CA-FA52-4290-A4D0-F616390B203B} = {0EA788CA-FA52-4290-A4D0-F616390B203B}
+ EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "operations_unit_test", "operations_unit_test\operations_unit_test.vcxproj", "{5DAF595A-4640-4F86-8A5F-E54E3E4CE7D0}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "operations_test", "operations_test\operations_test.vcxproj", "{8BB7E604-46EF-42BE-ABB5-D7044B3E8A40}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "path_test", "path_test\path_test.vcxproj", "{F3D230C4-9185-4C2B-AB0E-0F0D28D8268C}"
+ ProjectSection(ProjectDependencies) = postProject
+ {0EA788CA-FA52-4290-A4D0-F616390B203B} = {0EA788CA-FA52-4290-A4D0-F616390B203B}
+ EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "system_dll", "system_dll\system_dll.vcxproj", "{F94CCADD-A90B-480C-A304-C19D015D36B1}"
EndProject
@@ -28,6 +34,9 @@ EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut4", "tut4\tut4.vcxproj", "{256EA89A-E073-4CE8-B675-BE2FBC6B2691}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "windows_attributes", "windows_attributes\windows_attributes.vcxproj", "{FC5C770F-3017-4021-8DAF-C5DCA3FDF005}"
+ ProjectSection(ProjectDependencies) = postProject
+ {0EA788CA-FA52-4290-A4D0-F616390B203B} = {0EA788CA-FA52-4290-A4D0-F616390B203B}
+ EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut5", "tut5\tut5.vcxproj", "{5C9B3380-3C6E-45CC-986A-16D245E27E58}"
ProjectSection(ProjectDependencies) = postProject
@@ -81,6 +90,28 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "symlinked_cpp", "symlinked_
{FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
EndProjectSection
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "system_lib", "system_lib\system_lib.vcxproj", "{3640605D-6F82-493D-879F-8F30762DA554}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "filesystem_lib", "filesystem_lib\filesystem_lib.vcxproj", "{2C1770A4-4AC3-4102-9D36-E652DBB686D8}"
+ ProjectSection(ProjectDependencies) = postProject
+ {3640605D-6F82-493D-879F-8F30762DA554} = {3640605D-6F82-493D-879F-8F30762DA554}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "path_test_static", "path_test_static\path_test_static.vcxproj", "{3B3010C5-D6D7-4320-A992-4EA61F256279}"
+ ProjectSection(ProjectDependencies) = postProject
+ {272DFC15-6292-49DF-B457-6784A183EAC3} = {272DFC15-6292-49DF-B457-6784A183EAC3}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "exec_monitor_dll", "exec_monitor_dll\exec_monitor_dll.vcxproj", "{0EA788CA-FA52-4290-A4D0-F616390B203B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "exec_monitor_lib", "exec_monitor_lib\exec_monitor_lib.vcxproj", "{272DFC15-6292-49DF-B457-6784A183EAC3}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "macro_default_test", "macro_default_test\macro_default_test.vcxproj", "{36E2032D-F9E6-4FBA-9630-3D4AC518DC6C}"
+ ProjectSection(ProjectDependencies) = postProject
+ {3640605D-6F82-493D-879F-8F30762DA554} = {3640605D-6F82-493D-879F-8F30762DA554}
+ {2C1770A4-4AC3-4102-9D36-E652DBB686D8} = {2C1770A4-4AC3-4102-9D36-E652DBB686D8}
+ EndProjectSection
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
@@ -175,14 +206,30 @@ Global
{3667C35E-78D5-43D4-AAC2-349145E4341D}.Debug|Win32.Build.0 = Debug|Win32
{3667C35E-78D5-43D4-AAC2-349145E4341D}.Release|Win32.ActiveCfg = Release|Win32
{3667C35E-78D5-43D4-AAC2-349145E4341D}.Release|Win32.Build.0 = Release|Win32
- {20E2805D-9634-46CE-B979-21CCBBD16EA3}.Debug|Win32.ActiveCfg = Debug|Win32
- {20E2805D-9634-46CE-B979-21CCBBD16EA3}.Debug|Win32.Build.0 = Debug|Win32
- {20E2805D-9634-46CE-B979-21CCBBD16EA3}.Release|Win32.ActiveCfg = Release|Win32
- {20E2805D-9634-46CE-B979-21CCBBD16EA3}.Release|Win32.Build.0 = Release|Win32
- {E37919AE-1A38-4E61-8E5E-FE4F981C6BFD}.Debug|Win32.ActiveCfg = Debug|Win32
- {E37919AE-1A38-4E61-8E5E-FE4F981C6BFD}.Debug|Win32.Build.0 = Debug|Win32
- {E37919AE-1A38-4E61-8E5E-FE4F981C6BFD}.Release|Win32.ActiveCfg = Release|Win32
- {E37919AE-1A38-4E61-8E5E-FE4F981C6BFD}.Release|Win32.Build.0 = Release|Win32
+ {3640605D-6F82-493D-879F-8F30762DA554}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3640605D-6F82-493D-879F-8F30762DA554}.Debug|Win32.Build.0 = Debug|Win32
+ {3640605D-6F82-493D-879F-8F30762DA554}.Release|Win32.ActiveCfg = Release|Win32
+ {3640605D-6F82-493D-879F-8F30762DA554}.Release|Win32.Build.0 = Release|Win32
+ {2C1770A4-4AC3-4102-9D36-E652DBB686D8}.Debug|Win32.ActiveCfg = Debug|Win32
+ {2C1770A4-4AC3-4102-9D36-E652DBB686D8}.Debug|Win32.Build.0 = Debug|Win32
+ {2C1770A4-4AC3-4102-9D36-E652DBB686D8}.Release|Win32.ActiveCfg = Release|Win32
+ {2C1770A4-4AC3-4102-9D36-E652DBB686D8}.Release|Win32.Build.0 = Release|Win32
+ {3B3010C5-D6D7-4320-A992-4EA61F256279}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3B3010C5-D6D7-4320-A992-4EA61F256279}.Debug|Win32.Build.0 = Debug|Win32
+ {3B3010C5-D6D7-4320-A992-4EA61F256279}.Release|Win32.ActiveCfg = Release|Win32
+ {3B3010C5-D6D7-4320-A992-4EA61F256279}.Release|Win32.Build.0 = Release|Win32
+ {0EA788CA-FA52-4290-A4D0-F616390B203B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0EA788CA-FA52-4290-A4D0-F616390B203B}.Debug|Win32.Build.0 = Debug|Win32
+ {0EA788CA-FA52-4290-A4D0-F616390B203B}.Release|Win32.ActiveCfg = Release|Win32
+ {0EA788CA-FA52-4290-A4D0-F616390B203B}.Release|Win32.Build.0 = Release|Win32
+ {272DFC15-6292-49DF-B457-6784A183EAC3}.Debug|Win32.ActiveCfg = Debug|Win32
+ {272DFC15-6292-49DF-B457-6784A183EAC3}.Debug|Win32.Build.0 = Debug|Win32
+ {272DFC15-6292-49DF-B457-6784A183EAC3}.Release|Win32.ActiveCfg = Release|Win32
+ {272DFC15-6292-49DF-B457-6784A183EAC3}.Release|Win32.Build.0 = Release|Win32
+ {36E2032D-F9E6-4FBA-9630-3D4AC518DC6C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {36E2032D-F9E6-4FBA-9630-3D4AC518DC6C}.Debug|Win32.Build.0 = Debug|Win32
+ {36E2032D-F9E6-4FBA-9630-3D4AC518DC6C}.Release|Win32.ActiveCfg = Release|Win32
+ {36E2032D-F9E6-4FBA-9630-3D4AC518DC6C}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/libs/filesystem/v3/test/msvc10/filesystem_dll/filesystem_dll.vcxproj b/libs/filesystem/test/msvc10/filesystem_dll/filesystem_dll.vcxproj
index 64d97fc53b..64d97fc53b 100644
--- a/libs/filesystem/v3/test/msvc10/filesystem_dll/filesystem_dll.vcxproj
+++ b/libs/filesystem/test/msvc10/filesystem_dll/filesystem_dll.vcxproj
diff --git a/libs/filesystem/test/msvc10/filesystem_lib/filesystem_lib.vcxproj b/libs/filesystem/test/msvc10/filesystem_lib/filesystem_lib.vcxproj
new file mode 100644
index 0000000000..b2e54975fd
--- /dev/null
+++ b/libs/filesystem/test/msvc10/filesystem_lib/filesystem_lib.vcxproj
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\src\codecvt_error_category.cpp" />
+ <ClCompile Include="..\..\..\src\operations.cpp" />
+ <ClCompile Include="..\..\..\src\path.cpp" />
+ <ClCompile Include="..\..\..\src\path_traits.cpp" />
+ <ClCompile Include="..\..\..\src\portability.cpp" />
+ <ClCompile Include="..\..\..\src\unique_path.cpp" />
+ <ClCompile Include="..\..\..\src\utf8_codecvt_facet.cpp" />
+ <ClCompile Include="..\..\..\src\windows_file_codecvt.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\system_lib\system_lib.vcxproj">
+ <Project>{3640605d-6f82-493d-879f-8f30762da554}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{2C1770A4-4AC3-4102-9D36-E652DBB686D8}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>filesystem_lib</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup />
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>BOOST_ALL_NO_LIB;BOOST_ALL_STATIC_LINK;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>../../../../..</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>BOOST_ALL_NO_LIB;BOOST_ALL_STATIC_LINK;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>../../../../..</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/libs/filesystem/v3/test/msvc10/fstream_test/fstream_test.vcxproj b/libs/filesystem/test/msvc10/fstream_test/fstream_test.vcxproj
index 90ed1fb262..03f4098250 100644
--- a/libs/filesystem/v3/test/msvc10/fstream_test/fstream_test.vcxproj
+++ b/libs/filesystem/test/msvc10/fstream_test/fstream_test.vcxproj
@@ -61,7 +61,7 @@
</Link>
<PostBuildEvent>
<Message>Executing test $(TargetName).exe...</Message>
- <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ <Command>"$(TargetDir)\$(TargetName).exe" -no-cleanup</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -85,7 +85,7 @@
</Link>
<PostBuildEvent>
<Message>Executing test $(TargetName).exe...</Message>
- <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ <Command>"$(TargetDir)\$(TargetName).exe" -no-cleanup</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
diff --git a/libs/filesystem/v3/test/msvc10/locale_info/locale_info.vcxproj b/libs/filesystem/test/msvc10/locale_info/locale_info.vcxproj
index e2ce0eb6bc..e2ce0eb6bc 100644
--- a/libs/filesystem/v3/test/msvc10/locale_info/locale_info.vcxproj
+++ b/libs/filesystem/test/msvc10/locale_info/locale_info.vcxproj
diff --git a/libs/filesystem/v3/test/msvc10/long_path_test/long_path_test.vcxproj b/libs/filesystem/test/msvc10/long_path_test/long_path_test.vcxproj
index c8cc1910bb..db48580646 100644
--- a/libs/filesystem/v3/test/msvc10/long_path_test/long_path_test.vcxproj
+++ b/libs/filesystem/test/msvc10/long_path_test/long_path_test.vcxproj
@@ -87,6 +87,9 @@
<ClCompile Include="..\..\long_path_test.cpp" />
</ItemGroup>
<ItemGroup>
+ <ProjectReference Include="..\exec_monitor_dll\exec_monitor_dll.vcxproj">
+ <Project>{0ea788ca-fa52-4290-a4d0-f616390b203b}</Project>
+ </ProjectReference>
<ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
<Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
</ProjectReference>
diff --git a/libs/filesystem/test/msvc10/macro_default_test/macro_default_test.vcxproj b/libs/filesystem/test/msvc10/macro_default_test/macro_default_test.vcxproj
new file mode 100644
index 0000000000..241bc78d8f
--- /dev/null
+++ b/libs/filesystem/test/msvc10/macro_default_test/macro_default_test.vcxproj
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{36E2032D-F9E6-4FBA-9630-3D4AC518DC6C}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>macro_default_test</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>../../../../..</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\macro_default_test.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\filesystem_lib\filesystem_lib.vcxproj">
+ <Project>{2c1770a4-4ac3-4102-9d36-e652dbb686d8}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\system_lib\system_lib.vcxproj">
+ <Project>{3640605d-6f82-493d-879f-8f30762da554}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/libs/filesystem/v3/test/msvc10/operations_test/operations_test.vcxproj b/libs/filesystem/test/msvc10/operations_test/operations_test.vcxproj
index b7bd47aea7..11e6e9ca16 100644
--- a/libs/filesystem/v3/test/msvc10/operations_test/operations_test.vcxproj
+++ b/libs/filesystem/test/msvc10/operations_test/operations_test.vcxproj
@@ -61,7 +61,7 @@
</Link>
<PostBuildEvent>
<Message>Executing test $(TargetName).exe...</Message>
- <Command>"$(TargetDir)\$(TargetName).exe" -x</Command>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -84,13 +84,16 @@
</Link>
<PostBuildEvent>
<Message>Executing test $(TargetName).exe...</Message>
- <Command>"$(TargetDir)\$(TargetName).exe" -x</Command>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\operations_test.cpp" />
</ItemGroup>
<ItemGroup>
+ <ProjectReference Include="..\exec_monitor_dll\exec_monitor_dll.vcxproj">
+ <Project>{0ea788ca-fa52-4290-a4d0-f616390b203b}</Project>
+ </ProjectReference>
<ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
<Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
diff --git a/libs/filesystem/v3/test/msvc10/operations_unit_test/operations_unit_test.vcxproj b/libs/filesystem/test/msvc10/operations_unit_test/operations_unit_test.vcxproj
index 2bc35c34d0..c4b7045bec 100644
--- a/libs/filesystem/v3/test/msvc10/operations_unit_test/operations_unit_test.vcxproj
+++ b/libs/filesystem/test/msvc10/operations_unit_test/operations_unit_test.vcxproj
@@ -94,6 +94,9 @@
<ClCompile Include="..\..\operations_unit_test.cpp" />
</ItemGroup>
<ItemGroup>
+ <ProjectReference Include="..\exec_monitor_dll\exec_monitor_dll.vcxproj">
+ <Project>{0ea788ca-fa52-4290-a4d0-f616390b203b}</Project>
+ </ProjectReference>
<ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
<Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
diff --git a/libs/filesystem/v3/test/msvc10/path_test/path_test.vcxproj b/libs/filesystem/test/msvc10/path_test/path_test.vcxproj
index 9f2698402e..6942a5609d 100644
--- a/libs/filesystem/v3/test/msvc10/path_test/path_test.vcxproj
+++ b/libs/filesystem/test/msvc10/path_test/path_test.vcxproj
@@ -92,6 +92,9 @@
<ClCompile Include="..\..\path_test.cpp" />
</ItemGroup>
<ItemGroup>
+ <ProjectReference Include="..\exec_monitor_dll\exec_monitor_dll.vcxproj">
+ <Project>{0ea788ca-fa52-4290-a4d0-f616390b203b}</Project>
+ </ProjectReference>
<ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
<Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
diff --git a/libs/filesystem/test/msvc10/path_test_static/path_test_static.vcxproj b/libs/filesystem/test/msvc10/path_test_static/path_test_static.vcxproj
new file mode 100644
index 0000000000..8aa26c63b2
--- /dev/null
+++ b/libs/filesystem/test/msvc10/path_test_static/path_test_static.vcxproj
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{3B3010C5-D6D7-4320-A992-4EA61F256279}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>path_test_static</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>BOOST_ALL_NO_LIB;BOOST_ALL_STATIC_LINK;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>../../../../..</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ <PostBuildEvent>
+ <Message>Executing test $(TargetName).exe...</Message>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>BOOST_ALL_NO_LIB;BOOST_ALL_STATIC_LINK;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>../../../../..</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ <PostBuildEvent>
+ <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+ </PostBuildEvent>
+ <PostBuildEvent>
+ <Message>Executing test $(TargetName).exe...</Message>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\path_test.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\exec_monitor_lib\exec_monitor_lib.vcxproj">
+ <Project>{272dfc15-6292-49df-b457-6784a183eac3}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\filesystem_lib\filesystem_lib.vcxproj">
+ <Project>{2c1770a4-4ac3-4102-9d36-e652dbb686d8}</Project>
+ </ProjectReference>
+ <ProjectReference Include="..\system_lib\system_lib.vcxproj">
+ <Project>{3640605d-6f82-493d-879f-8f30762da554}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/libs/filesystem/v3/test/msvc10/path_unit_test/path_unit_test.vcxproj b/libs/filesystem/test/msvc10/path_unit_test/path_unit_test.vcxproj
index c1203bbd85..d7127c9919 100644
--- a/libs/filesystem/v3/test/msvc10/path_unit_test/path_unit_test.vcxproj
+++ b/libs/filesystem/test/msvc10/path_unit_test/path_unit_test.vcxproj
@@ -92,6 +92,9 @@
<ClCompile Include="..\..\path_unit_test.cpp" />
</ItemGroup>
<ItemGroup>
+ <ProjectReference Include="..\exec_monitor_dll\exec_monitor_dll.vcxproj">
+ <Project>{0ea788ca-fa52-4290-a4d0-f616390b203b}</Project>
+ </ProjectReference>
<ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
<Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
diff --git a/libs/filesystem/v3/test/msvc10/stems/stems.vcxproj b/libs/filesystem/test/msvc10/stems/stems.vcxproj
index 6ed20eebdd..6ed20eebdd 100644
--- a/libs/filesystem/v3/test/msvc10/stems/stems.vcxproj
+++ b/libs/filesystem/test/msvc10/stems/stems.vcxproj
diff --git a/libs/filesystem/v3/test/msvc10/system_dll/system_dll.vcxproj b/libs/filesystem/test/msvc10/system_dll/system_dll.vcxproj
index dd8a490207..a88c3fe933 100644
--- a/libs/filesystem/v3/test/msvc10/system_dll/system_dll.vcxproj
+++ b/libs/filesystem/test/msvc10/system_dll/system_dll.vcxproj
@@ -10,6 +10,9 @@
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\..\system\src\error_code.cpp" />
+ </ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{F94CCADD-A90B-480C-A304-C19D015D36B1}</ProjectGuid>
<RootNamespace>system_dll</RootNamespace>
@@ -49,7 +52,6 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>BOOST_ALL_NO_LIB;BOOST_ALL_DYN_LINK;WIN32;_DEBUG;_WINDOWS;_USRDLL;SYSTEM_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<ExceptionHandling>Async</ExceptionHandling>
@@ -70,7 +72,6 @@
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<IntrinsicFunctions>true</IntrinsicFunctions>
- <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>BOOST_ALL_NO_LIB;BOOST_ALL_DYN_LINK;WIN32;NDEBUG;_WINDOWS;_USRDLL;SYSTEM_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ExceptionHandling>Async</ExceptionHandling>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@@ -88,9 +89,6 @@
<TargetMachine>MachineX86</TargetMachine>
</Link>
</ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\..\..\..\system\src\error_code.cpp" />
- </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
diff --git a/libs/filesystem/test/msvc10/system_lib/system_lib.vcxproj b/libs/filesystem/test/msvc10/system_lib/system_lib.vcxproj
new file mode 100644
index 0000000000..a69396e97f
--- /dev/null
+++ b/libs/filesystem/test/msvc10/system_lib/system_lib.vcxproj
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{3640605D-6F82-493D-879F-8F30762DA554}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>system_lib</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup />
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>BOOST_ALL_NO_LIB;BOOST_ALL_STATIC_LINK;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>../../../../..</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>BOOST_ALL_NO_LIB;BOOST_ALL_STATIC_LINK;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>../../../../..</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\..\system\src\error_code.cpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/libs/filesystem/v3/test/msvc10/tut1/tut1.vcxproj b/libs/filesystem/test/msvc10/tut1/tut1.vcxproj
index 4c2db0a437..4c2db0a437 100644
--- a/libs/filesystem/v3/test/msvc10/tut1/tut1.vcxproj
+++ b/libs/filesystem/test/msvc10/tut1/tut1.vcxproj
diff --git a/libs/filesystem/v3/test/msvc10/tut2/tut2.vcxproj b/libs/filesystem/test/msvc10/tut2/tut2.vcxproj
index 4e550c9e0c..4e550c9e0c 100644
--- a/libs/filesystem/v3/test/msvc10/tut2/tut2.vcxproj
+++ b/libs/filesystem/test/msvc10/tut2/tut2.vcxproj
diff --git a/libs/filesystem/v3/test/msvc10/tut3/tut3.vcxproj b/libs/filesystem/test/msvc10/tut3/tut3.vcxproj
index ddce9f8ca9..ddce9f8ca9 100644
--- a/libs/filesystem/v3/test/msvc10/tut3/tut3.vcxproj
+++ b/libs/filesystem/test/msvc10/tut3/tut3.vcxproj
diff --git a/libs/filesystem/v3/test/msvc10/tut4/tut4.vcxproj b/libs/filesystem/test/msvc10/tut4/tut4.vcxproj
index 9f838c2877..9f838c2877 100644
--- a/libs/filesystem/v3/test/msvc10/tut4/tut4.vcxproj
+++ b/libs/filesystem/test/msvc10/tut4/tut4.vcxproj
diff --git a/libs/filesystem/v3/test/msvc10/tut5/tut5.vcxproj b/libs/filesystem/test/msvc10/tut5/tut5.vcxproj
index bab4052952..bab4052952 100644
--- a/libs/filesystem/v3/test/msvc10/tut5/tut5.vcxproj
+++ b/libs/filesystem/test/msvc10/tut5/tut5.vcxproj
diff --git a/libs/filesystem/v3/test/msvc10/tut6a/tut6a.vcxproj b/libs/filesystem/test/msvc10/tut6a/tut6a.vcxproj
index 2794be5dbf..2794be5dbf 100644
--- a/libs/filesystem/v3/test/msvc10/tut6a/tut6a.vcxproj
+++ b/libs/filesystem/test/msvc10/tut6a/tut6a.vcxproj
diff --git a/libs/filesystem/v3/test/msvc10/tut6b/tut6b.vcxproj b/libs/filesystem/test/msvc10/tut6b/tut6b.vcxproj
index b2be1370a9..b2be1370a9 100644
--- a/libs/filesystem/v3/test/msvc10/tut6b/tut6b.vcxproj
+++ b/libs/filesystem/test/msvc10/tut6b/tut6b.vcxproj
diff --git a/libs/filesystem/v3/test/msvc10/tut6c/tut6c.vcxproj b/libs/filesystem/test/msvc10/tut6c/tut6c.vcxproj
index e06f948fbb..e06f948fbb 100644
--- a/libs/filesystem/v3/test/msvc10/tut6c/tut6c.vcxproj
+++ b/libs/filesystem/test/msvc10/tut6c/tut6c.vcxproj
diff --git a/libs/filesystem/v3/test/msvc10/windows_attributes/windows_attributes.vcxproj b/libs/filesystem/test/msvc10/windows_attributes/windows_attributes.vcxproj
index cd0e68e88a..9be3bcfb79 100644
--- a/libs/filesystem/v3/test/msvc10/windows_attributes/windows_attributes.vcxproj
+++ b/libs/filesystem/test/msvc10/windows_attributes/windows_attributes.vcxproj
@@ -79,6 +79,9 @@
<ClCompile Include="..\..\windows_attributes.cpp" />
</ItemGroup>
<ItemGroup>
+ <ProjectReference Include="..\exec_monitor_dll\exec_monitor_dll.vcxproj">
+ <Project>{0ea788ca-fa52-4290-a4d0-f616390b203b}</Project>
+ </ProjectReference>
<ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj">
<Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project>
</ProjectReference>
diff --git a/libs/filesystem/v3/test/operations_test.cpp b/libs/filesystem/test/operations_test.cpp
index 610f27fca1..dccd765c3a 100644
--- a/libs/filesystem/v3/test/operations_test.cpp
+++ b/libs/filesystem/test/operations_test.cpp
@@ -7,14 +7,6 @@
// Library home page: http://www.boost.org/libs/filesystem
-#define BOOST_FILESYSTEM_VERSION 3
-
-#include <boost/config.hpp>
-
-# if defined( BOOST_NO_STD_WSTRING )
-# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
-# endif
-
#include <boost/config/warning_disable.hpp>
// See deprecated_test for tests of deprecated features
@@ -26,12 +18,22 @@
#endif
#include <boost/filesystem/operations.hpp>
-#include <boost/cerrno.hpp>
-namespace fs = boost::filesystem;
+#include <boost/config.hpp>
+# if defined( BOOST_NO_STD_WSTRING )
+# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
+#include <boost/cerrno.hpp>
#include <boost/detail/lightweight_test.hpp>
-#include <boost/detail/lightweight_main.hpp>
+#ifndef BOOST_LIGHTWEIGHT_MAIN
+# include <boost/test/prg_exec_monitor.hpp>
+#else
+# include <boost/detail/lightweight_main.hpp>
+#endif
+
+namespace fs = boost::filesystem;
using boost::system::error_code;
using boost::system::system_category;
using boost::system::system_error;
@@ -113,7 +115,7 @@ namespace
unsigned short language_id; // 0 except for Windows
- const char* temp_dir_name = "v3_operations_test";
+ const fs::path temp_dir(fs::unique_path("operations-test-%%%%-%%%%-%%%%-%%%%"));
void create_file(const fs::path & ph, const std::string & contents = std::string())
{
@@ -574,7 +576,8 @@ namespace
bool found(false);
do
{
- if (it->path().filename() == temp_dir_name) found = true;
+ if (it->path().filename() == temp_dir.filename())
+ found = true;
} while (++it != fs::directory_iterator());
BOOST_TEST(found);
}
@@ -846,6 +849,21 @@ namespace
for (fs::directory_iterator itr(dir); itr != fs::directory_iterator(); ++itr)
if (itr->path().filename() == fs::path("permissions.txt"))
BOOST_TEST(itr->status().permissions() == fs::owner_all);
+
+ if (create_symlink_ok) // only if symlinks supported
+ {
+ BOOST_TEST(fs::status(p).permissions() == fs::owner_all);
+ fs::path p2(dir / "permissions-symlink.txt");
+ fs::create_symlink(p, p2);
+ cout << std::oct;
+ cout << " status(p).permissions() " << fs::status(p).permissions() << endl;
+ cout << " status(p2).permissions() " << fs::status(p).permissions() << endl;
+ fs::permissions(p2, fs::add_perms | fs::others_read);
+ cout << " status(p).permissions(): " << fs::status(p).permissions() << endl;
+ cout << " status(p2).permissions(): " << fs::status(p2).permissions() << endl;
+ cout << std::dec;
+ }
+
}
else // Windows
{
@@ -1071,12 +1089,22 @@ namespace
{
cout << "create_directories_tests..." << endl;
- fs::path p = dir / "level1" / "level2";
+ BOOST_TEST(!fs::create_directories("/"));
+
+ fs::path p = dir / "level1" / "level2" / "level3";
BOOST_TEST(!fs::exists(p));
BOOST_TEST(fs::create_directories(p));
BOOST_TEST(fs::exists(p));
BOOST_TEST(fs::is_directory(p));
+
+ if (fs::exists("/permissions_test"))
+ {
+ error_code ec;
+ BOOST_TEST(!fs::create_directories("/permissions_test", ec));
+ BOOST_TEST(!fs::create_directories("/permissions_test/another_directory", ec));
+ BOOST_TEST(ec);
+ }
}
// resize_file_tests ---------------------------------------------------------------//
@@ -1589,7 +1617,7 @@ namespace
// Windows only tests
if (platform == "Windows")
{
- cout << "Window specific tests..." << endl;
+ cout << "Windows specific tests..." << endl;
if (!skip_long_windows_tests)
{
cout << " (may take several seconds)"<< endl;
@@ -1914,7 +1942,7 @@ int cpp_main(int argc, char* argv[])
# endif
cout << "API is " << platform << endl;
- dir = fs::initial_path() / temp_dir_name;
+ dir = fs::initial_path() / temp_dir;
if (fs::exists(dir))
{
@@ -1930,7 +1958,6 @@ int cpp_main(int argc, char* argv[])
initial_tests();
predicate_and_status_tests();
exception_tests();
- platform_specific_tests();
create_directory_tests();
current_directory_tests();
space_tests();
@@ -1983,8 +2010,10 @@ int cpp_main(int argc, char* argv[])
if (create_symlink_ok) // only if symlinks supported
remove_symlink_tests();
write_time_tests(dir);
-
temp_directory_path_tests();
+
+ platform_specific_tests(); // do these last since they take a lot of time on Windows,
+ // and that's a pain during manual testing
cout << "testing complete" << endl;
diff --git a/libs/filesystem/v3/test/operations_unit_test.cpp b/libs/filesystem/test/operations_unit_test.cpp
index b592fd93ed..8d7ef857c0 100644
--- a/libs/filesystem/v3/test/operations_unit_test.cpp
+++ b/libs/filesystem/test/operations_unit_test.cpp
@@ -13,13 +13,6 @@
// ------------------------------------------------------------------------------------//
-#define BOOST_FILESYSTEM_VERSION 3
-
-#include <boost/config.hpp>
-
-# if defined( BOOST_NO_STD_WSTRING )
-# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
-# endif
#include <boost/config/warning_disable.hpp>
@@ -32,9 +25,21 @@
#endif
#include <boost/filesystem.hpp> // make sure filesystem.hpp works
+
+#include <boost/config.hpp>
+# if defined( BOOST_NO_STD_WSTRING )
+# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
#include <boost/system/error_code.hpp>
#include <boost/detail/lightweight_test.hpp>
-#include <boost/detail/lightweight_main.hpp>
+
+#ifndef BOOST_LIGHTWEIGHT_MAIN
+# include <boost/test/prg_exec_monitor.hpp>
+#else
+# include <boost/detail/lightweight_main.hpp>
+#endif
+
#include <iostream>
using namespace boost::filesystem;
diff --git a/libs/filesystem/v3/test/path_test.cpp b/libs/filesystem/test/path_test.cpp
index c3e64a73c3..0b2c80c13e 100644
--- a/libs/filesystem/v3/test/path_test.cpp
+++ b/libs/filesystem/test/path_test.cpp
@@ -39,14 +39,6 @@
// //
//--------------------------------------------------------------------------------------//
-#define BOOST_FILESYSTEM_VERSION 3
-
-#include <boost/config.hpp>
-
-# if defined( BOOST_NO_STD_WSTRING )
-# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
-# endif
-
#include <boost/config/warning_disable.hpp>
// See deprecated_test for tests of deprecated features
@@ -58,6 +50,12 @@
#endif
#include <boost/filesystem/operations.hpp>
+
+#include <boost/config.hpp>
+# if defined( BOOST_NO_STD_WSTRING )
+# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
#include <boost/utility.hpp>
#include <iostream>
#include <sstream>
@@ -65,13 +63,17 @@
#include <vector>
#include <cstring>
#include <cassert>
+#include <boost/detail/lightweight_test.hpp>
+
+#ifndef BOOST_LIGHTWEIGHT_MAIN
+# include <boost/test/prg_exec_monitor.hpp>
+#else
+# include <boost/detail/lightweight_main.hpp>
+#endif
namespace fs = boost::filesystem;
using boost::filesystem::path;
-#include <boost/detail/lightweight_test.hpp>
-#include <boost/detail/lightweight_main.hpp>
-
#ifdef BOOST_WINDOWS_API
# define BOOST_DIR_SEP "\\"
#else
@@ -211,8 +213,11 @@ namespace
itr = itr_ck.begin();
PATH_TEST_EQ(itr->string(), "/");
PATH_TEST_EQ(*++itr, "foo");
+ BOOST_TEST(itr != itr_ck.end());
PATH_TEST_EQ(*++itr, "bar");
+ BOOST_TEST(itr != itr_ck.end());
PATH_TEST_EQ(*++itr, ".");
+ BOOST_TEST(itr != itr_ck.end()); // verify the . isn't also seen as end()
BOOST_TEST(++itr == itr_ck.end());
PATH_TEST_EQ(*--itr, ".");
PATH_TEST_EQ(*--itr, "bar");
@@ -226,12 +231,27 @@ namespace
PATH_TEST_EQ(*++itr, "f");
PATH_TEST_EQ(*++itr, "b");
PATH_TEST_EQ(*++itr, ".");
+ BOOST_TEST(itr != itr_ck.end()); // verify the . isn't also seen as end()
BOOST_TEST(++itr == itr_ck.end());
PATH_TEST_EQ(*--itr, ".");
PATH_TEST_EQ(*--itr, "b");
PATH_TEST_EQ(*--itr, "f");
PATH_TEST_EQ(*--itr, "/");
+ // POSIX says treat "a/b/" as "a/b/."
+ // Although similar to the prior test case, this failed the ". isn't end" test due to
+ // a bug while the prior case did not fail.
+ itr_ck = "a/b/";
+ itr = itr_ck.begin();
+ PATH_TEST_EQ(*itr, "a");
+ PATH_TEST_EQ(*++itr, "b");
+ PATH_TEST_EQ(*++itr, ".");
+ BOOST_TEST(itr != itr_ck.end()); // verify the . isn't also seen as end()
+ BOOST_TEST(++itr == itr_ck.end());
+ PATH_TEST_EQ(*--itr, ".");
+ PATH_TEST_EQ(*--itr, "b");
+ PATH_TEST_EQ(*--itr, "a");
+
itr_ck = "//net";
itr = itr_ck.begin();
// two leading slashes are permitted by POSIX (as implementation defined),
@@ -577,10 +597,13 @@ namespace
BOOST_TEST(!(as < acs));
BOOST_TEST(!(acs < as));
- // reality check character set is as expected
+ // character set reality check before lexicographical tests
BOOST_TEST(std::string("a.b") < std::string("a/b"));
// verify compare is actually lexicographical
BOOST_TEST(path("a/b") < path("a.b"));
+ BOOST_TEST(path("a/b") == path("a///b"));
+ BOOST_TEST(path("a/b/") == path("a/b/."));
+ BOOST_TEST(path("a/b") != path("a/b/"));
// make sure the derivative operators also work
@@ -1544,6 +1567,20 @@ namespace
append_test_aux("foo", "bar", "foo/bar");
}
+ // ticket #6819
+ union
+ {
+ char a[1];
+ char b[3];
+ } u;
+
+ u.b[0] = 'a';
+ u.b[1] = 'b';
+ u.b[2] = '\0';
+
+ path p6819;
+ p6819 /= u.a;
+ BOOST_TEST_EQ(p6819, path("ab"));
}
// self_assign_and_append_tests ------------------------------------------------------//
@@ -1678,9 +1715,10 @@ namespace
std::cout << "replace_extension_tests..." << std::endl;
BOOST_TEST(path().replace_extension().empty());
- BOOST_TEST(path().replace_extension("a").empty());
- BOOST_TEST(path().replace_extension("a.") == ".");
- BOOST_TEST(path().replace_extension("a.txt") == ".txt");
+ BOOST_TEST(path().replace_extension("a") == ".a");
+ BOOST_TEST(path().replace_extension("a.") == ".a.");
+ BOOST_TEST(path().replace_extension(".a") == ".a");
+ BOOST_TEST(path().replace_extension("a.txt") == ".a.txt");
// see the rationale in html docs for explanation why this works:
BOOST_TEST(path().replace_extension(".txt") == ".txt");
@@ -1688,15 +1726,18 @@ namespace
BOOST_TEST(path("a.txt").replace_extension("") == "a");
BOOST_TEST(path("a.txt").replace_extension(".") == "a.");
BOOST_TEST(path("a.txt").replace_extension(".tex") == "a.tex");
- BOOST_TEST(path("a.txt").replace_extension("tex") == "a");
+ BOOST_TEST(path("a.txt").replace_extension("tex") == "a.tex");
BOOST_TEST(path("a.").replace_extension(".tex") == "a.tex");
- BOOST_TEST(path("a.").replace_extension("tex") == "a");
+ BOOST_TEST(path("a.").replace_extension("tex") == "a.tex");
BOOST_TEST(path("a").replace_extension(".txt") == "a.txt");
- BOOST_TEST(path("a").replace_extension("txt") == "a");
+ BOOST_TEST(path("a").replace_extension("txt") == "a.txt");
BOOST_TEST(path("a.b.txt").replace_extension(".tex") == "a.b.tex");
- BOOST_TEST(path("a.b.txt").replace_extension("tex") == "a.b");
+ BOOST_TEST(path("a.b.txt").replace_extension("tex") == "a.b.tex");
BOOST_TEST(path("a/b").replace_extension(".c") == "a/b.c");
PATH_TEST_EQ(path("a.txt/b").replace_extension(".c"), "a.txt/b.c"); // ticket 4702
+ BOOST_TEST(path("foo.txt").replace_extension("exe") == "foo.exe"); // ticket 5118
+ BOOST_TEST(path("foo.txt").replace_extension(".tar.bz2")
+ == "foo.tar.bz2"); // ticket 5118
}
// make_preferred_tests ------------------------------------------------------------//
@@ -1719,6 +1760,10 @@ namespace
} // unnamed namespace
+static boost::filesystem::path ticket_6737 = "FilePath"; // #6737 reported this crashed
+ // on VC++ debug mode build
+const boost::filesystem::path ticket_6690("test"); // #6690 another V++ static init crash
+
//--------------------------------------------------------------------------------------//
// //
// main //
diff --git a/libs/filesystem/v3/test/path_unit_test.cpp b/libs/filesystem/test/path_unit_test.cpp
index 0e2536be82..0ae4519c8e 100644
--- a/libs/filesystem/v3/test/path_unit_test.cpp
+++ b/libs/filesystem/test/path_unit_test.cpp
@@ -19,14 +19,6 @@
//
// ---------------------------------------------------------------------------------- //
-#define BOOST_FILESYSTEM_VERSION 3
-
-#include <boost/config.hpp>
-
-# if defined( BOOST_NO_STD_WSTRING )
-# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
-# endif
-
#include <boost/config/warning_disable.hpp>
// See deprecated_test for tests of deprecated features
@@ -38,10 +30,17 @@
#endif
#include <boost/filesystem/path.hpp>
+
#include <boost/filesystem/detail/utf8_codecvt_facet.hpp> // for imbue tests
#include "test_codecvt.hpp" // for codecvt arg tests
#include <boost/detail/lightweight_test.hpp>
-#include <boost/detail/lightweight_main.hpp>
+
+#ifndef BOOST_LIGHTWEIGHT_MAIN
+# include <boost/test/prg_exec_monitor.hpp>
+#else
+# include <boost/detail/lightweight_main.hpp>
+#endif
+
#include <boost/smart_ptr.hpp> // used constructor tests
#include <boost/functional/hash.hpp>
@@ -151,7 +150,6 @@ namespace
class Base {};
class Derived : public Base {};
- void fun(const boost::filesystem::path&) {}
void fun(const boost::shared_ptr< Base >&) {}
// test_constructors ---------------------------------------------------------------//
@@ -345,6 +343,73 @@ namespace
PATH_IS(x, BOOST_FS_FOO L"wstring");
}
+ // test_concats --------------------------------------------------------------------//
+
+ void test_concats()
+ {
+ std::cout << "testing concats..." << std::endl;
+
+ x = "/foo";
+ x += path(""); // empty path
+ PATH_IS(x, L"/foo");
+
+ x = "/foo";
+ x += path("/"); // slash path
+ PATH_IS(x, L"/foo/");
+
+ x = "/foo";
+ x += path("boo"); // slash path
+ PATH_IS(x, L"/fooboo");
+
+ x = "foo";
+ x += x; // self-append
+ PATH_IS(x, L"foofoo");
+
+ x = "foo-";
+ x += path("yet another path"); // another path
+ PATH_IS(x, L"foo-yet another path");
+
+ x = "foo-";
+ x.concat(l.begin(), l.end()); // iterator range char
+ PATH_IS(x, L"foo-string");
+
+ x = "foo-";
+ x.concat(wl.begin(), wl.end()); // iterator range wchar_t
+ PATH_IS(x, L"foo-wstring");
+
+ x = "foo-";
+ x += string("std::string"); // container char
+ PATH_IS(x, L"foo-std::string");
+
+ x = "foo-";
+ x += wstring(L"std::wstring"); // container wchar_t
+ PATH_IS(x, L"foo-std::wstring");
+
+ x = "foo-";
+ x += "array char"; // array char
+ PATH_IS(x, L"foo-array char");
+
+ x = "foo-";
+ x += L"array wchar"; // array wchar_t
+ PATH_IS(x, L"foo-array wchar");
+
+ x = "foo-";
+ x += s.c_str(); // const char* null terminated
+ PATH_IS(x, L"foo-string");
+
+ x = "foo-";
+ x += ws.c_str(); // const wchar_t* null terminated
+ PATH_IS(x, L"foo-wstring");
+
+ x = "foo-";
+ x += 'x'; // char
+ PATH_IS(x, L"foo-x");
+
+ x = "foo-";
+ x += L'x'; // wchar
+ PATH_IS(x, L"foo-x");
+ }
+
// test_observers ------------------------------------------------------------------//
void test_observers()
@@ -661,8 +726,8 @@ namespace
std::cout << " testing with the imbued locale ..." << std::endl;
path p2("\xE2\x9C\xA2");
- CHECK(p2 == L"\u2722");
- CHECK(p2.wstring() == L"\u2722");
+ CHECK(p2.wstring().size() == 1);
+ CHECK(p2.wstring()[0] == 0x2722);
std::cout << " imbuing the original locale ..." << std::endl;
path::imbue(old_loc);
@@ -976,9 +1041,11 @@ int cpp_main(int, char*[])
// document state of critical macros
#ifdef BOOST_POSIX_API
cout << "BOOST_POSIX_API" << endl;
+ BOOST_TEST(path::preferred_separator == '/');
#endif
#ifdef BOOST_WINDOWS_API
cout << "BOOST_WINDOWS_API" << endl;
+ BOOST_TEST(path::preferred_separator == '\\');
#endif
l.push_back('s');
@@ -1009,6 +1076,7 @@ int cpp_main(int, char*[])
test_constructors();
test_assignments();
test_appends();
+ test_concats();
test_modifiers();
test_observers();
test_relationals();
@@ -1021,7 +1089,7 @@ int cpp_main(int, char*[])
test_codecvt_argument();
test_error_handling();
-# if 0
+#if 0
test_user_supplied_type();
diff --git a/libs/filesystem/test/sample_test.cpp b/libs/filesystem/test/sample_test.cpp
new file mode 100644
index 0000000000..260a5c9568
--- /dev/null
+++ b/libs/filesystem/test/sample_test.cpp
@@ -0,0 +1,63 @@
+// filesystem sample_test.cpp ----------------------------------------------//
+
+// Copyright Beman Dawes 2012
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// --------------------------------------------------------------------------//
+//
+// This program provides a template for bug reporting test cases.
+//
+// --------------------------------------------------------------------------//
+
+#include <boost/config/warning_disable.hpp>
+#include <boost/filesystem.hpp>
+#include <boost/detail/lightweight_test.hpp>
+#include <iostream>
+#include <string>
+#include <cstring>
+#ifndef BOOST_LIGHTWEIGHT_MAIN
+# include <boost/test/prg_exec_monitor.hpp>
+#else
+# include <boost/detail/lightweight_main.hpp>
+#endif
+
+namespace fs = boost::filesystem;
+using fs::path;
+using std::cout;
+using std::endl;
+using std::string;
+using std::wstring;
+
+namespace
+{
+ bool cleanup = true;
+}
+
+// cpp_main ----------------------------------------------------------------//
+
+int cpp_main(int argc, char* argv[])
+{
+ if (argc > 1 && std::strcmp(argv[1], "--no-cleanup") == 0)
+ cleanup = false;
+
+ // Test cases go after this block of comments
+ // Use test case macros from boost/detail/lightweight_test.hpp:
+ //
+ // BOOST_TEST(predicate); // test passes if predicate evaluates to true
+ // BOOST_TEST_EQ(x, y); // test passes if x == y
+ // BOOST_TEST_NE(x, y); // test passes if x != y
+ // BOOST_ERROR(msg); // test fails, outputs msg
+ // Examples:
+ // BOOST_TEST(path("f00").size() == 3); // test passes
+ // BOOST_TEST_EQ(path("f00").size(), 3); // test passes
+ // BOOST_MSG("Oops!"); // test fails, outputs "Oops!"
+
+ if (cleanup)
+ {
+ // Remove any test files or directories here
+ }
+
+ return ::boost::report_errors();
+}
diff --git a/libs/filesystem/v3/test/test_codecvt.hpp b/libs/filesystem/test/test_codecvt.hpp
index 32b2d36e59..9ce8b75d1f 100644
--- a/libs/filesystem/v3/test/test_codecvt.hpp
+++ b/libs/filesystem/test/test_codecvt.hpp
@@ -10,7 +10,7 @@
#ifndef BOOST_FILESYSTEM3_TEST_CODECVT_HPP
#define BOOST_FILESYSTEM3_TEST_CODECVT_HPP
-#include <boost/filesystem/v3/config.hpp>
+#include <boost/filesystem/config.hpp>
#include <locale>
#include <cwchar> // for mbstate_t
diff --git a/libs/filesystem/v3/test/windows_attributes.cpp b/libs/filesystem/test/windows_attributes.cpp
index e1a686ce83..cc9ec80c54 100644
--- a/libs/filesystem/v3/test/windows_attributes.cpp
+++ b/libs/filesystem/test/windows_attributes.cpp
@@ -14,7 +14,13 @@
//--------------------------------------------------------------------------------------//
#include <boost/filesystem.hpp>
-#include <boost/detail/lightweight_main.hpp>
+
+#ifndef BOOST_LIGHTWEIGHT_MAIN
+# include <boost/test/prg_exec_monitor.hpp>
+#else
+# include <boost/detail/lightweight_main.hpp>
+#endif
+
#include <windows.h>
#include <map>
#include <utility>
diff --git a/libs/filesystem/v2/build/Jamfile.v2 b/libs/filesystem/v2/build/Jamfile.v2
deleted file mode 100644
index 8ba6310288..0000000000
--- a/libs/filesystem/v2/build/Jamfile.v2
+++ /dev/null
@@ -1,31 +0,0 @@
-# Boost Filesystem Library Build Jamfile
-
-# (C) Copyright Beman Dawes 2002-2006
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or www.boost.org/LICENSE_1_0.txt)
-
-# See library home page at http://www.boost.org/libs/filesystem
-
-project boost/filesystem
- : source-location ../src
- : usage-requirements # pass these requirement to dependents (i.e. users)
- <link>shared:<define>BOOST_FILESYSTEM_DYN_LINK=1
- ;
-
-SOURCES =
- operations path portability utf8_codecvt_facet ;
-
-lib boost_filesystem
- : $(SOURCES).cpp ../../system/build//boost_system
- : <link>shared:<define>BOOST_FILESYSTEM_DYN_LINK=1 # tell source we're building dll's
- :
- : # Boost.Filesystem uses some of Boost.System functions in inlined/templated
- # functions, so clients that use Boost.Filesystem will have direct references
- # to Boost.System symbols. On Windows, Darwin, and some other platforms, this
- # means those clients have to be directly linked to Boost.System. For static
- # linking this happens anyway, but for shared we need to make it happen. Since
- # doing so is harmless even when not needed, we do it for all platforms.
- <link>shared:<library>../../system/build//boost_system
- ;
-
-boost-install boost_filesystem ;
diff --git a/libs/filesystem/v2/doc/design.htm b/libs/filesystem/v2/doc/design.htm
deleted file mode 100644
index 8c79da9b64..0000000000
--- a/libs/filesystem/v2/doc/design.htm
+++ /dev/null
@@ -1,353 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<title>Boost Filesystem Library Design</title>
-</head>
-
-<body bgcolor="#FFFFFF">
-
-<h1>
-<img border="0" src="../../../../boost.png" align="center" width="277" height="86">Filesystem
-Library Design</h1>
-
-<p><a href="#Introduction">Introduction</a><br>
-<a href="#Requirements">Requirements</a><br>
-<a href="#Realities">Realities</a><br>
-<a href="#Rationale">Rationale</a><br>
-<a href="#Abandoned_Designs">Abandoned_Designs</a><br>
-<a href="#References">References</a></p>
-
-<h2><a name="Introduction">Introduction</a></h2>
-
-<p>The primary motivation for beginning work on the Filesystem Library was
-frustration with Boost administrative tools.&nbsp; Scripts were written in
-Python, Perl, Bash, and Windows command languages.&nbsp; There was no single
-scripting language familiar and acceptable to all Boost administrators. Yet they
-were all skilled C++ programmers - why couldn't C++ be used as the scripting
-language?</p>
-
-<p>The key feature C++ lacked for script-like applications was the ability to
-perform portable filesystem operations on directories and their contents. The
-Filesystem Library was developed to fill that void.</p>
-
-<p>The intent is not to compete with traditional scripting languages, but to
-provide a solution for situations where C++ is already the language
-of choice..</p>
-
-<h2><a name="Requirements">Requirements</a></h2>
-<ul>
- <li>Be able to write portable script-style filesystem operations in modern
- C++.<br>
- <br>
- Rationale: This is a common programming need. It is both an
- embarrassment and a hardship that this is not possible with either the current
- C++ or Boost libraries.&nbsp; The need is particularly acute
- when C++ is the only toolset allowed in the tool chain.&nbsp; File system
- operations are provided by many languages&nbsp;used on multiple platforms,
- such as Perl and Python, as well as by many platform specific scripting
- languages. All operating systems provide some form of API for filesystem
- operations, and the POSIX bindings are increasingly available even on
- operating systems not normally associated with POSIX, such as the Mac, z/OS,
- or OS/390.<br>
-&nbsp;</li>
- <li>Work within the <a href="#Realities">realities</a> described below.<br>
- <br>
- Rationale: This isn't a research project. The need is for something that works on
- today's platforms, including some of the embedded operating systems
- with limited file systems. Because of the emphasis on portability, such a
- library would be much more useful if standardized. That means being able to
- work with a much wider range of platforms that just Unix or Windows and their
- clones.<br>
-&nbsp;</li>
- <li>Avoid dangerous programming practices. Particularly, all-too-easy-to-ignore error notifications
- and use of global variables.&nbsp;If a dangerous feature is provided, identify it as such.<br>
- <br>
- Rationale: Normally this would be covered by &quot;the usual Boost requirements...&quot;,
- but it is mentioned explicitly because the equivalent native platform and
- scripting language interfaces often depend on all-too-easy-to-ignore error
- notifications and global variables like &quot;current
- working directory&quot;.<br>
-&nbsp;</li>
- <li>Structure the library so that it is still useful even if some functionality
- does not map well onto a given platform or directory tree. Particularly, much
- useful functionality should be portable even to flat
-(non-hierarchical) filesystems.<br>
- <br>
- Rationale: Much functionality which does not
- require a hierarchical directory structure is still useful on flat-structure
- filesystems.&nbsp; There are many systems, particularly embedded systems,
- where even very limited functionality is still useful.</li>
-</ul>
-<ul>
- <li>Interface smoothly with current C++ Standard Library input/output
- facilities.&nbsp; For example, paths should be
- easy to use in std::basic_fstream constructors.<br>
- <br>
- Rationale: One of the most common uses of file system functionality is to
- manipulate paths for eventual use in input/output operations.&nbsp;
- Thus the need to interface smoothly with standard library I/O.<br>
-&nbsp;</li>
- <li>Suitable for eventual standardization. The implication of this requirement
- is that the interface be close to minimal, and that great care be take
- regarding portability.<br>
- <br>
- Rationale: The lack of file system operations is a serious hole
- in the current standard, with no other known candidates to fill that hole.
- Libraries with elaborate interfaces and difficult to port specifications are much less likely to be accepted for
- standardization.<br>
-&nbsp;</li>
- <li>The usual Boost <a href="http://www.boost.org/more/lib_guide.htm">requirements and
- guidelines</a> apply.<br>
-&nbsp;</li>
- <li>Encourage, but do not require, portability in path names.<br>
- <br>
- Rationale: For paths which originate from user input it is unreasonable to
- require portable path syntax.<br>
-&nbsp;</li>
- <li>Avoid giving the illusion of portability where portability in fact does not
- exist.<br>
- <br>
- Rationale: Leaving important behavior unspecified or &quot;implementation defined&quot; does a
- great disservice to programmers using a library because it makes it appear
- that code relying on the behavior is portable, when in fact there is nothing
- portable about it. The only case where such under-specification is acceptable is when both users and implementors know from
- other sources exactly what behavior is required, yet for some reason it isn't
- possible to specify it exactly.</li>
-</ul>
-<h2><a name="Realities">Realities</a></h2>
-<ul>
- <li>Some operating systems have a single directory tree root, others have
- multiple roots.<br>
-&nbsp;</li>
- <li>Some file systems provide both a long and short form of filenames.<br>
-&nbsp;</li>
- <li>Some file systems have different syntax for file paths and directory
- paths.<br>
-&nbsp;</li>
- <li>Some file systems have different rules for valid file names and valid
- directory names.<br>
-&nbsp;</li>
- <li>Some file systems (ISO-9660, level 1, for example) use very restricted
- (so-called 8.3) file names.<br>
-&nbsp;</li>
- <li>Some operating systems allow file systems with different
- characteristics to be &quot;mounted&quot; within a directory tree.&nbsp; Thus a
- ISO-9660 or Windows
- file system may end up as a sub-tree of a POSIX directory tree.<br>
-&nbsp;</li>
- <li>Wide-character versions of directory and file operations are available on some operating
- systems, and not available on others.<br>
-&nbsp;</li>
- <li>There is no law that says directory hierarchies have to be specified in
- terms of left-to-right decent from the root.<br>
-&nbsp;</li>
- <li>Some file systems have a concept of file &quot;version number&quot; or &quot;generation
- number&quot;.&nbsp; Some don't.<br>
-&nbsp;</li>
- <li>Not all operating systems use single character separators in path names.&nbsp; Some use
- paired notations. A typical fully-specified OpenVMS filename
- might look something like this:<br>
- <br>
- <code>&nbsp;&nbsp; DISK$SCRATCH:[GEORGE.PROJECT1.DAT]BIG_DATA_FILE.NTP;5<br>
- </code><br>
- The general OpenVMS format is:<br>
- <br>
-&nbsp;&nbsp;&nbsp;&nbsp;
- <i>Device:[directories.dot.separated]filename.extension;version_number</i><br>
-&nbsp;</li>
- <li>For common file systems, determining if two descriptors are for same
- entity is extremely difficult or impossible.&nbsp; For example, the concept of
- equality can be different for each portion of a path - some portions may be
- case or locale sensitive, others not. Case sensitivity is a property of the
- pathname itself, and not the platform. Determining collating sequence is even
- worse.<br>
-&nbsp;</li>
- <li>Race-conditions may occur. Directory trees, directories, files, and file attributes are in effect shared between all threads, processes, and computers which have access to the
- filesystem.&nbsp; That may well include computers on the other side of the
- world or in orbit around the world. This implies that file system operations
- may fail in unexpected ways.&nbsp;For example:<br>
- <br>
- <code>&nbsp;&nbsp;&nbsp;&nbsp; assert( exists(&quot;foo&quot;) == exists(&quot;foo&quot;) );
- // may fail!<br>
-&nbsp;&nbsp;&nbsp;&nbsp; assert( is_directory(&quot;foo&quot;) == is_directory(&quot;foo&quot;);
- // may fail!<br>
- </code><br>
- In the first example, the file may have been deleted between calls to
- exists().&nbsp; In the second example, the file may have been deleted and then
- replaced by a directory of the same name between the calls to is_directory().<br>
-&nbsp;</li>
- <li>Even though an application may be portable, it still will have to traffic
- in system specific paths occasionally; user provided input is a common
- example.<br>
-&nbsp;</li>
- <li><a name="symbolic-link-use-case">Symbolic</a> links cause canonical and
- normal form of some paths to represent different files or directories. For
- example, given the directory hierarchy <code>/a/b/c</code>, with a symbolic
- link in <code>/a</code> named <code>x</code>&nbsp; pointing to <code>b/c</code>,
- then under POSIX Pathname Resolution rules a path of <code>&quot;/a/x/..&quot;</code>
- should resolve to <code>&quot;/a/b&quot;</code>. If <code>&quot;/a/x/..&quot;</code> were first
- normalized to <code>&quot;/a&quot;</code>, it would resolve incorrectly. (Case supplied
- by Walter Landry.)</li>
-</ul>
-
-<h2><a name="Rationale">Rationale</a></h2>
-
-<p>The <a href="#Requirements">Requirements</a> and <a href="#Realities">
-Realities</a> above drove much of the C++ interface design.&nbsp; In particular,
-the desire to make script-like code straightforward caused a great deal of
-effort to go into ensuring that apparently simple expressions like <i>exists( &quot;foo&quot;
-)</i> work as expected.</p>
-
-<p>See the <a href="faq.htm">FAQ</a> for the rationale behind many detailed
-design decisions.</p>
-
-<p>Several key insights went into the <i>path</i> class design:</p>
-<ul>
- <li>Decoupling of the input formats, internal conceptual (<i>vector&lt;string&gt;</i>
- or other sequence)
- model, and output formats.</li>
- <li>Providing two input formats (generic and O/S specific) broke a major
- design deadlock.</li>
- <li>Providing several output formats solved another set of previously
- intractable problems.</li>
- <li>Several non-obvious functions (particularly decomposition and composition)
- are required to support portable code. (Peter Dimov, Thomas Witt, Glen
- Knowles, others.)</li>
-</ul>
-
-<p>Error checking was a particularly difficult area. One key insight was that
-with file and directory names, portability isn't a universal truth.&nbsp;
-Rather, the programmer must think out the question &quot;What operating systems do I
-want this path to be portable to?&quot;&nbsp; By providing support for several
-answers to that question, the Filesystem Library alerts programmers of the need
-to ask it in the first place.</p>
-<h2><a name="Abandoned_Designs">Abandoned Designs</a></h2>
-<h3>operations.hpp</h3>
-<p>Dietmar Kühl's original dir_it design and implementation supported
-wide-character file and directory names. It was abandoned after extensive
-discussions among Library Working Group members failed to identify portable
-semantics for wide-character names on systems not providing native support. See
-<a href="faq.htm#wide-character_names">FAQ</a>.</p>
-<p>Previous iterations of the interface design used explicitly named functions providing a
-large number of convenience operations, with no compile-time or run-time
-options. There were so many function names that they were very confusing to use,
-and the interface was much larger. Any benefits seemed theoretical rather than
-real. </p>
-<p>Designs based on compile time (rather than runtime) flag and option selection
-(via policy, enum, or int template parameters) became so complicated that they
-were abandoned, often after investing quite a bit of time and effort. The need
-to qualify attribute or option names with namespaces, even aliases, made use in
-template parameters ugly; that wasn't fully appreciated until actually writing
-real code.</p>
-<p>Yet another set of convenience functions ( for example, <i>remove</i> with
-permissive, prune, recurse, and other options, plus predicate, and possibly
-other, filtering features) were abandoned because the details became both
-complex and contentious.</p>
-
-<p>What is left is a toolkit of low-level operations from which the user can
-create more complex convenience operations, plus a very small number of
-convenience functions which were found to be useful enough to justify inclusion.</p>
-
-<h3>path.hpp</h3>
-
-<p>There were so many abandoned path designs, I've lost track. Policy-based
-class templates in several flavors, constructor supplied runtime policies,
-operation specific runtime policies, they were all considered, often
-implemented, and ultimately abandoned as far too complicated for any small
-benefits observed.</p>
-
-<p>Additional design considerations apply to <a href="i18n.html">
-Internationalization</a>. </p>
-
-<h3>error checking</h3>
-
-<p>A number of designs for the error checking machinery were abandoned, some
-after experiments with implementations. Totally automatic error checking was
-attempted in particular. But automatic error checking tended to make the overall
-library design much more complicated.</p>
-
-<p>Some designs associated error checking mechanisms with paths.&nbsp; Some with
-operations functions.&nbsp; A policy-based error checking template design was
-partially implemented, then abandoned as too complicated for everyday
-script-like programs.</p>
-
-<p>The final design, which depends partially on explicit error checking function
-calls,&nbsp; is much simpler and straightforward, although it does depend to
-some extent on programmer discipline.&nbsp; But it should allow programmers who
-are concerned about portability to be reasonably sure that their programs will
-work correctly on their choice of target systems.</p>
-
-<h2><a name="References">References</a></h2>
-
-<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
- <tr>
- <td width="13%" valign="top">[<a name="IBM-01">IBM-01</a>]</td>
- <td width="87%">IBM Corporation, <i>z/OS V1R3.0 C/C++ Run-Time
-Library Reference</i>, SA22-7821-02, 2001,
-<a href="http://www-1.ibm.com/servers/eserver/zseries/zos/bkserv/">
- www-1.ibm.com/servers/eserver/zseries/zos/bkserv/</a></td>
- </tr>
- <tr>
- <td width="13%" valign="top">[<a name="ISO-9660">ISO-9660</a>]</td>
- <td width="87%">International Standards Organization, 1988</td>
- </tr>
- <tr>
- <td width="13%" valign="top">[<a name="Kuhn">Kuhn</a>]</td>
- <td width="87%">UTF-8 and Unicode FAQ for Unix/Linux,
-<a href="http://www.cl.cam.ac.uk/~mgk25/unicode.html">
- www.cl.cam.ac.uk/~mgk25/unicode.html</a></td>
- </tr>
- <tr>
- <td width="13%" valign="top">[<a name="MSDN">MSDN</a>] </td>
- <td width="87%">Microsoft Platform SDK for Windows, Storage Start
-Page,
-<a href="http://msdn.microsoft.com/library/en-us/fileio/base/storage_start_page.asp">
- msdn.microsoft.com/library/en-us/fileio/base/storage_start_page.asp</a></td>
- </tr>
- <tr>
- <td width="13%" valign="top">[<a name="POSIX-01">POSIX-01</a>]</td>
- <td width="87%">IEEE&nbsp;Std&nbsp;1003.1-2001, ISO/IEC 9945:2002, and The Open Group Base Specifications, Issue 6. Also known as The
- Single Unix<font face="Times New Roman">® Specification, Version 3.
- Available from each of the organizations involved in its creation. For
- example, read online or download from
- <a href="http://www.unix.org/single_unix_specification/">
- www.unix.org/single_unix_specification/</a>.</font> The ISO JTC1/SC22/WG15 - POSIX
-homepage is <a href="http://www.open-std.org/jtc1/sc22/WG15/">
- www.open-std.org/jtc1/sc22/WG15/</a></td>
- </tr>
- <tr>
- <td width="13%" valign="top">[<a name="URI">URI</a>]</td>
- <td width="87%">RFC-2396, Uniform Resource Identifiers (URI): Generic
-Syntax, <a href="http://www.ietf.org/rfc/rfc2396.txt">
- www.ietf.org/rfc/rfc2396.txt</a></td>
- </tr>
- <tr>
- <td width="13%" valign="top">[<a name="UTF-16">UTF-16</a>]</td>
- <td width="87%">Wikipedia, UTF-16,
-<a href="http://en.wikipedia.org/wiki/UTF-16">
- en.wikipedia.org/wiki/UTF-16</a></td>
- </tr>
- <tr>
- <td width="13%" valign="top">[<a name="Wulf-Shaw-73">Wulf-Shaw-73</a>]</td>
- <td width="87%">William Wulf, Mary Shaw, <i>Global
-Variable Considered Harmful</i>, ACM SIGPLAN Notices, 8, 2, 1973, pp. 23-34</td>
- </tr>
-</table>
-
-<hr>
-<p>Revised
-<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->02 August, 2005<!--webbot bot="Timestamp" endspan i-checksum="34600" --></p>
-
-<p>© Copyright Beman Dawes, 2002</p>
-<p> Use, modification, and distribution are subject to the Boost Software
-License, Version 1.0. (See accompanying file <a href="../../../../LICENSE_1_0.txt">
-LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
-www.boost.org/LICENSE_1_0.txt</a>)</p>
-
-</body>
-
-</html> \ No newline at end of file
diff --git a/libs/filesystem/v2/doc/do-list.htm b/libs/filesystem/v2/doc/do-list.htm
deleted file mode 100644
index ff7f383eab..0000000000
--- a/libs/filesystem/v2/doc/do-list.htm
+++ /dev/null
@@ -1,42 +0,0 @@
-<title>Boost Filesystem Do-list</title>
-<h1>
-<img border="0" src="../../../../boost.png" align="center" width="277" height="86">Filesystem
-Do-list</h1>
-<h2>Current</h2>
-<ul>
- <li>Add test cases and docs for Windows \\?\ and \\?\UNC\ naming conventions.</li>
- <li>Should operations.cpp assert or BOOST_ASSERT on more preconditions?</li>
- <li>Apply PJP's Wide/Narrow conversion proposal to traits, once he stabilizes it.</li>
- <li>Glob syntax -&gt; regex syntax converter. See
- Rich Johnson's <a href="http://lists.boost.org/boost-users/2004/01/5770.php">
- lists.boost.org/boost-users/2004/01/5770.php</a>, and John Maddock's
- <a href="http://lists.boost.org/boost-users/2004/01/5770.php">lists.boost.org/boost-users/2004/01/5770.php</a></li>
- <li>Issue (Adrian Martin): &gt;Comparison between paths doesn't use locale.<br>
- &gt;<br>
- &gt;The paths are not treated as plain characters since a lexicographical <br>
- &gt;compare is made. But the individual elements are treated<br>
- &gt;as plain characters and the internal string type's operator&lt; is used. This
- <br>
- &gt;is a bit contradicting. <br>
- &gt;<br>
- &gt;I think the comparison operators should compare the elements in a locale <br>
- &gt;dependent way.<br>
- <br>
- I've opened this as an issue. It needs to be answered in the context of what
- comparison is used for. Remember that equivalence should be determined by the
- equivalent() function. An important use of operator&lt; is when path is used as a
- map or set key. Not sure how locale impacts that.</li>
- <li>Move canonize() and normalize() to convenience.hpp?</li>
- <li>Need wording to the effect that basic_path::iterators are invalidated in
- the basic_path object's lifetime ends.</li>
- <li>Move name checks to convenience.hpp?</li>
- <li>Move rename_all to convenience.hpp?</li>
-</ul>
-<hr>
-<p>Revised
-<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->18 March, 2008<!--webbot bot="Timestamp" endspan i-checksum="29005" --></p>
-<p>&copy; Copyright Beman Dawes, 2002</p>
-<p> Use, modification, and distribution are subject to the Boost Software
-License, Version 1.0. (See accompanying file <a href="../../../../LICENSE_1_0.txt">
-LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
-www.boost.org/LICENSE_1_0.txt</a>)</p>
diff --git a/libs/filesystem/v2/doc/faq.htm b/libs/filesystem/v2/doc/faq.htm
deleted file mode 100644
index 938c71f8e5..0000000000
--- a/libs/filesystem/v2/doc/faq.htm
+++ /dev/null
@@ -1,150 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<title>Filesystem FAQ</title>
-<link rel="stylesheet" type="text/css" href="../../../../doc/src/minimal.css">
-</head>
-
-<body>
-
-<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="710">
- <tr>
- <td width="277">
-<a href="../../../../index.htm">
-<img src="../../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="277" height="86" border="0"></a></td>
- <td width="410" align="middle">
- <font size="7">Filesystem Library</font>
- </td>
- </tr>
-</table>
-
-<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
- <tr>
- <td><a href="../../../../index.htm">Boost Home</a>&nbsp;&nbsp;&nbsp;
- <a href="index.htm">Library Home</a>&nbsp; &nbsp;
- <a href="index.htm#tutorial">Tutorial</a>&nbsp; &nbsp; <a href="reference.html">
- Reference</a>&nbsp;&nbsp; <a href="faq.htm">FAQ</a></td>
- </tr>
-</table>
-
-<h1>
-Frequently Asked Questions</h1>
-<p><b>Why base the generic-path string format on POSIX?</b></p>
-<p><a href="design.htm#POSIX-01">[POSIX-01]</a> is an ISO Standard. It is the basis for the most familiar path-string formats,
-not just for POSIX systems but also for the native Windows format and the
-URL portion of URI's. It is ubiquitous and
-familiar.&nbsp; On many systems, it is very easy to implement because it is
-either the native operating system format (Unix and Windows) or via a
-operating system supplied
-POSIX library (z/OS, OS/390, and many more.)</p>
-<p><b>Why not use a full URI (Universal Resource Identifier) based path?</b></p>
-<p><a href="design.htm#URI">URI's</a> would promise more than the Filesystem Library can actually deliver,
-since URI's extend far beyond what most operating systems consider a file or a
-directory.&nbsp; Thus for the primary &quot;portable script-style file system
-operations&quot; requirement of the Filesystem Library, full URI's appear to be over-specification.</p>
-<p><b>Why isn't <i>path</i> a base class with derived <i>directory_path</i> and
-<i>file_path</i> classes?</b></p>
-<p>Why bother?&nbsp; The behavior of all three classes is essentially identical.
-Several early versions did require users to identify each path as a file or
-directory path, and this seemed to increase errors and decrease code
-readability. There was no apparent upside benefit.</p>
-<p><b>Why are fully specified paths called <i>complete</i> rather than <i>
-<a name="absolute">absolute</a></i>?</b></p>
-<p>To avoid long-held assumptions (what do you mean, <i>&quot;/foo&quot;</i> isn't
-absolute on some systems?) by programmers used to single-rooted filesystems.
-Using an unfamiliar name for the concept and related functions causes
-programmers to read the specs rather than just assuming the meaning is known.</p>
-<p><b>Why not support a concept of specific kinds of file systems, such as posix_file_system or windows_file_system.</b></p>
-<p>Portability is one of the most important requirements for the
-library.&nbsp;Gaining some advantage by using features specific to particular
-operating systems is not a requirement. There doesn't appear to be much need for
-the ability to manipulate, say, a classic Mac OS path while running on an
-OpenVMS machine.</p>
-<p>Furthermore, concepts like &quot;file system&quot;
-are very slippery. What happens when a NTFS or FAT file system is mounted
-in directory on a machine running a POSIX-like operating system, for example?
-Some of the POSIX API's may return very un-POSIX like results.</p>
-<p><b>Why not supply a 'handle' type, and let the file and directory operations
-traffic in it?</b></p>
-<p>It isn't clear there is any feasible way to meet the &quot;portable script-style
-file system operations&quot; requirement with such a system. File systems exist where operations are usually performed on
- some non-string handle type. The classic Mac OS has been mentioned explicitly as a case where
-trafficking in paths isn't always natural.&nbsp;&nbsp;&nbsp; </p>
-<p>The case for the &quot;handle&quot; (opaque data type to identify a file)
-style may be strongest for directory iterator value type.&nbsp; (See Jesse Jones' Jan 28,
-2002, Boost postings). However, as class path has evolved, it seems sufficient
-even as the directory iterator value type.</p>
-<p><b>Why are the operations.hpp non-member functions so low-level?</b></p>
-<p>To provide a toolkit from which higher-level functionality can be created.</p>
-<p>An
-extended attempt to add convenience functions on top of, or as a replacement
-for, the low-level functionality failed because there is no widely acceptable
-set of simple semantics for most convenience functions considered.&nbsp;
-Attempts to provide alternate semantics via either run-time options or
-compile-time polices became overly complicated in relation to the value
-delivered, or became contentious.&nbsp; OTOH, the specific functionality needed for several trial
-applications was very easy for the user to construct from the lower-level
-toolkit functions.&nbsp; See <a href="design.htm#Abandoned_Designs">Failed
-Attempts</a>.</p>
-<p><b>Isn't it inconsistent then to provide a few convenience functions?</b></p>
-<p>Yes, but experience with both this library, POSIX, and Windows indicates
-the utility of certain convenience functions, and that it is possible to provide
-simple, yet widely acceptable, semantics for them. For example, remove_all.</p>
-<p><b>Why are there basic_directory_iterator&lt;&gt; overloads for operations.hpp
-predicate functions? Isn't two ways to do the same thing poor design?</b></p>
-<p>Yes, two ways to do the same thing is often a poor design practice. But the
-iterator versions are often much more efficient. Calling status() during
-iteration over a directory containing 15,000 files took 6 seconds for the path
-overload, and 1 second for the iterator overload, for tests on a freshly booted
-machine. Times were .90 seconds and .30 seconds, for tests after prior use of
-the directory. This performance gain is large enough to justify deviating from
-preferred design practices. Neither overload alone meets all needs.</p>
-<p><b>Why are library functions so picky about errors?</b></p>
-<p>Safety. The default is to be safe rather than sorry. This is particularly
-important given the reality that on many computer systems files and directories
-are <a href="#global">globally shared</a> resources, and thus subject to
-unexpected errors.</p>
-<p><b>Why are errors reported by exception rather than return code or error
-notification variable?</b></p>
-<p>Safety.&nbsp;Return codes or error notification variables are often ignored
-by programmers.&nbsp; Exceptions are much harder to ignore, provided desired
-default behavior (program termination) if not caught, yet allow error recovery
-if desired. Non-throwing versions of functions are provided where experience
-indicates the need.</p>
-<p><b>Why are attributes accessed via named functions rather than property maps?</b></p>
-<p>For commonly used attributes (existence, directory or file, emptiness),
-simple syntax and guaranteed presence outweigh other considerations. Because
-access to many other attributes is inherently system dependent,
-property maps are viewed as the best hope for access and modification, but it is
-better design to provide such functionality in a separate library. (Historical
-note: even the apparently simple attribute &quot;read-only&quot; turned out to be so
-system depend as to be disqualified as a &quot;guaranteed presence&quot; operation.)</p>
-<p><b>Why aren't <a name="wide-character_names">wide-character names</a> supported? Why not std::wstring or even
-a templated type?</b></p>
-<p>They <u>are</u> supported, starting with version 1.33. See
-<a href="i18n.html">Internationalization</a>.</p>
-<p><b>Why isn't automatic name portability error detection provided?</b></p>
-<p>A number (at least six) of designs for name validity error
-detection were evaluated, including at least four complete implementations.&nbsp;
-While the details for rejection differed, all of the more powerful name validity checking
-designs distorted other
-otherwise simple aspects of the library. Even the simple name checking provided
-in prior library versions was a constant source of user complaints. While name checking can be helpful, it
-isn't important enough to justify added a lot of additional complexity.</p>
-<p><b>Why are paths sometimes manipulated by member functions and sometimes by
-non-member functions?</b></p>
-<p>The design rule is that purely lexical operations are supplied as <i>class
-basic_path</i> member
-functions, while operations performed by the operating system are provided as
-free functions.</p>
-<hr>
-<p>Revised
-<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->18 March, 2008<!--webbot bot="Timestamp" endspan i-checksum="29005" --></p>
-<p>© Copyright Beman Dawes, 2002</p>
-<p> Use, modification, and distribution are subject to the Boost Software
-License, Version 1.0. See <a href="http://www.boost.org/LICENSE_1_0.txt">
-www.boost.org/LICENSE_1_0.txt</a></p> \ No newline at end of file
diff --git a/libs/filesystem/v2/doc/i18n.html b/libs/filesystem/v2/doc/i18n.html
deleted file mode 100644
index 1305493d89..0000000000
--- a/libs/filesystem/v2/doc/i18n.html
+++ /dev/null
@@ -1,426 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<title>1.34 (Internationalization) Changes</title>
-</head>
-
-<body bgcolor="#FFFFFF">
-
-<h1>1.34 (Internationalization) Changes</h1>
-<h2>Introduction</h2>
-<p>This release is a major upgrade for the Filesystem Library, in preparation
-for submission to the C++ Standards Committee. Features of this release
-include:</p>
-<ul>
- <li><a href="#Internationalization">Internationalization</a>, provided by
- class templates <i>basic_path</i>, <i>basic_filesystem_error</i>, <i>
- basic_directory_iterator</i>, and <i>basic_directory_entry</i>.<br>
-&nbsp;</li>
- <li><a href="#Simplification">Simplification</a> of the path interface,
- including elimination of distinction between native and generic formats,
- and separation of name checking functionality from general path functionality.
- Also simplification of <i>basic_filesystem_error</i>.<br>
-&nbsp;</li>
- <li><a href="#Rationalization">Rationalization</a> of predicate function
- design, including the addition of several new functions.<br>
-&nbsp;</li>
- <li>Clearer specification by reference to [<a href="design.htm#POSIX-01">POSIX-01</a>],
- the ISO/IEEE Single Unix Standard, with provisions for Windows and other
- operating systems.<br>
-&nbsp;</li>
- <li><a href="#Preservation">Preservation</a> of existing user code whenever
- possible.<br>
-&nbsp;</li>
- <li><a href="#More_efficient">More efficient operations</a> when iterating over directories.<br>
-&nbsp;</li>
- <li>A <a href="reference.html#recursive_directory_iterator">recursive
- directory iterator</a> is now provided. </li>
-</ul>
-<p><a href="#Rationale">Rationale</a> for some of the changes is also provided.</p>
-<h2><a name="Internationalization">Internationalization</a></h2>
-<p>Cass templates <i>basic_path</i>, <i>basic_filesystem_error</i>, and <i>
-basic_directory_iterator</i> provide the basic mechanisms for
-internationalization, in ways very similar to the C++ Standard Library's <i>
-basic_string</i> and similar class templates. The following typedefs are also
-provided:</p>
-<blockquote>
- <pre>typedef basic_path&lt;std::string, ...&gt; path;
-typedef basic_path&lt;std::wstring, ...&gt; wpath;
-
-typedef basic_filesystem_error&lt;path&gt; filesystem_error;
-typedef basic_filesystem_error&lt;wpath&gt; wfilesystem_error;
-
-typedef basic_directory_iterator&lt;path&gt; directory_iterator;
-typedef basic_directory_iterator&lt;wpath&gt; wdirectory_iterator;</pre>
-</blockquote>
-<p>The string type used by Boost.Filesystem <i>basic_path</i> (std::string,
-std::wstring, or whatever) is called the <i>internal</i> string type. The string
-type used by the operating system for paths (often char*, sometimes wchar_t*) is
-called the <i>external</i> string type. Conversion between internal and external
-types is performed by path traits classes. The specific conversions for <i>path</i>
-and <i>wpath</i> is implementation defined, with normative encouragement to use
-the operating system's preferred file system encoding. For many modern POSIX-based
-file systems the <i>wpath</i> external encoding is <a href="design.htm#Kuhn">
-UTF-8</a>, while for modern Windows file systems such as NTFS it is
-<a href="http://en.wikipedia.org/wiki/UTF-16">UTF-16</a>.</p>
-<p>The <a href="reference.html#Operations-functions">operational functions</a> in
-<a href="../../../../boost/filesystem/operations.hpp">operations.hpp</a> are provided with overloads for
-<i>path</i>, <i>wpath</i>, and user-defined <i>basic_path</i>'s. A
-<a href="reference.html#Requirements-on-implementations">&quot;do-the-right-thing&quot; rule</a>
-applies to implementations, ensuring that the correct overload will be chosen.</p>
-<h2><a name="Simplification">Simplification</a> of path interface</h2>
-<p>Prior versions of the library required users of class <i>path</i> to identify
-the format (native or generic) and name error-checking policy, either via a
-second constructor argument or via a default mechanism. That approach caused
-complaints, particularly from users not needing the name checking features. The
-interface has now been simplified:</p>
-<ul>
- <li>The distinction between native and generic formats has been eliminated.
- See <a href="#distinction">rationale</a>. Two argument forms of path
- constructors are now deprecated, with the second argument having no effect.
- These constructors are only provided to ease the transition of existing code.<br>
-&nbsp;</li>
- <li>Path name checking functionality has been moved out of class path and into
- separate free-functions. This still provides name checking for those who need
- it, but with much less impact on those who don't need it.</li>
-</ul>
-<p>Additionally,
-<a href="reference.html#Class-template-basic_filesystem_error">basic_filesystem_error</a> has been put
-on a diet and generally simplified.</p>
-<p>Error codes have been moved to a separate library,
-<a href="../../../system/doc/index.html">Boost.System</a>.</p>
-<p><code>&quot;//:&quot;</code> has been introduced as a path escape prefix to identify
-native paths. Rationale: simplifies basic_path constructor interfaces, easier
-use for platforms needing explicit native format identification.</p>
-<h2><a name="Rationalization">Rationalization</a> of predicate functions</h2>
-<p>In discussions and bug reports on the Boost developers mailing list, it
-became obvious that Boost.Filesystem's exists(), symbolic_link_exists(), and
-is_directory() predicate functions were poorly specified. There were suggestions
-to add an is_accessible() function, but Peter Dimov argued that this amounted to
-papering over the lack of a clear specification and would likely lead to future
-problems.</p>
-<p>Peter suggested that an interesting way to analyze the problem was to ask
-what the expectations were for true and false values of the various predicates.
-See the <a href="#table">table</a> below.</p>
-<h3>status()</h3>
-<p>As part of the predicate discussions, particularly with Rob Stewart, it
-became obvious that sometimes applications need access to raw status information
-without any possibility of an exception being thrown. The
-<a href="reference.html#Status-functions">status()</a> function was added to meet this
-need. It also proved clearer to specify the semantics of predicate functions in
-terms of status().</p>
-<h3><a name="is_file">is_file</a>()</h3>
-<p>About the same time, Jeff Garland suggested that an
-<a href="reference.html#Predicate-functions">is_file()</a> predicate would
-compliment <a href="reference.html#Predicate-functions">is_directory()</a>. In working on the analysis below, it became obvious
-that the expectations for is_file() were different from the expectations for !is_directory(),
-so is_file() was added. </p>
-<h3><a name="is_other">is_other</a>()</h3>
-<p>On some operating systems, it is possible to have a directory entry which is
-not for either a directory or a file. The
-<a href="reference.html#Predicate-functions">is_other()</a>
-function identifies such cases.</p>
-<h3>Should predicates throw on errors?</h3>
-<p>Some conditions reported by operating systems as errors (see
-<a href="#Footnote">footnote</a>) clearly simply indicate that the predicate is
-false, rather than indicating serious failure. But other errors represent
-serious hardware or network problems, or permissions problems.</p>
-<p>Some people, particularly Rob Stewart, argue that in a function like
-<a href="reference.html#Predicate-functions">is_directory()</a>, any error should simply cause the function to return false. If
-there is actually an underlying problem, it will be detected it due course when
-a directory_iterator or fstream operation is attempted.</p>
-<p>That view is was rejected because of the following considerations:</p>
-<ul>
- <li>As a general principle, the earlier errors can be reported, the better.
- The rationale being that it is often much cheaper to fix errors sooner rather
- than later. I've also had a lot of negative experiences where failure to
- detect errors early caused a lot of pain and unhappy customers. Some of these
- were directly caused by ignoring error returns from file system operations.<br>
- &nbsp;</li>
- <li>Analysis of existing programs indicated that as much as 30% of the use of
- a predicate was not followed by directory_iterator or fstream operations on
- the path in question. Instead, the applications performed reporting or
- fall-back operations that would not fail, and thus were either misleading or
- completely wrong if the <i>false</i> return value was in fact caused by
- hardware or network failure, or permissions problems.</li>
-</ul>
-<p>However, the discussion did identify that there are valid cases where
-non-throwing behavior is a requirement, and a programmer may prefer to deal with
-file or directory attributes and errors at a very low, bit-mask, level. Function <a href="#status">status()</a>
-was proposed to meet those needs.</p>
-<h3><a name="Expectations">Expectations</a> <a name="table">table</a></h3>
-<p>In the table below, <i>p</i> is a non-empty path.</p>
-<p>Unless otherwise specified, all functions throw on hardware or general
-failure errors, permission or access errors, symbolic link loop errors, and
-invalid path errors. If an O/S fails to distinguish between error types,
-predicate operations return false on such ambiguous errors.</p>
-<p><i><b>Expectations</b></i> identify operations that are expected to succeed
-or fail, assuming no hardware, permission, or access right errors, and no race
-conditions.</p>
-<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
- <tr>
- <td width="22%" align="center"><b><i>Expression</i></b></td>
- <td width="48%" align="center"><b><i>Expectations</i></b></td>
- <td width="108%" align="center"><b><i>Semantics</i></b></td>
- </tr>
- <tr>
- <td width="22%">is_directory(p)</td>
- <td width="48%">Returns true if p is found and is a directory, else false.<br>
- If true, then directory_iterator(p) would succeed.<br>
- If false, then directory_iterator(p) would fail.</td>
- <td width="108%">Throws: if <a href="#status">status()</a> &amp; error_flag<br>
- Returns: status() &amp; directory_flag</td>
- </tr>
- <tr>
- <td width="22%">is_file(p)</td>
- <td width="48%">Returns true if p is found and is not a directory, else
- false.<br>
- If true, then ifstream(p) would succeed.<br>
- False, however, does not imply ifstream(p) would fail (because some
- operating systems allow directories to be opened as files, but stat() does
- set the &quot;regular file&quot; flag.)</td>
- <td width="108%">Throws: if status() &amp; error_flag<br>
- Returns: status() &amp; file_flag</td>
- </tr>
- <tr>
- <td width="22%">exists(p) </td>
- <td width="48%">Returns is_directory(p) || is_file(p) || is_other(p)</td>
- <td width="108%">Throws: if status() &amp; error_flag<br>
- Returns: status() &amp;&nbsp;&nbsp; (directory_flag|file_flag|other_flag)</td>
- </tr>
- <tr>
- <td width="22%">is_symlink(p)</td>
- <td width="48%">Returns true if p is found by shallow (non-transitive)
- search, and is a symbolic link, else false.<br>
- If true, and p points to q, then for any filesystem function f except those
- specified as working shallowly on symlinks themselves, f(p) calls f(q), and
- returns any value returned by f(q).</td>
- <td width="108%">Throws: if <a href="#status">symlink_status</a>() &amp;
- error_flag<br>
- Returns: symlink_status() &amp; symlink_flag</td>
- </tr>
- <tr>
- <td width="22%">!exists(p) &amp;&amp; ((p.has_branch_path() &amp;&amp; exists( p.branch_path())
- || (!p.has_branch_path() &amp;&amp; !p.has_root_path()))<br>
- <i>In other words, if the path does not exist, and (the branch does exist,
- or (there is no branch and no root)).</i></td>
- <td width="48%">If true, create_directory(p) would succeed.<br>
- If true, ofstream(p) would succeed.<br>
- &nbsp;</td>
- <td width="108%">&nbsp;</td>
- </tr>
- <tr>
- <td width="22%">directory_iterator it(p)</td>
- <td width="48%">If it != directory_iterator(), assert(exists(*it)||is_symlink(*it)).
- Note: exists(*it) may throw, and likewise status(*it) may return error_flag
- - there is no guarantee of accessibility.</td>
- <td width="108%">&nbsp;</td>
- </tr>
-</table>
-<h3><a name="Conclusion">Conclusion</a></h3>
-<p>Predicate operations is_directory(), is_file(), is_symlink(), and exists()
-with the indicated semantics form a self-consistent set that meets expectations.</p>
-<h2><a name="Preservation">Preservation</a> of existing user code</h2>
-<p>Although the change to a template based approach required a complete overhaul
-of the implementation code, the interface as used by existing applications is mostly unchanged.
-Conversion problems which would
-otherwise affect user code have been reduced by providing deprecated
-functions to ease transition. The deprecated functions are:</p>
-<blockquote>
- <pre>// class basic_path - 2nd constructor argument ignored:
-basic_path( const string_type &amp; str, name_check );
-basic_path( const typename string_type::value_type * s, name_check );
-
-// class basic_path - old names provided for renamed functions:
-string_type native_file_string() const;
-string_type native_directory_string() const;
-
-// class basic_path - now defined such that these no longer have any real effect:
-static bool default_name_check_writable() { return false; }
-static void default_name_check( name_check ) {}
-static name_check default_name_check() { return 0; }
-
-// non-deducible operations functions assume class path
-inline path current_path()
-inline const path &amp; initial_path()
-
-// the new basic_directory_entry provides leaf()
-// to cover the common existing use case itr-&gt;leaf()
-typename Path::string_type leaf() const;</pre>
-</blockquote>
-<p>If you do not want the deprecated functions to be included, define the macro BOOST_FILESYSTEM_NO_DEPRECATED.</p>
-<p>The greatest impact on existing code is the change of directory iterator
-value type from <code>path</code> to <code>directory_entry</code>. To ease the
-most common directory iterator use case, <code>basic_directory_entry</code>
-provides an automatic conversion to <code>basic_path</code>, and this also
-serves to prevent breakage of a lot of existing code. See the
-<a href="#More_efficient">next section</a> for discussion of rationale.</p>
-<blockquote>
- <pre>// the new basic_directory_entry provides:
-operator const path_type &amp;() const;</pre>
- </blockquote>
-<h2><a name="More_efficient">More efficient</a> operations when iterating over
-directories</h2>
-<p>Several common real-world operating systems (BSD derivatives, Linux, Windows)
-provide status information during directory iteration. Caching of this status
-information results in three to six times faster operation for typical predicate
-operations. (For a directory containing 15,047 files, iteration in 1 second vs 6
-seconds on a freshly booted system, and 0.3 seconds vs 0.9 seconds after prior use of
-the directory.</p>
-<p>The efficiency gains from caching such status information were considered too
-significant to ignore. Because the possibility of race-conditions differs
-depending on whether the cached information is used or an actual system call is
-performed, it was considered necessary to provide explicit functions utilizing
-the cached information, rather than implicitly using the cache behind the
-scenes.</p>
-<p>Three options were explored for exposing the cached status information, with
-full implementations of each. After initial implementation of option 1 exposed
-the problems noted below, option 2 was tested as a possible engineering
-tradeoff. Option 3
-was finally chosen as the cleanest design.</p>
-<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
- <tr>
- <td width="8%" align="center"><b><i>Option</i></b></td>
- <td width="25%" align="center"><i><b>How cache accessed</b></i></td>
- <td width="94%" align="center"><i><b>Pros and Cons</b></i></td>
- </tr>
- <tr>
- <td width="8%" valign="top" align="center"><i><b>1</b></i></td>
- <td width="25%" valign="top">Predicate function overloads<br>
- (basic_directory_iterator value_type is path)</td>
- <td width="94%">
- <ul>
- <li>Very Questionable design (friendship abuse, overload abuse, etc)</li>
- <li>User cannot reuse cache</li>
- <li>Readability problem; easy to miss difference between f(*it) and f(it)</li>
- <li>Write-ability problem (error prone?)</li>
- <li>Most common iterator use is brief: *it</li>
- <li>Preserves existing code</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td width="8%" valign="top" align="center"><b><i>2</i></b></td>
- <td width="25%" valign="top">Predicate member functions of basic_directory_<span style="background-color: #FFFF00">iterator</span><br>
- (basic_directory_iterator value_type is path)</td>
- <td width="94%">
- <ul>
- <li>Somewhat cleaner design (although added iterator functions is unusual)</li>
- <li>User cannot reuse cache</li>
- <li>Readability and write-ability is OK: f(*it) and it.f() sufficiently
- different</li>
- <li>Most common iterator use is brief: *it</li>
- <li>Preserves existing code</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td width="8%" valign="top" align="center"><b><i>3</i></b></td>
- <td width="25%" valign="top">Predicate member functions of basic_directory_<span style="background-color: #FFFF00">entry</span><br>
- (basic_directory_iterator value_type is basic_directory_entry)<br>
-&nbsp;</td>
- <td width="94%">
- <ul>
- <li>Cleanest design.</li>
- <li>User can reuse cache.</li>
- <li>Readability and write-ability is OK: f(*it) and it-&gt;f() sufficiently
- different.</li>
- <li>Most common iterator use is longer: it-&gt;path(), but by providing
- &quot;operator const basic_path &amp;&quot; it is still possible to write a bare *it.</li>
- <li>Breaks some existing code. The &quot;operator const basic_path &amp;&quot;
- conversion eliminates breakage of the most common use case, while
- providing a (deprecated) leaf() prevents breakage of the second most
- common use case.</li>
- </ul>
- </td>
- </tr>
- </table>
-<h2><a name="Rationale">Rationale</a></h2>
-<h3>Elimination of the native versus generic <a name="distinction">distinction</a></h3>
-<p>Elimination of user confusion and general design simplification was the
-original motivation for elimination of the distinction between native and
-generic paths.</p>
-<p>During design work, a further technical argument was discovered. Consider the
-path <code>&quot;c:foo/bar&quot;</code>. On many POSIX systems, <code>&quot;c:foo&quot;</code> is a
-valid directory name, so we have a two element path and there is no issue of
-native versus generic format. On Windows system, however, <code>&quot;c:&quot;</code> is a
-drive specification, so we have a three element path. All calls to the operating
-system will result in <code>&quot;c:&quot;</code> being considered a drive specification;
-there is no way that fact-of-life can be changed by claiming the format is
-generic. The native versus generic distinction is thus useless and misleading
-for POSIX, Windows, and probably most other operating systems.</p>
-<p>If paths for a particular operating system did require a distinction be made,
-it could be done by requiring that native paths be prefixed with some unique
-implementation-defined identification. For example, <code>&quot;native-path:&quot;</code>.
-This would only be required for operating systems where (1) the distinction
-mattered, and (2) there was no lexical way to distinguish the two forms. For
-example, a native operating system that used the same syntax as the Filesystem
-Library's generic POSIX-like format, but processed the elements right-to-left
-instead of left-to-right.</p>
-<h3>Preservation of <a name="existing-code">existing code</a></h3>
-<p>Allowing existing user code to continue to work with the updated version of
-the library has obvious benefits in terms of preserving the effort users have
-applied to both learning the library and writing code which uses the library.</p>
-<p>There is an additional motivation; other than the name checking portion of
-class path,&nbsp; the existing interface has proven to be useful and robust, so
-there is no reason to fiddle with it.</p>
-<h3><a name="Single_path_design">Single path design</a></h3>
-<p>During preliminary internationalization discussion on the Boost developer's
-list, a design was considered for a single path class which could hold either
-narrow or wide character based paths. That design was rejected because:</p>
-<ul>
- <li>The design was, for many applications, an over-generalization with runtime
- memory and speed costs which would have to be paid for even when not needed.<br>
-&nbsp;</li>
- <li>There was concern that the design would be confusing to users, given that
- the standard library already uses single-value-type strings, rather than
- strings which morph value types as needed.<br>
-&nbsp;</li>
- <li>There were technical issues with conversions when a narrow path was
- appended to a wide path, and visa versa. The concern was that double
- conversions could cause incorrect results, that conversions best left to the
- operating system would be performed, and that the technical complexity was too
- great in relation to perceived benefits. User-defined types would only make
- the problem worse.<br>
-&nbsp;</li>
-</ul>
-<h3>No versions of <a href="reference.html#Status-functions">status()</a> which throw exceptions on
-errors</h3>
-<p>The rationale for not including versions of status()
-which throw exceptions on errors is that (1) the primary purpose of this
-function is to perform queries at a very low-level, where exceptions are usually
-unwanted, and (2) exceptions on errors are already provided by the predicate
-functions. There would be little or no efficiency gain from providing a throwing
-version of status().</p>
-<h3>Symlink identifying version of <a href="reference.html#Status-functions">status()</a> function</h3>
-<p>A symlink identifying version of the status() function is distinguished by a
-second argument. Often separately named functions are more appropriate than
-overloading when behavior
-differs, which is the case here, while overloads are more appropriate when
-behavior is the same but argument types differ (Iain Hanson). Overloading was
-chosen in this particular case because a subjective judgment that a single
-function name with an optional &quot;symlink&quot; second argument produced more
-understandable code. The original implementation of the function used the name &quot;symlink_status&quot;,
-but that just didn't read right in real code.</p>
-<h3>POSIX wpath_traits defaults to locale(&quot;&quot;), but allows imbuing of locale</h3>
-<p>Vladimir Prus pointed out that for Linux (and presumably other POSIX
-operating systems) that need to convert wide character paths to narrow
-characters, the default conversion should not depend on the operating system
-alone, but on the std::locale(&quot;&quot;) default. For example, the usual encoding
-for Russian on Linux (and Russian web sites) is KOI8-R (RFC1489). The ability to safely specify a different locale
-is also provided, to meet unforeseen needs.</p>
-<hr>
-<p>Revised
-<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->18 March, 2008<!--webbot bot="Timestamp" endspan i-checksum="29005" --></p>
-<p>© Copyright Beman Dawes, 2005</p>
-<p>Distributed under the Boost Software License, Version 1.0.
-(See accompanying file <a href="../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or
-copy at <a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>)</p>
-
-</body>
-
-</html> \ No newline at end of file
diff --git a/libs/filesystem/v2/doc/index.htm b/libs/filesystem/v2/doc/index.htm
deleted file mode 100644
index ee0c089139..0000000000
--- a/libs/filesystem/v2/doc/index.htm
+++ /dev/null
@@ -1,835 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<title>Filesystem Home</title>
-<link rel="stylesheet" type="text/css" href="../../../../doc/src/minimal.css">
-</head>
-
-<body>
-
-<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="710">
- <tr>
- <td width="277">
-<a href="../../../../index.htm">
-<img src="../../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="277" height="86" border="0"></a></td>
- <td width="410" align="middle">
- <font size="7">Filesystem Library<br>
- Version 2</font>
- </td>
- </tr>
-</table>
-
-<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
- <tr>
- <td><a href="../../../../index.htm">Boost Home</a>&nbsp;&nbsp;&nbsp;
- <a href="index.htm">Library Home</a>&nbsp; &nbsp; <a href="#tutorial">Tutorial</a>&nbsp; &nbsp; <a href="reference.html">
- Reference</a>&nbsp;&nbsp; <a href="faq.htm">FAQ</a></td>
- </tr>
-</table>
-
-<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" align="right">
- <tr>
- <td width="100%" bgcolor="#D7EEFF" align="center">
- <i><b>Contents</b></i></td>
- </tr>
- <tr>
- <td width="100%" bgcolor="#E8F5FF">
- <a href="#Introduction">Introduction</a><br>
- <a href="#Using">Using the library</a><br>
- <a href="#tutorial">Two-minute tutorial</a><br>
- <a href="#Cautions">Cautions</a><br>
- <a href="#Examples">Example programs</a><br>
- <a href="#Implementation">Implementation</a><br>
- <a href="#Macros">Macros</a><br>
- <a href="#Deprecated-names">Deprecated names and features</a><br>
- <a href="#narrow-only">Using only narrow character paths</a><br>
- <a href="#Building">Building the object-library</a><br>
- &nbsp;&nbsp;&nbsp;&nbsp;<a href="#Cgywin">Notes for Cygwin users</a><br>
- <a href="#Acknowledgements">Acknowledgements</a><br>
- <a href="#Change-history">Change history</a></td>
- </tr>
- <tr>
- <td width="100%" bgcolor="#D7EEFF" align="center">
- <i><b>Other Documents</b></i></td>
- </tr>
- <tr>
- <td width="100%" bgcolor="#E8F5FF">
- <a href="reference.html">Reference</a><br>
- <a href="design.htm">Library Design</a><br>
- <a href="faq.htm">FAQ</a><br>
- <a href="portability_guide.htm">Portability Guide</a><br>
- <a href="do-list.htm">Do-list</a>
- </td>
- </tr>
-</table>
-
-<div align="center">
- <center>
- <table border="1" cellpadding="10" cellspacing="1" style="border-collapse: collapse" bordercolor="#111111">
- <tr>
- <td>
- <p align="center"><b>This is the home page for Version 2 of the Filesystem library.</b></p>
- <p align="left"><a href="../../v3/doc/index.htm">Version 3</a>, a major revision with many new and improved
- features, is also available. Version 3 may break some user code written
- for Version 2.</p>
- <p align="left">To ease the transition, Boost releases 1.44 through 1.47
- will supply both V2 and V3. Version 2 is the default version for Boost release 1.44
- and 1.45. Version 3 will be the default starting with release 1.46.</p>
- <p align="left"><b>Define macro BOOST_FILESYSTEM_VERSION as 3 to use
- Version 3. This will be the default for release 1.46 and later.</b></p>
- <p align="left"><b>Define macro BOOST_FILESYSTEM_VERSION as 2 to use
- Version 2. This is the default for release 1.44 and 1.45.</b></p>
- <p align="left"><b>You may define the BOOST_FILESYSTEM_VERSION macro:</b></p>
- <ul>
- <li>
- <p align="left"><b>On the build command line; the exact format depends on
- your compiler or IDE</b></p>
- </li>
- <li>
- <p align="left"><b>In your code, before including any filesystem header,
- #define BOOST_FILESYSTEM_VERSION <i>n</i></b></p>
- </li>
- <li>
- <p align="left"><b>#define BOOST_FILESYSTEM_VERSION <i>n </i>in boost/config/user.hpp.
- Note that this approach applies to all uses of Boost.Filesystem.</b></p>
- </li>
- </ul>
- <p align="left">Existing code should be moved to version 3 as soon as
- convenient. New code should be written for version 3.</p>
- <p align="left">Version 2 is deprecated, and will not be included in Boost
- releases 1.48 and later.</p>
- <p align="left"><b>Building the library</b></p>
- <p align="left">By default, the Boost build system creates libraries that
- support both version 2 and version 3. To support only a single version,
- include <code>--disable-filesystem2</code> or <code>--disable-filesystem3</code>
- on the <code>bjam</code> command line.</p>
- </td>
- </tr>
- </table>
- </center>
-</div>
-
-<h2><a name="Introduction">Introduction</a></h2>
-<p>The Boost.Filesystem library provides portable facilities to query and
-manipulate paths, files, and directories.</p>
-
-<p>The motivation for the library is the need to perform portable script-like operations from within C++ programs. The intent is not to
-compete with Python, Perl, or shell languages, but rather to provide portable filesystem
-operations when C++ is already the language of choice. The <a href="design.htm">
-design</a> encourages, but does not require, safe and portable usage.</p>
-
-<p>Programs using the library are <b><i>portable</i></b>, both in the sense that
-the syntax of program code is portable, and the sense that the semantics or
-behavior of code is portable. The <a href="reference.html">generic path
-grammar</a> is another important aid to portability.</p>
-
-<p>Usage is <i><b>safe</b></i> in the sense that errors cannot be ignored since most functions throw C++
-exceptions when errors are detected. This is also convenient for users because
-it alleviates the&nbsp;need to explicitly check error
-return codes.</p>
-
-<p>A proposal,
-<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1975.html">
-N1975</a>, to include Boost.Filesystem in Technical Report 2 has been accepted
-by the C++ Standards Committee. The Boost.Filesystem library will stay in
-alignment with the TR2 Filesystem proposal as it works its way through the TR2
-process. Note, however, that namespaces and header granularity differs between
-Boost.Filesystem and the TR2 proposal.</p>
-
-<p>The Boost.Filesystem library provides several&nbsp; headers:</p>
-
-<ul>
- <li>Header &lt;<a href="../../../../boost/filesystem.hpp">boost/filesystem.hpp</a>&gt; provides class <i>
- basic_path, </i>a portable mechanism for representing
- <a href="#path">paths</a> in C++ programs. Typedefs <i>path</i> and <i>
- wpath</i> ease the most common usages of <i>basic_path</i>. Operational
- functions provide useful query and maintenance operations on files and directories.
- Class <i>basic_directory_iterator</i> with typdefs <i>
- directory_iterator</i> and <i>wdirectory_iterator</i> provide iteration over
- the contents of directories. Convenience functions and classes combine lower-level functionality
- in useful ways.<br>
-&nbsp;</li>
- <li>Header &lt;<a href="../../../../boost/filesystem/fstream.hpp">boost/filesystem<i>/</i>fstream.hpp</a>&gt; provides the same components as the C++ Standard
- Library's <i>fstream</i> header, except
- that files are identified by <i>basic_path</i> objects rather that <i>char *</i>'s.</li>
-</ul>
-<h2><a name="Using">Using</a> the library</h2>
-<p>Boost.Filesystem is implemented as a separately compiled library, so before
-using it you must install it in a location that can be found by your linker. See
-<a href="#Building">Building the object-library</a>. </p>
-<p>The library's <a href="../example">example directory</a> contains very simple
-scripts for building the <a href="#Examples">example programs</a> on various
-platforms. You can use these scripts to see what's needed to compile and link
-your own programs.</p>
-<h2>Two-minute <a name="tutorial">tutorial</a></h2>
-<p>(A
-<a href="http://beans.seartipy.com/2006/05/10/boost-filesystem-library-writing-portable-c-programs-to-acess-the-filesystem/">
-more elaborate tutorial</a> is also available from Tabrez Iqbal.)</p>
-<p>First some preliminaries:</p>
-<blockquote>
- <pre>#include &quot;boost/filesystem.hpp&quot; // includes all needed Boost.Filesystem declarations
-#include &lt;iostream&gt; // for std::cout
-using boost::filesystem; // for ease of tutorial presentation;
- // a namespace alias is preferred practice in real code</pre>
-</blockquote>
-<p>A <a href="reference.html#Class-template-basic_path">class <i>path</i></a> object can be created:</p>
-<blockquote>
- <pre>path my_path( &quot;some_dir/file.txt&quot; );</pre>
-</blockquote>
-<p>The string passed to the <i>path</i> constructor may be in a
-<a href="reference.html#Pathname-formats">portable generic path format</a> or an
-implementation-defined native operating system format. Access functions
-make <i>my_path</i> contents available to the underlying operating system API in an operating system dependent format,
-such as <code>&quot;some_dir:file.txt&quot;</code>, <code>&quot;[some_dir]file.txt&quot;</code>,
-<code>&quot;some_dir/file.txt&quot;</code>, or whatever is appropriate for the
-operating system. If class <i>wpath</i> is used instead of class <i>path</i>,
-translation between wide and narrow character paths is performed automatically
-if necessary for the operating system.</p>
-<p>Class <i>path</i> has conversion constructors from <i>const char*</i> and <i>
-const std:: string&amp;</i>, so that even though the Filesystem Library
-functions used in the following code snippet have <i>const path&amp;</i> formal
-parameters, the user can just
-code C-style strings as actual arguments:</p>
-<blockquote>
- <pre>remove_all( &quot;foobar&quot; );
-create_directory( &quot;foobar&quot; );
-ofstream file( &quot;foobar/cheeze&quot; );
-file &lt;&lt; &quot;tastes good!\n&quot;;
-file.close();
-if ( !exists( &quot;foobar/cheeze&quot; ) )
- std::cout &lt;&lt; &quot;Something is rotten in foobar\n&quot;;</pre>
-</blockquote>
-<p>To make class <i>path</i> objects easy to use in expressions, <i>operator/</i>
-appends paths:</p>
-<blockquote>
- <pre>ifstream file1( arg_path / &quot;foo/bar&quot; );
-ifstream file2( arg_path / &quot;foo&quot; / &quot;bar&quot; );</pre>
-</blockquote>
-<p>The expressions <i>arg_path / &quot;foo/bar&quot;</i> and <i>arg_path / &quot;foo&quot;
-/ &quot;bar&quot;</i> yield identical results.</p>
-<p>Paths can include references to the current directory, using &quot;<code>.</code>&quot;
-notation, and the parent directory, using &quot;<code>..</code>&quot;
-notation.</p>
-<p><a href="reference.html#Class-template-basic_directory_iterator">Class <i>basic_directory_iterator</i></a>
-is an important component of the library. It provides an input iterator over the
-contents of a directory, with the value type being class <i>basic_path</i>.
-Typedefs <i>directory_iterator</i> and <i>wdirectory_iterator</i> are provided
-to cover the most common use cases.</p>
-<p>The following function, given a directory path and a file name, recursively
-searches the directory and its sub-directories for the file name, returning a
-bool, and if successful, the path to the file that was found.&nbsp; The code
-below is extracted from a real program, slightly modified for clarity:</p>
-<blockquote>
- <pre>bool find_file( const path &amp; dir_path, // in this directory,
- const std::string &amp; file_name, // search for this name,
- path &amp; path_found ) // placing path here if found
-{
- if ( !exists( dir_path ) ) return false;
- directory_iterator end_itr; // default construction yields past-the-end
- for ( directory_iterator itr( dir_path );
- itr != end_itr;
- ++itr )
- {
- if ( is_directory(itr-&gt;status()) )
- {
- if ( find_file( itr-&gt;path(), file_name, path_found ) ) return true;
- }
- else if ( itr-&gt;path().filename() == file_name ) // see below
- {
- path_found = itr-&gt;path();
- return true;
- }
- }
- return false;
-}</pre>
-</blockquote>
-<p>The expression <i>itr-&gt;path().filename() == file_name</i>, in the line commented <i>//
-see below</i>, calls the <i>filename()</i> function on the <i>path</i> returned by
-calling the <i>path()</i> function of the <i>directory_entry </i>object pointed
-to by the iterator. <i>filename()</i> returns a string which is a copy of the
-last (closest to the leaf, farthest from the root) file or directory name in the
-<i>path</i> object.</p>
-<p>Notice that <i>find_file()</i> does not do explicit error checking, such as
-verifying that the <i>dir_path</i> argument really represents a directory.
-Boost.Filesystem functions throw
-exceptions if they do not complete successfully, so there is enough implicit
-error checking that this application doesn't need to supply additional error
-checking code unless desired. Several Boost.Filesystem functions have non-throwing
-versions, to ease use cases where exceptions would not be appropriate.</p>
-<blockquote>
-<p><i>Note: </i>Recursive
-directory iteration was added as a convenience function after the above tutorial code
-was written, so nowadays you
-don't have to actually code the recursion yourself.</p>
-</blockquote>
-<h2><a name="Cautions">Cautions</a></h2>
-<p>After reading the tutorial you can dive right into simple,
-script-like programs using the Filesystem Library! Before doing any serious
-work, however, there a few cautions to be aware of:</p>
-<h4><b>Effects and Postconditions not guaranteed in the presence of race-conditions</b></h4>
-<p>Filesystem function specifications follow the C++ Standard Library form, specifying behavior in terms of
-effects and postconditions. If
-a <a href="reference.html#Race-condition">race-condition</a> exists, a function's
-postconditions may no longer be true by the time the function returns to the
-caller.</p>
-<blockquote>
-<p><b><i>Explanation: </i></b>The state of files and directories is often
-globally shared, and thus may be changed unexpectedly by other threads,
-processes, or even other computers having network access to the filesystem. As an
-example of the difficulties this can cause, note that the following asserts
-may fail:</p>
-<blockquote>
-<p><code>assert( exists( &quot;foo&quot; ) == exists( &quot;foo&quot; ) );&nbsp; //
-(1)<br>
-<br>
-remove_all( &quot;foo&quot; );<br>
-assert( !exists( &quot;foo&quot; ) );&nbsp; // (2)<br>
-<br>
-assert( is_directory( &quot;foo&quot; ) == is_directory( &quot;foo&quot; ) ); //
-(3)</code></p>
-</blockquote>
-<p>(1) will fail if a non-existent &quot;foo&quot; comes into existence, or an
-existent &quot;foo&quot; is removed, between the first and second call to <i>exists()</i>.
-This could happen if, during the execution of the example code, another thread,
-process, or computer is also performing operations in the same directory.</p>
-<p>(2) will fail if between the call to <i>remove_all()</i> and the call to
-<i>exists()</i> a new file or directory named &quot;foo&quot; is created by another
-thread, process, or computer.</p>
-<p>(3) will fail if another thread, process, or computer removes an
-existing file &quot;foo&quot; and then creates a directory named &quot;foo&quot;, between the
-example code's two calls to <i>is_directory()</i>.</p>
-</blockquote>
-<h4><b>May throw exceptions</b></h4>
-<p>Unless otherwise specified, Boost.Filesystem functions throw <i>
-<a href="reference.html#basic_filesystem_error-constructors">basic_filesystem_error</a></i>
-exceptions if they cannot successfully complete their operational
-specifications. Also, implementations may use C++ Standard Library functions,
-which may throw <i>std::bad_alloc</i>. These exceptions may be thrown even
-though the error condition leading to the exception is not explicitly specified
-in the function's &quot;Throws&quot; paragraph.</p>
-<p>All exceptions thrown by the Filesystem
-Library are implemented by calling <a href="../../../utility/throw_exception.html">
-boost::throw_exception()</a>. Thus exact behavior may differ depending on
-BOOST_NO_EXCEPTIONS at the time the filesystem source files are compiled.</p>
-<p>Non-throwing versions are provided of several functions that are often used
-in contexts where error codes may be the preferred way to report an error.</p>
-<h2><a name="Examples">Example programs</a></h2>
-<h3><a href="../example/simple_ls.cpp">simple_ls.cpp</a></h3>
-<p>The example program <a href="../example/simple_ls.cpp">simple_ls.cpp</a> is
-given a path as a command line argument. Since the command line argument may be
-a relative path, the complete path is determined so that messages displayed
-can be more precise.</p>
-<p>The program checks to see if the path exists; if not a message is printed.</p>
-<p>If the path identifies a directory, the directory is iterated through,
-printing the name of the entries found, and an indication if they are
-directories. A count of directories and files is updated, and then printed after
-the iteration is complete.</p>
-<p>If the path is for a file, a message indicating that is printed.</p>
-<p>Try compiling and executing <a href="../example/simple_ls.cpp">simple_ls.cpp</a>
-to see how it works on your system. Try various path arguments to see what
-happens.</p>
-<h3><a href="../example/file_size.cpp">file_size.cpp</a></h3>
-<p>This example program prints the file's size if it is a regular file.</p>
-<h3>Other examples</h3>
-<p>The programs used to generate the Boost regression test status tables use the
-Filesystem Library extensively.&nbsp; See:</p>
-<ul>
- <li><a href="../../../../tools/regression/src/process_jam_log.cpp">process_jam_log.cpp</a></li>
- <li><a href="../../../../tools/regression/src/compiler_status.cpp">compiler_status.cpp</a></li>
-</ul>
-<p>Test programs are sometimes useful in understanding a library, as they
-illustrate what the developer expected to work and not work. See:</p>
-<ul>
- <li><a href="../test/wide_test.cpp">wide_test.cpp</a></li>
- <li><a href="../test/path_test.cpp">path_test.cpp</a></li>
- <li><a href="../test/operations_test.cpp">operations_test.cpp</a></li>
- <li><a href="../test/fstream_test.cpp">fstream_test.cpp</a></li>
-</ul>
-<h2><a name="Implementation">Implementation</a></h2>
-<p>The current implementation supports operating systems which provide
-either the POSIX or Windows API.</p>
-<p>The library is in regular use on Apple OS X, HP-UX, IBM AIX, Linux,
-Microsoft Windows, SGI IRIX, and Sun Solaris operating systems using a variety
-of compilers.</p>
-<h2><a name="Macros">Macros</a></h2>
-<p>Users may defined the following macros if desired. Sensible defaults are
-provided, so users can ignore these macros unless they have special needs.</p>
-<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
- <tr>
- <td><b><i>Macro Name</i></b></td>
- <td><b><i>Default</i></b></td>
- <td><b><i>Effect if defined</i></b></td>
- </tr>
- <tr>
- <td valign="top"><code>BOOST_FILESYSTEM_DYN_LINK</code></td>
- <td valign="top">Defined if <code>BOOST_ALL_DYN_LINK</code> is defined,
- otherwise not defined.</td>
- <td valign="top">Boost.System library is dynamically linked. If not defined,
- static linking is assumed.</td>
- </tr>
- <tr>
- <td valign="top"><code>BOOST_FILESYSTEM_NO_LIB</code></td>
- <td valign="top">Defined if <code>BOOST_ALL_NO_LIB</code> is defined,
- otherwise not defined.</td>
- <td valign="top">Boost.System library does not use the Boost auto-link
- facility.</td>
- </tr>
- <tr>
- <td valign="top"><code>BOOST_FILESYSTEM_NARROW_ONLY</code></td>
- <td valign="top">Not defined.</td>
- <td valign="top">Removes features that require wchar_t support.</td>
- </tr>
- <tr>
- <td valign="top"><code>BOOST_FILESYSTEM_NO_DEPRECATED</code></td>
- <td valign="top">Not defined.</td>
- <td valign="top">Deprecated features are excluded.</td>
- </tr>
-</table>
-<h2><a name="Deprecated-names">Deprecated names</a> and features</h2>
-<p style="font-size: 10pt">User-defined BOOST_POSIX_API and BOOST_WINDOWS_API
-macros are no longer supported.</p>
-<p style="font-size: 10pt">As the library evolves over time, names sometimes
-change or features are removed. To ease transition, Boost.Filesystem deprecates
-the old names and features, but continues to provide them unless macro <code>
-BOOST_FILESYSTEM_NO_DEPRECATED</code> is defined.</p>
-<table border="1" cellpadding="5" cellspacing="1" style="border-collapse: collapse" bordercolor="#111111">
- <tr>
- <td style="font-size: 10pt">
- <b><i>Component</i></b></td>
- <td style="font-size: 10pt">
- <p style="font-size: 10pt"><b><i>Old name, now deprecated</i></b></td>
- <td style="font-size: 10pt">
- <p style="font-size: 10pt"><b><i>New name</i></b></td>
- </tr>
- <tr>
- <td style="font-size: 10pt" valign="top"><code>basic_path</code></td>
- <td style="font-size: 10pt"><code>leaf()</code></td>
- <td style="font-size: 10pt"><code>filename()</code></td>
- </tr>
- <tr>
- <td style="font-size: 10pt" valign="top"><code>basic_path</code></td>
- <td style="font-size: 10pt"><code>branch_path()</code></td>
- <td style="font-size: 10pt"><code>parent_path()</code></td>
- </tr>
- <tr>
- <td style="font-size: 10pt" valign="top"><code>basic_path</code></td>
- <td style="font-size: 10pt"><code>has_leaf()</code></td>
- <td style="font-size: 10pt"><code>has_filename()</code></td>
- </tr>
- <tr>
- <td style="font-size: 10pt" valign="top"><code>basic_path</code></td>
- <td style="font-size: 10pt"><code>has_branch_path()</code></td>
- <td style="font-size: 10pt"><code>has_parent_path()</code></td>
- </tr>
- <tr>
- <td style="font-size: 10pt" valign="top">
- <code>basic_path</code></td>
- <td style="font-size: 10pt">
- <p style="font-size: 10pt"><code>remove_leaf()</code></td>
- <td style="font-size: 10pt">
- <p style="font-size: 10pt"><code>remove_filename()</code></td>
- </tr>
- <tr>
- <td style="font-size: 10pt" valign="top">
- <code>basic_path</code></td>
- <td style="font-size: 10pt">
- <code>basic_path( const string_type &amp; str,<br>
-&nbsp; name_check )</code></td>
- <td style="font-size: 10pt">
- <i><code>feature removed</code></i></td>
- </tr>
- <tr>
- <td style="font-size: 10pt" valign="top">
- <code>basic_path</code></td>
- <td style="font-size: 10pt">
- <code>basic_path( const string_type::value_type * s,<br>
-&nbsp; name_check )</code></td>
- <td style="font-size: 10pt">
- <i><code>feature removed</code></i></td>
- </tr>
- <tr>
- <td style="font-size: 10pt" valign="top">
- <code>basic_path</code></td>
- <td style="font-size: 10pt">
- <code>native_file_string()</code></td>
- <td style="font-size: 10pt">
- <code>file_string()</code></td>
- </tr>
- <tr>
- <td style="font-size: 10pt" valign="top">
- <code>basic_path</code></td>
- <td style="font-size: 10pt">
- <code>native_directory_string()</code></td>
- <td style="font-size: 10pt">
- <code>directory_string()</code></td>
- </tr>
- <tr>
- <td style="font-size: 10pt" valign="top">
- <code>basic_path</code></td>
- <td style="font-size: 10pt">
- <code>default_name_check_writable()</code></td>
- <td style="font-size: 10pt">
- <i><code>feature removed</code></i></td>
- </tr>
- <tr>
- <td style="font-size: 10pt" valign="top">
- <code>basic_path</code></td>
- <td style="font-size: 10pt">
- <code>default_name_check( name_check )</code></td>
- <td style="font-size: 10pt">
- <i><code>feature removed</code></i></td>
- </tr>
- <tr>
- <td style="font-size: 10pt" valign="top">
- <code>basic_path</code></td>
- <td style="font-size: 10pt">
- <code>default_name_check()</code></td>
- <td style="font-size: 10pt">
- <i><code>feature removed</code></i></td>
- </tr>
- <tr>
- <td style="font-size: 10pt" valign="top">
- <code>basic_path</code></td>
- <td style="font-size: 10pt">
- <code>canonize()</code></td>
- <td style="font-size: 10pt">
- <i><code>feature removed</code></i></td>
- </tr>
- <tr>
- <td style="font-size: 10pt" valign="top">
- <code>basic_path</code></td>
- <td style="font-size: 10pt">
- <code>normalize()</code></td>
- <td style="font-size: 10pt">
- <i><code>feature removed</code></i></td>
- </tr>
- <tr>
- <td style="font-size: 10pt" valign="top">
- <code>operations.hpp</code></td>
- <td style="font-size: 10pt">
- <code>is_regular( file_status f )</code></td>
- <td style="font-size: 10pt">
- <code>is_regular_file( file_status f )</code></td>
- </tr>
- <tr>
- <td style="font-size: 10pt" valign="top">
- <code>operations.hpp</code></td>
- <td style="font-size: 10pt">
- <code>symbolic_link_exists( const path &amp; ph )</code></td>
- <td style="font-size: 10pt">
- <i><code>feature removed</code></i></td>
- </tr>
- <tr>
- <td style="font-size: 10pt" valign="top">
- <code>basic_directory_status</code></td>
- <td style="font-size: 10pt">
- <code>filename()</code></td>
- <td style="font-size: 10pt">
- <i><code>feature removed, use path().filename() instead</code></i></td>
- </tr>
- <tr>
- <td style="font-size: 10pt" valign="top">
- <code>basic_directory_status</code></td>
- <td style="font-size: 10pt">
- <code>leaf()</code></td>
- <td style="font-size: 10pt">
- <i><code>feature removed, use path().filename() instead</code></i></td>
- </tr>
- <tr>
- <td style="font-size: 10pt" valign="top">
- <code>basic_directory_status</code></td>
- <td style="font-size: 10pt">
- <code>string()</code></td>
- <td style="font-size: 10pt">
- <i><code>feature removed, use path().string() instead</code></i></td>
- </tr>
-</table>
-<h2><a name="narrow-only">Restricting library to narrow character paths</a></h2>
-<p>Compilers or standard libraries which do not support wide characters (wchar_t)
-or wide character strings (std::wstring) are detected automatically, and cause
-the library to compile code that is restricted to narrow character paths
-(boost::filesystem::path). Users can force this restriction by defining the
-macro BOOST_FILESYSTEM_NARROW_ONLY. That may be useful for dealing with legacy
-compilers or operating systems.</p>
-<h2><a name="Building">Building</a> the object-library</h2>
-<p>The object-library will be built automatically if you are using the Boost
-build system. See
-<a href="../../../../more/getting_started.html">Getting Started</a>. It can also be
-built manually using a <a href="../build/Jamfile.v2">Jamfile</a>
-supplied in directory libs/filesystem/build, or the user can construct an IDE
-project or make file which includes the object-library source files.</p>
-<p>The object-library source files are
-supplied in directory <a href="../src">libs/filesystem/src</a>. These source files implement the
-library for POSIX or Windows compatible operating systems; no implementation is
-supplied for other operating systems. Note that many operating systems not
-normally thought of as POSIX systems, such as mainframe legacy
-operating systems or embedded operating systems, support POSIX compatible file
-systems which will work with the Filesystem Library.</p>
-<p>The object-library can be built for static or dynamic (shared/dll) linking.
-This is controlled by the BOOST_ALL_DYN_LINK or BOOST_FILESYSTEM_DYN_LINK
-macros. See the <a href="http://www.boost.org/development/separate_compilation.html">Separate
-Compilation</a> page for a description of the techniques used.</p>
-<h3>Note for <a name="Cgywin">Cygwin</a> users</h3>
-<p>The library's implementation code treats <a href="http://www.cygwin.com/">Cygwin</a>
-as a Windows platform, and thus uses the Windows API.</p>
-<h2><a name="Acknowledgements">Acknowledgements</a></h2>
-<p>The Filesystem Library was designed and implemented by Beman Dawes. The
-original <i>directory_iterator</i> and <i>filesystem_error</i> classes were
-based on prior work from Dietmar Kuehl, as modified by Jan Langer. Thomas Witt
-was a particular help in later stages of initial development. Peter Dimov and
-Rob Stewart made many useful suggestions and comments over a long period of
-time. Howard Hinnant helped with internationalization issues.</p>
-
-<p>Key <a href="design.htm#Requirements">design requirements</a> and
-<a href="design.htm#Realities">design realities</a> were developed during
-extensive discussions on the Boost mailing list, followed by comments on the
-initial implementation. Numerous helpful comments were then received during the
-Formal Review.<p>Participants included
-Aaron Brashears,
-Alan Bellingham,
-Aleksey Gurtovoy,
-Alex Rosenberg,
-Alisdair Meredith,
-Andy Glew,
-Anthony Williams,
-Baptiste Lepilleur,
-Beman Dawes,
-Bill Kempf,
-Bill Seymour,
-Carl Daniel,
-Chris Little,
-Chuck Allison,
-Craig Henderson,
-Dan Nuffer,
-Dan'l Miller,
-Daniel Frey,
-Darin Adler,
-David Abrahams,
-David Held,
-Davlet Panech,
-Dietmar Kuehl,
-Douglas Gregor,
-Dylan Nicholson,
-Ed Brey,
-Eric Jensen,
-Eric Woodruff,
-Fedder Skovgaard,
-Gary Powell,
-Gennaro Prota,
-Geoff Leyland,
-George Heintzelman,
-Giovanni Bajo,
-Glen Knowles,
-Hillel Sims,
-Howard Hinnant,
-Jaap Suter,
-James Dennett,
-Jan Langer,
-Jani Kajala,
-Jason Stewart,
-Jeff Garland,
-Jens Maurer,
-Jesse Jones,
-Jim Hyslop,
-Joel de Guzman,
-Joel Young,
-John Levon,
-John Maddock,
-John Williston,
-Jonathan Caves,
-Jonathan Biggar,
-Jurko,
-Justus Schwartz,
-Keith Burton,
-Ken Hagen,
-Kostya Altukhov,
-Mark Rodgers,
-Martin Schuerch,
-Matt Austern,
-Matthias Troyer,
-Mattias Flodin,
-Michiel Salters,
-Mickael Pointier,
-Misha Bergal,
-Neal Becker,
-Noel Yap,
-Parksie,
-Patrick Hartling, Pavel Vozenilek,
-Pete Becker,
-Peter Dimov,
-Rainer Deyke,
-Rene Rivera,
-Rob Lievaart,
-Rob Stewart,
-Ron Garcia,
-Ross Smith,
-Sashan,
-Steve Robbins,
-Thomas Witt,
-Tom Harris,
-Toon Knapen,
-Victor Wagner,
-Vincent Finn,
-Vladimir Prus, and
-Yitzhak Sapir
-
-<p>A lengthy discussion on the C++ committee's library reflector illuminated the &quot;illusion
-of portability&quot; problem, particularly in postings by PJ Plauger and Pete Becker.</p>
-
-<p>Walter Landry provided much help illuminating symbolic link use cases for
-version 1.31.0.</p>
-
-<h3>Version 1.34 (<a href="i18n.html">i18n</a>) acknowledgements</h3>
-
-<p>So many people have contributed comments and bug reports that it isn't any
-longer possible to acknowledge them individually. That said, Peter Dimov and Rob
-Stewart need to be specially thanked for their many constructive criticisms and
-suggestions. Terence
-Wilson and Chris Frey contributed timing programs which helped illuminate
-performance issues.</p>
-
-<h2><a name="Change-history">Change history</a></h2>
-
-<h3>Version 1.37.0</h3>
-
-<ul>
- <li>Doc fixes: Update release history, add tables of macros and deprecated
- names.</li>
- <li>Bug fix: convenience.hpp didn't fully apply BOOST_FILESYSTEM_NO_DEPRECATED
- to name changes.</li>
- <li>Bug fix: Ticket #1972 'remove' fixes.</li>
- <li>Bug fix: Restore deprecated basic_directory_entry names inadvertently
- removed.</li>
- <li>Bug fix: Provide deprecated functions has_branch_path and has_leaf,
- inadvertently omitted from 1.36.0</li>
- <li>Add workarounds for Codegear/Borland C++ Builder 2009.</li>
-</ul>
-
-<h3>Version 1.36.0 - August 14th, 2008</h3>
-
-<ul>
- <li>Added stem(), extension(), and replace_extension() member functions to
- basic_path, based on the basename(), extension(), and change_extension()
- functions from convenience.hpp.</li>
- <li>Changed path.hpp function names:<ul>
- <li>leaf() -&gt; filename().</li>
- <li>has_leaf() -&gt; has_filename().</li>
- <li>branch_path() -&gt; parent_path().</li>
- <li>has_branch_path() -&gt; has_parent_path().</li>
- <li>remove_leaf() -&gt; remove_filename().</li>
- </ul>
- </li>
- <li>Changed operations.hpp function names:<ul>
- <li>is_regular() -&gt; is_regular_file().</li>
- </ul>
- </li>
- <li>Bug fix: Add path.cpp #include &lt;cwchar&gt;</li>
- <li>Cleared path.hpp gcc shadow warnings.</li>
-</ul>
-
-<h3>Version 1.35.0 - March 29th, 2008</h3>
-
-<ul>
- <li>Diagnostics moved to the separate <a href="../../../system/doc/index.html">
- Boost.System</a> library.</li>
- <li>current_path() function added to set the current directory path.</li>
- <li>Test coverage extended.</li>
- <li>A few minor implementation fixes.</li>
-</ul>
-
-<h3>Version 1.34.1 - July 24th, 2007</h3>
-
-<h3><a href="i18n.html">Version 1.34.0</a> - May 12th, 2007</h3>
-
-<ul>
- <li><a href="i18n.html#Internationalization">Internationalization</a>, provided by
- class templates <i>basic_path</i>, <i>basic_filesystem_error</i>, and <i>
- basic_directory_iterator</i>.</li>
- <li><a href="i18n.html#Simplification">Simplification</a> of the path interface,
- including elimination of distinction between native and generic formats,
- and separation of name checking functionality from general path functionality.</li>
- <li><a href="i18n.html#Rationalization">Rationalization</a> of predicate
- function design, including the addition of several new functions.</li>
- <li><a href="i18n.html#Preservation">Preservation</a> of existing user code whenever
- possible. Deprecated features (<i>symbolic_link_exists()</i>, etc.) remain
- available for legacy code.</li>
- <li>Clearer specification, by reference to [<a href="design.htm#POSIX-01">POSIX-01</a>],
- the ISO/IEEE Single Unix Standard, with provisions for Windows and other
- operating systems.</li>
- <li>New functions <a href="reference.html#Status-functions">status</a>,
- <a href="reference.html#Status-functions">symlink_status</a>,
- <a href="reference.html#Predicate-functions">is_file</a>,
- <a href="reference.html#Predicate-functions">is_symlink</a>,
- <a href="reference.html#Operations-functions">create_hard_link</a>,
- <a href="reference.html#Operations-functions">create_symlink</a>, path member and non-member swap, path inserter, path
- extractor, additional path relational and &quot;/&quot; operator overloads, additional
- path member template functions taking iterator arguments.</li>
- <li><a href="i18n.html#More_efficient">More efficient operations</a> when iterating over directories.</li>
- <li>Separation within the implementation of the distinction between the native
- operating system path syntax and API. This is important for CYGWIN users
- because it allows them to build for either the Windows or POSIX API's.</li>
- <li>Numerous small implementation fixes.</li>
-</ul>
-
-<h3>Version 1.33.0 - August 11th, 2005</h3>
-
-<ul>
- <li>Some small implementation fixes.</li>
-</ul>
-
-<h3>Version 1.32.0 - November 19th, 2004</h3>
-
-<ul>
- <li><a href="reference.html#Attribute-functions">file_size()</a> function added.</li>
- <li>Class path <a href="reference.html#basic_path-non-member-functions">relational operators</a> added.</li>
- <li><a href="reference.html#Predicate-functions">equivalent()</a> function added.</li>
- <li><a href="reference.html#Operations-functions">create_directory()</a> no longer
- throws if the directory already exists. A bool is returned, indicating that
- the directory did not preexist. Similar changes made to
- <a href="reference.html#Convenience-functions">create_directories()</a>.</li>
- <li><a href="#Cgywin">Docs added</a> for users wishing Cygwin/POSIX behavior
- on Windows.</li>
- <li>For POSIX, Large File Support (LSF) is enabled if available, such as on
- Linux.</li>
- <li><a href="reference.html#initial_path">current_path()</a> and
- <a href="reference.html#initial_path">initial_path()</a> on POSIX now handle
- very long paths correctly.</li>
-</ul>
-
-<h3>Version 1.31.0 - January 26th, 2004</h3>
-
-<ul>
- <li>The object library can now be <a href="#Building">built</a> for either
- static or dynamic (shared/dll) linking. </li>
- <li>Several added functions, including improved checking for directory and
- file name portability. See <a href="portability_guide.htm#name_check_functions">
- Name check functions</a>.</li>
- <li>Separation of canonical form and normalized form and a new path member
- function normalize(). This changes behavior,
- in that canonical form is now different, but eliminates a subtle
- <a href="design.htm#symbolic-link-use-case">bug</a> when symbolic links to
- directories are present.</li>
-</ul>
-
-<h3>&nbsp;<br>
-Version 1.30.0 - March 19th, 2003</h3>
-<ul>
- <li>Initial official Boost version.</li>
-</ul>
-
-<hr>
-<p>Revised
-<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->06 December, 2010<!--webbot bot="Timestamp" endspan i-checksum="38640" --></p>
-
-<p>&copy; Copyright Beman Dawes, 2002-2005</p>
-<p> Use, modification, and distribution are subject to the Boost Software
-License, Version 1.0. See <a href="http://www.boost.org/LICENSE_1_0.txt">
-www.boost.org/LICENSE_1_0.txt</a></p>
-
-</body>
-
-</html> \ No newline at end of file
diff --git a/libs/filesystem/v2/doc/portability_guide.htm b/libs/filesystem/v2/doc/portability_guide.htm
deleted file mode 100644
index 9dc2318209..0000000000
--- a/libs/filesystem/v2/doc/portability_guide.htm
+++ /dev/null
@@ -1,226 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<title>Portability Guide</title>
-<link rel="stylesheet" type="text/css" href="../../../../doc/src/minimal.css">
-</head>
-
-<body bgcolor="#FFFFFF">
-
-<h1>
-<img border="0" src="../../../../boost.png" align="center" width="277" height="86">Path
-Name Portability
-Guide</h1>
-
-<p>
-<a href="#Introduction">Introduction</a><br>
-<a href="#name_check_functions">name_check functions</a><br>
-<a href="#recommendations">File and directory name recommendations</a></p>
-<h2><a name="Introduction">Introduction</a></h2>
-<p>Like any other C++ program which performs I/O operations, there is no
-guarantee that a program using Boost.Filesystem will be portable between
-operating systems. Critical aspects of I/O such as how the operating system
-interprets paths are unspecified by the C and C++ Standards.</p>
-<p>It is not possible to know if a file or directory name will be
-valid (and thus portable) for an unknown operating system. There is always the possibility that an operating system could use
-names which are unusual (numbers less than 4096, for example) or very
-limited in size (maximum of six character names, for example). In other words,
-portability is never absolute; it is always relative to specific operating
-systems or
-file systems.</p>
-<p>It is possible, however, to know in advance if a directory or file name is likely to be valid for a particular
-operating system.&nbsp;It is also possible to construct names which are
-likely to be portable to a large number of modern and legacy operating systems.</p>
-
-<p>Almost all modern operating systems support multiple file systems. At the
-minimum, they support a native file system plus a CD-ROM file system (Generally
-ISO-9669, often with Juliet extensions).</p>
-
-<p>Each file system
-may have its own naming rules. For example, modern versions of Windows support NTFS, FAT, FAT32, and ISO-9660 file systems, among others, and the naming rules
-for those file systems differ. Each file system may also have
-differing rules for overall path validity, such as a maximum length or number of
-sub-directories. Some legacy systems have different rules for directory names
-versus regular file names.</p>
-
-<p>As a result, Boost.Filesystem's <i>name_check</i> functions
-cannot guarantee directory and file name portability. Rather, they are intended to
-give the programmer a &quot;fighting chance&quot; to achieve portability by early
-detection of common naming problems.</p>
-
-<h2><a name="name_check_functions">name_check functions</a></h2>
-
-<p>A <i>name_check</i> function
-returns true if its argument is valid as a directory and regular file name for a
-particular operating or file system. A number of these functions are provided.</p>
-
-<p>The <a href="#portable_name">portable_name</a> function is of particular
-interest because it has been carefully designed to provide wide
-portability yet not overly restrict expressiveness.</p>
-
-<table border="1" cellpadding="5" cellspacing="0">
- <tr>
- <td align="center" colspan="2"><b>Library Supplied name_check Functions</b></td>
- </tr>
- <tr>
- <td align="center"><b>Function</b></td>
- <td align="center"><b>Description</b></td>
- </tr>
- <tr>
- <td align="left" valign="top"><code><a name="portable_posix_name">portable_posix_name</a>(const
- std::string&amp;<i> name</i>)</code></td>
- <td><b>Returns:</b> <i>true</i> if <code>!name.empty() &amp;&amp; name</code> contains only the characters
- specified in<i> Portable Filename Character Set</i> rules as defined in by
- POSIX (<a href="http://www.opengroup.org/onlinepubs/007904975/basedefs/xbd_chap03.html">www.opengroup.org/onlinepubs/007904975/basedefs/xbd_chap03.html</a>).<br>
- The allowed characters are <code>0-9</code>, <code>a-z</code>, <code>A-Z</code>,
- <code>'.'</code>, <code>'_'</code>, and <code>'-'</code>.<p><b>Use:</b>
- applications which must be portable to any POSIX system.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code><a name="windows_name">windows_name</a>(const
- std::string&amp;<i> name</i>)</code></td>
- <td><b>Returns:</b>&nbsp; <i>true</i> if <code>!name.empty() &amp;&amp; name</code> contains
- only the characters specified by the Windows platform SDK as valid
- regardless of the file system <code>&amp;&amp; (name</code> is <code>&quot;.&quot;</code> or
- <code>&quot;..&quot;</code>&nbsp; or does not end with a trailing space or period<code>)</code>.&nbsp;
- The allowed characters are anything except <code>0x0-0x1F</code>, <code>'&lt;'</code>,
- <code>'&gt;'</code>, <code>':'</code>, <code>'&quot;'</code>, <code>'/'</code>,
- <code>'\'</code>, and <code>'|'</code>.<p>
- <b>Use:</b> applications which must be portable to Windows.</p>
- <p><b>Note:</b> Reserved device names are not valid as file names, but are
- not being detected because they are still valid as a path. Specifically,
- CON, PRN, AUX, CLOCK$, NUL, COM[1-9], LPT[1-9], and these names followed by
- an extension (for example, NUL.tx7).</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code><a name="portable_name">portable_name</a>(const
- std::string&amp;<i> name</i>)</code></td>
- <td><b>Returns:</b> <code>&nbsp;windows_name(name) &amp;&amp; portable_posix_name(name)
- &amp;&amp; (name</code> is <code>&quot;.&quot;</code> or <code>&quot;..&quot;</code>, and the first character not a period or hyphen<code>)</code>.<p><b>Use:</b> applications which must be portable to a wide variety of
- modern operating systems, large and small, and to some legacy O/S's. The
- first character not a period or hyphen restriction is a requirement of
- several older operating systems.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code><a name="portable_directory_name">
- portable_directory_name</a>(const std::string&amp;<i> name</i>)</code></td>
- <td><b>Returns:</b> <code>portable_name(name) &amp;&amp; (name</code> is <code>&quot;.&quot;</code>
- or <code>&quot;..&quot;</code>&nbsp; or contains no periods<code>)</code>.<p><b>Use:</b> applications
- which must be portable to a wide variety of platforms, including OpenVMS.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code><a name="portable_file_name">
- portable_file_name</a>(const std::string&amp;<i> name</i>)</code></td>
- <td><b>Returns:</b> <code>portable_name(name) &amp;&amp; </code>any period is followed by one to three additional
- non-period characters.<p><b>Use:</b>
- applications which must be portable to a wide variety of platforms,
- including OpenVMS and other systems which have a concept of &quot;file extension&quot;
- but limit its length.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code><a name="native">native</a>(const
- std::string&amp;<i> name</i>)</code></td>
- <td><b>Returns:</b> Implementation defined. Returns <i>
- true</i> for names considered valid by the operating system's native file
- systems.<p><b>Note:</b> May return <i>true</i> for some names not considered valid
- by the operating system under all conditions (particularly on operating systems which support
- multiple file systems.)</td>
- </tr>
-</table>
-
-<h2>File and directory name <a name="recommendations">recommendations</a></h2>
-
-<table border="1" cellpadding="5" cellspacing="0">
-
- <tr>
- <td align="center" valign="top"><strong>Recommendation</strong></td>
- <td align="center" valign="top"><strong>Rationale</strong></td>
- </tr>
- <tr>
- <td valign="top">Limit file and directory names to the characters A-Z, a-z, 0-9, period, hyphen, and
- underscore.<p>Use any of the &quot;portable_&quot; <a href="#name_check_functions">
- name check functions</a> to enforce this recommendation.</td>
- <td valign="top">These are the characters specified by the POSIX standard for portable directory and
- file names, and are also valid for Windows, Mac, and many other modern file systems.</td>
- </tr>
- <tr>
- <td valign="top">Do not use a period or hyphen as the first
- character of a name. Do not use period as the last character of a name.<p>
- Use <a href="#portable_name">portable_name</a>,
- <a href="#portable_directory_name">portable_directory_name</a>, or
- <a href="#portable_file_name">portable_file_name</a> to enforce this
- recommendation.</td>
- <td valign="top">Some operating systems treat have special rules for the
- first character of names. POSIX, for example. Windows does not permit period
- as the last character.</td>
- </tr>
- <tr>
- <td valign="top">Do not use periods in directory names.<p>Use
- <a href="#portable_directory_name">portable_directory_name</a> to enforce
- this recommendation.</td>
- <td valign="top">Requirement for ISO-9660 without Juliet extensions, OpenVMS filesystem, and other legacy systems.</td>
- </tr>
- <tr>
- <td valign="top">Do not use more that one period in a file name, and limit
- the portion after the period to three characters.<p>Use
- <a href="#portable_file_name">portable_file_name</a> to enforce this
- recommendation.</td>
- <td valign="top">Requirement for ISO-9660 level 1, OpenVMS filesystem, and
- other legacy systems. </td>
- </tr>
- <tr>
- <td valign="top">Do not assume names are case sensitive. For example, do not expected a directory to be
- able to hold separate elements named &quot;Foo&quot; and &quot;foo&quot;. </td>
- <td valign="top">Some file systems are case insensitive.&nbsp; For example, Windows
- NTFS is case preserving in the way it stores names, but case insensitive in
- searching for names (unless running under the POSIX sub-system, it which
- case it does case sensitive searches). </td>
- </tr>
- <tr>
- <td valign="top">Do not assume names are case insensitive.&nbsp; For example, do not expect a file
- created with the name of &quot;Foo&quot; to be opened successfully with the name of &quot;foo&quot;.</td>
- <td valign="top">Some file systems are case sensitive.&nbsp; For example, POSIX.</td>
- </tr>
- <tr>
- <td valign="top">Don't use hyphens in names.</td>
- <td valign="top">ISO-9660 level 1, and possibly some legacy systems, do not permit
- hyphens.</td>
- </tr>
- <tr>
- <td valign="top">Limit the length of the string returned by path::string() to
- 255 characters.&nbsp;
- Note that ISO 9660 has an explicit directory tree depth limit of 8, although
- this depth limit is removed by the Juliet extensions.</td>
- <td valign="top">Some operating systems place limits on the total path length.&nbsp; For example,
- Windows 2000 limits paths to 260 characters total length.</td>
- </tr>
- <tr>
- <td valign="top">Limit the length of any one name in a path.&nbsp; Pick the specific limit according to
- the operating systems and or file systems you wish portability to:<br>
- &nbsp;&nbsp; Not a concern::&nbsp; POSIX, Windows, MAC OS X.<br>
- &nbsp;&nbsp; 31 characters: Classic Mac OS<br>
-&nbsp;&nbsp; 8 characters + period + 3 characters: ISO 9660 level 1<br>
-&nbsp;&nbsp; 32 characters: ISO 9660 level 2 and 3<br>
-&nbsp;&nbsp; 128 characters (64 if Unicode): ISO 9660 with Juliet extensions</td>
- <td valign="top">Limiting name length can markedly reduce the expressiveness of file names, yet placing
- only very high limits on lengths inhibits widest portability.</td>
- </tr>
-</table>
-
-<hr>
-<p>Revised
-<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->11 January, 2009<!--webbot bot="Timestamp" endspan i-checksum="39335" --></p>
-
-<p>© Copyright Beman Dawes, 2002, 2003</p>
-<p> Use, modification, and distribution are subject to the Boost Software
-License, Version 1.0. (See accompanying file <a href="../../../../LICENSE_1_0.txt">
-LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
-www.boost.org/LICENSE_1_0.txt</a>)</p>
-
-</body>
-
-</html> \ No newline at end of file
diff --git a/libs/filesystem/v2/doc/reference.html b/libs/filesystem/v2/doc/reference.html
deleted file mode 100644
index 8db3b6ccd2..0000000000
--- a/libs/filesystem/v2/doc/reference.html
+++ /dev/null
@@ -1,3094 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<title>Filesystem Reference
-</title>
-<link rel="stylesheet" type="text/css" href="../../../../doc/src/minimal.css">
-</head>
-
-<body>
-
-<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="710">
- <tr>
- <td width="277">
-<a href="../../../../index.htm">
-<img src="../../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="277" height="86" border="0"></a></td>
- <td width="410" align="middle">
- <font size="7">Filesystem Library</font>
- </td>
- </tr>
-</table>
-
-<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
- <tr>
- <td><a href="../../../../index.htm">Boost Home</a>&nbsp;&nbsp;&nbsp;
- <a href="index.htm">Library Home</a>&nbsp; &nbsp;
- <a href="index.htm#tutorial">Tutorial</a>&nbsp; &nbsp; <a href="reference.html">
- Reference</a>&nbsp;&nbsp; <a href="faq.htm">FAQ</a></td>
- </tr>
-</table>
-
-<h1>Reference Documentation</h1>
-
-<h2><a name="TOC">Table of Contents</a></h2>
-
-<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
- <tr>
- <td width="26%" valign="top"><a href="#Introduction">Introduction</a><br>
- <a href="#Definitions">Definitions</a><br>
- <a href="#Requirements">Requirements</a><br>
-&nbsp;&nbsp;&nbsp;
-<a href="#Requirements-on-programs">Requirements on programs</a><br>
-&nbsp; &nbsp;&nbsp;<a href="#Requirements-on-implementations">Requirementson implementations</a><br>
- <a href="#Header-filesystem-synopsis">
- Header &lt;filesystem&gt; synopsis</a><br>
- <a href="#Path-traits">Path traits</a><br>
- <a href="#Class-template-basic_path">
- Class template basic_path</a><br>
- &nbsp;&nbsp;&nbsp;
-<a href="#Pathname-formats">Pathname formats</a><br>
- &nbsp;&nbsp;&nbsp;
-<a href="#Pathname-grammar">Pathname grammar</a><br>
- &nbsp;&nbsp;&nbsp;
-<a href="#Filename-conversion">Filename conversion</a><br>
- &nbsp;&nbsp;&nbsp;
-<a href="#basic_path-requirements">Requirements</a> </td>
- <td width="35%" valign="top">&nbsp;Class template basic_path (continued)<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#basic_path-requirements">basic_path constructors</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#basic_path-assignments">basic_path assignments</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#basic_path-modifiers">basic_path modifiers</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#basic_path-inserter-extractor">basic_path operators</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#basic_path-observers">basic_path observers</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#basic_path-iterators">basic_path iterators</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#basic_path-non-member-functions">basic_path non-member functions</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#basic_path-inserter-extractor">basic_path inserter and extractor</a><span style="background-color: #FFFFFF"><br>
-</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#Class-template-basic_filesystem_error">Class template
- basic_filesystem_error</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#basic_filesystem_error-constructors">basic_filesystem_error
- constructors</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#basic_filesystem_error-observers">basic_filesystem_error observers</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#Class-template-basic_directory_entry">Class template
- basic_directory_entry</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#basic_directory_entry-constructors">basic_directory_entry constructors</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#basic_directory_entry-modifiers">basic_directory_entry modifiers</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#basic_directory_entry-observers">basic_directory_entry observers</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#basic_directory_entry-comparisons">basic_directory_entry comparisons</a></td>
- <td width="89%" valign="top">Filesystem library chapter (continued)<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#Class-template-basic_directory_iterator">Class template
- basic_directory_iterator</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#basic_directory_iterator-constructors">basic_directory_iterator
- constructors</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#Class-template-basic_recursive_directory_iterator">Class template
- basic_recursive_directory_iterator</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#file_status">Class
- file_status</a><br>
- <a href="#Non-member-functions">
- Non-member operational functions</a><br>
- &nbsp;&nbsp;&nbsp;
-<a href="#Status-functions">Status functions</a><br>
- &nbsp;&nbsp;&nbsp;
-<a href="#Predicate-functions">Predicate functions</a><br>
- &nbsp;&nbsp;&nbsp;
-<a href="#Attribute-functions">Attribute functions</a><br>
- &nbsp;&nbsp;&nbsp;
-<a href="#Operations-functions">Other operations functions</a><br>
- &nbsp;&nbsp;&nbsp;
-<a href="#Convenience-functions">Convenience functions</a><br>
- <a href="#header-fstream">Additions
- to header &lt;fstream&gt;</a><br>
-<a href="#Suggestions-for-fstream">Suggestions for <code>&lt;fstream&gt;</code></a><code><br>
-&nbsp; </code>
-<a href="#Suggestions-for-fstream">&nbsp;implementations</a><br>
-<a href="#Path-decomposition-table">Path decomposition table</a><br>
-<a href="#Acknowledgements">Acknowledgements</a><br>
-<a href="#References">References</a><br>
-&nbsp;</td>
- </tr>
-</table>
-
-<p><i>Some functions have been renamed or deprecated since earlier releases of
-the library. See <a href="index.htm#Deprecated-names">Deprecated names and
-features</a>.</i></p>
-
-<h2><a name="Introduction">Introduction</a></h2>
-<p>Some library behavior is specified by reference to ISO/IEC 9945:2003, <i>
-<a href="http://www.unix.org/single_unix_specification/">POSIX</a></i>. How such behavior is actually implemented is unspecified.</p>
-<blockquote>
-<p>[<i>Note:</i> This constitutes an &quot;as if&quot; rule for implementation of
-operating system dependent behavior. Presumably implementations will usually call native
-operating system API's. <i>--end note</i>]</p>
-</blockquote>
-<p>Implementations are encouraged, but not required, to support such behavior
-
-as it is defined by <i>POSIX</i>. Implementations shall document any
-behavior that differs from the <i>POSIX</i> defined behavior. Implementations that do not support exact <i>POSIX</i> behavior are
-encouraged to provide behavior as close to <i>POSIX</i> behavior as is reasonable given the
-limitations of actual operating systems and file systems. If an implementation cannot provide any
-reasonable behavior, the implementation shall report an error in an
-implementation-defined manner.</p>
-<blockquote>
-<p>[<i>Note:</i> Such errors might be reported by an #error directive, a <code>
-static_assert</code>, a <code>basic_filesystem_error</code> exception, a special
-return value, or some other manner. <i>--end note</i>]</p>
-</blockquote>
-<p>Specific operating systems such as <i>OpenMVS</i>,
-<i>UNIX</i>, and <i>Windows</i> are mentioned only for purposes of illustration or to
-give guidance to implementors. No slight to other operating systems is implied
-or intended.</p>
-<p>The <i>Effects</i> and <i>Postconditions</i> of functions described in this
-reference
-may not be achieved in
-the presence of <a href="#Race-condition">race conditions</a>. No diagnostic is required.</p>
-<p>If the possibility of race conditions makes it unreliable for a program to
-test for a precondition before calling a function described in this clause, <i>
-Requires</i> is not specified for the condition. Instead, the condition is
-specified as a <i>Throws</i> condition.</p>
-<blockquote>
-<p>[<i>Note:</i> As a design practice, preconditions are not specified when it
-is unreasonable for a program to detect them prior to calling the function. <i>
--- end note</i>]</p>
-</blockquote>
-<h3><a name="Definitions">Definitions</a></h3>
-<p>The following definitions apply throughout this reference documentation:</p>
-<p><i><a name="File">File</a>: </i>An object that can be written to, or read from, or both. A file
-has certain attributes, including type. File types include regular file,
-symbolic link, and directory. Other types of files may be supported by the
-implementation.</p>
-<p><i><a name="File-system">File system</a>:</i> A collection of files and certain of their attributes.</p>
-<p><i><a name="Filename">Filename</a>:</i> The name of a file. The format is as
-specified by the <i>POSIX
-<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap03.html#tag_03_169">
-Filename</a></i> base definition.</p>
-<p><i><a name="Path">Path</a>:</i> A sequence of elements which identify
-a location within a filesystem. The elements are the <i>root-name</i>, <i>
-root-directory</i>, and each successive <i>filename</i>. See
-<a href="#Pathname-grammar">Pathname grammar</a>.</p>
-<p><i><a name="Pathname">Pathname</a>: </i>A character string that represents a
-path.</p>
-<p><i><a name="Link">Link</a>: </i>A directory entry object that associates a
-filename with a file. On some file systems, several directory entries can
-associate names with the same file.</p>
-<p><i><a name="Hard-link">Hard link</a>:</i> A link to an existing file. Some
-file systems support multiple hard links to a file. If the last hard link to a
-file is removed, the file itself is removed.</p>
-<blockquote>
-<p>[<i>Note:</i> A hard link can be thought of as a shared-ownership smart
-pointer to a file.<i> -- end note</i>]<i> </i></p>
-</blockquote>
-<p><i><a name="Symbolic-link">Symbolic link</a>: </i>A type of file with the
-property that when the file is encountered during pathname resolution, a string
-stored by the file is used to modify the pathname resolution.</p>
-<blockquote>
-<p>[<i>Note:</i> A symbolic link can be thought of as a raw pointer to a file.
-If the file pointed to does not exist, the symbolic link is said to be a
-&quot;dangling&quot; symbolic link.<i> -- end note</i>]<i> </i></p>
-</blockquote>
-<p><i><a name="Slash">Slash</a>:</i> The character <tt>'/'</tt>, also known as
-solidus.</p>
-<p><i><a name="Dot">Dot</a>:</i> The character '.', also known as period.</p>
-<p><i><a name="Race-condition">Race condition</a>:</i> The condition that occurs
-when multiple threads, processes, or computers interleave access and
-modification of
-the same object within a file system.</p>
-<h3><a name="Requirements">Requirements</a></h3>
-<h4><a name="Requirements-on-programs">Requirements on programs</a></h4>
-<p>The arguments for template parameters named <code>Path</code>, <code>Path1</code>,
-or <code>Path2</code> described in this clause shall be of type <code>basic_path</code>,
-or a class derived from <code>basic_path</code>, unless otherwise
-specified.</p>
-<h4><a name="Requirements-on-implementations">Requirements on implementations</a></h4>
-<p>Some function templates described in this clause have a template parameter
-named <code>Path</code>, <code>Path1</code>, or <code>Path2</code>. When called
-with a function argument <code>s</code> of type <code>char*</code> or <code>
-std::string</code>, the implementation shall treat the argument as if it were
-coded <code>path(s)</code>. When called with a function argument <code>s</code>
-of type <code>wchar_t*</code> or <code>std::wstring</code>, the implementation
-shall treat the argument as if it were coded <code>wpath(s)</code>. For
-functions with two arguments, implementations shall not supply this treatment
-when <code>Path1</code> and <code>Path2</code> are different types.</p>
-<blockquote>
-<p>[<i>Note:</i> This &quot;do-the-right-thing&quot; rule allows users to write <code>exists(&quot;foo&quot;)</code>,
-taking advantage of class <code>basic_path</code>'s string conversion
-constructor,&nbsp; rather
-than the lengthier and more error prone <code>exists(path(&quot;foo&quot;))</code>. This
-is particularly important for the simple, script-like, programs which are an
-important use case for the library. Calling two argument functions with
-different types is a very rare usage, and may well be a coding error, so
-automatic conversion is not supported for such cases.</p>
-<p>The implementation technique is unspecified. One possible implementation
-technique, using
-<code>exists()</code> as an example, is:</p>
- <blockquote>
- <pre>template &lt;class Path&gt;
- typename boost::enable_if&lt;is_basic_path&lt;Path&gt;,bool&gt;::type exists(const Path&amp; p);
-inline bool exists(const path&amp; p) { return exists&lt;path&gt;(p); }
-inline bool exists(const wpath&amp; p) { return exists&lt;wpath&gt;(p); }</pre>
- </blockquote>
- <p>&nbsp;The <code>enable_if</code> will fail for a C string or <code>
- std::basic_string</code> argument, which will then be automatically converted
- to a <code>basic_path</code> object via the appropriate <code>basic_path</code> conversion
- constructor.&nbsp;&nbsp; <i>-- end note</i>]</p>
- <p><span style="background-color: #E0E0E0"><i>The two overloads are not given
- in the normative text because:</i></span></p>
- <ul>
- <li><span style="background-color: #E0E0E0"><i>Better techniques for
- achieving the desired affect may be developed, perhaps enabled by core
- language changes like Concepts.</i></span></li>
- <li><span style="background-color: #E0E0E0"><i>Implementations may prefer
- techniques that work with legacy compilers that do not support enable_if.</i></span></li>
- <li><span style="background-color: #E0E0E0"><i>Spelling out the overloads
- makes the text longer and harder to read without adding much benefit.</i></span></li>
- <li><span style="background-color: #E0E0E0"><i>More overloads will probably
- be needed for char16_t and char32_t (or whatever they end up being called),
- making it even less attractive to actually spell out each one. </i></span>
- </li>
- </ul>
-</blockquote>
-<p>Implementations of functions described in this clause are permitted to call the applications
-program interface (API) provided by the operating system. If such an operating
-system API call results in an error, implementations
-shall report the error by throwing exception <code>basic_filesystem_error</code>,
-unless otherwise specified.</p>
-<blockquote>
-<p>[<i>Note: </i>Such exceptions and the conditions that cause them to be thrown
-are not explicitly described in each <i>Throws</i> element within this clause.
-Because hardware failures, network failures, race conditions, and a plethora of
-other errors occur frequently in file system operations, users should be aware
-that <span style="background-color: #FFFFFF">unless otherwise specified</span> any file system operation, not matter how apparently innocuous, may throw
-an exception. <i>-- end note</i>]</p>
-</blockquote>
-<p><span style="background-color: #FFFFFF">Functions commonly used in contexts
-where errors are not exceptional have overloads taking an additional argument of
-type </span><code><span style="background-color: #FFFFFF">error_code&amp; ec</span></code><span style="background-color: #FFFFFF">. Such overloaded functions shall not throw exceptions. If an error occurs,
-<code>ec</code> shall be set to the
-error code reported by the operating system, otherwise <code>ec</code> shall be set to 0. If
-an overload without an argument of type </span><code>
-<span style="background-color: #FFFFFF">error_code&amp; ec</span></code><span style="background-color: #FFFFFF"> returns void, the other overload (with an argument of type </span><code>
-<span style="background-color: #FFFFFF">error_code&amp; ec</span></code><span style="background-color: #FFFFFF">) returns an <code>
-error_code</code> with the value of ec.</span></p>
-<h3><a name="Header-filesystem-synopsis">Header <code>&lt;boost/filesystem&gt;</code> synopsis</a></h3>
-<pre> namespace boost
- {
- namespace filesystem
- {
- template &lt;class String, class Traits&gt; class <a href="#Class-template-basic_path">basic_path</a>;
-
- template&lt;class String, class Traits&gt;
- void swap(basic_path&lt;String, Traits&gt; &amp; lhs, basic_path&lt;String, Traits&gt; &amp; rhs);
-
- template&lt;class String, class Traits&gt; bool operator&lt;(<i>a</i> a, <i>b</i> b);
- template&lt;class String, class Traits&gt; bool operator==(<i>a</i> a, <i>b</i> b);
- template&lt;class String, class Traits&gt; bool operator!=(<i>a</i> a, <i>b</i> b);
- template&lt;class String, class Traits&gt; bool operator&gt;(<i>a</i> a, <i>b</i> b);
- template&lt;class String, class Traits&gt; bool operator&lt;=(<i>a</i> a, <i>b</i> b);
- template&lt;class String, class Traits&gt; bool operator&gt;=(<i>a</i> a, <i>b</i> b);
- template&lt;class String, class Traits&gt; bool operator/(<i>a</i> a, <i>b</i> b);
-
- template&lt;class Path&gt;
- basic_ostream&lt;typename Path::string_type::value_type, typename Path::string_type::traits_type&gt; &amp;
- operator&lt;&lt;(basic_ostream&lt;typename Path::string_type::value_type, typename Path::string_type::traits_type&gt;&amp; os, const Path &amp; ph);
-
- template&lt;class Path&gt;
- basic_istream&lt;typename Path::string_type::value_type, typename Path::string_type::traits_type&gt; &amp;
- operator&gt;&gt;(basic_istream&lt;typename Path::string_type::value_type, typename Path::string_type::traits_type&gt;&amp; is, Path &amp; ph);
-
- struct path_traits;
- struct wpath_traits;
-
- typedef basic_path&lt;std::string, path_traits&gt; path;
- typedef basic_path&lt;std::wstring, wpath_traits&gt; wpath;
-
- template&lt;class Path&gt; struct is_basic_path;
-
- template&lt;class Path&gt; struct slash { static const char value = '/'; };
- template&lt;class Path&gt; struct dot { static const char value = '.'; };
-<span style="background-color: #FFFFFF"> template&lt;class Path&gt; struct colon { static const char value = ':'; };</span><span style="background-color: #FFFF00">
-</span>
- <span style="background-color: #FFFFFF">class filesystem_error;</span><span style="background-color: #FFFF00">
-</span>
- template &lt;class Path&gt; class <a href="#Class-template-basic_filesystem_error">basic_filesystem_error</a>;
-
- typedef basic_filesystem_error&lt;path&gt; filesystem_error;
- typedef basic_filesystem_error&lt;wpath&gt; wfilesystem_error;
-
- <span style="background-color: #FFFFFF">template &lt;class Path&gt; class <a href="#Class-template-basic_directory_entry">basic_directory_entry</a>;
-
- typedef basic_directory_entry&lt;path&gt; directory_entry;
- typedef basic_directory_entry&lt;wpath&gt; wdirectory_entry;
-</span>
- template &lt;class Path&gt; class <a href="#Class-template-basic_directory_iterator">basic_directory_iterator</a>;
-
- typedef basic_directory_iterator&lt;path&gt; directory_iterator;
- typedef basic_directory_iterator&lt;wpath&gt; wdirectory_iterator;
-
- template &lt;class Path&gt; class <a href="#Class-template-basic_recursive_directory_iterator">basic_recursive_directory_iterator</a>;
-
- typedef basic_recursive_directory_iterator&lt;path&gt; <a name="recursive_directory_iterator">recursive_directory_iterator</a>;
- typedef basic_recursive_directory_iterator&lt;wpath&gt; wrecursive_directory_iterator;
-
- enum file_type { status_unknown, file_not_found, regular_file, directory_file,
- symlink_file, block_file, character_file, fifo_file, socket_file,
- type_unknown
- };
-
- class <a href="#file_status">file_status</a>;
-
- <span style="background-color: #FFFFFF">struct space_info // returned by </span><a href="#space" style="text-decoration: none"><span style="background-color: #FFFFFF">space</span></a><span style="background-color: #FFFFFF"> function
- {
- uintmax_t capacity;
- uintmax_t free;
- uintmax_t available;
- };
-</span>
- // <a href="#Status-functions">status functions</a>
- template &lt;class Path&gt; file_status status(const Path&amp; p);
- template &lt;class Path&gt; file_status status(const Path&amp; p, error_code&amp; ec);
- template &lt;class Path&gt; file_status symlink_status(const Path&amp; p);
- template &lt;class Path&gt; file_status symlink_status(const Path&amp; p, error_code&amp; ec);
-
- // <a href="#Predicate-functions">predicate functions</a>
- bool status_known( file_status s );
- bool exists( file_status s );
- bool is_regular_file( file_status s );
- bool is_directory( file_status s );
- bool is_symlink( file_status s );
- bool is_other( file_status s );
-
- template &lt;class Path&gt; bool exists(const Path&amp; p);
- template &lt;class Path&gt; bool is_directory(const Path&amp; p);
- template &lt;class Path&gt; bool is_regular_file(const Path&amp; p);
- template &lt;class Path&gt; bool is_other(const Path&amp; p);
- template &lt;class Path&gt; bool is_symlink(const Path&amp; p);
- template &lt;class Path&gt; bool is_empty(const Path&amp; p);
-
- template &lt;class Path1, class Path2&gt;
- bool equivalent(const Path1&amp; p1, const Path2&amp; p2);
-
- // <a href="#Attribute-functions">attribute functions</a>
- template &lt;class Path&gt; Path current_path();
- template &lt;class Path&gt; void current_path(const Path&amp; p);
- template &lt;class Path&gt; const Path&amp; initial_path();
- template &lt;class Path&gt; <span style="background-color: #FFFFFF; ">uintmax_t</span> file_size(const Path&amp; p);
-<span style="background-color: #FFFFFF"> template &lt;class Path&gt; space_info space(const Path&amp; p);</span><span style="background-color: #FFFF00">
-</span> template &lt;class Path&gt; std::time_t last_write_time(const Path&amp; p);
- template &lt;class Path&gt;
- void last_write_time(const Path&amp; p, const std::time_t new_time);
-
- // <a href="#Operations-functions">operations functions</a>
- template &lt;class Path&gt; bool create_directory(const Path&amp; dp);
- template &lt;class Path1, class Path2&gt;
- void create_hard_link(const Path1&amp; old_fp, const Path2&amp; new_fp);
-<span style="background-color: #FFFFFF"> template &lt;class Path1, class Path2&gt;
- error_code create_hard_link(const Path1&amp; old_fp, const Path2&amp; new_fp, error_code&amp; ec);
- template &lt;class Path1, class Path2&gt;
- void create_symlink(const Path1&amp; old_fp, const Path2&amp; new_fp);
- template &lt;class Path1, class Path2&gt;
- error_code create_symlink(const Path1&amp; old_fp, const Path2&amp; new_fp, error_code&amp; ec);
-</span> template &lt;class Path&gt; bool remove(const Path&amp; p);
- template &lt;class Path1, class Path2&gt;
- void rename(const Path1&amp; from_p, const Path2&amp; to_p);
-
- BOOST_SCOPED_ENUM_START(<a name="copy_option">copy_option</a>)
- { fail_if_exists, overwrite_if_exists };
- BOOST_SCOPED_ENUM_END
-
- template &lt;class Path1, class Path2&gt;
- void copy_file(const Path1&amp; from_fp, const Path2&amp; to_fp,
- BOOST_SCOPED_ENUM(copy_option) option=copy_option::fail_if_exists);
-
- template &lt;class Path&gt; Path system_complete(const Path&amp; p);
- template &lt;class Path&gt; Path complete(const Path&amp; p, const Path&amp; base=initial_path&lt;Path&gt;());
-
- // <a href="#Convenience-functions">convenience functions</a>
- template &lt;class Path&gt; bool create_directories(const Path&amp; p);
- template &lt;class Path&gt; typename Path::string_type extension(const Path&amp; p);
- template &lt;class Path&gt; typename Path::string_type basename(const Path&amp; p);
- template &lt;class Path&gt;
- Path change_extension(const Path&amp; p, const typename Path::string_type&amp; new_extension);
-
- } // namespace filesystem
- } // namespace boost</pre>
-<h3><a name="Path-traits">Path traits</a></h3>
-<p>This subclause defines requirements on classes representing path behavior
-traits, and defines two classes that satisfy those requirements for paths based
-on <code>string</code> and <code>wstring</code>.. It also defines several path
-additional path traits structure templates, and defines several specializations
-of them.</p>
-<p>Class template <code>basic_path</code> defined in this clause requires additional
-types, values, and behavior to complete the definition of its semantics.</p>
-<p>For purposes of exposition, Traits behaves as if it is a class with private
-members bool m_locked, initialized false, and std::locale m_locale, initialized </p>
-<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
- <tr>
- <td width="50%" align="center" colspan="2"><b><i>
- <a name="Path-Behavior-Traits-Requirements">Path Behavior Traits
- Requirements</a></i></b></td>
- </tr>
- <tr>
- <td width="38%" align="center"><b><i>Expression</i></b></td>
- <td width="62%" align="center"><b><i>Requirements</i></b></td>
- </tr>
- <tr>
- <td width="38%" valign="top"><code>Traits::external_string_type</code></td>
- <td width="62%">A typedef which is a specialization of <code>basic_string</code>.
- The <code>value_type</code> is a character type used by the operating system
- to represent pathnames.</td>
- </tr>
- <tr>
- <td width="38%" valign="top"><code>Traits::internal_string_type</code></td>
- <td width="62%">A typedef which is a specialization of <code>basic_string</code>.
- The <code>value_type</code> is a character type to be used by the program to
- represent pathnames. Required be the same type as the <code>basic_path
- String</code> template parameter. </td>
- </tr>
- <tr>
- <td width="38%" valign="top"><code>Traits::to_external( p, is )</code></td>
- <td width="62%"><code>is</code>, converted by the <code>m_locale</code>
- <code>codecvt</code> facet to <code>external_string_type</code>.</td>
- </tr>
- <tr>
- <td width="38%" valign="top"><code>Traits::to_internal( p, xs )</code></td>
- <td width="62%"><code>xs</code>, converted by the <code>m_locale</code>
- <code>codecvt</code> facet to to <code>internal_string_type</code>.</td>
- </tr>
- <tr>
- <td width="38%" valign="top"><code>Traits::imbue(loc)</code></td>
- <td width="62%"><i>Effects:</i> if <code>m_locked</code>, throw. Otherwise,
- <code>m_locked = true; m_locale = loc;<br>
- </code><i>Returns:</i> <code>void</code><b><br>
- </b><i>Throws:</i> <code>basic_filesystem_error</code></td>
- </tr>
- <tr>
- <td width="38%" valign="top"><code>Traits::imbue(loc, std::nothrow)</code></td>
- <td width="62%"><i>Effects:</i> <code>if (!m_locked) m_locale = loc; bool
- temp(m_locked); m_locked = true;<br>
- </code><i>Returns:</i> <code>temp</code></td>
- </tr>
-</table>
-<p>Type <code>is_basic_path</code> shall be a <i>UnaryTypeTrait</i> (TR1, 4.1).
-The primary template shall be derived directly or indirectly from <code>
-std::tr1::false_type</code>. Type <code>is_basic_path</code> shall be
-specialized for <code>path</code>, <code>wpath</code>, and any
-user-specialized <code>basic_path</code> types, and such specializations shall
-be derived directly or indirectly from <code>std::tr1::true_type</code>.</p>
-<p>Structure templates <code>slash</code>, <code>dot</code>, and <code>
-<span style="background-color: #FFFFFF">colon</span></code><span style="background-color: #FFFFFF">
-</span>are supplied with
-values of type <code>char</code>. If a user-specialized <code>basic_path</code>
-has a <code>
-value_type</code> type which is not convertible from <code>char</code>, the
-templates&nbsp; <code>slash</code> and <code>dot</code> shall be specialized to
-provide <code>value</code> with type which is convertible to <code>
-basic_path::value_type</code>.</p>
-<h3><a name="Class-template-basic_path">Class template <code>basic_path</code></a></h3>
-<p>Class template <code>basic_path</code> provides a portable mechanism for
-representing <a href="#Path">paths</a> in C++ programs, using a portable generic
-pathname <a href="#Pathname-grammar">grammar</a>. When portability is not a
-requirement, native file system specific formats can be used.&nbsp;Class template
-<code>basic_path</code> is concerned only with the lexical and syntactic aspects
-of a path. The path does not have to exist in the operating system's file
-system, and may contain names which are not even valid for the current operating
-system. </p>
-<blockquote>
- <p>[<i>Note: </i>If the library's functions trafficked only in C++<i> </i>or
- C-style strings, they would provide only the illusion of portability since
- while the syntax of function calls would be portable, the semantics of the
- strings they operate on would not be portable. <i>-- end note</i>]</p>
-</blockquote>
-<pre> namespace boost
- {
- namespace filesystem
- {
- template &lt;class String, class Traits&gt; class basic_path
- {
- public:
- typedef basic_path&lt;String, Traits&gt; path_type;
- typedef String string_type;
- typedef typename String::value_type value_type;
- typedef Traits traits_type;
- typedef typename Traits::external_string_type external_string_type;
-
- // <a href="#basic_path-constructors">constructors/destructor</a>
- basic_path();
- basic_path(const basic_path&amp; p);
- basic_path(const string_type&amp; s);
- basic_path(const value_type* s);
- template &lt;class InputIterator&gt;
- basic_path(InputIterator first, InputIterator last);
-
- ~basic_path();
-
- // <a href="#basic_path-assignments">assignments</a>
- basic_path&amp; operator=(const basic_path&amp; p);
- basic_path&amp; operator=(const string_type&amp; s);
- basic_path&amp; operator=(const value_type* s);
- template &lt;class InputIterator&gt;
- basic_path&amp; assign(InputIterator first, InputIterator last);
-
- // <a href="#basic_path-modifiers">modifiers</a>
- basic_path&amp; operator/=(const basic_path&amp; rhs);
- basic_path&amp; operator/=(const string_type&amp; s);
- basic_path&amp; operator/=(const value_type* s);
- template &lt;class InputIterator&gt;
- basic_path&amp; append(InputIterator first, InputIterator last);
-
- <span style="background-color: #FFFFFF">void clear();
- void swap( basic_path &amp; rhs );</span>
- basic_path&amp; remove_filename();
- basic_path&amp; replace_extension(const string_type &amp; new_extension = &quot;&quot;);
-
- // <a href="#basic_path-observers">observers</a>
- const string_type string() const;
- const string_type file_string() const;
- const string_type directory_string() const;
-
- const external_string_type external_file_string() const;
- const external_string_type external_directory_string() const;
-
- string_type root_name() const;
- string_type root_directory() const;
- basic_path root_path() const;
- basic_path relative_path() const;
-
- basic_path parent_path() const;
- string_type filename() const;
-
- string_type stem() const;
- string_type extension() const;
-
- bool empty() const;
- bool is_complete() const;
- bool has_root_name() const;
- bool has_root_directory() const;
- bool has_root_path() const;
- bool has_relative_path() const;
- bool has_filename() const;
- bool has_parent_path() const;
-
- // <a href="#basic_path-iterators">iterators</a>
- class iterator;
- typedef iterator const_iterator;
-
- iterator begin() const;
- iterator end() const;
-
- };
-
- } // namespace filesystem
- } // namespace boost</pre>
-<p>A <code>basic_path</code> object stores a possibly empty <a href="#Path">path</a>.
-The internal form of the stored path is unspecified.</p>
-<p><a name="pathname-resolution">Functions</a> described in this clause which access files or their attributes do so by
-resolving a <code>basic_path</code> object into a particular file in a file
-hierarchy. The pathname, suitably converted to the string type, format, and
-encoding
-required by the operating system, is resolved as if by the <i>POSIX</i>
-<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap04.html#tag_04_11">
-Pathname Resolution</a> mechanism. The encoding of the resulting pathname is determined by the <code>Traits::to_external</code> conversion function.</p>
-<blockquote>
-<p>[<i>Note:</i> There is no guarantee that the path stored in a&nbsp; <code>basic_path</code>
-object is valid for a particular operating system or file system. <i>-- end note</i>]</p>
-</blockquote>
-<p>Some functions in this clause return <code>basic_path</code> objects for
-paths composed partly or wholly of pathnames obtained from the operating system.
-Such pathnames are suitably converted from the actual format and string
-type supplied by the operating system. The encoding of the resulting path is determined by the <code>Traits::to_internal</code> conversion function.</p>
-<p>For member functions described as returning &quot;<code>const string_type</code>&quot; or
-&quot;<code>const external_string_type</code>&quot;, implementations are permitted to return
-&quot;<code>const string_type&amp;</code>&quot; or&nbsp; &quot;<code>const external_string_type&amp;</code>&quot;
-respectively.</p>
-<blockquote>
-<p>[<i>Note:</i> This allows implementations to avoid unnecessary copies.
-Return-by-value is specified as
-<code>const</code> to ensure programs won't break if moved to a return-by-reference
-implementation. <i>--
-end note</i>]</p>
-</blockquote>
-<h4><a name="Pathname-formats">Pathname formats</a></h4>
-<p>There are two formats for string or sequence arguments that describe a
-path:</p>
-<ul>
- <li>The portable pathname format as described in <a href="#Pathname-grammar">
- Pathname grammar</a> and by the <i>POSIX</i> <i><a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap03.html#tag_03_169">Filename</a>,
-<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap03.html#tag_03_266">
-Pathname</a> </i>and<i>
-<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap04.html#tag_04_11">
-Pathname Resolution</a></i> definitions.<blockquote>
-<p>[<i>Note:</i> <span style="background-color: #FFFFFF">The <i>POSIX</i> format
-is the basis for the portable format because it is already an ISO standard, is
-the basis for the ubiquitous <i>URL</i> format, and is the native format or a
-subset of the native format for <i>UNIX</i>-like and <i>Windows</i>-like
-operating systems familiar to large numbers of programmers. </span></p>
-<p>Use of the portable format does not alone guarantee
-portability; filenames must also be portable.<span style="background-color: #FFFFFF">
-See <a href="#Filename-conversion">Filename conversions</a>. Each operating system
-
-follows its own rules. Use of the portable format
-does not change that. </span> <i>-- end note</i>]</p>
- </blockquote>
- </li>
- <li>A native pathname format
- as defined by the operating system.<blockquote>
- <p>[<i>Note:</i> If an operating system supports only the <i>POSIX</i>
- pathname format, the portable format and the native format are the same. </p>
- <p><span style="background-color: #FFFFFF">Identifying user-provided paths
- as native format is a common need, and ensures maximum portability, even
- though not strictly needed except on systems where the native format
- is not implicitly recognized.</span></p>
- <p><span style="background-color: #FFFFFF">Programs using hard-coding native
- formats are likely to be non-portable.&nbsp; --</span><i><span style="background-color: #FFFFFF"> end note</span></i><span style="background-color: #FFFFFF">]</span></p>
- </blockquote>
- </li>
-</ul>
-<p><span style="background-color: #FFFFFF">All <code>basic_path</code> string or sequence arguments that describe a
-path shall accept the portable pathname format, and shall accept the native
-format if explicitly identified by a native format escape sequence prefix of
-<code>slash slash colon</code>.</span></p>
-<blockquote>
- <p><span style="background-color: #FFFFFF">[<i>Note:</i> <code>slash
- slash colon</code> was chosen as the escape sequence because a leading <code>
- slash slash</code>&nbsp; is already implementation-defined by POSIX, <code>
- colon</code> is prohibited in a Windows filename, and on any system a single
- <code>slash</code> can be used when a filename beginning with a <code>colon</code>
- is desired.&nbsp;These factors eliminate the chance of collision with a real
- filename. --</span><i><span style="background-color: #FFFFFF"> end note</span></i><span style="background-color: #FFFFFF">]</span></p>
- </blockquote>
-<p><span style="background-color: #FFFFFF">Implementations are encouraged to
-implicitly recognize the native pathname format if it can be lexically
-identified. An implementation </span>shall document whether or
-not the native pathname format is <span style="background-color: #FFFFFF">
-implicitly recognized</span>.</p>
-<blockquote>
-<p>[<i>Example:</i></p>
-<p><i>-- OpenVMS:</i> <code>&quot;SYS1::DISK1:[JANE.TYLER.HARRY]</code>&quot; is treated
-as a native pathname with a system name, drive name,&nbsp;and three directory
-filenames, rather than a portable pathname with one filename.</p>
-<p><i>-- Windows: </i><code>&quot;c:\\jane\\tyler\\harry&quot;</code> is treated as a
-native pathname with a drive letter, root-directory, and three filenames, rather
-than a portable pathname with one filename.</p>
-<p><i>-- Counter-example 1:</i> An operating system that allows slashes in
-filenames and uses dot as a directory separator. Distinguishing between portable
-and native format argument strings or sequences is not possible as there is no
-other distinguishing syntax. The implementation does not accept native format
-pathnames unless the <code>native</code> argument is present.</p>
-<p><i>-- Counter-example 2:</i> An operating system that allows slashes in
-filenames and uses some unusual character as a directory separator. The
-implementation does accept native format pathnames without the additional <code>
-native</code> argument, which only has to be used for native format arguments
-containing slashes in filenames.</p>
-<p><i>-- end example</i>]</p>
-<p>[<i>Note:</i> This <i><a name="duck-rule">duck-rule</a></i> (&quot;if it looks
-like a duck, walks like a duck, and quacks like a duck, it must be a duck&quot;)
-eliminates format confusion as a source of programmer error and support
-requests. <i>-- end note</i>]</p>
-</blockquote>
-<p>If both the portable and native formats are accepted, implementations shall
-document what characters or character sequences are used to distinguish between
-portable and native formats.</p>
-<blockquote>
-<p>[<i>Note:</i> <i>Windows</i> implementations are encouraged to define colons
-and backslashes as the characters which distinguish native from portable
-formats. <i>--end note</i>]</p>
-</blockquote>
-<h4><a name="Pathname-grammar">Pathname grammar</a></h4>
-<p>The grammar for the portable pathname format is as follows:</p>
-<blockquote>
-<p><i>pathname:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root-name<sub>opt</sub>
-root-directory<sub>opt</sub> relative-path<sub>opt</sub></i></p>
-<p><i>root-name:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-implementation-defined</i></p>
-<p><i>root-directory:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; slash<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-root-directory slash<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-implementation-defined</i></p>
-<p><i>relative-path:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-filename<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; relative-path
-slash<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; relative-path
-slash filename</i></p>
-<p><i>filename:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dot<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dot dot</i></p>
-<p><i>slash:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <code>
-slash&lt;Path&gt;::value</code></i></p>
-<p><i>dot:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <code>
-dot&lt;Path&gt;::value</code></i></p>
-</blockquote>
-<p>The grammar is aligned with the <i>POSIX </i>&nbsp;<i><a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap03.html#tag_03_169">Filename</a>,
-<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap03.html#tag_03_266">
-Pathname</a> </i>and<i>
-<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap04.html#tag_04_11">
-Pathname Resolution</a></i> definitions. Any conflict between the grammar and <i>
-POSIX</i> is unintentional. This technical report defers to <i>POSIX</i>.</p>
-<blockquote>
-<p><span style="background-color: #E0E0E0"><i>The form of the above wording was taken
-from POSIX, which uses it in several places to defer to the C standard.</i></span></p>
-<p>[<i>Note: Windows</i> implementations are encouraged to define <i>slash slash
-name</i> as a permissible <i>root-name</i>. <i>POSIX</i> permits, but does not
-require, implementations to do the same. <i>Windows</i> implementations are
-encouraged to define an additional <i>root-directory</i> element <i>
-root_directory name.</i> It is applicable only to the <i>slash slash name</i>
-form of <i>root-name.</i></p>
-<p> <i>Windows</i> implementations are encouraged to recognize a <i>name</i>
-followed by a colon as a native format <i>root-name</i>,
-and a backslash as a format element equivalent to <i>slash</i>. <i>-- end note</i>]</p>
-</blockquote>
-<h4><a name="Filename-conversion">Filename conversion</a></h4>
-<p>When converting filenames to the native operating system format,
-implementations are encouraged, but not required, to convert otherwise invalid
-characters or character sequences to valid characters or character sequences.
-Such conversions are implementation-defined.</p>
-<blockquote>
-<p>[<i>Note:</i> Filename conversion allows much wider portability of both
-programs and filenames that would otherwise be possible.</p>
-<p>Implementations are encouraged to base conversion on existing standards or
-practice. Examples include the Uniform Resource Locator escape syntax of a percent sign (<code>'%'</code>)
-followed by two hex digits representing the character value. On
-<i>OpenVMS</i>, which does not allow percent signs in filenames, a dollar sign (<code>'$'</code>)
-followed by two hex digits is the existing practice, as is converting lowercase
-letters to uppercase.<i> -- end note.</i>]</p>
-<p><span style="background-color: #E0E0E0"><i>The Boost implementation for
-Windows currently does not map invalid characters. Pending feedback from the LWG,
-Boost may settle on % hex hex as the preferred escape sequence. If so, should
-there be normative encouragement?</i></span></p>
-</blockquote>
-<h4><a name="basic_path-requirements">Requirements</a></h4>
-<p>The argument for the template parameter named <code>String</code> shall be a
-class that includes members with the same names, types, values, and semantics as
-class template <code>basic_string</code>.</p>
-<p>The argument for the template parameter named <code>Traits</code> shall be a
-class that satisfies the requirements specified in the
-<a href="#Path-Behavior-Traits-Requirements">Path Behavior Traits Requirements</a>
-table.</p>
-<p>The argument for template parameters named <code>InputIterator</code> shall satisfy the
-requirements of an input iterator (C++ Std, 24.1.1, Input iterators [lib.input.iterators]) and shall have a value type convertible to
-<code>basic_path::value_type</code>. </p>
-<p>Some function templates with a template
-parameter named <code>InputIterator</code> also have non-template overloads. Implementations shall
-only select the function template overload if the type named by <code>InputIterator</code>
-is not <code>path_format_t</code>.</p>
-<blockquote>
-<p>[<i>Note:</i> This &quot;do-the-right-thing&quot; rule ensures that the
-overload expected by the user is selected. The implementation technique is unspecified -
-implementations may use
-<a href="http://www.boost.org/libs/utility/enable_if.html">enable_if</a> or
-other techniques to achieve the effect. <i>-- end note</i>]</p>
-</blockquote>
-<h4> <a name="basic_path-constructors"> <code>basic_path</code> constructors</a></h4>
-<pre>basic_path();</pre>
-<blockquote>
- <p><i>Postconditions:</i> <code>empty()</code>.</p>
- </blockquote>
-<pre>basic_path(const string_type&amp; s);
-basic_path(const value_type * s);
-template &lt;class InputIterator&gt;
- basic_path(InputIterator s, InputIterator last);</pre>
-<blockquote>
- <p><i>Remarks:</i> The format of string <code>s</code> and sequence [<code>first</code>,<code>last</code>)
- is described in <a href="#Pathname-formats">Pathname formats</a>.</p>
- <p><i>Effects:</i> The path elements in string <code>s</code> or sequence [<code>first</code>,<code>last</code>)
- are stored.</p>
-</blockquote>
-<h4> <a name="basic_path-assignments"> <code>basic_path</code> assignments</a></h4>
-<pre>basic_path&amp; operator=(const string_type&amp; s);
-basic_path&amp; operator=(const value_type* s);
-template &lt;class InputIterator&gt;
- basic_path&amp; assign(InputIterator first, InputIterator last);</pre>
-<blockquote>
- <p><i>Remarks:</i> The format of string <code>s</code> and sequence [<code>first</code>,<code>last</code>)
- is described in <a href="#Pathname-formats">Pathname formats</a>.</p>
- <p><i>Effects:</i> The path elements in string <code>s</code> or sequence [<code>first</code>,<code>last</code>)
- are stored.</p>
- <p><i>Returns: </i><code>*this</code></p>
- </blockquote>
-<h4> <a name="basic_path-modifiers"> <code>basic_path</code> modifiers</a></h4>
-<pre>basic_path&amp; operator/=(const basic_path&amp; rhs);</pre>
-<blockquote>
- <p><i>Effects:</i> The path stored in <code>rhs</code> is appended to the
- stored path.</p>
- <p><i>Returns:</i> <code>*this</code></p>
-</blockquote>
-<pre>basic_path&amp; operator/=(const string_type&amp; s);
-basic_path&amp; operator/=(const value_type* s);
-template &lt;class InputIterator&gt;
-basic_path&amp; append(InputIterator first, InputIterator last);</pre>
-<blockquote>
- <p><i>Remarks:</i> The format of string <code>s</code> and sequence [<code>first</code>,<code>last</code>)
- is described in <a href="#Pathname-formats">Pathname formats</a>.</p>
-<p><i>Effects:</i> The path elements in string <code>s</code> or sequence [<code>first</code>,<code>last</code>)
- are appended to the stored path.</p>
- <p><i>Returns: </i><code>*this</code></p>
- </blockquote>
-<pre>void clear();</pre>
-<blockquote>
-<p><i>Postcondition:</i> <code>this-&gt;empty()</code> is true.</p>
-</blockquote>
-<pre><code><span style="background-color: #FFFFFF">void swap( basic_path &amp; rhs );</span></code></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Effects:</span></i><span style="background-color: #FFFFFF">
- Swaps the contents of the two paths.</span></p>
- <p><i><span style="background-color: #FFFFFF">Throws: </span></i>
- <span style="background-color: #FFFFFF">nothing.</span></p>
- <p><i><span style="background-color: #FFFFFF">Postcondition:</span></i><span style="background-color: #FFFFFF">
- </span><code><span style="background-color: #FFFFFF">this-&gt;string()</span></code><span style="background-color: #FFFFFF">
- contains the same sequence of characters that were in </span><code><span style="background-color: #FFFFFF">
- rhs.string()</span></code><span style="background-color: #FFFFFF">, </span><code><span style="background-color: #FFFFFF">
- rhs.string()</span></code><span style="background-color: #FFFFFF">
- contains the same sequence of characters that were is </span><code>
- <span style="background-color: #FFFFFF">this-&gt;string()</span></code><span style="background-color: #FFFFFF">.</span></p>
- <p><i><span style="background-color: #FFFFFF">Complexity: </span></i>
- <span style="background-color: #FFFFFF">constant time.</span></p>
-</blockquote>
-<pre>basic_path&amp; remove_filename();</pre>
-<blockquote>
- <p><i>Effects:</i> If <code>has_parent_path()</code> then remove the last <i>filename</i> from the stored path. If that leaves
- the stored path with one or more trailing <i>slash</i> elements not
- representing&nbsp; <i>root-directory</i>, remove them.</p>
- <p><i>Returns:</i> <code>*this</code></p>
- <p>[<i>Note:</i> This function is needed to efficiently implement <code>
- basic_directory_iterator</code>. It is made public to allow additional uses. <i>-- end
- note</i>]</p>
-</blockquote>
-<pre>basic_path&amp; replace_extension( const string_type &amp; new_extension = &quot;&quot; );</pre>
-<blockquote>
- <p><i>Postcondition: </i> <code>extension() == <i>replacement</i></code>,
- where <code><i>replacement</i></code> is <code>new_extension</code> if <code>
- new_extension.empty() || new_extension[0] ==</code> the dot character,
- otherwise <code><i>replacement</i></code> is the dot character followed by
- <code>new_extension</code>.</p>
- <p><i>Returns:</i> <code>*this</code></p>
-</blockquote>
-<h4> <a name="basic_path-observers"> <code>basic_path</code> observers</a></h4>
-<blockquote>
-<p><span style="background-color: #E0E0E0"><i>See the
-<a href="#Path-decomposition-table">Path decomposition table</a> for examples
-for values returned by decomposition functions.</i></span></p>
-</blockquote>
-<pre>const string_type string() const;</pre>
-<blockquote>
-<p><i>Returns:</i> The stored path, formatted according to the
-<a href="#Pathname-grammar">Pathname grammar</a> rules.</p>
-</blockquote>
-<pre>const string_type file_string() const;</pre>
-<blockquote>
-<p><i>Returns:</i> The stored path, formatted according to the
-operating system rules for regular file pathnames, with any
-<a href="#Filename-conversion">Filename conversion</a> applied.</p>
-<p>[<i>Note:</i> For some operating systems, including <i>POSIX</i> and <i>
-Windows</i>, the native format for regular file pathnames and directory
-pathnames is the same, so <code>file_string()</code> and <code>directory_string()</code>
-return the same string. On OpenMVS, however, the expression <code>path(&quot;/cats/jane&quot;).file_string()</code>
-would return the string <code>&quot;[CATS]JANE&quot;</code> while <code>path(&quot;/cats/jane&quot;).directory_string()</code>
-would return the string <code>&quot;[CATS.JANE]&quot;</code>. <i>-- end note</i>]</p>
-</blockquote>
-<pre>const string_type directory_string() const;</pre>
-<blockquote>
-<p><i>Returns:</i> The stored path, formatted according to the
-operating system rules for directory pathnames, with any
-<a href="#Filename-conversion">Filename conversion</a> applied.</p>
-</blockquote>
-<pre>const external_string_type external_file_string() const;</pre>
-<blockquote>
-<p><i>Returns:</i> The stored path, formatted according to the
-operating system rules for regular file pathnames, with any
-<a href="#Filename-conversion">Filename conversion</a> applied, and encoded by the <code>Traits::to_external</code>
-conversion function.</p>
-</blockquote>
-<pre>const external_string_type external_directory_string() const;</pre>
-<blockquote>
-<p><i>Returns:</i> The stored path, formatted according to the
-operating system rules for directory pathnames, with any
-<a href="#Filename-conversion">Filename conversion</a> applied, and encoded by the <code>Traits::to_external</code>
-conversion function.</p>
-</blockquote>
-<pre>string_type root_name() const;</pre>
-<blockquote>
-<p><i>Returns:</i> <i>root-name,</i> if the stored path includes <i>
-root-name</i>, otherwise <code>string_type()</code>. </p>
-</blockquote>
-<pre>string_type root_directory() const;</pre>
-<blockquote>
-<p><i>Returns:</i> <i>root-directory</i>, if the stored path includes <i>
-root-directory</i>, otherwise <code>string_type()</code>.</p>
-<p>If <i>root-directory</i> is composed <i>slash name</i>, <i>slash</i> is
-excluded from the returned string.</p>
-</blockquote>
-<pre>basic_path root_path() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>root_name() / root_directory()</code></p>
-</blockquote>
-<pre>basic_path relative_path() const;</pre>
-<blockquote>
-<p><i>Returns:</i> A <code>basic_path</code> composed from the the stored path, if any, beginning
-with the first <i>filename</i> after <i>root-path</i>.
-Otherwise, an empty <code>basic_path</code>.</p>
-</blockquote>
-<pre>string_type filename() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>empty() ? string_type() : *--end()</code></p>
-</blockquote>
-<pre>basic_path parent_path() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>(string().empty() || begin() == --end()) ? path_type(&quot;&quot;) :
- <i>br</i></code>, where <code><i>br</i></code> is constructed as if by
- starting with an empty <code>basic_path</code> and successively applying <code>
- operator/=</code> for each element in the range <code>begin()</code>, <code>
- --end()</code>.</p>
-</blockquote>
-<pre>string_type stem(const Path &amp; p) const;</pre>
-<blockquote>
- <p><i>Returns:</i> if <code>p.filename()</code> contains a <i>dot</i>, returns
- the substring of <code>p.filename()</code> starting at its beginning and
- ending at the last <i>dot</i> (the <i>dot</i> is not included). Otherwise,
- returns <code>
- p.filename()</code>.</p>
-</blockquote>
-<pre>string_type extension(const Path &amp; p) const;</pre>
-<blockquote>
- <p><i>Returns:</i> if <code>p.filename()</code> contains a <i>dot</i>, returns
- the substring of <code>p.filename()</code> starting at the rightmost <i>dot</i>
- and ending at the string's end. Otherwise, returns an empty string. </p>
- <p>[<i>Note:<b> </b></i>The <i>dot</i> is included in the return value so that
- it is possible to distinguish between no extension and an empty extension. </p>
- <p>Implementations are permitted but not required to define additional
- behavior for file systems which append additional elements to extensions, such
- as alternate data stream or partitioned dataset names. <i>-- end note</i>]</p>
-</blockquote>
-<pre>bool empty() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>string().empty()</code>.</p>
-</blockquote>
-<pre>bool is_complete() const;</pre>
-<blockquote>
- <p><span style="background-color: #FFFFFF"><i>Returns:</i> <code>true</code>,
- if the elements of root_path() uniquely identify a directory, else <code>false</code>.</span></p>
-</blockquote>
-<pre>bool has_root_path() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>!root_path().empty()</code></p>
-</blockquote>
-<pre>bool has_root_name() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>!root_name().empty()</code></p>
-</blockquote>
-<pre>bool has_root_directory() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>!root_directory().empty()</code></p>
-</blockquote>
-<pre>bool has_relative_path() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>!relative_path().empty()</code></p>
-</blockquote>
-<pre>bool has_filename() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>!filename().empty()</code></p>
-</blockquote>
-<pre>bool has_parent_path() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>!parent_path().empty()</code></p>
-</blockquote>
-<h4> <a name="basic_path-iterators"> <code>basic_path</code> iterators</a></h4>
-<p> A <code>basic_path::iterator</code> is a constant iterator satisfying all
-the requirements of a bidirectional iterator (C++ Std, 24.1.4 Bidirectional
-iterators [lib.bidirectional.iterators]). Its <code>value_type</code> is
-<code>string_type</code>.</p>
- <p>Calling any non-const member function of a <code>basic_path</code> object
- invalidates all iterators referring to elements of the object.</p>
-<p> The forward traversal order is as follows:</p>
-<ul>
- <li>The <i>root-name</i> element, if present.</li>
- <li>The <i>root-directory</i> element, if present.</li>
- <li>Each successive <i>filename</i> element, if present.</li>
- <li><i>Dot</i>, if one or more trailing non-root <i>slash</i>
- characters are present.</li>
-</ul>
- <p>The backward traversal order is the reverse of forward traversal.</p>
- <pre>iterator begin() const;</pre>
-<blockquote>
- <p><i>Returns:</i> An iterator for the first present element in the traversal
- list above. If no elements are present, the end iterator.</p>
-</blockquote>
-<pre>iterator end() const;</pre>
-<blockquote>
- <p><i>Returns:</i> The end iterator.</p>
-</blockquote>
-<h4> <a name="basic_path-non-member-functions">
-<span style="background-color: #FFFFFF">basic_path non-member functions</span></a></h4>
-<pre><span style="background-color: #FFFFFF">template&lt;class String, class Traits&gt;
-void swap( basic_path&lt;String, Traits&gt; &amp; lhs, basic_path&lt;String, Traits&gt; &amp; rhs )</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Effects: </span></i><code>
- <span style="background-color: #FFFFFF">lhs.swap(
- rhs )</span></code></p>
-</blockquote>
- <h4><span style="background-color: #FFFFFF">basic_path non-member operators</span></h4>
- <p><span style="background-color: #FFFFFF">There are seven basic_path non-member operators (/,
- </span> <code><span style="background-color: #FFFFFF">==</span></code><span style="background-color: #FFFFFF">,
- </span> <code>
- <span style="background-color: #FFFFFF">!=</span></code><span style="background-color: #FFFFFF">,
- </span> <code><span style="background-color: #FFFFFF">&lt;</span></code><span style="background-color: #FFFFFF">,
- </span> <code><span style="background-color: #FFFFFF">&gt;</span></code><span style="background-color: #FFFFFF">,
- </span> <code><span style="background-color: #FFFFFF">&lt;=</span></code><span style="background-color: #FFFFFF">,
- </span> <code><span style="background-color: #FFFFFF">&gt;=</span></code><span style="background-color: #FFFFFF">),
- each with five overloads. For brevity, the specifications are given in tabular
- form. Each of the resulting thirty-five signatures is a template, with
- template parameter list template</span><code><span style="background-color: #FFFFFF">&lt;class
- String, class Traits&gt;</span></code><span style="background-color: #FFFFFF">.
- The format of such arguments is described in </span> <a href="#Pathname-formats">
- <span style="background-color: #FFFFFF">Pathname formats</span></a><span style="background-color: #FFFFFF">.</span></p>
- <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
- <tr>
- <td width="100%">
- <p align="center"><i><b><span style="background-color: #FFFFFF">Argument type overloads</span></b></i></td>
- </tr>
- <tr>
- <td width="100%"><span style="background-color: #FFFFFF"><code>
- basic_path&lt;String, Traits&gt;&amp; a, basic_path&lt;String, Traits&gt;&amp;
- b</code></span></td>
- </tr>
- <tr>
- <td width="100%"><span style="background-color: #FFFFFF"><code>const
- typename basic_path&lt;String, Traits&gt;::string_type&amp; a,
- basic_path&lt;String, Traits&gt;&amp; b</code></span></td>
- </tr>
- <tr>
- <td width="100%"><span style="background-color: #FFFFFF"><code>const
- typename basic_path&lt;String, Traits&gt;::string_type::value_type* a,
- basic_path&lt;String, Traits&gt;&amp; b</code></span></td>
- </tr>
- <tr>
- <td width="100%"><span style="background-color: #FFFFFF"><code>const
- basic_path&lt;String, Traits&gt;&amp; a, typename basic_path&lt;String, Traits&gt;::string_type&amp;
- b</code></span></td>
- </tr>
- <tr>
- <td width="100%"><span style="background-color: #FFFFFF"><code>const
- basic_path&lt;String, Traits&gt;&amp; a, typename
- basic_path&lt;String, Traits&gt;::string_type::value_type* b</code></span></td>
- </tr>
- </table>
- <p><span style="background-color: #FFFFFF">In the </span><b><i>
- <span style="background-color: #FFFFFF">basic_path non-member operators </span>
- </i></b><span style="background-color: #FFFFFF">table, </span><code>
- <span style="background-color: #FFFFFF">a</span></code><span style="background-color: #FFFFFF">
- and </span><code><span style="background-color: #FFFFFF">b</span></code><span style="background-color: #FFFFFF">
- are of the types given in the </span><i><b>
- <span style="background-color: #FFFFFF">Argument type overloads</span></b></i><span style="background-color: #FFFFFF">
- table. If </span><code><span style="background-color: #FFFFFF">a</span></code><span style="background-color: #FFFFFF">
- or </span><code><span style="background-color: #FFFFFF">b</span></code><span style="background-color: #FFFFFF">
- is of type </span><code><span style="background-color: #FFFFFF">const
- basic_path&lt;String, Traits&gt;&amp;</span></code><span style="background-color: #FFFFFF">,
- then </span><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i></code><span style="background-color: #FFFFFF">
- or </span><i><b><span style="background-color: #FFFFFF">b'</span></b></i><span style="background-color: #FFFFFF">
- respectively is </span><code><span style="background-color: #FFFFFF">a</span></code><span style="background-color: #FFFFFF">
- or </span><code><span style="background-color: #FFFFFF">b</span></code><span style="background-color: #FFFFFF">
- respectively. Otherwise </span><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i></code><span style="background-color: #FFFFFF">
- or </span><i><b><span style="background-color: #FFFFFF">b'</span></b></i><span style="background-color: #FFFFFF">
- respectively represent named or unnamed temporary </span><code>
- <span style="background-color: #FFFFFF">basic_path&lt;String, Traits&gt;</span></code><span style="background-color: #FFFFFF">
- objects constructed from </span><code><span style="background-color: #FFFFFF">
- a</span></code><span style="background-color: #FFFFFF"> or </span><code>
- <span style="background-color: #FFFFFF">b</span></code><span style="background-color: #FFFFFF">
- respectively.</span></p>
-<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" height="280">
- <tr>
- <td width="100%" colspan="3" align="center" height="19"><b><i>
- <span style="background-color: #FFFFFF">basic_path non-member operators</span></i></b></td>
- </tr>
- <tr>
- <td width="20%" align="center" height="19"><i><b>
- <span style="background-color: #FFFFFF">Expression</span></b></i></td>
- <td width="25%" align="center" height="19"><i><b>
- <span style="background-color: #FFFFFF">Return type</span></b></i></td>
- <td width="55%" align="center" height="19"><i><b>
- <span style="background-color: #FFFFFF">Semantics</span></b></i></td>
- </tr>
- <tr>
- <td width="20%" align="center" height="30" valign="top"><code>
- <span style="background-color: #FFFFFF">a / b</span></code></td>
- <td width="25%" align="center" height="30" valign="top"><code>
- <span style="background-color: #FFFFFF">basic_path&lt;String, Traits&gt;</span></code></td>
- <td width="55%" height="30"><code><span style="background-color: #FFFFFF">
- basic_path&lt;String, Traits&gt; tmp(a);<br>
- return tmp /= </span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">;</span></code></td>
- </tr>
- <tr>
- <td width="20%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">a &lt; b</span></code></td>
- <td width="25%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">bool</span></code></td>
- <td width="55%" height="19"><code><span style="background-color: #FFFFFF">
- return lexicographical_compare(</span></code><span style="background-color: #FFFFFF"><i><b>a</b></i></span><code><span style="background-color: #FFFFFF"><i><b>'</b></i>.begin(), </span></code><i><b>
- <span style="background-color: #FFFFFF">a</span></b></i><code><span style="background-color: #FFFFFF"><i><b>'</b></i>.end(), </span></code><i><b>
- <span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">.begin(), </span></code><i><b>
- <span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">.end());</span></code></td>
- </tr>
- <tr>
- <td width="20%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">a == b</span></code></td>
- <td width="25%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">bool</span></code></td>
- <td width="55%" height="19"><code><span style="background-color: #FFFFFF">
- return !(</span></code><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i><span style="background-color: #FFFFFF">
- &lt; </span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">)
- &amp;&amp; !(</span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">
- &lt; </span></code><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i><span style="background-color: #FFFFFF">);</span></code></td>
- </tr>
- <tr>
- <td width="20%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">a != b</span></code></td>
- <td width="25%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">bool</span></code></td>
- <td width="55%" height="19"><code><span style="background-color: #FFFFFF">
- return !(</span></code><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i><span style="background-color: #FFFFFF">
- == </span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">);</span></code></td>
- </tr>
- <tr>
- <td width="20%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">a &gt; b</span></code></td>
- <td width="25%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">bool</span></code></td>
- <td width="55%" height="19"><code><span style="background-color: #FFFFFF">
- return </span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">
- &lt; </span></code><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i><span style="background-color: #FFFFFF">;</span></code></td>
- </tr>
- <tr>
- <td width="20%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">a &lt;= b</span></code></td>
- <td width="25%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">bool</span></code></td>
- <td width="55%" height="19"><code><span style="background-color: #FFFFFF">
- return !(</span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">
- &lt; </span></code><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i><span style="background-color: #FFFFFF">);</span></code></td>
- </tr>
- <tr>
- <td width="20%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">a &gt;= b</span></code></td>
- <td width="25%" align="center" height="19" valign="top"><code>
- <span style="background-color: #FFFFFF">bool</span></code></td>
- <td width="55%" height="19"><code><span style="background-color: #FFFFFF">
- return !(</span></code><i><b><span style="background-color: #FFFFFF">a</span></b></i><code><i><b><span style="background-color: #FFFFFF">'</span></b></i><span style="background-color: #FFFFFF">
- &lt; </span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><span style="background-color: #FFFFFF">);</span></code></td>
- </tr>
-</table>
- <blockquote>
- <p><span style="background-color: #FFFFFF">[</span><i><span style="background-color: #FFFFFF">Note:</span></i><span style="background-color: #FFFFFF">
- </span> <a name="Path-equality"><span style="background-color: #FFFFFF">Path equality</span></a><span style="background-color: #FFFFFF"> and path
- equivalence have different semantics.</span></p>
- <p><span style="background-color: #FFFFFF">Equality is determined by </span> <i>
- <span style="background-color: #FFFFFF">basic_path</span></i><span style="background-color: #FFFFFF">'s
- non-member </span> <code><a href="#operator-eq">
- <span style="background-color: #FFFFFF">operator==</span></a></code><span style="background-color: #FFFFFF">, which considers the two path's lexical representations
- only. Paths &quot;abc&quot; and &quot;ABC&quot; are never equal.</span></p>
- <p><span style="background-color: #FFFFFF">Equivalence is determined by the
- </span> <a href="#equivalent"><span style="background-color: #FFFFFF">equivalent()</span></a><span style="background-color: #FFFFFF">
- non-member function, which determines if two paths </span>
- <a href="#pathname-resolution"><span style="background-color: #FFFFFF">resolve</span></a><span style="background-color: #FFFFFF"> to the same file system entity.
- Paths &quot;abc&quot;
- and &quot;ABC&quot; may or may not resolve to the same file, depending on the file
- system.</span></p>
- <p><span style="background-color: #FFFFFF">Programmers wishing to determine if two paths are &quot;the same&quot; must decide if
- &quot;the same&quot; means &quot;the same representation&quot; or &quot;resolve to the same actual
- file&quot;, and choose the appropriate function accordingly. </span> <i>
- <span style="background-color: #FFFFFF">-- end note</span></i><span style="background-color: #FFFFFF">]</span></p>
-</blockquote>
- <h4><a name="basic_path-inserter-extractor"> <code>
- <span style="background-color: #FFFFFF">basic_path</span></code><span style="background-color: #FFFFFF"> inserter
- and extractor</span></a></h4>
-<pre><span style="background-color: #FFFFFF">template&lt;class Path&gt;
- basic_istream&lt;typename Path::string_type::value_type, typename Path::string_type::traits_type&gt;&amp;
- operator&gt;&gt;(basic_istream&lt; typename Path::string_type::value_type, typename Path::string_type::traits_type&gt;&amp; is,
- Path&amp; ph );</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Effects:&nbsp; </span></i>
- <code><span style="background-color: #FFFFFF">typename Path::string_type str;<br>
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- is &gt;&gt; str;<br>
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- ph = str;</span></code></p>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF">
- </span> <code><span style="background-color: #FFFFFF">is</span></code></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">template&lt;class Path&gt;
- basic_ostream&lt;typename Path::string_type::value_type, typename Path::string_type::traits_type&gt;&amp;
- operator&lt;&lt;(basic_ostream&lt; typename Path::string_type::value_type, typename Path::string_type::traits_type&gt;&amp; os,
- const Path&amp; ph );</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Effects:</span></i><span style="background-color: #FFFFFF">&nbsp;
- </span> <code><span style="background-color: #FFFFFF">os &lt;&lt; ph.string()</span></code></p>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF">
- </span> <code><span style="background-color: #FFFFFF">os</span></code></p>
-</blockquote>
-<h3><a name="Class-template-basic_filesystem_error">Class template <code>basic_filesystem_error</code></a></h3>
-<pre> namespace boost
- {
- namespace filesystem
- {
- template &lt;class Path&gt; class basic_filesystem_error : public <span style="background-color: #FFFFFF">system</span>_error
- {
- public:
- typedef Path path_type;
-
- explicit basic_filesystem_error(const std::string&amp; <span style="background-color: #FFFFFF">what_arg</span>, error_code ec);
- basic_filesystem_error(const std::string&amp; <span style="background-color: #FFFFFF">what_arg</span>, const path_type&amp; p1, error_code ec);
- basic_filesystem_error(const std::string&amp; <span style="background-color: #FFFFFF">what_arg</span>, const path_type&amp; p1, const path_type&amp; p2, error_code ec);
-
- const path_type&amp; path1() const;
- const path_type&amp; path2() const;
-
- const char * what() const;
- };
- } // namespace filesystem
- } // namespace boost</pre>
-<p>The class template <code>basic_filesystem_error</code> defines the type of
-objects thrown as exceptions to report file system errors from functions described in this
-clause.</p>
-<h4> <a name="basic_filesystem_error-constructors"> <code>basic_filesystem_error</code> constructors</a></h4>
-<pre>explicit basic_filesystem_error(const std::string&amp; <span style="background-color: #FFFFFF">what_arg</span>, error_code ec);</pre>
-<blockquote>
- <p><i>Postconditions:</i></p>
- <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="46%">
- <tr>
- <td width="18%"><b>Expression</b></td>
- <td width="82%"><b>Value</b></td>
- </tr>
- <tr>
- <td width="18%" bgcolor="#FFFFFF"><code>
- <span style="background-color: #FFFFFF">runtime_error::what</span>()</code></td>
- <td width="82%" bgcolor="#FFFFFF"><span style="background-color: #FFFFFF">
- <code><i>what_arg</i>.c_str()</code></span></td>
- </tr>
- <tr>
- <td width="18%"><code>code()</code></td>
- <td width="82%"><code>ec</code></td>
- </tr>
- <tr>
- <td width="18%"><code>path1().empty()</code></td>
- <td width="82%"><code>true</code></td>
- </tr>
- <tr>
- <td width="18%"><code>path2().empty()</code></td>
- <td width="82%"><code>true</code></td>
- </tr>
- </table>
-</blockquote>
-<pre>basic_filesystem_error(const std::string&amp; <span style="background-color: #FFFFFF">what_arg</span>, const path_type&amp; p1, error_code ec);</pre>
-<blockquote>
- <p><i>Postconditions:</i></p>
- <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="46%">
- <tr>
- <td width="18%"><b>Expression</b></td>
- <td width="82%"><b>Value</b></td>
- </tr>
- <tr>
- <td width="18%" valign="top"><code>
- <span style="background-color: #FFFFFF">runtime_error::what</span>()</code></td>
- <td width="82%"><span style="background-color: #FFFFFF">
- <code><i>what_arg</i>.c_str()</code></span></td>
- </tr>
- <tr>
- <td width="18%" valign="top"><code>code()</code></td>
- <td width="82%"><code>ec</code></td>
- </tr>
- <tr>
- <td width="18%" valign="top"><code>path1()</code></td>
- <td width="82%"><span style="background-color: #FFFFFF">Reference to stored copy of
- </span> <code>p1</code></td>
- </tr>
- <tr>
- <td width="18%" valign="top"><code>path2().empty()</code></td>
- <td width="82%"><code>true</code></td>
- </tr>
- </table>
-</blockquote>
-<pre>basic_filesystem_error(const std::string&amp; <span style="background-color: #FFFFFF">what_arg</span>, const path_type&amp; p1, const path_type&amp; p2, error_code ec);</pre>
-<blockquote>
- <p><i>Postconditions:</i></p>
- <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="46%">
- <tr>
- <td width="18%"><b>Expression</b></td>
- <td width="82%"><b>Value</b></td>
- </tr>
- <tr>
- <td width="18%"><code>
- <span style="background-color: #FFFFFF">runtime_error::what</span>()</code></td>
- <td width="82%"><span style="background-color: #FFFFFF">
- <u>
- <code><i>w</i></code></u><code><i>hat_arg</i>.c_str()</code></span></td>
- </tr>
- <tr>
- <td width="18%"><code>code()</code></td>
- <td width="82%"><code>ec</code></td>
- </tr>
- <tr>
- <td width="18%"><code>path1()</code></td>
- <td width="82%"><span style="background-color: #FFFFFF">Reference to stored copy of
- </span> <code>p1</code></td>
- </tr>
- <tr>
- <td width="18%"><code>path2()</code></td>
- <td width="82%"><span style="background-color: #FFFFFF">Reference to stored copy of
- </span> <code>p2</code></td>
- </tr>
- </table>
-</blockquote>
-<h4> <a name="basic_filesystem_error-observers"> <code>basic_filesystem_error</code> observers</a></h4>
-<pre>const path_type&amp; path1() const;</pre>
-<blockquote>
- <p><i>Returns:</i> Reference to copy of <code>p1</code> stored by the
- constructor, or, if none, an empty path.</p>
-</blockquote>
-<pre>const path_type&amp; path2() const;</pre>
-<blockquote>
- <p><i>Returns:</i> Reference to copy of <code>p2</code> stored by the
- constructor, or, if none, an empty path.</p>
-</blockquote>
-<pre>const char * what() const;</pre>
-<blockquote>
- <p><i>Returns: </i>A string containing <code>runtime_error::what()</code> and
- the result of calling <code>system_message()</code> with a first argument of
- <code>code()</code>. The exact format is unspecified.</p>
-<p>The implementation shall supply a specialization <code>template&lt;&gt; const char
-* basic_filesystem_error&lt;path&gt;::what() const</code> that returns a string
-containing <code>runtime_error::what(),</code> the result of calling <code>
-system_message()</code> with a first argument of <code>code()</code>, and if
-non-empty, <code>path1().file_string()</code> and <code>path2.file_string()</code>.
-The exact format is unspecified.</p>
-<p>Implementations and users are permitted to provide other specializations of
-the <code>what</code> member function.</p>
-</blockquote>
-<h3><a name="Class-template-basic_directory_entry">Class template <code>basic_directory_entry</code></a></h3>
-<pre> namespace boost
- {
- namespace filesystem
- {
- template &lt;class Path&gt; class basic_directory_entry
- {
- public:
- typedef Path path_type;
- typedef typename Path::string_type string_type;
-
- // <a href="#basic_directory_entry-constructors">constructors</a>
- basic_directory_entry();
- explicit basic_directory_entry(const path_type&amp; p,
- <span style="background-color: #FFFFFF">file_status</span> st=file_status(), <span style="background-color: #FFFFFF">file_status</span> symlink_st=file_status());
-
- // <a href="#basic_directory_entry-modifiers">modifiers</a>
- void assign(const path_type&amp; p, <span style="background-color: #FFFFFF">file_status</span> st=file_status(), <span style="background-color: #FFFFFF">file_status</span> symlink_st=file_status());
- void replace_filename(const string_type&amp; s, <span style="background-color: #FFFFFF">file_status</span> st=file_status(), <span style="background-color: #FFFFFF">file_status</span> symlink_st=file_status());
-
- // <a href="#basic_directory_entry-observers">observers</a>
- const Path&amp; path() const;
- operator const Path&amp;() const;
-<span style="background-color: #FFFFFF">
- file_status status() const;
- file_status status(error_code&amp; ec) const;
- file_status symlink_status() const;
- file_status symlink_status(error_code&amp; ec) const;
-</span><span style="background-color: #FFFF00">
-</span> // <a href="#basic_directory_entry-comparisons">comparisons</a>
- bool operator&lt;(const basic_directory_entry&lt;Path&gt;&amp; rhs);
- bool operator==(const basic_directory_entry&lt;Path&gt;&amp; rhs);
- bool operator!=(const basic_directory_entry&lt;Path&gt;&amp; rhs);
- bool operator&gt;(const basic_directory_entry&lt;Path&gt;&amp; rhs);
- bool operator&lt;=(const basic_directory_entry&lt;Path&gt;&amp; rhs);
- bool operator&gt;=(const basic_directory_entry&lt;Path&gt;&amp; rhs);
-
- private:
- path_type m_path; // for exposition only
- mutable <span style="background-color: #FFFFFF">file_status</span> m_status; // for exposition only; stat()-like
- mutable <span style="background-color: #FFFFFF">file_status</span> m_symlink_status; // for exposition only; lstat()-like
- };
-
- } // namespace filesystem
- } // namespace boost</pre>
-<p>A <code>basic_directory_entry</code> object stores a <code>basic_path object</code>,
-a <code>file_status</code> object for non-symbolic link status, and a <code>
-file_status</code> object for symbolic link status. The <code>file_status</code>
-objects act as value caches.</p>
-<blockquote>
-<p>[<i>Note:</i> Because <code>status()</code>on a pathname may be a very expensive operation,
-some operating systems provide status information as a byproduct of directory
-iteration. Caching such status information can result is significant time savings. Cached and
-non-cached results may differ in the presence of race conditions. <i>-- end note</i>]</p>
-<p><span style="background-color: #E0E0E0"><i>Actual cold-boot timing of iteration over
-a directory with 15,047 entries was six seconds for non-cached status queries
-versus one second for cached status queries. Windows XP, 3.0 GHz processor, with
-a moderately fast hard-drive. Similar speedup expected on Linux and BSD-derived
-Unix variants that provide status during directory iteration.</i></span></p>
-</blockquote>
-<h4> <a name="basic_directory_entry-constructors"> <code>basic_directory_entry </code>constructors</a></h4>
-<pre>basic_directory_entry();</pre>
-<blockquote>
- <p><i>Postconditions:</i></p>
- <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="36%">
- <tr>
- <td width="18%"><b>Expression</b></td>
- <td width="82%"><b>Value</b></td>
- </tr>
- <tr>
- <td width="18%"><code>path().empty()</code></td>
- <td width="82%"><code>true</code></td>
- </tr>
- <tr>
- <td width="18%"><code>status()</code></td>
- <td width="82%"><code>file_status()</code></td>
- </tr>
- <tr>
- <td width="18%"><code>symlink_status()</code></td>
- <td width="82%"><code>file_status()</code></td>
- </tr>
- </table>
-</blockquote>
-<pre>explicit basic_directory_entry(const path_type&amp; p, <span style="background-color: #FFFFFF">file_status</span> st=file_status(), <span style="background-color: #FFFFFF">file_status</span> symlink_st=file_status());</pre>
-<blockquote>
- <p><i>Postconditions:</i></p>
- <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="36%">
- <tr>
- <td width="18%"><b>Expression</b></td>
- <td width="82%"><b>Value</b></td>
- </tr>
- <tr>
- <td width="18%"><code>path()</code></td>
- <td width="82%"><code>p</code></td>
- </tr>
- <tr>
- <td width="18%"><code>status()</code></td>
- <td width="82%"><code>st</code></td>
- </tr>
- <tr>
- <td width="18%"><code>symlink_status()</code></td>
- <td width="82%"><code>symlink_st</code></td>
- </tr>
- </table>
-</blockquote>
-<h4> <a name="basic_directory_entry-modifiers"> <code>basic_directory_entry </code>modifiers</a></h4>
-<pre>void assign(const path_type&amp; p, <span style="background-color: #FFFFFF">file_status</span> st=file_status(), <span style="background-color: #FFFFFF">file_status</span> symlink_st=file_status());</pre>
-<blockquote>
- <p><i>Postconditions:</i></p>
- <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="36%">
- <tr>
- <td width="18%"><b>Expression</b></td>
- <td width="82%"><b>Value</b></td>
- </tr>
- <tr>
- <td width="18%"><code>path()</code></td>
- <td width="82%"><code>p</code></td>
- </tr>
- <tr>
- <td width="18%"><code>status()</code></td>
- <td width="82%"><code>st</code></td>
- </tr>
- <tr>
- <td width="18%"><code>symlink_status()</code></td>
- <td width="82%"><code>symlink_st</code></td>
- </tr>
- </table>
-</blockquote>
-<pre>void replace_filename(const string_type&amp; s, <span style="background-color: #FFFFFF">file_status</span> st=file_status(), <span style="background-color: #FFFFFF">file_status</span> symlink_st=file_status());</pre>
-<blockquote>
- <p><i>Postconditions:</i></p>
- <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="43%">
- <tr>
- <td width="18%"><b>Expression</b></td>
- <td width="82%"><b>Value</b></td>
- </tr>
- <tr>
- <td width="18%"><code>path()</code></td>
- <td width="82%"><code>path().branch() / s</code></td>
- </tr>
- <tr>
- <td width="18%"><code>status()</code></td>
- <td width="82%"><code>st</code></td>
- </tr>
- <tr>
- <td width="18%"><code>symlink_status()</code></td>
- <td width="82%"><code>symlink_st</code></td>
- </tr>
- </table>
-</blockquote>
-<h4> <a name="basic_directory_entry-observers"> <code>basic_directory_entry</code> observers</a></h4>
-<pre>const Path&amp; path() const;
-operator const Path&amp;() const;</pre>
-<blockquote>
- <p><i>Returns:</i> <code>m_path</code></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">file_status status() const;</span></pre>
-<blockquote>
-<p><span style="font-style: italic; background-color: #FFFFFF">Effects:</span><span style="background-color: #FFFFFF">
-As if,</span></p>
- <blockquote>
- <pre><span style="background-color: #FFFFFF">if ( !status_known( m_status ) )
-{
- if ( status_known(m_symlink_status) &amp;&amp; !is_symlink(m_symlink_status) )
- { m_status = m_symlink_status; }
- else { m_status = status(m_path); }
-}</span></pre>
- </blockquote>
- <p><span style="background-color: #FFFFFF"><i>Throws:</i> See <code>status</code>
- function.</span></p>
- <p><span style="background-color: #FFFFFF"><i>Returns:</i> <code>m_status</code></span></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">file_status status(error_code&amp; ec) const;</span></pre>
-<blockquote>
-<p><span style="font-style: italic; background-color: #FFFFFF">Effects:</span><span style="background-color: #FFFFFF">
-As if,</span></p>
- <blockquote>
- <pre><span style="background-color: #FFFFFF">if ( !status_known( m_status ) )
-{
- if ( status_known(m_symlink_status) &amp;&amp; !is_symlink(m_symlink_status) )
- { m_status = m_symlink_status; }
- else { m_status = status(m_path, ec); }
-}
-else ec = 0;</span></pre>
- </blockquote>
- <p><span style="background-color: #FFFFFF"><i>Returns:</i> <code>m_status</code></span></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">file_status symlink_status() const;</span></pre>
-<blockquote>
-<p><span style="font-style: italic; background-color: #FFFFFF">Effects:</span><span style="background-color: #FFFFFF">
-As if,</span></p>
- <blockquote>
- <pre><span style="background-color: #FFFFFF">if ( !status_known( m_symlink_status ) )
-{
- m_symlink_status = symlink_status(m_path);
-}</span></pre>
- </blockquote>
- <p><span style="background-color: #FFFFFF"><i>Throws:</i> See <code>symlink_status</code>
- function.</span></p>
- <p><span style="background-color: #FFFFFF"><i>Returns:</i> <code>
- m_symlink_status</code></span></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">file_status symlink_status(error_code&amp; ec) const;</span></pre>
-<blockquote>
-<p><span style="font-style: italic; background-color: #FFFFFF">Effects:</span><span style="background-color: #FFFFFF">
-As if,</span></p>
- <blockquote>
- <pre><span style="background-color: #FFFFFF">if ( !status_known( m_symlink_status ) )
-{
- m_symlink_status = symlink_status(m_path, ec);
-}
-else ec = 0;</span></pre>
- </blockquote>
- <p><span style="background-color: #FFFFFF"><i>Returns:</i> <code>m_symlink_status</code></span></p>
-</blockquote>
-<h3><a name="Class-template-basic_directory_iterator">Class template <code>basic_directory_iterator</code></a></h3>
-<pre> namespace boost
- {
- namespace filesystem
- {
- template &lt;class Path&gt;
- class basic_directory_iterator :
- public iterator&lt;input_iterator_tag, basic_directory_entry&lt;Path&gt; &gt;
- {
- public:
- typedef Path path_type;
-
- // <a href="#basic_directory_iterator-constructors">constructors</a>
- basic_directory_iterator();
- explicit basic_directory_iterator(const Path&amp; dp);
- basic_directory_iterator(const Path&amp; dp, error_code&amp; ec);
- basic_directory_iterator(const basic_directory_iterator&amp; bdi);
- basic_directory_iterator&amp; operator=(const basic_directory_iterator&amp; bdi);
- ~basic_directory_iterator();
-
- // other members as required by
- // C++ Std, 24.1.1 Input iterators [lib.input.iterators]
- };
-
- } // namespace filesystem
- } // namespace boost</pre>
-<p> <code>basic_directory_iterator</code> satisfies the requirements of an
-input iterator (C++ Std, 24.1.1, Input iterators [lib.input.iterators]).</p>
-<p>A <code>basic_directory_iterator</code> reads successive elements from the directory for
-which it was constructed, as if by calling <i>POSIX</i>
-<code>
-<a href="http://www.opengroup.org/onlinepubs/000095399/functions/readdir_r.html">readdir_r()</a></code>. After a <code>basic_directory_iterator</code> is constructed, and every time
-<code>operator++</code> is called,
-it reads and stores a value of <code>basic_directory_entry&lt;Path&gt;</code>
-and possibly stores associated status values.
-<code>operator++</code> is not equality preserving; that is, <code>i == j</code> does not imply that
-<code>++i == ++j</code>. </p>
-<blockquote>
-<p>[<i>Note:</i> The practical consequence of not preserving equality is that directory iterators
-can be used only for single-pass algorithms. <i>--end note</i>]</p>
-</blockquote>
-<p>If the end of the directory elements is reached, the iterator becomes equal to
-the end iterator value. The constructor <code>basic_directory_iterator()</code>
-with no arguments always constructs an end iterator object, which is the only
-legitimate iterator to be used for the end condition. The result of <code>
-operator*</code> on an end iterator is not defined. For any other iterator value
-a <code>const basic_directory_entry&lt;Path&gt;&amp;</code> is returned. The result of
-<code>operator-&gt;</code> on an end iterator is not defined. For any other
-iterator value a <code>const basic_directory_entry&lt;Path&gt;*</code> is
-returned. </p>
-<p>Two end iterators are always equal. An end iterator is not equal to a non-end
-iterator.</p>
-<blockquote>
-<p><i><span style="background-color: #E0E0E0">The above wording is based on the
-Standard Library's istream_iterator wording. Commentary was shortened and
-moved into a note.</span></i></p>
-</blockquote>
-<p>The result of calling the <code>path()</code> member of the <code>
-basic_directory_entry</code> object obtained by dereferencing a <code>
-basic_directory_iterator</code> is a reference to a <code>basic_path</code>
-object composed of the directory argument from which the iterator was
-constructed with filename of the directory entry appended as if by <code>
-operator/=</code>. </p>
-<blockquote>
-<p>[<i><a name="Example-program">Example</a>: </i>This program accepts an
-optional command line argument, and if that argument is a directory pathname,
-iterates over the contents of the directory. For each directory entry, the name
-is output, and if the entry is for a regular file, the size of the file is
-output.</p>
- <blockquote>
- <pre>#include &lt;iostream&gt;
-#include &lt;filesystem&gt;
-
-using std::tr2::sys;
-using std::cout;
-
-int main(int argc, char* argv[])
-{
- std::string p(argc &lt;= 1 ? &quot;.&quot; : argv[1]);
-
- if (is_directory(p))
- {
- for (directory_iterator itr(p); itr!=directory_iterator(); ++itr)
- {
- cout &lt;&lt; itr-&gt;path().filename() &lt;&lt; ' '; // display filename only
- if (is_regular_file(itr-&gt;status())) cout &lt;&lt; &quot; [&quot; &lt;&lt; file_size(itr-&gt;path()) &lt;&lt; ']';
- cout &lt;&lt; '\n';
- }
- }
- else cout &lt;&lt; (exists(p) ? &quot;Found: &quot; : &quot;Not found: &quot;) &lt;&lt; p &lt;&lt; '\n';
-
- return 0;
-}</pre>
- </blockquote>
- <p><i>-- end example</i>]</p>
-</blockquote>
-<p>Directory iteration shall not yield directory entries for the current (<i>dot</i>)
-and parent (<i>dot dot</i>) directories.</p>
-<p>The order of directory entries obtained by dereferencing successive
-increments of a <code>basic_directory_iterator</code> is unspecified.</p>
-<blockquote>
-<p>[<i>Note:</i> Programs performing directory iteration may wish to test if the
-path obtained by dereferencing a directory iterator actually exists. It could be
-a
-symbolic link to a non-existent file. Programs recursively
-walking directory trees for purposes of removing and renaming entries may wish
-to avoid following symbolic links.</p>
-<p>If a file is removed from or added to a directory after the
-construction of a <code>basic_directory_iterator</code> for the directory, it is
-unspecified whether or not subsequent incrementing of the iterator will ever
-result in an iterator whose value is the removed or added directory entry. See
-<i>POSIX</i>
-<code>
-<a href="http://www.opengroup.org/onlinepubs/000095399/functions/readdir_r.html">readdir_r()</a></code>. <i>
---end note</i>]</p>
-</blockquote>
-<h4><a name="basic_directory_iterator-constructors"><code>basic_directory_iterator</code> constructors</a></h4>
-
-<p><code>basic_directory_iterator();</code></p>
-
-<blockquote>
-
-<p><i>Effects:</i> Constructs the end iterator.</p>
-
-</blockquote>
-
-<p><code>explicit basic_directory_iterator(const Path&amp; dp);</code></p>
-
-<blockquote>
-
-<p><i>Effects:</i> Constructs a iterator representing the first
-entry in the directory resolved to by <code>dp</code>, otherwise, the end iterator.</p>
-
-<p>[<i>Note:</i> To iterate over the current directory, write <code>
-directory_iterator(&quot;.&quot;)</code> rather than <code>directory_iterator(&quot;&quot;)</code>.
-<i>-- end note</i>]</p>
-</blockquote>
-<pre><code>basic_directory_iterator(const Path&amp; dp, error_code&amp; ec );</code></pre>
-<blockquote>
-
-<p><i>Effects:</i> Constructs a iterator representing the first
-entry in the directory resolved to by <code>dp</code>, otherwise, the end iterator.
-If an error occurs while establishing the results, the iterator constructed
-represents the end iterator and <code>ec</code> is set to the error code
-reported by the operating system, otherwise to 0.</p>
-
-</blockquote>
-<h3><a name="Class-template-basic_recursive_directory_iterator">Class template <code>basic_recursive_directory_iterator</code></a></h3>
-<pre> namespace boost
- {
- namespace filesystem
- {
- template &lt;class Path&gt;
- class basic_recursive_directory_iterator :
- public iterator&lt;input_iterator_tag, basic_directory_entry&lt;Path&gt; &gt;
- {
- public:
- typedef Path path_type;
-
- // constructors
- basic_recursive_directory_iterator();
- explicit basic_recursive_directory_iterator(const Path&amp; dp);
- basic_recursive_directory_iterator(const basic_recursive_directory_iterator&amp; brdi);
- basic_recursive_directory_iterator&amp; operator=(const basic_recursive_directory_iterator&amp; brdi);
- ~basic_recursive_directory_iterator();
-
- // observers
- int level() const;
-
- // modifiers
- void pop();
- void no_push();
-
- // other members as required by
- // C++ Std, 24.1.1 Input iterators [lib.input.iterators]
-
- private:
- int m_level; // for exposition only
- };
-
- } // namespace filesystem
- } // namespace boost</pre>
-<p>The behavior of a <code>basic_recursive_directory_iterator</code> is the same
-as a <code>basic_directory_iterator</code> unless otherwise specified.</p>
-<ul>
- <li>When an iterator is constructed, <code>m_level</code> is set to 0;</li>
- <li>When an iterator <code>it</code> is incremented, if <code>it-&gt;is_directory()</code>
- is true and <code>no_push()</code> had not been called subsequent to
- the most recent increment operation (or construction, if no increment has
- occurred), then&nbsp; <code>m_level</code> is incremented, the
- directory is visited, and its contents recursively iterated over.</li>
- <li>When an iterator reaches the end of the directory currently being iterated
- over, or when <code>pop()</code> is called, <code>m_level</code> is
- decremented, and iteration continues with the parent directory, until the
- directory specified in the constructor argument is reached.</li>
- <li><code>level()</code> returns <code>m_level</code>.</li>
- <li><code>level()</code>, <code>pop()</code>, and <code>no_push()</code> all
- require that the iterator not be the end iterator.</li>
-</ul>
-<blockquote>
- <p>[<i>Note:</i> One of the uses of <code>no_push()</code> is to prevent
- unwanted recursion into symlinked directories. This may be necessary to
- prevent loops on some operating systems. <i>--end note</i>]</p>
-</blockquote>
-<h3><a name="file_status">Class file_status</a></h3>
-<pre> namespace boost
- {
- namespace filesystem
- {
- class file_status
- {
- public:
- explicit file_status( file_type v = status_unknown );
-
- file_type type() const;
- void type( file_type v );
- };
- } // namespace filesystem
- } // namespace boost</pre>
-<p>A <code>file_status</code> object stores information about the status of a
-file. The internal form of the stored information is unspecified.</p>
-<blockquote>
- <p><i>[Note: </i>The class may be extended in the future to store
- additional status information. <i>--end note]</i></p>
-</blockquote>
-<h4>Members</h4>
-<pre>explicit file_status( file_type v = status_unknown );</pre>
-<blockquote>
- <p><i>Effects:</i> Stores <code>v</code>.</p>
-</blockquote>
-<pre>file_type type() const;</pre>
-<blockquote>
- <p><i>Returns: </i>The stored <code>file_type</code>.</p>
-</blockquote>
-<pre>void type( file_type v );</pre>
-<blockquote>
- <p><i>Effects:</i> Stores <code>v</code>, replacing the previously stored
- value.</p>
-</blockquote>
-<h3><a name="Non-member-functions">Non-member operational functions</a></h3>
-<h4><a name="Status-functions">Status functions</a></h4>
-<pre>template &lt;class Path&gt; file_status status(const Path&amp; p, error_code&amp; ec);
-template &lt;class Path&gt; file_status <a name="symlink_status">symlink_status</a>(const Path&amp; p, error_code&amp; ec);</pre>
-<blockquote>
- <p><i>Returns:</i></p>
- <blockquote>
- For <code>status</code>, determine the attributes
- of
- <code>p</code> as if by<i> POSIX </i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code>,
- for <code>symlink_status</code>, determine the attributes as if by <i>POSIX </i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/lstat.html">
- lstat()</a></code>.<blockquote>
- <p>[<i>Note:</i> For symbolic links, <code>stat()</code> continues
- pathname resolution using the contents of the symbolic link, <code>lstat()</code>
- does not. <i>--
- end note</i>]</p>
- </blockquote>
- <p>If the underlying file system reports an error during attribute determination:</p>
- <ul>
- <li>If the error indicating that <code>p</code> could not be resolved, as
- if by POSIX errors ENOENT or ENOTDIR, call <code>ec.clear()</code> and return <code>
- file_status(not_found_flag)</code>.</li>
- </ul>
- <blockquote>
- <blockquote>
- <p>[<i>Note:</i> The effect of this behavior is to distinguish between
- knowing that p
- does not exist, and not being able to determine the status of p. This
- distinction is important to users.&nbsp; <i>--end note</i>]</p>
- </blockquote>
- </blockquote>
- <ul>
- <li>Otherwise, set ec to the error number reported by the underlying
- implementation API
- and return <code>
- file_status(status_unknown)</code>.</li>
- </ul>
- Otherwise:<ul>
- <li>If the attributes indicate a regular file, as if by <i>POSIX</i>&nbsp;S_<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">ISREG()</a>,
- return <code>
- file_status(regular_file)</code>.</li>
- <li>Else if the attributes indicate a directory, as if by <i>POSIX</i> S_<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">ISDIR()</a>,
- return <code>
- file_status(directory_file)</code>.</li>
- <li>Else if the attributes indicate a symbolic link, as if by <i>POSIX</i> S_<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">ISLNK()</a>,
- return <code>
- file_status(symlink_file)</code>. <i>[Note: </i>Only possible for <code>
- symlink_status</code>. <i>--end note]</i></li>
- <li>Else if the attributes indicate a block special file, as if by <i>POSIX</i> S_<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">ISBLK()</a>,
- return <code>
- file_status(block_file)</code>.</li>
- <li>Else if the attributes indicate a character special file, as if by <i>POSIX</i> S_<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">ISCHR()</a>,
- return <code>
- file_status(character_file)</code>.</li>
- <li>Else if the attributes indicate a fifo or pipe file, as if by <i>POSIX</i> S_<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">ISFIFO()</a>,
- return <code>
- file_status(fifo_file)</code>.</li>
- <li>Else if the attributes indicate a socket, as if by <i>POSIX</i> S_<a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">ISSOCK()</a>,
- return <code>
- file_status(socket_file)</code>.</li>
- <li>Else return <code>
- file_status(type_unknown)</code>.</li>
- </ul>
- </blockquote>
-<p>[<i>Note:</i> <code>directory_file</code> implies <code>
-basic_directory_iterator</code> on the file would succeed, and <code>
-regular_file</code> implies appropriate <code>&lt;fstream&gt;</code> operations would succeed,
-assuming no hardware, permission, access, or race
-condition errors. For <code>regular_file,</code> the converse is not true; lack of
-<code>regular_file</code> does not necessarily imply <code>&lt;fstream&gt;</code> operations would
-fail on a directory.
-<i>-- end note</i>]</p>
-</blockquote>
-<pre>template &lt;class Path&gt; file_status status(const Path&amp; p);</pre>
-<blockquote>
- <p><i>Effects:</i> <code>system_error_code ec;</code><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- <code>file_status stat(status(p, ec));</code></p>
- <p><i>Throws:</i> <code>basic_filesystem_error&lt;Path&gt;</code> if <code>ec
- != 0</code></p>
- <p><i>Returns:</i> <code>stat</code></p>
-</blockquote>
-<pre>template &lt;class Path&gt; file_status symlink_status(const Path&amp; p);</pre>
-<blockquote>
- <p><i>Effects:</i> <code>system_error_code ec;</code><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- <code>file_status stat(symlink_status(p, ec));</code></p>
- <p><i>Throws:</i> <code>basic_filesystem_error&lt;Path&gt;</code> if <code>ec
- != 0</code></p>
- <p><i>Returns: </i><code>stat</code></p>
-</blockquote>
-<h4><a name="Predicate-functions">Predicate functions</a></h4>
-<pre><span style="background-color: #FFFFFF">bool <a name="status_known">status_known</a>(file_status s);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF">
- <code>s.type() != status_unknown</code></span></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">bool </span><a name="exists"><span style="background-color: #FFFFFF">exists</span></a><span style="background-color: #FFFFFF">(file_status</span><span style="background-color: #FFFFFF"> s);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF">
- <code>status_known(s) &amp;&amp; s.type() != file_not_found</code></span></p>
-</blockquote>
-<pre>template &lt;class Path&gt; bool <a name="exists">exists</a>(const Path&amp; p);</pre>
-<blockquote>
- <p><i>Returns:</i> <code>exists( status(p) )</code></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">bool </span><code><span style="background-color: #FFFFFF">is_regular_file</span></code><span style="background-color: #FFFFFF">(file_status</span><span style="background-color: #FFFFFF"> s);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF">
- <code>s.type() == regular_file</code></span></p>
-</blockquote>
-<pre><code>template &lt;class Path&gt; bool is_regular_file(const Path&amp; p);</code></pre>
-<blockquote>
- <p><i>Returns:</i> <code>is_regular_file( status(p) )</code></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">bool </span><code><span style="background-color: #FFFFFF">is_directory</span></code><span style="background-color: #FFFFFF">(file_status</span><span style="background-color: #FFFFFF"> s);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF"> </span>
- <code><span style="background-color: #FFFFFF">s.type() == directory_file</span></code></p>
-</blockquote>
-<pre><code>template &lt;class Path&gt; bool is_directory(const Path&amp; p);</code></pre>
-<blockquote>
- <p><i>Returns:</i> <code>is_directory( status(p) )</code></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">bool <a name="exists">is_symlink</a>(file_status s);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF"> </span>
- <code><span style="background-color: #FFFFFF">s.type() == symlink_file</span></code></p>
-</blockquote>
-<pre><code>template &lt;class Path&gt; bool is_symlink(const Path&amp; p);</code></pre>
-<blockquote>
- <p><i>Returns:</i> <code>is_symlink( symlink_status(p) )</code></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">bool <a name="exists">is_other</a>(file_status s);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF">
- <code>return exists(s) &amp;&amp; !is_regular_file(s) &amp;&amp; !is_directory(s) &amp;&amp; !is_symlink(s)</code></span></p>
- <p><span style="background-color: #FFFFFF">[<i>Note: </i>The specification of
- <code>is_other()</code> will remain unchanged even if additional <code>is_xxx()</code>
- functions are added in the future. <i>-- end note</i>]</span></p>
-</blockquote>
-<pre><code>template &lt;class Path&gt; bool is_other(const Path&amp; p);</code></pre>
-<blockquote>
- <p><i>Returns:</i> <code>is_other( status(p) )</code></p>
-</blockquote>
-<pre><code>template &lt;class Path&gt; bool <span style="background-color: #FFFFFF; text-decoration:underline">is_</span>empty(const Path&amp; p);</code></pre>
-<blockquote>
- <p><i>Effects:</i> Determines <code>file_status s</code>, as if by <code>
- status(p)</code>.</p>
- <p><i>Throws:</i> <code>basic_filesystem_error&lt;Path&gt;</code> if <code>!exist(s) ||
- is_other(s)</code>.</p>
- <p><i>Returns:</i> <code>is_directory(s)<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ?
- basic_directory_iterator&lt;Path&gt;(p) == basic_directory_iterator&lt;Path&gt;()<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : file_size(p) == 0;</code></p>
-</blockquote>
-<pre><code>template &lt;class Path1, class Path2&gt; bool <a name="equivalent">equivalent</a>(const Path1&amp; p1, const Path2&amp; p2);</code></pre>
-<blockquote>
- <p><i>Requires:</i> <code>Path1::external_string_type</code> and <code>
- Path2::external_string_type</code> are the same type. </p>
- <p><i>Effects:</i> Determines <code>file_status s1</code> and <code>s2</code>,
- as if by <code>status(p1)</code> and&nbsp; <code>status(p2)</code>,
- respectively.</p>
- <p><i>Throws:</i> <code>basic_filesystem_error&lt;Path1&gt;</code><span style="background-color: #FFFFFF"> </span>
- if <code>(!exists(s1) &amp;&amp; !exists(s2)) || (is_other(s1) &amp;&amp;
- is_other(s2))</code>.</p>
- <p><i>Returns:</i> <code>true</code>, if <code>sf1 == sf2</code> and <code>p1</code> and <code>p2</code>
- resolve to the same file system entity, else <code>false</code>.</p>
- <p>Two paths are considered to resolve to
- the same file system entity if two candidate entities reside on the same
- device at the same location. This is determined as if by the values of the <i>POSIX</i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">stat</a></code>
- structure<code>,</code> obtained as if by <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code> for the two paths, having equal
- <code>st_dev</code> values and equal <code>st_ino</code> values.</p>
- <p>[<i>Note:</i> <i>POSIX</i> requires that <i>&quot;st_dev</i> must be unique
- within a Local Area Network&quot;. Conservative <i>POSIX</i> implementations may
- also wish to check for equal <code>st_size</code> and <code>st_mtime</code>
- values. <i>Windows</i> implementations may use <code>GetFileInformationByHandle()</code> as a surrogate for <code>
- stat()</code>, and consider &quot;same&quot; to be equal values for <code>
- dwVolumeSerialNumber</code>, <code>nFileIndexHigh</code>, <code>
- nFileIndexLow</code>, <code>nFileSizeHigh</code>, <code>nFileSizeLow</code>,
- <code>ftLastWriteTime.dwLowDateTime</code>, and <code>
- ftLastWriteTime.dwHighDateTime</code>. <i>-- end note</i>]</p>
-</blockquote>
-<h4><a name="Attribute-functions">Attribute functions</a></h4>
-<p>[<i>Note:</i> A strictly limited number of attribute functions are provided
-because few file system attributes are portable. Even the functions provided will be impossible to implement on some file
-systems. <i>--end note</i>.]</p>
-<pre>template &lt;class Path&gt; const Path&amp; <a name="initial_path">initial_path</a>();</pre>
-<blockquote>
- <p><i>Returns:</i> <code>current_path()</code> at the time of entry to <code>
- main()</code>.</p>
- <p>[<i>Note:</i> These semantics turn a dangerous global variable into a safer
- global constant. <i>--end note</i>]</p>
- <p>[<i>Note:</i> Full implementation requires runtime library support.
- Implementations which cannot provide runtime library support are encouraged to
- instead store the value of <code>current_path()</code> at the first call of
- <a name="initial_path"><code>initial_path</code></a><code>()</code>, and
- return this value for all subsequent calls. Programs using
- <a name="initial_path"><code>initial_path</code></a><code>()</code> are
- encouraged to call it immediately on entrance to <code>main()</code> so that
- they will work correctly with such partial implementations. <i>--end note</i>]</p>
-</blockquote>
-<pre>template &lt;class Path&gt; Path current_path();</pre>
-<blockquote>
- <p><i>Returns:</i> The current path, as if by <i>POSIX</i>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/getcwd.html">
- <code>getcwd()</code></a>.</p>
- <p><i>Postcondition:</i> <code>current_path().is_complete()</code></p>
- <p>[<i>Note:</i> The current path as returned by many operating systems is a
- dangerous global variable. It may be changed unexpectedly by a third-party or
- system library functions, or by another thread. Although dangerous, the
- function is useful in dealing with other libraries.. For a safer alternative,
- see <code><a href="#initial_path">initial_path()</a></code>. The <code>
- current_path()</code> name was chosen to emphasize that the return is a
- complete path, not just a single directory name. <i>-- </i><i>end note</i>]</p>
-</blockquote>
-<pre>template &lt;class Path&gt; void current_path(const Path&amp; p);</pre>
-<blockquote>
-<p><i>Postcondition:</i> equivalent( p, current_path() );</p>
-</blockquote>
-<pre>template &lt;class Path&gt; <span style="background-color: #FFFFFF; ">uintmax_t</span> file_size(const Path&amp; p);</pre>
-<blockquote>
- <p><i>Returns:</i> The size
- <span style="background-color: #FFFFFF; ">in bytes</span>
- of the file <code>p</code> resolves to, determined as if by the value of
- the <i>POSIX</i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">stat</a></code> structure member <code>st_size</code>
- obtained as if by <i>POSIX</i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code>.</p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF"><a name="space">template</a> &lt;class Path&gt; space_info space(const Path&amp; p);</span></pre>
-<blockquote>
- <p><span style="background-color: #FFFFFF"><i>Returns:</i> A <code>space_info</code>
- object. The value of the <code>space_info</code> object is determined as if by
- using </span> <i><span style="background-color: #FFFFFF">POSIX</span></i><span style="background-color: #FFFFFF"> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/statvfs.html" style="text-decoration: none">
- statvfs()</a></code> to obtain a <i>POSIX</i> struct <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/statvfs.h.html" style="text-decoration: none">
- statvfs</a></code>, and then multiplying its <code>f_blocks</code>, <code>
- f_bfree</code>, and <code>f_bavail</code> members by its <code>f_frsize</code>
- member, and assigning the results to the <code>capacity</code>, <code>free</code>,
- and <code>available</code> members respectively. Any members for which the
- value cannot be determined shall be set to -1.</span></p>
-</blockquote>
-<pre>template &lt;class Path&gt; std::time_t last_write_time(const Path&amp; p);</pre>
-<blockquote>
- <p><i>Returns:</i> The time of last data modification of <code>p</code>, determined as if by the
- value of the <i>POSIX</i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">stat</a></code> structure member <code>st_mtime</code>&nbsp; obtained
- as if by <i>POSIX</i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code>.</p>
-</blockquote>
-<pre>template &lt;class Path&gt; void last_write_time(const Path&amp; p, const std::time_t new_time);</pre>
-<blockquote>
- <p><i>Effects:</i> Sets the time of last data modification of the file
- resolved to by <code>p</code>
- to <code>new_time</code>, as if by <i>POSIX</i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code>
- followed by <i>POSIX</i>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/utime.html">
- <code>utime()</code></a>.</p>
- <p>[<i>Note:</i> The apparent postcondition <code>last_write_time(p) ==
- new_time</code> is not specified since it would not hold for many file systems
- due to coarse time mechanism granularity. <i>-- end note</i>]</p>
-</blockquote>
-<h4>Other o<a name="Operations-functions">perations functions</a></h4>
-<pre>template &lt;class Path&gt; bool create_directory(const Path&amp; dp);</pre>
-<blockquote>
- <p><i>Effects:</i> Attempts to create the directory <code>dp</code> resolves to,
- as if by<i> POSIX </i><code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/mkdir.html">mkdir()</a></code> with a second argument of S_IRWXU|S_IRWXG|S_IRWXO. </p>
- <p><i>Throws:</i> <code>basic_filesystem_error&lt;Path&gt;</code> if <i>
- Effects</i> fails for any reason other than because the directory already exists.</p>
- <p><i>Returns:</i> True if a new directory was created, otherwise false.</p>
- <p><i>Postcondition:</i> <code>is_directory(dp)</code></p>
-</blockquote>
-<pre><span style="background-color: #FFFFFF">template &lt;class Path1, class Path2&gt;
- error_code create_hard_link(const Path1&amp; to_p, const Path2&amp; from_p, error_code&amp; ec);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Requires:</span></i><span style="background-color: #FFFFFF">
- </span> <code><span style="background-color: #FFFFFF">Path1::external_string_type</span></code><span style="background-color: #FFFFFF"> and
- </span> <code>
- <span style="background-color: #FFFFFF">Path2::external_string_type</span></code><span style="background-color: #FFFFFF"> are the same type.</span></p>
- <p><i><span style="background-color: #FFFFFF">Effects:</span></i><span style="background-color: #FFFFFF"> Establishes the postcondition, as if by
- </span> <i><span style="background-color: #FFFFFF">POSIX</span></i><span style="background-color: #FFFFFF">
- </span> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/link.html">
- <span style="background-color: #FFFFFF">link()</span></a></code><span style="background-color: #FFFFFF">.</span></p>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF"> If the
- postcondition cannot be established, a system error code
- indicating the reason for the failure, otherwise 0.</span></p>
- <p><i><span style="background-color: #FFFFFF">Postcondition:</span></i></p>
- <ul>
- <li><span style="background-color: #FFFFFF">&nbsp;</span><code><span style="background-color: #FFFFFF">exists(to_p) &amp;&amp; exists(from_p) &amp;&amp; equivalent(to_p,
- from_p)</span></code></li>
- <li><span style="background-color: #FFFFFF">The contents of the file or directory
- </span> <code><span style="background-color: #FFFFFF">to_p</span></code><span style="background-color: #FFFFFF"> resolves to are unchanged.</span></li>
- </ul>
- <p><span style="background-color: #FFFFFF">[</span><i><span style="background-color: #FFFFFF">Note:</span></i><span style="background-color: #FFFFFF">
- Some operating systems do not support hard links or support
- them only for regular files. Some operating systems limit the number of links per
- file.
- Some file systems that do not
- support
- hard links - the FAT system used on floppy discs, memory cards and flash
- drives,
- for example. Thus hard links should be avoided if wide portability is
- a concern. </span> <i><span style="background-color: #FFFFFF">-- end note</span></i><span style="background-color: #FFFFFF">]</span></p>
- </blockquote>
-<pre><span style="background-color: #FFFFFF">template &lt;class Path1, class Path2&gt;
- void create_hard_link(const Path1&amp; to_p, const Path2&amp; from_p);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Requires:</span></i><span style="background-color: #FFFFFF">
- </span> <code><span style="background-color: #FFFFFF">Path1::external_string_type</span></code><span style="background-color: #FFFFFF"> and
- </span> <code>
- <span style="background-color: #FFFFFF">Path2::external_string_type</span></code><span style="background-color: #FFFFFF"> are the same type.</span></p>
- <p><i><span style="background-color: #FFFFFF">Effects:</span></i><span style="background-color: #FFFFFF">
- As if <code>system_error_code ec( create_hard_link( to_p, from_p ) );</code></span></p>
- <p><span style="font-style: italic; background-color: #FFFFFF">Throws:</span><span style="background-color: #FFFFFF">
- </span> <code>basic_filesystem_error&lt;Path1, Path2&gt;</code><span style="background-color: #FFFFFF">
- if <code>ec</code> is not zero.</span></p>
- </blockquote>
-<pre><span style="background-color: #FFFFFF">template &lt;class Path1, class Path2&gt;
- error_code create_symlink(const Path1&amp; to_p, const Path2&amp; from_p, error_code&amp; ec);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Requires:</span></i><span style="background-color: #FFFFFF">
- </span> <code><span style="background-color: #FFFFFF">Path1::external_string_type</span></code><span style="background-color: #FFFFFF"> and
- </span> <code>
- <span style="background-color: #FFFFFF">Path2::external_string_type</span></code><span style="background-color: #FFFFFF"> are the same type.</span></p>
- <p><i><span style="background-color: #FFFFFF">Effects:</span></i><span style="background-color: #FFFFFF"> Establishes the postcondition, as if by
- </span> <i><span style="background-color: #FFFFFF">POSIX</span></i><span style="background-color: #FFFFFF">
- </span> <code>
- <span style="background-color: #FFFFFF">
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/symlink.html">
- symlink()</a></span></code><span style="background-color: #FFFFFF">.</span></p>
- <p><i><span style="background-color: #FFFFFF">Returns:</span></i><span style="background-color: #FFFFFF"> If the
- postcondition cannot be established, a system error code
- indicating the reason for the failure, otherwise 0.</span></p>
- <p><span style="background-color: #FFFFFF"><i>Postcondition:</i> <code>from_p</code>
- resolves to a symbolic link file that contains an unspecified representation
- of <code>to_p</code>.</span></p>
- <p><span style="background-color: #FFFFFF">[</span><i><span style="background-color: #FFFFFF">Note:</span></i><span style="background-color: #FFFFFF">
- Some operating systems do not support symbolic links at all or support
- them only for regular files. Thus symbolic links should be avoided if code portability is
- a concern. </span> <i><span style="background-color: #FFFFFF">-- end note</span></i><span style="background-color: #FFFFFF">]</span></p>
- </blockquote>
-<pre><span style="background-color: #FFFFFF">template &lt;class Path1, class Path2&gt;
- void create_symlink(const Path1&amp; to_p, const Path2&amp; from_p);</span></pre>
-<blockquote>
- <p><i><span style="background-color: #FFFFFF">Requires:</span></i><span style="background-color: #FFFFFF">
- </span> <code><span style="background-color: #FFFFFF">Path1::external_string_type</span></code><span style="background-color: #FFFFFF"> and
- </span> <code>
- <span style="background-color: #FFFFFF">Path2::external_string_type</span></code><span style="background-color: #FFFFFF"> are the same type.</span></p>
- <p><i><span style="background-color: #FFFFFF">Effects:</span></i><span style="background-color: #FFFFFF">
- As if <code>system_error_code ec( create_symlink( to_p, from_p ) );</code></span></p>
- <p><span style="font-style: italic; background-color: #FFFFFF">Throws:</span><span style="background-color: #FFFFFF">
- </span> <code>basic_filesystem_error&lt;Path1, Path2&gt;</code><span style="background-color: #FFFFFF">
- if <code>ec</code> is not zero.</span></p>
- </blockquote>
-<pre>template &lt;class Path&gt; bool remove(const Path&amp; p, system::error_code &amp; ec = <i>singular</i> );</pre>
-<blockquote>
- <p><i>Effects:</i>&nbsp; Removes the file <code>p</code>,
- as if by<i> POSIX </i><code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/remove.html">remove()</a></code>.
- If no error is reported by the underlying removal implementation or if <code>
- status(p).type() == file_not_found</code>, then:</p>
- <ul>
- <li>if <code>ec != </code><i><code>singular</code></i>, then <code>ec.clear()</code>.</li>
- </ul>
- <p>Otherwise,</p>
- <ul>
- <li>if <code>ec != </code><i><code>singular</code></i>, then set <code>ec</code>
- to represent the error.</li>
- <li>otherwise, throw <code>basic_filesystem_error&lt;Path&gt;</code> to represent
- the error.if <code>ec != </code><i><code>singular</code></i>, then <code>
- ec.clear()</code></li>
- </ul>
- <p><i>Returns:</i> <code>true</code> if the file was removed, otherwise <code>
- false</code>.</p>
- <p><i>Postcondition:</i> <code>!exists(p)</code></p>
- <p><i>Throws:</i> See <i>Effects</i>.</p>
- <p>[<i>Note:</i> A symbolic link is itself removed, rather than the file it
- resolves to being removed. <i>-- end note</i>]</p>
-</blockquote>
-<pre>template &lt;class Path&gt; unsigned long remove_all(const Path&amp; p);</pre>
-<blockquote>
- <p><i>Effects:</i>&nbsp; Recursively deletes the contents of p if it exists,
- then deletes file <code>p</code> itself,
- as if by<i> POSIX </i><code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/remove.html">remove()</a></code>.</p>
- <p><i>Returns:</i> The number of files removed.</p>
- <p><i>Postcondition:</i> <code>!exists(p)</code></p>
- <p>[<i>Note:</i> A symbolic link is itself removed, rather than the file it
- resolves to being removed. <i>-- end note</i>]</p>
-</blockquote>
-<pre>template &lt;class Path1, class Path2&gt; void rename(const Path1&amp; from_p, const Path2&amp; to_p);</pre>
-<blockquote>
- <p><i>Requires:</i> <code>Path1::external_string_type</code> and <code>
- Path2::external_string_type</code> are the same type. </p>
- <p><i>Effects:</i> Renames <code>from_p</code> to <code>to_p</code>, as if by
- <i>POSIX</i> <code>
- <a href="http://www.opengroup.org/onlinepubs/000095399/functions/rename.html">
- rename()</a></code>.</p>
- <p><i>Postconditions:</i> <code>!exists(from_p) &amp;&amp; exists(to_p)</code>, and
- the contents and attributes of the file originally named <code>from_p</code>
- are otherwise unchanged.</p>
- <p>[<i>Note:</i> If <code>from_p</code> and <code>to_p</code> resolve to the
- same file, no action is taken. Otherwise, if <code>to_p</code> resolves to an
- existing file, it is removed. A symbolic link is itself renamed, rather than
- the file it resolves to being renamed. <i>-- end note</i>]</p>
-</blockquote>
-<pre>template &lt;class Path1, class Path2&gt;
- void copy_file(const Path1&amp; from_fp, const Path2&amp; to_fp,
- BOOST_SCOPED_ENUM(copy_option) option=<a href="#copy_option">copy_option</a>::fail_if_exists);</pre>
-<blockquote>
- <p><i>Requires:</i> <code>Path1::external_string_type</code> and <code>
- Path2::external_string_type</code> are the same type. </p>
- <p><i>Effects:</i> The contents and attributes of the file <code>from_fp</code>
- resolves to are copied to the file <code>to_fp</code> resolves to.</p>
- <p><i>Throws:</i> <code>basic_filesystem_error&lt;Path&gt;</code> if <code>
- from_fp.empty() || to_fp.empty() ||!exists(from_fp) || !is_regular_file(from_fp)
- || (option==<a href="#copy_option">copy_option</a>::fail_if_exists &amp;&amp; exists(to_fp))</code></p>
-</blockquote>
-<pre>template &lt;class Path&gt; Path complete(const Path&amp; p, const Path&amp; base=initial_path&lt;Path&gt;());</pre>
-<blockquote>
- <p><i>Effects:</i> Composes a complete path from <code>p</code> and <code>base</code>,
- using the following rules:</p>
- <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
- <tr>
- <td align="center">&nbsp;</td>
- <td align="center"><b><code>p.has_root_directory()</code></b></td>
- <td align="center"><b><code>!p.has_root_directory()</code></b></td>
- </tr>
- <tr>
- <td align="center"><b><code>p.has_root_name()</code></b></td>
- <td align="center"><code>p</code></td>
- <td align="center">precondition failure</td>
- </tr>
- <tr>
- <td align="center"><b><code>!p.has_root_name()</code></b></td>
- <td align="center"><code>base.root_name()<br>
- / p</code></td>
- <td align="center"><code>base / p</code></td>
- </tr>
- </table>
- <p><i>Returns:</i> The composed path.</p>
- <p><i>Postcondition:</i> For the returned path, <code>rp,</code> <code>
- rp.is_complete()</code> is true.</p>
- <p><i>Throws:</i>
- <span style="background-color: #FFFFFF">If </span> <code>
- <span style="background-color: #FFFFFF">!(base.is_complete() &amp;&amp; (p.is_complete() || !p.has_root_name()))</span></code></p>
- <p>[<i><a name="complete_note">Note</a>:</i> When portable behavior is
- required, use <i>complete()</i>. When operating system dependent behavior is
- required, use <i>system_complete()</i>.</p>
- <p>Portable behavior is useful when dealing with paths created
- internally within a program, particularly if the program should exhibit the
- same behavior on all operating systems.</p>
- <p>Operating system dependent behavior is useful when dealing with
- paths supplied by user input, reported to program users, or when such behavior
- is expected by program users. <i>--
- end note</i>]</p>
-</blockquote>
-<pre>template &lt;class Path&gt; Path system_complete(const Path&amp; p);</pre>
-<blockquote>
- <p><i>Effects:</i> Composes a complete path from <code>p</code>, using the
- same rules used by the operating system to resolve a path passed as the
- filename argument to standard library open functions.</p>
- <p><i>Returns:</i> The composed path.</p>
- <p><i>Postcondition:</i> For the returned path, <code>rp,</code> <code>
- rp.is_complete()</code> is true.</p>
- <p><i>Throws:</i> <span style="background-color: #FFFFFF">If <code>p.empty()</code>.</span></p>
- <p>[<i>Note:</i> For <i>POSIX</i>, <code>system_complete(p)</code> has the same semantics as
- <code>complete(p, current_path())</code>.</p>
- <p><a name="windows_effects">For <i>Windows</i></a>, <code>system_complete(p)</code> has the
- same semantics as <code>complete(ph, current_path())</code> if
- <code>p.is_complete() || !p.has_root_name()</code> or <code>p</code> and <code>base</code> have the same
- <code>root_name()</code>.
- Otherwise it acts like <code>complete(p, kinky)</code>, where <code>kinky</code>
- is the current directory for the <code>p.root_name()</code> drive. This will
- be the current directory of that drive the last time it was set, and thus may
- be <b>residue left over from a prior program</b> run by the command
- processor! Although these semantics are often useful, they are also very
- error-prone.</p>
- <p>See <a href="#complete_note">
- <i>complete()</i> note</a> for usage suggestions. <i>-- end note</i>]</p>
-</blockquote>
-<h4><a name="Convenience-functions">Convenience functions</a></h4>
-<pre>template &lt;class Path&gt; bool create_directories(const Path &amp; p);</pre>
-<blockquote>
- <p><i>Requires:</i> <code>p.empty() || <br>
- forall px: px == p || is_parent(px, p): is_directory(px) || !exists( px )</code>
- </p>
- <p><i>Returns:</i> The value of <code>!exists(p)</code> prior to the
- establishment of the postcondition.</p>
- <p><i>Postcondition:</i> <code>is_directory(p)</code></p>
- <p><i>Throws:</i>&nbsp; <code>basic_filesystem_error&lt;Path&gt;</code> if<code>
- exists(p) &amp;&amp; !is_directory(p)</code></p>
-</blockquote>
-<table border="1" cellpadding="5" cellspacing="1" style="border-collapse: collapse" bordercolor="#111111">
- <tr>
- <td>
- <h4>Deprecated convenience functions</h4>
- <p>The following functions have been replaced by <code>basic_path</code>
- member functions <code>extension()</code>, <code>stem()</code>, and <code>
- replace_extension()</code>.</p>
-<pre>template &lt;class Path&gt; typename Path::string_type extension(const Path &amp; p);</pre>
-<blockquote>
- <p><i>Returns:</i> if <code>p.filename()</code> contains a <i>dot</i>, returns
- the substring of <code>p.filename()</code> starting at the rightmost <i>dot</i>
- and ending at the string's end. Otherwise, returns an empty string. </p>
- <p>[<i>Note:<b> </b></i>The <i>dot</i> is included in the return value so that
- it is possible to distinguish between no extension and an empty extension. </p>
- <p>Implementations are permitted but not required to define additional
- behavior for file systems which append additional elements to extensions, such
- as alternate data stream or partitioned dataset names. <i>-- end note</i>]</p>
-</blockquote>
-<pre>template &lt;class Path&gt; typename Path::string_type basename(const Path &amp; p);</pre>
-<blockquote>
- <p><i>Returns:</i> if <code>p.filename()</code> contains a <i>dot</i>, returns
- the substring of <code>p.filename()</code> starting at its beginning and
- ending at the last <i>dot</i> (the <i>dot</i> is not included). Otherwise,
- returns <code>
- p.filename()</code>.</p>
-</blockquote>
-<pre>template &lt;class Path&gt;
- Path change_extension(const Path &amp; p, const typename Path::string_type &amp; new_extension);</pre>
-<blockquote>
- <p><i>Postcondition:</i> <code>basename(<i>return_value</i>) == basename(p) &amp;&amp;
- extension(<i>return_value</i>) == new_extension</code> </p>
- <p>[<i>Note:</i> It follows from the semantics of <code>extension()</code>
- that <code>new_extension</code> should include <i>dot</i> to achieve
- reasonable results. <i>-- end note</i>]</p>
-</blockquote>
- </td>
- </tr>
-</table>
-<h3><a name="header-fstream">Additions</a> to header <code>&lt;fstream&gt;</code></h3>
-<blockquote>
-<p><span style="background-color: #E0E0E0; font-style:italic">These additions have been carefully
-specified to avoid breaking existing code in common operating environments such as
-</span> <i><span style="background-color: #E0E0E0">POSIX</span></i><span style="background-color: #E0E0E0; font-style:italic">,
-</span> <i>
-<span style="background-color: #E0E0E0">Windows</span></i><span style="background-color: #E0E0E0; font-style:italic">, and
-</span> <i><span style="background-color: #E0E0E0">OpenVMS.
-See </span><a href="#Suggestions-for-fstream">
-<span style="background-color: #E0E0E0">Suggestions for <code>&lt;fstream&gt;</code>
-implementations</span></a><span style="background-color: #E0E0E0"> for
-techniques to avoid breaking existing code in other environments, particularly
-on operating systems allowing slashes in filenames.</span></i></p>
-<p><span style="background-color: #FFFFFF">[<i>Note:</i> The
-&quot;do-the-right-thing&quot; rule from <a href="#Requirements-on-implementations">
-Requirements on implementations</a> does apply to header <code>&lt;fstream&gt;</code>.</span></p>
-<p><span style="background-color: #FFFFFF">The overloads
-below are specified as additions rather than replacements for existing
-functions. This preserves existing code (perhaps
-using a <a name="home-grown-path">home-grown path</a> class) that relies on an
-automatic conversion to <code>const char*</code>.<i> -- end note</i>]</span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>In 27.8.1.1 Class template
-basic_filebuf [lib.filebuf] synopsis preceding paragraph 1, add the function:</i></span></p>
-<blockquote>
-<pre><span style="background-color: #FFFFFF">template &lt;class Path&gt; </span><span style="background-color: #FFFFFF">basic_filebuf</span><span style="background-color: #FFFFFF">&lt;charT,traits&gt;* </span><span style="background-color: #FFFFFF">open(const</span><span style="background-color: #FFFFFF"> Path&amp; p, </span><span style="background-color: #FFFFFF">ios_base::openmode</span><span style="background-color: #FFFFFF"> mode);</span></pre>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>In 27.8.1.3 Member functions [lib.filebuf.members],
-add the above to the signature preceding paragraph 2, and replace the
-sentence:</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF">It then opens a file, if possible,
-whose name is the NTBS s (“as if†by calling <code>std::fopen(s ,<i>modstr</i>
-))</code>.</span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>with:</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF">It then opens, if possible, the file
-that
-<code>p</code> or <code>path(s)</code> resolves to, “as if†by calling <code>std::fopen()</code> with a
-second argument of <i>modstr</i>.</span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>In 27.8.1.5 Class template
-basic_ifstream [lib.ifstream] synopsis preceding paragraph 1, add the functions:</i></span></p>
-<blockquote>
- <pre><span style="background-color: #FFFFFF">template &lt;class Path&gt; explicit basic_ifstream(const Path&amp; p, ios_base::openmode mode = ios_base::in);
-template &lt;class Path&gt; void open(const Path&amp; p, ios_base::openmode mode = ios_base::in);</span></pre>
-</blockquote>
-<p><i><span style="background-color: #FFFFFF">In 27.8.1.6 basic_ifstream
-constructors [lib.ifstream.cons] </span></i>
-<span style="background-color: #FFFFFF"><i>add the above constructor to the signature preceding
-paragraph 2, and in paragraph 2 replace</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()-&gt;open(s, mode |
-ios_base::in)</code></span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>with</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()-&gt;open(path(s), mode |
-ios_base::in)</code> or <code>rdbuf()-&gt;open(p, mode | ios_base::in)</code> as
-appropriate</span></p>
-</blockquote>
-<p><i><span style="background-color: #FFFFFF">In 27.8.1.7 Member functions [lib.ifstream.members]
-</span></i><span style="background-color: #FFFFFF"><i>add the above open
-function to the signature
-preceding paragraph 3, and in paragraph 3 replace</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()-&gt;open(s, mode |
-ios_base::in)</code></span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>with</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()-&gt;open(path(s), mode |
-ios_base::in)</code> or <code>rdbuf()-&gt;open(p, mode | ios_base::in)</code> as
-appropriate</span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>In 27.8.1.8 Class template
-basic_ofstream [lib.ofstream] synopsis preceding paragraph 1, add the
-
-functions:</i></span></p>
-<blockquote>
- <pre><span style="background-color: #FFFFFF">template &lt;class Path&gt; explicit basic_ofstream(const Path&amp; p, ios_base::openmode mode = ios_base::out);
-template &lt;class Path&gt; void open(const Path&amp; p, ios_base::openmode mode = ios_base::out);</span></pre>
-</blockquote>
-<p><i><span style="background-color: #FFFFFF">In 27.8.1.9 basic_ofstream
-constructors [lib.ofstream.cons] </span></i>
-<span style="background-color: #FFFFFF"><i>add the above constructor to the signature preceding
-paragraph 2, and in paragraph 2 replace</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()-&gt;open(s, mode |
-ios_base::out)</code></span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>with</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()-&gt;open(path(s), mode |
-ios_base::out)</code> or <code>rdbuf()-&gt;open(p, mode | ios_base::out)</code> as
-appropriate</span></p>
-</blockquote>
-<p><i><span style="background-color: #FFFFFF">In 27.8.1.10 Member functions [lib.ofstream.members]
-</span></i><span style="background-color: #FFFFFF"><i>add the above open
-function to the signature
-preceding paragraph 3, and in paragraph 3 replace</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()-&gt;open(s, mode |
-ios_base::out)</code></span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>with</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()-&gt;open(path(s), mode |
-ios_base::out)</code> or <code>rdbuf()-&gt;open(p, mode | ios_base::out)</code> as
-appropriate</span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>In 27.8.1.11 Class template
-basic_fstream [lib.fstream] synopsis preceding paragraph 1, add the functions:</i></span></p>
-<blockquote>
- <pre><span style="background-color: #FFFFFF">template &lt;class Path&gt; explicit basic_fstream(const Path&amp; p, ios_base::openmode mode = ios_base::in|ios_base::out);
-template &lt;class Path&gt; void open(const Path&amp; p, ios_base::openmode mode = ios_base::in|ios_base::out);</span></pre>
-</blockquote>
-<p><i><span style="background-color: #FFFFFF">In 27.8.1.12 basic_fstream
-constructors [lib.fstream.cons] </span></i>
-<span style="background-color: #FFFFFF"><i>add the above constructor to the signature preceding
-paragraph 2, and in paragraph 2 replace</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()-&gt;open(s, mode)</code></span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>with</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()-&gt;open(path(s), mode)</code>
-or <code>rdbuf()-&gt;open(p, mode)</code> as appropriate</span></p>
-</blockquote>
-<p><i><span style="background-color: #FFFFFF">In 27.8.1.13 Member functions [lib.fstream.members]
-</span></i><span style="background-color: #FFFFFF"><i>add the above open
-function to the signature
-preceding paragraph 3, and in paragraph 3 replace</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()-&gt;open(s, mode)</code></span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>with</i></span></p>
-<blockquote>
-<p><span style="background-color: #FFFFFF"><code>rdbuf()-&gt;open(path(s), mode)</code>
-or <code>rdbuf()-&gt;open(p, mode)</code> as appropriate</span></p>
-</blockquote>
-<p><span style="background-color: #FFFFFF"><i>End of proposed text.</i></span></p>
-<h2><a name="Path-decomposition-table">Path decomposition table</a></h2>
-<p>The table is generated by a program compiled with the Boost implementation.</p>
-<p>Shaded entries indicate cases where <i>POSIX</i> and <i>Windows</i>
-implementations yield different results. The top value is the
-<i>POSIX</i> result and the bottom value is the <i>Windows</i> result. <br>
-&nbsp;<table border="1" cellspacing="0" cellpadding="5" width="1066">
-<p>
-<tr><td width="112"><b>Constructor<br>argument</b></td>
-<td width="160"><b>Elements found<br>by iteration</b></td>
-<td width="112"><b><code>string()</code></b></td>
-<td width="112"><code><b>file_<br>string()</b></td>
-<td width="72"><b><code>root_<br>path()<br>.string()</code></b></td>
-<td width="48"><b><code>root_<br>name()</code></b></td>
-<td width="88"><b><code>root_<br>directory()</code></b></td>
-<td width="96"><b><code>relative_<br>path()<br>.string()</code></b></td>
-<td width="72"><b><code>parent_<br>path()<br>.string()</code></b></td>
-<td width="72"><b><code>filename()</code></b></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;&quot;</code></td>
-<td width="160"><code>&quot;&quot;</code></td>
-<td width="112"><code>&quot;&quot;</code></td>
-<td width="112"><code>&quot;&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;.&quot;</code></td>
-<td width="160"><code>&quot;.&quot;</code></td>
-<td width="112"><code>&quot;.&quot;</code></td>
-<td width="112"><code>&quot;.&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;.&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="72"><code>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;..&quot;</code></td>
-<td width="160"><code>&quot;..&quot;</code></td>
-<td width="112"><code>&quot;..&quot;</code></td>
-<td width="112"><code>&quot;..&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;..&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="72"><code>&quot;..&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;foo&quot;</code></td>
-<td width="160"><code>&quot;foo&quot;</code></td>
-<td width="112"><code>&quot;foo&quot;</code></td>
-<td width="112"><code>&quot;foo&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;foo&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="72"><code>&quot;foo&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;/&quot;</code></td>
-<td width="160"><code>&quot;/&quot;</code></td>
-<td width="112"><code>&quot;/&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;/&quot;<br>&quot;\&quot;</code></td>
-<td width="72"><code>&quot;/&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;/&quot;</code></td>
-<td width="96"><code>&quot;&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="72"><code>&quot;/&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;/foo&quot;</code></td>
-<td width="160"><code>&quot;/&quot;,&quot;foo&quot;</code></td>
-<td width="112"><code>&quot;/foo&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;/foo&quot;<br>&quot;\foo&quot;</code></td>
-<td width="72"><code>&quot;/&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;/&quot;</code></td>
-<td width="96"><code>&quot;foo&quot;</code></td>
-<td width="72"><code>&quot;/&quot;</code></td>
-<td width="72"><code>&quot;foo&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;foo/&quot;</code></td>
-<td width="160"><code>&quot;foo&quot;,&quot;.&quot;</code></td>
-<td width="112"><code>&quot;foo/&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;foo/&quot;<br>&quot;foo\&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;foo/&quot;</code></td>
-<td width="72"><code>&quot;foo&quot;</code></td>
-<td width="72"><code>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;/foo/&quot;</code></td>
-<td width="160"><code>&quot;/&quot;,&quot;foo&quot;,&quot;.&quot;</code></td>
-<td width="112"><code>&quot;/foo/&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;/foo/&quot;<br>&quot;\foo\&quot;</code></td>
-<td width="72"><code>&quot;/&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;/&quot;</code></td>
-<td width="96"><code>&quot;foo/&quot;</code></td>
-<td width="72"><code>&quot;/foo&quot;</code></td>
-<td width="72"><code>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;foo/bar&quot;</code></td>
-<td width="160"><code>&quot;foo&quot;,&quot;bar&quot;</code></td>
-<td width="112"><code>&quot;foo/bar&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;foo/bar&quot;<br>&quot;foo\bar&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;foo/bar&quot;</code></td>
-<td width="72"><code>&quot;foo&quot;</code></td>
-<td width="72"><code>&quot;bar&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;/foo/bar&quot;</code></td>
-<td width="160"><code>&quot;/&quot;,&quot;foo&quot;,&quot;bar&quot;</code></td>
-<td width="112"><code>&quot;/foo/bar&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;/foo/bar&quot;<br>&quot;\foo\bar&quot;</code></td>
-<td width="72"><code>&quot;/&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;/&quot;</code></td>
-<td width="96"><code>&quot;foo/bar&quot;</code></td>
-<td width="72"><code>&quot;/foo&quot;</code></td>
-<td width="72"><code>&quot;bar&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;///foo///&quot;</code></td>
-<td width="160"><code>&quot;/&quot;,&quot;foo&quot;,&quot;.&quot;</code></td>
-<td width="112"><code>&quot;///foo///&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;///foo///&quot;<br>&quot;\foo\\\&quot;</code></td>
-<td width="72"><code>&quot;/&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;/&quot;</code></td>
-<td width="96"><code>&quot;foo///&quot;</code></td>
-<td width="72"><code>&quot;///foo&quot;</code></td>
-<td width="72"><code>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;///foo///bar&quot;</code></td>
-<td width="160"><code>&quot;/&quot;,&quot;foo&quot;,&quot;bar&quot;</code></td>
-<td width="112"><code>&quot;///foo///bar&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;///foo///bar&quot;<br>&quot;\foo\\\bar&quot;</code></td>
-<td width="72"><code>&quot;/&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;/&quot;</code></td>
-<td width="96"><code>&quot;foo///bar&quot;</code></td>
-<td width="72"><code>&quot;///foo&quot;</code></td>
-<td width="72"><code>&quot;bar&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;/.&quot;</code></td>
-<td width="160"><code>&quot;/&quot;,&quot;.&quot;</code></td>
-<td width="112"><code>&quot;/.&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;/.&quot;<br>&quot;\.&quot;</code></td>
-<td width="72"><code>&quot;/&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;/&quot;</code></td>
-<td width="96"><code>&quot;.&quot;</code></td>
-<td width="72"><code>&quot;/&quot;</code></td>
-<td width="72"><code>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;./&quot;</code></td>
-<td width="160"><code>&quot;.&quot;,&quot;.&quot;</code></td>
-<td width="112"><code>&quot;./&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;./&quot;<br>&quot;.\&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;./&quot;</code></td>
-<td width="72"><code>&quot;.&quot;</code></td>
-<td width="72"><code>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;/..&quot;</code></td>
-<td width="160"><code>&quot;/&quot;,&quot;..&quot;</code></td>
-<td width="112"><code>&quot;/..&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;/..&quot;<br>&quot;\..&quot;</code></td>
-<td width="72"><code>&quot;/&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;/&quot;</code></td>
-<td width="96"><code>&quot;..&quot;</code></td>
-<td width="72"><code>&quot;/&quot;</code></td>
-<td width="72"><code>&quot;..&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;../&quot;</code></td>
-<td width="160"><code>&quot;..&quot;,&quot;.&quot;</code></td>
-<td width="112"><code>&quot;../&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;../&quot;<br>&quot;..\&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;../&quot;</code></td>
-<td width="72"><code>&quot;..&quot;</code></td>
-<td width="72"><code>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;foo/.&quot;</code></td>
-<td width="160"><code>&quot;foo&quot;,&quot;.&quot;</code></td>
-<td width="112"><code>&quot;foo/.&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;foo/.&quot;<br>&quot;foo\.&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;foo/.&quot;</code></td>
-<td width="72"><code>&quot;foo&quot;</code></td>
-<td width="72"><code>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;foo/..&quot;</code></td>
-<td width="160"><code>&quot;foo&quot;,&quot;..&quot;</code></td>
-<td width="112"><code>&quot;foo/..&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;foo/..&quot;<br>&quot;foo\..&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;foo/..&quot;</code></td>
-<td width="72"><code>&quot;foo&quot;</code></td>
-<td width="72"><code>&quot;..&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;foo/./&quot;</code></td>
-<td width="160"><code>&quot;foo&quot;,&quot;.&quot;,&quot;.&quot;</code></td>
-<td width="112"><code>&quot;foo/./&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;foo/./&quot;<br>&quot;foo\.\&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;foo/./&quot;</code></td>
-<td width="72"><code>&quot;foo/.&quot;</code></td>
-<td width="72"><code>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;foo/./bar&quot;</code></td>
-<td width="160"><code>&quot;foo&quot;,&quot;.&quot;,&quot;bar&quot;</code></td>
-<td width="112"><code>&quot;foo/./bar&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;foo/./bar&quot;<br>&quot;foo\.\bar&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;foo/./bar&quot;</code></td>
-<td width="72"><code>&quot;foo/.&quot;</code></td>
-<td width="72"><code>&quot;bar&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;foo/..&quot;</code></td>
-<td width="160"><code>&quot;foo&quot;,&quot;..&quot;</code></td>
-<td width="112"><code>&quot;foo/..&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;foo/..&quot;<br>&quot;foo\..&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;foo/..&quot;</code></td>
-<td width="72"><code>&quot;foo&quot;</code></td>
-<td width="72"><code>&quot;..&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;foo/../&quot;</code></td>
-<td width="160"><code>&quot;foo&quot;,&quot;..&quot;,&quot;.&quot;</code></td>
-<td width="112"><code>&quot;foo/../&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;foo/../&quot;<br>&quot;foo\..\&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;foo/../&quot;</code></td>
-<td width="72"><code>&quot;foo/..&quot;</code></td>
-<td width="72"><code>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;foo/../bar&quot;</code></td>
-<td width="160"><code>&quot;foo&quot;,&quot;..&quot;,&quot;bar&quot;</code></td>
-<td width="112"><code>&quot;foo/../bar&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;foo/../bar&quot;<br>&quot;foo\..\bar&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="48"><code>&quot;&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td width="96"><code>&quot;foo/../bar&quot;</code></td>
-<td width="72"><code>&quot;foo/..&quot;</code></td>
-<td width="72"><code>&quot;bar&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;c:&quot;</code></td>
-<td width="160"><code>&quot;c:&quot;</code></td>
-<td width="112"><code>&quot;c:&quot;</code></td>
-<td width="112"><code>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1; border-top-style: solid; border-top-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;c:&quot;<br>&quot;&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="72"><code>&quot;c:&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;c:/&quot;</code></td>
-<td bgcolor="#99FF66" width="160"><code>&quot;c:&quot;,&quot;.&quot;<br>&quot;c:&quot;,&quot;/&quot;</code></td>
-<td width="112"><code>&quot;c:/&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code><span style="background-color: #99FF66">
-&quot;c:/&quot;<br>&quot;c:\&quot;</span></code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:/&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" width="88"><code>&quot;&quot;<br>&quot;/&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;c:/&quot;<br>&quot;&quot;</code></td>
-<td width="72"><code>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;.&quot;<br>&quot;/&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;c:foo&quot;</code></td>
-<td bgcolor="#99FF66" width="160"><code>&quot;c:foo&quot;<br>&quot;c:&quot;,&quot;foo&quot;</code></td>
-<td width="112"><code>&quot;c:foo&quot;</code></td>
-<td width="112"><code>&quot;c:foo&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;c:foo&quot;<br>&quot;foo&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;c:foo&quot;<br>&quot;foo&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;c:/foo&quot;</code></td>
-<td bgcolor="#99FF66" width="160"><code>&quot;c:&quot;,&quot;foo&quot;<br>&quot;c:&quot;,&quot;/&quot;,&quot;foo&quot;</code></td>
-<td width="112"><code>&quot;c:/foo&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;c:/foo&quot;<br>&quot;c:\foo&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:/&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" width="88"><code>&quot;&quot;<br>&quot;/&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;c:/foo&quot;<br>&quot;foo&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;c:&quot;<br>&quot;c:/&quot;</code></td>
-<td width="72"><code>&quot;foo&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;c:foo/&quot;</code></td>
-<td bgcolor="#99FF66" width="160"><code>&quot;c:foo&quot;,&quot;.&quot;<br>&quot;c:&quot;,&quot;foo&quot;,&quot;.&quot;</code></td>
-<td width="112"><code>&quot;c:foo/&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;c:foo/&quot;<br>&quot;c:foo\&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;c:foo/&quot;<br>&quot;foo/&quot;</code></td>
-<td width="72"><code>&quot;c:foo&quot;</code></td>
-<td width="72"><code>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;c:/foo/&quot;</code></td>
-<td bgcolor="#99FF66" width="160"><code>&quot;c:&quot;,&quot;foo&quot;,&quot;.&quot;<br>&quot;c:&quot;,&quot;/&quot;,&quot;foo&quot;,&quot;.&quot;</code></td>
-<td width="112"><code>&quot;c:/foo/&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;c:/foo/&quot;<br>&quot;c:\foo\&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:/&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" width="88"><code>&quot;&quot;<br>&quot;/&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;c:/foo/&quot;<br>&quot;foo/&quot;</code></td>
-<td width="72"><code>&quot;c:/foo&quot;</code></td>
-<td width="72"><code>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;c:/foo/bar&quot;</code></td>
-<td bgcolor="#99FF66" width="160"><code>&quot;c:&quot;,&quot;foo&quot;,&quot;bar&quot;<br>&quot;c:&quot;,&quot;/&quot;,&quot;foo&quot;,&quot;bar&quot;</code></td>
-<td width="112"><code>&quot;c:/foo/bar&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;c:/foo/bar&quot;<br>&quot;c:\foo\bar&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:/&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" width="88"><code>&quot;&quot;<br>&quot;/&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;c:/foo/bar&quot;<br>&quot;foo/bar&quot;</code></td>
-<td width="72"><code>&quot;c:/foo&quot;</code></td>
-<td width="72"><code>&quot;bar&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;prn:&quot;</code></td>
-<td width="160"><code>&quot;prn:&quot;</code></td>
-<td width="112"><code>&quot;prn:&quot;</code></td>
-<td width="112"><code>&quot;prn:&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;prn:&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;prn:&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;prn:&quot;<br>&quot;&quot;</code></td>
-<td width="72"><code>&quot;&quot;</code></td>
-<td width="72"><code>&quot;prn:&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;c:\&quot;</code></td>
-<td bgcolor="#99FF66" width="160"><code>&quot;c:\&quot;<br>&quot;c:&quot;,&quot;/&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;c:\&quot;<br>&quot;c:/&quot;</code></td>
-<td width="112"><code>&quot;c:\&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:/&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" width="88"><code>&quot;&quot;<br>&quot;/&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;c:\&quot;<br>&quot;&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;c:\&quot;<br>&quot;/&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;c:foo&quot;</code></td>
-<td bgcolor="#99FF66" width="160"><code>&quot;c:foo&quot;<br>&quot;c:&quot;,&quot;foo&quot;</code></td>
-<td width="112"><code>&quot;c:foo&quot;</code></td>
-<td width="112"><code>&quot;c:foo&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;c:foo&quot;<br>&quot;foo&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;c:foo&quot;<br>&quot;foo&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;c:\foo&quot;</code></td>
-<td bgcolor="#99FF66" width="160"><code>&quot;c:\foo&quot;<br>&quot;c:&quot;,&quot;/&quot;,&quot;foo&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;c:\foo&quot;<br>&quot;c:/foo&quot;</code></td>
-<td width="112"><code>&quot;c:\foo&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:/&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" width="88"><code>&quot;&quot;<br>&quot;/&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;c:\foo&quot;<br>&quot;foo&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:/&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;c:\foo&quot;<br>&quot;foo&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;c:foo\&quot;</code></td>
-<td bgcolor="#99FF66" width="160"><code>&quot;c:foo\&quot;<br>&quot;c:&quot;,&quot;foo&quot;,&quot;.&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;c:foo\&quot;<br>&quot;c:foo/&quot;</code></td>
-<td width="112"><code>&quot;c:foo\&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td width="88"><code>&quot;&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;c:foo\&quot;<br>&quot;foo/&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:foo&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;c:foo\&quot;<br>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;c:\foo\&quot;</code></td>
-<td bgcolor="#99FF66" width="160"><code>&quot;c:\foo\&quot;<br>&quot;c:&quot;,&quot;/&quot;,&quot;foo&quot;,&quot;.&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;c:\foo\&quot;<br>&quot;c:/foo/&quot;</code></td>
-<td width="112"><code>&quot;c:\foo\&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:/&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" width="88"><code>&quot;&quot;<br>&quot;/&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;c:\foo\&quot;<br>&quot;foo/&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:/foo&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;c:\foo\&quot;<br>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;c:\foo/&quot;</code></td>
-<td bgcolor="#99FF66" width="160"><code>&quot;c:\foo&quot;,&quot;.&quot;<br>&quot;c:&quot;,&quot;/&quot;,&quot;foo&quot;,&quot;.&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;c:\foo/&quot;<br>&quot;c:/foo/&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;c:\foo/&quot;<br>&quot;c:\foo\&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:/&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" width="88"><code>&quot;&quot;<br>&quot;/&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;c:\foo/&quot;<br>&quot;foo/&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;c:\foo&quot;<br>&quot;c:/foo&quot;</code></td>
-<td width="72"><code>&quot;.&quot;</code></td>
-</tr>
-<tr>
-<td width="112"><code>&quot;c:/foo\bar&quot;</code></td>
-<td bgcolor="#99FF66" width="160"><code>&quot;c:&quot;,&quot;foo\bar&quot;<br>&quot;c:&quot;,&quot;/&quot;,&quot;foo&quot;,&quot;bar&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;c:/foo\bar&quot;<br>&quot;c:/foo/bar&quot;</code></td>
-<td bgcolor="#99FF66" width="112"><code>&quot;c:/foo\bar&quot;<br>&quot;c:\foo\bar&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;&quot;<br>&quot;c:/&quot;</code></td>
-<td bgcolor="#99FF66" style="border-left-style: solid; border-left-width: 1; border-right-style: solid; border-right-width: 1; border-bottom-style: solid; border-bottom-width: 1" width="48"><code>
-&quot;&quot;<br>&quot;c:&quot;</code></td>
-<td bgcolor="#99FF66" width="88"><code>&quot;&quot;<br>&quot;/&quot;</code></td>
-<td bgcolor="#99FF66" width="96"><code>&quot;c:/foo\bar&quot;<br>&quot;foo/bar&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;c:&quot;<br>&quot;c:/foo&quot;</code></td>
-<td bgcolor="#99FF66" width="72"><code>&quot;foo\bar&quot;<br>&quot;bar&quot;</code></td>
-</tr>
-</table>
-<h2><a name="Suggestions-for-fstream">Suggestions for <code>&lt;fstream&gt;</code></a>
-implementations</h2>
-<p><span style="background-color: #FFFFFF">The change in semantics to functions
-taking <code>const char*</code> arguments can break existing code, but only on
-operating systems where implementations don't
-<a href="#Pathname-formats">implicitly accept native format pathnames</a> or
-operating systems that allow slashes in filenames. Thus on <i>POSIX</i>,
-<i>Windows,</i> and <i>OpenVMS</i>, for example, there is no problem if the
-implementation follows encouraged behavior.</span></p>
-<p><span style="background-color: #FFFFFF">For most of the Filesystem Library,
-there is no existing code, so the issue preserving existing code that uses
-slashes in filenames doesn't arise. New code simply must use basic_path
-constructors with <code>path_format_t</code> arguments of <code>native</code>.
-To preserve existing fstream code that uses slashes in filenames, an
-implementation may wish to provide a mechanism such as a macro to control
-selection of the old behavior.</span></p>
-<p><span style="background-color: #FFFFFF">Implementations are already required
-by the TR front-matter to provide a mechanism such as a macro to control
-selection of the old behavior (useful to guarantee protection of existing code)
-or new behavior (useful in new code, and code being ported from other systems)
-for headers. Because use of the rest of the Filesystem Library is independent of
-use of the <code>&lt;fstream&gt;</code> additions, affected implementations are
-encouraged to allow disabling the <code>&lt;fstream&gt;</code> additions separately
-from other TR features.</span></p>
-<p><span style="background-color: #FFFFFF">An rejected alternative was to supply
-new fstream classes in namespace <code>filesystem</code>, inheriting from the current
-classes, overriding the constructors and opens taking pathname arguments, and
-providing the additional overloads. In Lillehammer LWG members indicated lack of
-support for this alternative, feeling that costs outweigh benefits.</span></p>
-<h2><a name="Acknowledgements">Acknowledgements</a></h2>
-<p>This Filesystem Library is dedicated to my wife, Sonda, who provided the
-support necessary to see both a trial implementation and the proposal itself
-through to completion. She gave me the strength to continue after a difficult
-year of cancer treatment in the middle of it all.</p>
-<p>Many people contributed technical comments, ideas, and suggestions to the
-Boost Filesystem Library. See
-<a href="http://www.boost.org/libs/filesystem/doc/index.htm#Acknowledgements">
-http://www.boost.org/libs/filesystem/doc/index.htm#Acknowledgements</a>.</p>
-<p>Dietmar Kuehl contributed the original Boost Filesystem Library directory_iterator design. Peter Dimov, Walter Landry, Rob Stewart, and Thomas
-Witt were particularly helpful in refining the library.</p>
-<p>The create_directories, extension, basename, and replace_extension functions
-were developed by Vladimir Prus.</p>
-<p>Howard Hinnant and John Maddock reviewed a draft of the proposal, and
-identified a number of mistakes or weaknesses, resulting in a more polished
-final document.</p>
-<h2><a name="References">References</a></h2>
-<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
- <tr>
- <td width="16%" valign="top">[<a name="ISO_POSIX">ISO-POSIX</a>]</td>
- <td width="84%">ISO/IEC 9945:2003, IEEE&nbsp;Std&nbsp;1003.1-2001, and The Open Group
- Base Specifications, Issue 6. Also known as The Single Unix<font face="Times New Roman">®
- Specification, Version 3. Available from each of the organizations involved
- in its creation. For example, read online or download from
- <a href="http://www.unix.org/single_unix_specification/">
- www.unix.org/single_unix_specification/</a>.</font> The ISO JTC1/SC22/WG15 -
- POSIX homepage is <a href="http://www.open-std.org/jtc1/sc22/WG15/">
- www.open-std.org/jtc1/sc22/WG15/</a></td>
- </tr>
- <tr>
- <td width="16%" valign="top">[Abrahams]</td>
- <td width="84%">Dave Abrahams, Error and Exception Handling,
- <a href="http://www.boost.org/more/error_handling.html">
- www.boost.org/more/error_handling.html</a></td>
- </tr>
-</table>
-<hr>
-<p>© Copyright Beman Dawes, 2002, 2006, 2007</p>
-<p>Distributed under the Boost Software License, Version 1.0. See
-<a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a></p>
-<p>Revised
-<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B %Y" startspan -->10 November 2009<!--webbot bot="Timestamp" endspan i-checksum="40581" --></p>
-
-</body>
-
-</html> \ No newline at end of file
diff --git a/libs/filesystem/v2/example/Jamfile.v2 b/libs/filesystem/v2/example/Jamfile.v2
deleted file mode 100644
index edb41a4aaa..0000000000
--- a/libs/filesystem/v2/example/Jamfile.v2
+++ /dev/null
@@ -1,16 +0,0 @@
-# Boost Filesystem Library Example Jamfile
-
-# (C) Copyright Vladimir Prus 2003
-
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or www.boost.org/LICENSE_1_0.txt)
-
-# See library home page at http://www.boost.org/libs/filesystem
-
-project
- : requirements <library>../build//boost_filesystem
- <hardcode-dll-paths>true
- ;
-
-exe file_size : file_size.cpp ;
-exe simple_ls : simple_ls.cpp ;
diff --git a/libs/filesystem/v2/example/file_size.cpp b/libs/filesystem/v2/example/file_size.cpp
deleted file mode 100644
index 0d6b7a3297..0000000000
--- a/libs/filesystem/v2/example/file_size.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-// file_size program -------------------------------------------------------//
-
-// Copyright Beman Dawes, 2004
-
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// See http://www.boost.org/libs/filesystem for documentation.
-
-#include <boost/filesystem/operations.hpp>
-#include <iostream>
-
-namespace fs = boost::filesystem;
-
-int main( int argc, char* argv[] )
-{
-
- if ( argc != 2 )
- {
- std::cout << "Usage: file_size path\n";
- return 1;
- }
-
- std::cout << "sizeof(intmax_t) is " << sizeof(boost::intmax_t) << '\n';
-
- fs::path p( argv[1], fs::native );
-
- if ( !fs::exists( p ) )
- {
- std::cout << "not found: " << argv[1] << std::endl;
- return 1;
- }
-
- if ( !fs::is_regular( p ) )
- {
- std::cout << "not a regular file: " << argv[1] << std::endl;
- return 1;
- }
-
- std::cout << "size of " << argv[1] << " is " << fs::file_size( p )
- << std::endl;
- return 0;
-}
diff --git a/libs/filesystem/v2/example/mbcopy.cpp b/libs/filesystem/v2/example/mbcopy.cpp
deleted file mode 100644
index 6f004d44a6..0000000000
--- a/libs/filesystem/v2/example/mbcopy.cpp
+++ /dev/null
@@ -1,92 +0,0 @@
-// Boost.Filesystem mbcopy.cpp ---------------------------------------------//
-
-// Copyright Beman Dawes 2005
-
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// Copy the files in a directory, using mbpath to represent the new file names
-// See http://../doc/path.htm#mbpath for more information
-
-#define BOOST_FILESYSTEM_VERSION 2
-
-// See deprecated_test for tests of deprecated features
-#define BOOST_FILESYSTEM_NO_DEPRECATED
-
-#include <boost/filesystem/config.hpp>
-# ifdef BOOST_FILESYSTEM2_NARROW_ONLY
-# error This compiler or standard library does not support wide-character strings or paths
-# endif
-
-#include "mbpath.hpp"
-#include <iostream>
-#include <boost/filesystem/operations.hpp>
-#include <boost/filesystem/fstream.hpp>
-#include <boost/filesystem/detail/utf8_codecvt_facet.hpp>
-
-namespace fs = boost::filesystem;
-
-namespace
-{
- // we can't use boost::filesystem::copy_file() because the argument types
- // differ, so provide a not-very-smart replacement.
-
- void copy_file( const fs::wpath & from, const user::mbpath & to )
- {
- fs::ifstream from_file( from, std::ios_base::in | std::ios_base::binary );
- if ( !from_file ) { std::cout << "input open failed\n"; return; }
-
- fs::ofstream to_file( to, std::ios_base::out | std::ios_base::binary );
- if ( !to_file ) { std::cout << "output open failed\n"; return; }
-
- char c;
- while ( from_file.get(c) )
- {
- to_file.put(c);
- if ( to_file.fail() ) { std::cout << "write error\n"; return; }
- }
-
- if ( !from_file.eof() ) { std::cout << "read error\n"; }
- }
-}
-
-int main( int argc, char * argv[] )
-{
- if ( argc != 2 )
- {
- std::cout << "Copy files in the current directory to a target directory\n"
- << "Usage: mbcopy <target-dir>\n";
- return 1;
- }
-
- // For encoding, use Boost UTF-8 codecvt
- std::locale global_loc = std::locale();
- std::locale loc( global_loc, new fs::detail::utf8_codecvt_facet );
- user::mbpath_traits::imbue( loc );
-
- std::string target_string( argv[1] );
- user::mbpath target_dir( user::mbpath_traits::to_internal( target_string ) );
-
- if ( !fs::is_directory( target_dir ) )
- {
- std::cout << "Error: " << argv[1] << " is not a directory\n";
- return 1;
- }
-
- for ( fs::wdirectory_iterator it( L"." );
- it != fs::wdirectory_iterator(); ++it )
- {
- if ( fs::is_regular_file(it->status()) )
- {
- copy_file( *it, target_dir / it->path().filename() );
- }
- }
-
- return 0;
-}
-
-
-
-
-
diff --git a/libs/filesystem/v2/example/mbpath.cpp b/libs/filesystem/v2/example/mbpath.cpp
deleted file mode 100644
index 25cefbb09f..0000000000
--- a/libs/filesystem/v2/example/mbpath.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-// Boost.Filesystem mbpath.cpp ---------------------------------------------//
-
-// (c) Copyright Beman Dawes 2005
-
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// See Boost.Filesystem home page at http://www.boost.org/libs/filesystem
-
-#define BOOST_FILESYSTEM_VERSION 2
-
-#include <boost/filesystem/config.hpp>
-# ifdef BOOST_FILESYSTEM2_NARROW_ONLY
-# error This compiler or standard library does not support wide-character strings or paths
-# endif
-
-#include "mbpath.hpp"
-#include <boost/system/system_error.hpp>
-#include <boost/scoped_array.hpp>
-
-namespace fs = boost::filesystem;
-
-namespace
-{
- // ISO C calls this "the locale-specific native environment":
- std::locale loc("");
-
- const std::codecvt<wchar_t, char, std::mbstate_t> *
- cvt( &std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t> >
- ( loc ) );
-}
-
-namespace user
-{
- mbpath_traits::external_string_type
- mbpath_traits::to_external( const mbpath & ph,
- const internal_string_type & src )
- {
- std::size_t work_size( cvt->max_length() * (src.size()+1) );
- boost::scoped_array<char> work( new char[ work_size ] );
- std::mbstate_t state;
- const internal_string_type::value_type * from_next;
- external_string_type::value_type * to_next;
- if ( cvt->out(
- state, src.c_str(), src.c_str()+src.size(), from_next, work.get(),
- work.get()+work_size, to_next ) != std::codecvt_base::ok )
- boost::throw_exception<fs::basic_filesystem_error<mbpath> >(
- fs::basic_filesystem_error<mbpath>(
- "user::mbpath::to_external conversion error",
- ph, boost::system::error_code( EINVAL, boost::system::errno_ecat ) ) );
- *to_next = '\0';
- return external_string_type( work.get() );
- }
-
- mbpath_traits::internal_string_type
- mbpath_traits::to_internal( const external_string_type & src )
- {
- std::size_t work_size( src.size()+1 );
- boost::scoped_array<wchar_t> work( new wchar_t[ work_size ] );
- std::mbstate_t state;
- const external_string_type::value_type * from_next;
- internal_string_type::value_type * to_next;
- if ( cvt->in(
- state, src.c_str(), src.c_str()+src.size(), from_next, work.get(),
- work.get()+work_size, to_next ) != std::codecvt_base::ok )
- boost::throw_exception<fs::basic_filesystem_error<mbpath> >(
- fs::basic_filesystem_error<mbpath>(
- "user::mbpath::to_internal conversion error",
- boost::system::error_code( EINVAL, boost::system::errno_ecat ) ) );
- *to_next = L'\0';
- return internal_string_type( work.get() );
- }
-
- void mbpath_traits::imbue( const std::locale & new_loc )
- {
- loc = new_loc;
- cvt = &std::use_facet
- <std::codecvt<wchar_t, char, std::mbstate_t> >( loc );
- }
-
-} // namespace user
diff --git a/libs/filesystem/v2/example/mbpath.hpp b/libs/filesystem/v2/example/mbpath.hpp
deleted file mode 100644
index 281e8d09c9..0000000000
--- a/libs/filesystem/v2/example/mbpath.hpp
+++ /dev/null
@@ -1,44 +0,0 @@
-// Boost.Filesystem mbpath.hpp ---------------------------------------------//
-
-// Copyright Beman Dawes 2005
-
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// Encodes wide character paths as MBCS
-// See http://../doc/path.htm#mbpath for more information
-
-#include <boost/filesystem/path.hpp>
-#include <cwchar> // for std::mbstate_t
-#include <string>
-#include <locale>
-
-namespace user
-{
- struct mbpath_traits;
-
- typedef boost::filesystem::basic_path<std::wstring, mbpath_traits> mbpath;
-
- struct mbpath_traits
- {
- typedef std::wstring internal_string_type;
- typedef std::string external_string_type;
-
- static external_string_type to_external( const mbpath & ph,
- const internal_string_type & src );
-
- static internal_string_type to_internal( const external_string_type & src );
-
- static void imbue( const std::locale & loc );
- };
-} // namespace user
-
-namespace boost
-{
- namespace filesystem2
- {
- template<> struct is_basic_path<user::mbpath>
- { static const bool value = true; };
- }
-}
diff --git a/libs/filesystem/v2/example/path_table.cpp b/libs/filesystem/v2/example/path_table.cpp
deleted file mode 100644
index b1758737a0..0000000000
--- a/libs/filesystem/v2/example/path_table.cpp
+++ /dev/null
@@ -1,264 +0,0 @@
-// Generate an HTML table showing path decomposition -----------------------//
-
-// Copyright Beman Dawes 2005. Distributed under the Boost
-// Software License, Version 1.0. (See accompanying file
-// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-// See http://www.boost.org/libs/filesystem for documentation.
-
-// For purposes of generating the table, support both POSIX and Windows paths
-#define BOOST_FILESYSTEM_NAMESPACE posix
-#define BOOST_POSIX_PATH
-#include "boost/filesystem/path.hpp"
-
-#undef BOOST_FILESYSTEM_PATH_HPP
-#undef BOOST_FILESYSTEM_NAMESPACE
-#define BOOST_FILESYSTEM_NAMESPACE windows
-#define BOOST_WINDOWS_PATH
-#include "boost/filesystem/path.hpp"
-
-namespace pos = boost::posix;
-namespace win = boost::windows;
-
-#include <iostream>
-#include <fstream>
-
-using std::string;
-using std::cout;
-
-namespace
-{
- std::ifstream infile;
- std::ofstream outfile;
-
- const string empty_string;
-
- struct column_abc
- {
- virtual string heading() const = 0;
- virtual string cell_value( const pos::path & p ) const = 0;
- virtual string cell_value( const win::path & p ) const = 0;
- };
-
- struct c0 : public column_abc
- {
- string heading() const { return string("<code>string()</code>"); }
- string cell_value( const pos::path & p ) const
- {
- return p.string();
- }
- string cell_value( const win::path & p ) const
- {
- return p.string();
- }
- } o0;
-
- struct c1 : public column_abc
- {
- string heading() const { return string("<code>file_<br>string()"); }
- string cell_value( const pos::path & p ) const { return p.file_string(); }
- string cell_value( const win::path & p ) const { return p.file_string(); }
- } o1;
-
- struct c2 : public column_abc
- {
- string heading() const { return string("Elements found<br>by iteration"); }
- string cell_value( const pos::path & p ) const
- {
- string s;
- for( pos::path::iterator i(p.begin()); i != p.end(); ++i )
- {
- if ( i != p.begin() ) s += ',';
- s += '\"';
- s += *i;
- s += '\"';
- }
- if ( s.empty() ) s += "\"\"";
- return s;
- }
- string cell_value( const win::path & p ) const
- {
- string s;
- for( win::path::iterator i(p.begin()); i != p.end(); ++i )
- {
- if ( i != p.begin() ) s += ',';
- s += '\"';
- s += *i;
- s += '\"';
- }
- if ( s.empty() ) s += "\"\"";
- return s;
- }
- } o2;
-
- struct c3 : public column_abc
- {
- string heading() const { return string("<code>root_<br>path()<br>.string()</code>"); }
- string cell_value( const pos::path & p ) const { return p.root_path().string(); }
- string cell_value( const win::path & p ) const { return p.root_path().string(); }
- } o3;
-
- struct c4 : public column_abc
- {
- string heading() const { return string("<code>root_<br>name()</code>"); }
- string cell_value( const pos::path & p ) const { return p.root_name(); }
- string cell_value( const win::path & p ) const { return p.root_name(); }
- } o4;
-
- struct c5 : public column_abc
- {
- string heading() const { return string("<code>root_<br>directory()</code>"); }
- string cell_value( const pos::path & p ) const { return p.root_directory(); }
- string cell_value( const win::path & p ) const { return p.root_directory(); }
- } o5;
-
- struct c6 : public column_abc
- {
- string heading() const { return string("<code>relative_<br>path()<br>.string()</code>"); }
- string cell_value( const pos::path & p ) const { return p.relative_path().string(); }
- string cell_value( const win::path & p ) const { return p.relative_path().string(); }
- } o6;
-
- struct c7 : public column_abc
- {
- string heading() const { return string("<code>branch_<br>path()<br>.string()</code>"); }
- string cell_value( const pos::path & p ) const { return p.branch_path().string(); }
- string cell_value( const win::path & p ) const { return p.branch_path().string(); }
- } o7;
-
- struct c8 : public column_abc
- {
- string heading() const { return string("<code>leaf()</code>"); }
- string cell_value( const pos::path & p ) const { return p.leaf(); }
- string cell_value( const win::path & p ) const { return p.leaf(); }
- } o8;
-
- const column_abc * column[] = { &o2, &o0, &o1, &o3, &o4, &o5, &o6, &o7, &o8 };
-
- // do_cell ---------------------------------------------------------------//
-
- void do_cell( const string & test_case, int i )
- {
-
- string posix_result( column[i]->cell_value( pos::path(test_case) ) );
- string windows_result( column[i]->cell_value( win::path(test_case) ) );
-
- outfile <<
- (posix_result != windows_result
- ? "<td bgcolor=\"#CCFF99\"><code>"
- : "<td><code>");
-
- if ( posix_result.empty() || posix_result[0] != '\"' )
- outfile << '\"' << posix_result << '\"';
- else
- outfile << posix_result;
-
- if ( posix_result != windows_result )
- {
- outfile << "<br>";
- if ( windows_result.empty() || windows_result[0] != '\"' )
- outfile << '\"' << windows_result << '\"';
- else
- outfile << windows_result;
- }
-
- outfile << "</code></td>\n";
- }
-
-// do_row ------------------------------------------------------------------//
-
- void do_row( const string & test_case )
- {
- outfile << "<tr>\n<td><code>\"" << test_case << "\"</code></td>\n";
-
- for ( int i = 0; i < sizeof(column)/sizeof(column_abc&); ++i )
- {
- do_cell( test_case, i );
- }
-
- outfile << "</tr>\n";
- }
-
-// do_table ----------------------------------------------------------------//
-
- void do_table()
- {
- outfile <<
- "<h1>Path Decomposition Table for <i>POSIX</i> and <i>Windows</i></h1>\n"
- "<p>Shaded entries indicate cases where <i>POSIX</i> and <i>Windows</i>\n"
- "implementations yield different results. The top value is the\n"
- "<i>POSIX</i> result and the bottom value is the <i>Windows</i> result.\n"
- "<table border=\"1\" cellspacing=\"0\" cellpadding=\"5\">\n"
- "<p>\n"
- ;
-
- // generate the column headings
-
- outfile << "<tr><td><b>Constructor<br>argument</b></td>\n";
-
- for ( int i = 0; i < sizeof(column)/sizeof(column_abc&); ++i )
- {
- outfile << "<td><b>" << column[i]->heading() << "</b></td>\n";
- }
-
- outfile << "</tr>\n";
-
- // generate a row for each input line
-
- string test_case;
- while ( std::getline( infile, test_case ) )
- {
- do_row( test_case );
- }
-
- outfile << "</table>\n";
- }
-
-} // unnamed namespace
-
-// main --------------------------------------------------------------------//
-
-#define BOOST_NO_CPP_MAIN_SUCCESS_MESSAGE
-#include <boost/test/included/prg_exec_monitor.hpp>
-
-int cpp_main( int argc, char * argv[] ) // note name!
-{
- if ( argc != 3 )
- {
- std::cerr <<
- "Usage: path_table input-file output-file\n"
- " input-file contains the paths to appear in the table.\n"
- " output-file will contain the generated HTML.\n"
- ;
- return 1;
- }
-
- infile.open( argv[1] );
- if ( !infile )
- {
- std::cerr << "Could not open input file: " << argv[1] << std::endl;
- return 1;
- }
-
- outfile.open( argv[2] );
- if ( !outfile )
- {
- std::cerr << "Could not open output file: " << argv[2] << std::endl;
- return 1;
- }
-
- outfile << "<html>\n"
- "<head>\n"
- "<title>Path Decomposition Table</title>\n"
- "</head>\n"
- "<body bgcolor=\"#ffffff\" text=\"#000000\">\n"
- ;
-
- do_table();
-
- outfile << "</body>\n"
- "</html>\n"
- ;
-
- return 0;
-}
diff --git a/libs/filesystem/v2/example/simple_ls.cpp b/libs/filesystem/v2/example/simple_ls.cpp
deleted file mode 100644
index 7861e1e29e..0000000000
--- a/libs/filesystem/v2/example/simple_ls.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-// simple_ls program -------------------------------------------------------//
-
-// Copyright Jeff Garland and Beman Dawes, 2002
-
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// See http://www.boost.org/libs/filesystem for documentation.
-
-#define BOOST_FILESYSTEM_VERSION 2
-
-// As an example program, we don't want to use any deprecated features
-#define BOOST_FILESYSTEM_NO_DEPRECATED
-
-#include "boost/filesystem/operations.hpp"
-#include "boost/filesystem/path.hpp"
-#include "boost/progress.hpp"
-#include <iostream>
-
-namespace fs = boost::filesystem;
-
-int main( int argc, char* argv[] )
-{
- boost::progress_timer t( std::clog );
-
- fs::path full_path( fs::initial_path<fs::path>() );
-
- if ( argc > 1 )
- full_path = fs::system_complete( fs::path( argv[1] ) );
- else
- std::cout << "\nusage: simple_ls [path]" << std::endl;
-
- unsigned long file_count = 0;
- unsigned long dir_count = 0;
- unsigned long other_count = 0;
- unsigned long err_count = 0;
-
- if ( !fs::exists( full_path ) )
- {
- std::cout << "\nNot found: " << full_path.file_string() << std::endl;
- return 1;
- }
-
- if ( fs::is_directory( full_path ) )
- {
- std::cout << "\nIn directory: "
- << full_path.directory_string() << "\n\n";
- fs::directory_iterator end_iter;
- for ( fs::directory_iterator dir_itr( full_path );
- dir_itr != end_iter;
- ++dir_itr )
- {
- try
- {
- if ( fs::is_directory( dir_itr->status() ) )
- {
- ++dir_count;
- std::cout << dir_itr->path().filename() << " [directory]\n";
- }
- else if ( fs::is_regular_file( dir_itr->status() ) )
- {
- ++file_count;
- std::cout << dir_itr->path().filename() << "\n";
- }
- else
- {
- ++other_count;
- std::cout << dir_itr->path().filename() << " [other]\n";
- }
-
- }
- catch ( const std::exception & ex )
- {
- ++err_count;
- std::cout << dir_itr->path().filename() << " " << ex.what() << std::endl;
- }
- }
- std::cout << "\n" << file_count << " files\n"
- << dir_count << " directories\n"
- << other_count << " others\n"
- << err_count << " errors\n";
- }
- else // must be a file
- {
- std::cout << "\nFound: " << full_path.file_string() << "\n";
- }
- return 0;
-}
diff --git a/libs/filesystem/v2/src/v2_operations.cpp b/libs/filesystem/v2/src/v2_operations.cpp
deleted file mode 100644
index a93b54ada5..0000000000
--- a/libs/filesystem/v2/src/v2_operations.cpp
+++ /dev/null
@@ -1,1381 +0,0 @@
-// operations.cpp ----------------------------------------------------------//
-
-// Copyright 2002-2005 Beman Dawes
-// Copyright 2001 Dietmar Kuehl
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
-// at http://www.boost.org/LICENSE_1_0.txt)
-
-// See library home page at http://www.boost.org/libs/filesystem
-
-//----------------------------------------------------------------------------//
-
-// define BOOST_FILESYSTEM_SOURCE so that <boost/filesystem/config.hpp> knows
-// the library is being built (possibly exporting rather than importing code)
-#define BOOST_FILESYSTEM_SOURCE
-
-#ifndef BOOST_SYSTEM_NO_DEPRECATED
-# define BOOST_SYSTEM_NO_DEPRECATED
-#endif
-
-#define _POSIX_PTHREAD_SEMANTICS // Sun readdir_r() needs this
-
-#if !(defined(__HP_aCC) && defined(_ILP32) && \
- !defined(_STATVFS_ACPP_PROBLEMS_FIXED))
-#define _FILE_OFFSET_BITS 64 // at worst, these defines may have no effect,
-#endif
-#if !defined(__PGI)
-#define __USE_FILE_OFFSET64 // but that is harmless on Windows and on POSIX
- // 64-bit systems or on 32-bit systems which don't have files larger
- // than can be represented by a traditional POSIX/UNIX off_t type.
- // OTOH, defining them should kick in 64-bit off_t's (and thus
- // st_size) on 32-bit systems that provide the Large File
- // Support (LFS) interface, such as Linux, Solaris, and IRIX.
- // The defines are given before any headers are included to
- // ensure that they are available to all included headers.
- // That is required at least on Solaris, and possibly on other
- // systems as well.
-
-// for some compilers (CodeWarrior, for example), windows.h
-// is getting included by some other boost header, so do this early:
-#if !defined(_WIN32_WINNT)
-#define _WIN32_WINNT 0x0500 // Default to Windows 2K or later
-#endif
-#endif
-
-
-#include <boost/filesystem/v2/operations.hpp>
-#include <boost/scoped_array.hpp>
-#include <boost/assert.hpp>
-#include <boost/detail/workaround.hpp>
-#include <cstdlib> // for malloc, free
-
-namespace fs = boost::filesystem2;
-using boost::system::error_code;
-using boost::system::system_category;
-
-# if defined(BOOST_WINDOWS_API)
-# include <windows.h>
-# include <ctime> // for time_t
-
-# else // BOOST_POSIX_API
-# include <sys/types.h>
-# if !defined(__APPLE__) && !defined(__OpenBSD__)
-# include <sys/statvfs.h>
-# define BOOST_STATVFS statvfs
-# define BOOST_STATVFS_F_FRSIZE vfs.f_frsize
-# else
-#ifdef __OpenBSD__
-# include <sys/param.h>
-#endif
-# include <sys/mount.h>
-# define BOOST_STATVFS statfs
-# define BOOST_STATVFS_F_FRSIZE static_cast<boost::uintmax_t>( vfs.f_bsize )
-# endif
-# include <dirent.h>
-# include <unistd.h>
-# include <fcntl.h>
-# include <utime.h>
-# include "limits.h"
-# endif
-
-// BOOST_FILESYSTEM_STATUS_CACHE enables file_status cache in
-// dir_itr_increment. The config tests are placed here because some of the
-// macros being tested come from dirent.h.
-//
-// TODO: find out what macros indicate dirent::d_type present in more libraries
-# if defined(BOOST_WINDOWS_API) \
- || (defined(_DIRENT_HAVE_D_TYPE) /* defined by GNU C library if d_type present */ \
- && !(defined(__SUNPRO_CC) && !defined(__sun))) // _DIRENT_HAVE_D_TYPE wrong for Sun compiler on Linux
-# define BOOST_FILESYSTEM_STATUS_CACHE
-# endif
-
-#include <sys/stat.h> // even on Windows some functions use stat()
-#include <string>
-#include <cstring>
-#include <cstdio> // for remove, rename
-#include <cerrno>
-// #include <iostream> // for debugging only; comment out when not in use
-
-#ifdef BOOST_NO_STDC_NAMESPACE
-namespace std { using ::strcmp; using ::remove; using ::rename; }
-#endif
-
-// helpers -----------------------------------------------------------------//
-
-namespace
-{
- const error_code ok;
-
- bool is_empty_directory( const std::string & dir_path )
- {
- static const fs::directory_iterator end_itr;
- return fs::directory_iterator(fs::path(dir_path)) == end_itr;
- }
-
-#ifdef BOOST_WINDOWS_API
-
-// For Windows, the xxxA form of various function names is used to avoid
-// inadvertently getting wide forms of the functions. (The undecorated
-// forms are actually macros, so can misfire if the user has various
-// other macros defined. There was a bug report of this happening.)
-
- inline DWORD get_file_attributes( const char * ph )
- { return ::GetFileAttributesA( ph ); }
-
-# ifndef BOOST_FILESYSTEM2_NARROW_ONLY
-
- inline DWORD get_file_attributes( const wchar_t * ph )
- { return ::GetFileAttributesW( ph ); }
-
- bool is_empty_directory( const std::wstring & dir_path )
- {
- static const fs::wdirectory_iterator wend_itr;
- return fs::wdirectory_iterator(fs::wpath(dir_path)) == wend_itr;
- }
-
- inline BOOL get_file_attributes_ex( const wchar_t * ph,
- WIN32_FILE_ATTRIBUTE_DATA & fad )
- { return ::GetFileAttributesExW( ph, ::GetFileExInfoStandard, &fad ); }
-
- HANDLE create_file( const wchar_t * ph, DWORD dwDesiredAccess,
- DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes,
- DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes,
- HANDLE hTemplateFile )
- {
- return ::CreateFileW( ph, dwDesiredAccess, dwShareMode,
- lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes,
- hTemplateFile );
- }
-
- inline DWORD get_current_directory( DWORD sz, wchar_t * buf )
- { return ::GetCurrentDirectoryW( sz, buf ); }
-
- inline bool set_current_directory( const wchar_t * buf )
- { return ::SetCurrentDirectoryW( buf ) != 0 ; }
-
- inline bool get_free_disk_space( const std::wstring & ph,
- PULARGE_INTEGER avail, PULARGE_INTEGER total, PULARGE_INTEGER free )
- { return ::GetDiskFreeSpaceExW( ph.c_str(), avail, total, free ) != 0; }
-
- inline std::size_t get_full_path_name(
- const std::wstring & ph, std::size_t len, wchar_t * buf, wchar_t ** p )
- {
- return static_cast<std::size_t>(
- ::GetFullPathNameW( ph.c_str(),
- static_cast<DWORD>(len), buf, p ));
- }
-
- inline bool remove_directory( const std::wstring & ph )
- { return ::RemoveDirectoryW( ph.c_str() ) != 0; }
-
- inline bool delete_file( const std::wstring & ph )
- { return ::DeleteFileW( ph.c_str() ) != 0; }
-
- inline bool create_directory( const std::wstring & dir )
- { return ::CreateDirectoryW( dir.c_str(), 0 ) != 0; }
-
-#if _WIN32_WINNT >= 0x500
- inline bool create_hard_link( const std::wstring & to_ph,
- const std::wstring & from_ph )
- { return ::CreateHardLinkW( from_ph.c_str(), to_ph.c_str(), 0 ) != 0; }
-#endif
-
-# endif // ifndef BOOST_FILESYSTEM2_NARROW_ONLY
-
- template< class String >
- fs::file_status status_template( const String & ph, error_code & ec )
- {
- DWORD attr( get_file_attributes( ph.c_str() ) );
- if ( attr == 0xFFFFFFFF )
- {
- ec = error_code( ::GetLastError(), system_category() );
- if ((ec.value() == ERROR_FILE_NOT_FOUND)
- || (ec.value() == ERROR_PATH_NOT_FOUND)
- || (ec.value() == ERROR_INVALID_NAME) // "tools/jam/src/:sys:stat.h", "//foo"
- || (ec.value() == ERROR_INVALID_DRIVE) // USB card reader with no card inserted
- || (ec.value() == ERROR_NOT_READY) // CD/DVD drive with no disc inserted
- || (ec.value() == ERROR_INVALID_PARAMETER) // ":sys:stat.h"
- || (ec.value() == ERROR_BAD_PATHNAME) // "//nosuch" on Win64
- || (ec.value() == ERROR_BAD_NETPATH)) // "//nosuch" on Win32
- {
- ec = ok; // these are not considered errors;
- // the status is considered not found
- return fs::file_status( fs::file_not_found );
- }
- else if ((ec.value() == ERROR_SHARING_VIOLATION))
- {
- ec = ok; // these are not considered errors;
- // the file exists but the type is not known
- return fs::file_status( fs::type_unknown );
- }
- return fs::file_status( fs::status_unknown );
- }
- ec = ok;;
- return (attr & FILE_ATTRIBUTE_DIRECTORY)
- ? fs::file_status( fs::directory_file )
- : fs::file_status( fs::regular_file );
- }
-
- BOOL get_file_attributes_ex( const char * ph,
- WIN32_FILE_ATTRIBUTE_DATA & fad )
- { return ::GetFileAttributesExA( ph, ::GetFileExInfoStandard, &fad ); }
-
- template< class String >
- boost::filesystem2::detail::query_pair
- is_empty_template( const String & ph )
- {
- WIN32_FILE_ATTRIBUTE_DATA fad;
- if ( get_file_attributes_ex( ph.c_str(), fad ) == 0 )
- return std::make_pair( error_code( ::GetLastError(), system_category() ), false );
- return std::make_pair( ok,
- ( fad.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
- ? is_empty_directory( ph )
- :( !fad.nFileSizeHigh && !fad.nFileSizeLow ) );
- }
-
- HANDLE create_file( const char * ph, DWORD dwDesiredAccess,
- DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes,
- DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes,
- HANDLE hTemplateFile )
- {
- return ::CreateFileA( ph, dwDesiredAccess, dwShareMode,
- lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes,
- hTemplateFile );
- }
-
- // Thanks to Jeremy Maitin-Shepard for much help and for permission to
- // base the equivalent() implementation on portions of his
- // file-equivalence-win32.cpp experimental code.
- struct handle_wrapper
- {
- HANDLE handle;
- handle_wrapper( HANDLE h )
- : handle(h) {}
- ~handle_wrapper()
- {
- if ( handle != INVALID_HANDLE_VALUE )
- ::CloseHandle(handle);
- }
- };
-
- template< class String >
- boost::filesystem2::detail::query_pair
- equivalent_template( const String & ph1, const String & ph2 )
- {
- // Note well: Physical location on external media is part of the
- // equivalence criteria. If there are no open handles, physical location
- // can change due to defragmentation or other relocations. Thus handles
- // must be held open until location information for both paths has
- // been retrieved.
- handle_wrapper p1(
- create_file(
- ph1.c_str(),
- 0,
- FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
- 0,
- OPEN_EXISTING,
- FILE_FLAG_BACKUP_SEMANTICS,
- 0 ) );
- int error1(0); // save error code in case we have to throw
- if ( p1.handle == INVALID_HANDLE_VALUE )
- error1 = ::GetLastError();
- handle_wrapper p2(
- create_file(
- ph2.c_str(),
- 0,
- FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
- 0,
- OPEN_EXISTING,
- FILE_FLAG_BACKUP_SEMANTICS,
- 0 ) );
- if ( p1.handle == INVALID_HANDLE_VALUE
- || p2.handle == INVALID_HANDLE_VALUE )
- {
- if ( p1.handle != INVALID_HANDLE_VALUE
- || p2.handle != INVALID_HANDLE_VALUE )
- { return std::make_pair( ok, false ); }
- BOOST_ASSERT( p1.handle == INVALID_HANDLE_VALUE
- && p2.handle == INVALID_HANDLE_VALUE );
- { return std::make_pair( error_code( error1, system_category()), false ); }
- }
- // at this point, both handles are known to be valid
- BY_HANDLE_FILE_INFORMATION info1, info2;
- if ( !::GetFileInformationByHandle( p1.handle, &info1 ) )
- { return std::make_pair( error_code( ::GetLastError(), system_category() ), false ); }
- if ( !::GetFileInformationByHandle( p2.handle, &info2 ) )
- { return std::make_pair( error_code( ::GetLastError(), system_category() ), false ); }
- // In theory, volume serial numbers are sufficient to distinguish between
- // devices, but in practice VSN's are sometimes duplicated, so last write
- // time and file size are also checked.
- return std::make_pair( ok,
- info1.dwVolumeSerialNumber == info2.dwVolumeSerialNumber
- && info1.nFileIndexHigh == info2.nFileIndexHigh
- && info1.nFileIndexLow == info2.nFileIndexLow
- && info1.nFileSizeHigh == info2.nFileSizeHigh
- && info1.nFileSizeLow == info2.nFileSizeLow
- && info1.ftLastWriteTime.dwLowDateTime
- == info2.ftLastWriteTime.dwLowDateTime
- && info1.ftLastWriteTime.dwHighDateTime
- == info2.ftLastWriteTime.dwHighDateTime );
- }
-
- template< class String >
- boost::filesystem2::detail::uintmax_pair
- file_size_template( const String & ph )
- {
- WIN32_FILE_ATTRIBUTE_DATA fad;
- // by now, intmax_t is 64-bits on all Windows compilers
- if ( get_file_attributes_ex( ph.c_str(), fad ) == 0 )
- return std::make_pair( error_code( ::GetLastError(), system_category() ), 0 );
- if ( (fad.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) !=0 )
- return std::make_pair( error_code( ERROR_FILE_NOT_FOUND, system_category()), 0 );
- return std::make_pair( ok,
- (static_cast<boost::uintmax_t>(fad.nFileSizeHigh)
- << (sizeof(fad.nFileSizeLow)*8))
- + fad.nFileSizeLow );
- }
-
- inline bool get_free_disk_space( const std::string & ph,
- PULARGE_INTEGER avail, PULARGE_INTEGER total, PULARGE_INTEGER free )
- { return ::GetDiskFreeSpaceExA( ph.c_str(), avail, total, free ) != 0; }
-
- template< class String >
- boost::filesystem2::detail::space_pair
- space_template( String & ph )
- {
- ULARGE_INTEGER avail, total, free;
- boost::filesystem2::detail::space_pair result;
- if ( get_free_disk_space( ph, &avail, &total, &free ) )
- {
- result.first = ok;
- result.second.capacity
- = (static_cast<boost::uintmax_t>(total.HighPart) << 32)
- + total.LowPart;
- result.second.free
- = (static_cast<boost::uintmax_t>(free.HighPart) << 32)
- + free.LowPart;
- result.second.available
- = (static_cast<boost::uintmax_t>(avail.HighPart) << 32)
- + avail.LowPart;
- }
- else
- {
- result.first = error_code( ::GetLastError(), system_category() );
- result.second.capacity = result.second.free
- = result.second.available = 0;
- }
- return result;
- }
-
- inline DWORD get_current_directory( DWORD sz, char * buf )
- { return ::GetCurrentDirectoryA( sz, buf ); }
-
- template< class String >
- error_code
- get_current_path_template( String & ph )
- {
- DWORD sz;
- if ( (sz = get_current_directory( 0,
- static_cast<typename String::value_type*>(0) )) == 0 )
- { sz = 1; }
- typedef typename String::value_type value_type;
- boost::scoped_array<value_type> buf( new value_type[sz] );
- if ( get_current_directory( sz, buf.get() ) == 0 )
- return error_code( ::GetLastError(), system_category() );
- ph = buf.get();
- return ok;
- }
-
- inline bool set_current_directory( const char * buf )
- { return ::SetCurrentDirectoryA( buf ) != 0; }
-
- template< class String >
- error_code
- set_current_path_template( const String & ph )
- {
- return error_code( set_current_directory( ph.c_str() )
- ? 0 : ::GetLastError(), system_category() );
- }
-
- inline std::size_t get_full_path_name(
- const std::string & ph, std::size_t len, char * buf, char ** p )
- {
- return static_cast<std::size_t>(
- ::GetFullPathNameA( ph.c_str(),
- static_cast<DWORD>(len), buf, p ));
- }
-
- const std::size_t buf_size( 128 );
-
- template<class String>
- error_code
- get_full_path_name_template( const String & ph, String & target )
- {
- typename String::value_type buf[buf_size];
- typename String::value_type * pfn;
- std::size_t len = get_full_path_name( ph,
- buf_size , buf, &pfn );
- if ( len == 0 ) return error_code( ::GetLastError(), system_category() );
- if ( len > buf_size )
- {
- typedef typename String::value_type value_type;
- boost::scoped_array<value_type> big_buf( new value_type[len] );
- if ( (len=get_full_path_name( ph, len , big_buf.get(), &pfn ))
- == 0 ) return error_code( ::GetLastError(), system_category() );
- big_buf[len] = '\0';
- target = big_buf.get();
- return ok;
- }
- buf[len] = '\0';
- target = buf;
- return ok;
- }
-
- template<class String>
- error_code
- get_file_write_time( const String & ph, FILETIME & last_write_time )
- {
- handle_wrapper hw(
- create_file( ph.c_str(), 0,
- FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
- OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0 ) );
- if ( hw.handle == INVALID_HANDLE_VALUE )
- return error_code( ::GetLastError(), system_category() );
- return error_code( ::GetFileTime( hw.handle, 0, 0, &last_write_time ) != 0
- ? 0 : ::GetLastError(), system_category() );
- }
-
- template<class String>
- error_code
- set_file_write_time( const String & ph, const FILETIME & last_write_time )
- {
- handle_wrapper hw(
- create_file( ph.c_str(), FILE_WRITE_ATTRIBUTES,
- FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
- OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0 ) );
- if ( hw.handle == INVALID_HANDLE_VALUE )
- return error_code( ::GetLastError(), system_category() );
- return error_code( ::SetFileTime( hw.handle, 0, 0, &last_write_time ) != 0
- ? 0 : ::GetLastError(), system_category() );
- }
-
- // these constants come from inspecting some Microsoft sample code
- std::time_t to_time_t( const FILETIME & ft )
- {
- __int64 t = (static_cast<__int64>( ft.dwHighDateTime ) << 32)
- + ft.dwLowDateTime;
-# if !defined( BOOST_MSVC ) || BOOST_MSVC > 1300 // > VC++ 7.0
- t -= 116444736000000000LL;
-# else
- t -= 116444736000000000;
-# endif
- t /= 10000000;
- return static_cast<std::time_t>( t );
- }
-
- void to_FILETIME( std::time_t t, FILETIME & ft )
- {
- __int64 temp = t;
- temp *= 10000000;
-# if !defined( BOOST_MSVC ) || BOOST_MSVC > 1300 // > VC++ 7.0
- temp += 116444736000000000LL;
-# else
- temp += 116444736000000000;
-# endif
- ft.dwLowDateTime = static_cast<DWORD>( temp );
- ft.dwHighDateTime = static_cast<DWORD>( temp >> 32 );
- }
-
- template<class String>
- boost::filesystem2::detail::time_pair
- last_write_time_template( const String & ph )
- {
- FILETIME lwt;
- error_code ec(
- get_file_write_time( ph, lwt ) );
- return std::make_pair( ec, to_time_t( lwt ) );
- }
-
- template<class String>
- error_code
- last_write_time_template( const String & ph, const std::time_t new_time )
- {
- FILETIME lwt;
- to_FILETIME( new_time, lwt );
- return set_file_write_time( ph, lwt );
- }
-
- bool remove_directory( const std::string & ph )
- { return ::RemoveDirectoryA( ph.c_str() ) != 0; }
-
- bool delete_file( const std::string & ph )
- { return ::DeleteFileA( ph.c_str() ) != 0; }
-
- template<class String>
- error_code
- remove_template( const String & ph )
- {
- // TODO: test this code in the presence of Vista symlinks,
- // including dangling, self-referal, and cyclic symlinks
- error_code ec;
- fs::file_status sf( fs::detail::status_api( ph, ec ) );
- if ( ec )
- return ec;
- if ( sf.type() == fs::file_not_found )
- return ok;
- if ( fs::is_directory( sf ) )
- {
- if ( !remove_directory( ph ) )
- return error_code(::GetLastError(), system_category());
- }
- else
- {
- if ( !delete_file( ph ) ) return error_code(::GetLastError(), system_category());
- }
- return ok;
- }
-
- inline bool create_directory( const std::string & dir )
- { return ::CreateDirectoryA( dir.c_str(), 0 ) != 0; }
-
- template<class String>
- boost::filesystem2::detail::query_pair
- create_directory_template( const String & dir_ph )
- {
- error_code error, dummy;
- if ( create_directory( dir_ph ) ) return std::make_pair( error, true );
- error = error_code( ::GetLastError(), system_category() );
- // an error here may simply mean the postcondition is already met
- if ( error.value() == ERROR_ALREADY_EXISTS
- && fs::is_directory( fs::detail::status_api( dir_ph, dummy ) ) )
- return std::make_pair( ok, false );
- return std::make_pair( error, false );
- }
-
-#if _WIN32_WINNT >= 0x500
- inline bool create_hard_link( const std::string & to_ph,
- const std::string & from_ph )
- { return ::CreateHardLinkA( from_ph.c_str(), to_ph.c_str(), 0 ) != 0; }
-#endif
-
-#if _WIN32_WINNT >= 0x500
- template<class String>
- error_code
- create_hard_link_template( const String & to_ph,
- const String & from_ph )
- {
- return error_code( create_hard_link( to_ph.c_str(), from_ph.c_str() )
- ? 0 : ::GetLastError(), system_category() );
- }
-#endif
-
-#else // BOOST_POSIX_API
-
- int posix_remove( const char * p )
- {
-# if defined(__QNXNTO__) || (defined(__MSL__) && (defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)))
- // Some Metrowerks C library versions fail on directories because of a
- // known Metrowerks coding error in ::remove. Workaround is to call
- // rmdir() or unlink() as indicated.
- // Same bug also reported for QNX, with the same fix.
- int err = ::unlink( p );
- if ( err == 0 || errno != EPERM )
- return err;
- return ::rmdir( p );
-# else
- return std::remove( p );
-# endif
- }
-
-#endif
-} // unnamed namespace
-
-namespace boost
-{
- namespace filesystem2
- {
- namespace detail
- {
- BOOST_FILESYSTEM_DECL system::error_code throws;
-
-// free functions ----------------------------------------------------------//
-
- BOOST_FILESYSTEM_DECL error_code not_found_error()
- {
-# ifdef BOOST_WINDOWS_API
- return error_code(ERROR_PATH_NOT_FOUND, system_category());
-# else
- return error_code(ENOENT, system_category());
-# endif
- }
-
- BOOST_FILESYSTEM_DECL bool possible_large_file_size_support()
- {
-# ifdef BOOST_POSIX_API
- struct stat lcl_stat;
- return sizeof( lcl_stat.st_size ) > 4;
-# else
- return true;
-# endif
- }
-
-# ifdef BOOST_WINDOWS_API
-
- BOOST_FILESYSTEM_DECL fs::file_status
- status_api( const std::string & ph, error_code & ec )
- { return status_template( ph, ec ); }
-
-# ifndef BOOST_FILESYSTEM2_NARROW_ONLY
-
- BOOST_FILESYSTEM_DECL fs::file_status
- status_api( const std::wstring & ph, error_code & ec )
- { return status_template( ph, ec ); }
-
- BOOST_FILESYSTEM_DECL bool symbolic_link_exists_api( const std::wstring & )
- { return false; }
-
- BOOST_FILESYSTEM_DECL
- fs::detail::query_pair is_empty_api( const std::wstring & ph )
- { return is_empty_template( ph ); }
-
- BOOST_FILESYSTEM_DECL
- fs::detail::query_pair
- equivalent_api( const std::wstring & ph1, const std::wstring & ph2 )
- { return equivalent_template( ph1, ph2 ); }
-
- BOOST_FILESYSTEM_DECL
- fs::detail::uintmax_pair file_size_api( const std::wstring & ph )
- { return file_size_template( ph ); }
-
- BOOST_FILESYSTEM_DECL
- fs::detail::space_pair space_api( const std::wstring & ph )
- { return space_template( ph ); }
-
- BOOST_FILESYSTEM_DECL
- error_code
- get_current_path_api( std::wstring & ph )
- { return get_current_path_template( ph ); }
-
- BOOST_FILESYSTEM_DECL
- error_code
- set_current_path_api( const std::wstring & ph )
- { return set_current_path_template( ph ); }
-
- BOOST_FILESYSTEM_DECL error_code
- get_full_path_name_api( const std::wstring & ph, std::wstring & target )
- { return get_full_path_name_template( ph, target ); }
-
- BOOST_FILESYSTEM_DECL time_pair
- last_write_time_api( const std::wstring & ph )
- { return last_write_time_template( ph ); }
-
- BOOST_FILESYSTEM_DECL error_code
- last_write_time_api( const std::wstring & ph, std::time_t new_value )
- { return last_write_time_template( ph, new_value ); }
-
- BOOST_FILESYSTEM_DECL fs::detail::query_pair
- create_directory_api( const std::wstring & ph )
- { return create_directory_template( ph ); }
-
-#if _WIN32_WINNT >= 0x500
- BOOST_FILESYSTEM_DECL error_code
- create_hard_link_api( const std::wstring & to_ph,
- const std::wstring & from_ph )
- { return create_hard_link_template( to_ph, from_ph ); }
-#endif
-
- BOOST_FILESYSTEM_DECL error_code
- create_symlink_api( const std::wstring & /*to_ph*/,
- const std::wstring & /*from_ph*/ )
- { return error_code( ERROR_NOT_SUPPORTED, system_category() ); }
-
- BOOST_FILESYSTEM_DECL error_code
- remove_api( const std::wstring & ph ) { return remove_template( ph ); }
-
- BOOST_FILESYSTEM_DECL error_code
- rename_api( const std::wstring & from, const std::wstring & to )
- {
- return error_code( ::MoveFileW( from.c_str(), to.c_str() )
- ? 0 : ::GetLastError(), system_category() );
- }
-
- BOOST_FILESYSTEM_DECL error_code
- copy_file_api( const std::wstring & from, const std::wstring & to, bool fail_if_exists )
- {
- return error_code( ::CopyFileW( from.c_str(), to.c_str(), fail_if_exists )
- ? 0 : ::GetLastError(), system_category() );
- }
-
- BOOST_FILESYSTEM_DECL bool create_file_api( const std::wstring & ph,
- std::ios_base::openmode mode ) // true if succeeds
- {
- DWORD access(
- ((mode & std::ios_base::in) == 0 ? 0 : GENERIC_READ)
- | ((mode & std::ios_base::out) == 0 ? 0 : GENERIC_WRITE) );
-
- DWORD disposition(0); // see 27.8.1.3 Table 92
- if ( (mode&~std::ios_base::binary)
- == (std::ios_base::out|std::ios_base::app) )
- disposition = OPEN_ALWAYS;
- else if ( (mode&~(std::ios_base::binary|std::ios_base::out))
- == std::ios_base::in ) disposition = OPEN_EXISTING;
- else if ( ((mode&~(std::ios_base::binary|std::ios_base::trunc))
- == std::ios_base::out )
- || ((mode&~std::ios_base::binary)
- == (std::ios_base::in|std::ios_base::out|std::ios_base::trunc)) )
- disposition = CREATE_ALWAYS;
- else BOOST_ASSERT( 0 && "invalid mode argument" );
-
- HANDLE handle ( ::CreateFileW( ph.c_str(), access,
- FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
- disposition, (mode &std::ios_base::out) != 0
- ? FILE_ATTRIBUTE_ARCHIVE : FILE_ATTRIBUTE_NORMAL, 0 ) );
- if ( handle == INVALID_HANDLE_VALUE ) return false;
- ::CloseHandle( handle );
- return true;
- }
-
- BOOST_FILESYSTEM_DECL std::string narrow_path_api(
- const std::wstring & ph ) // return is empty if fails
- {
- std::string narrow_short_form;
- std::wstring short_form;
- for ( DWORD buf_sz( static_cast<DWORD>( ph.size()+1 ));; )
- {
- boost::scoped_array<wchar_t> buf( new wchar_t[buf_sz] );
- DWORD sz( ::GetShortPathNameW( ph.c_str(), buf.get(), buf_sz ) );
- if ( sz == 0 ) return narrow_short_form;
- if ( sz <= buf_sz )
- {
- short_form += buf.get();
- break;
- }
- buf_sz = sz + 1;
- }
- // contributed by Takeshi Mouri:
- int narrow_sz( ::WideCharToMultiByte( CP_ACP, 0,
- short_form.c_str(), static_cast<int>(short_form.size()), 0, 0, 0, 0 ) );
- boost::scoped_array<char> narrow_buf( new char[narrow_sz] );
- ::WideCharToMultiByte( CP_ACP, 0,
- short_form.c_str(), static_cast<int>(short_form.size()),
- narrow_buf.get(), narrow_sz, 0, 0 );
- narrow_short_form.assign(narrow_buf.get(), narrow_sz);
-
- return narrow_short_form;
- }
-
- BOOST_FILESYSTEM_DECL error_code
- dir_itr_first( void *& handle, const std::wstring & dir,
- std::wstring & target, file_status & sf, file_status & symlink_sf )
- {
- // use a form of search Sebastian Martel reports will work with Win98
- std::wstring dirpath( dir );
- dirpath += (dirpath.empty()
- || dirpath[dirpath.size()-1] != L'\\') ? L"\\*" : L"*";
-
- WIN32_FIND_DATAW data;
- if ( (handle = ::FindFirstFileW( dirpath.c_str(), &data ))
- == INVALID_HANDLE_VALUE )
- {
- handle = 0;
- return error_code( ::GetLastError() == ERROR_FILE_NOT_FOUND
- ? 0 : ::GetLastError(), system_category() );
- }
- target = data.cFileName;
- if ( data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
- { sf.type( directory_file ); symlink_sf.type( directory_file ); }
- else { sf.type( regular_file ); symlink_sf.type( regular_file ); }
- return ok;
- }
-
- BOOST_FILESYSTEM_DECL error_code
- dir_itr_increment( void *& handle, std::wstring & target,
- file_status & sf, file_status & symlink_sf )
- {
- WIN32_FIND_DATAW data;
- if ( ::FindNextFileW( handle, &data ) == 0 ) // fails
- {
- int error = ::GetLastError();
- dir_itr_close( handle );
- return error_code( error == ERROR_NO_MORE_FILES ? 0 : error, system_category() );
- }
- target = data.cFileName;
- if ( data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
- { sf.type( directory_file ); symlink_sf.type( directory_file ); }
- else { sf.type( regular_file ); symlink_sf.type( regular_file ); }
- return ok;
- }
-
-# endif // ifndef BOOST_FILESYSTEM2_NARROW_ONLY
-
- // suggested by Walter Landry
- BOOST_FILESYSTEM_DECL bool symbolic_link_exists_api( const std::string & )
- { return false; }
-
- BOOST_FILESYSTEM_DECL
- fs::detail::query_pair is_empty_api( const std::string & ph )
- { return is_empty_template( ph ); }
-
- BOOST_FILESYSTEM_DECL
- fs::detail::query_pair
- equivalent_api( const std::string & ph1, const std::string & ph2 )
- { return equivalent_template( ph1, ph2 ); }
-
- BOOST_FILESYSTEM_DECL
- fs::detail::uintmax_pair file_size_api( const std::string & ph )
- { return file_size_template( ph ); }
-
- BOOST_FILESYSTEM_DECL
- fs::detail::space_pair space_api( const std::string & ph )
- { return space_template( ph ); }
-
- BOOST_FILESYSTEM_DECL
- error_code
- get_current_path_api( std::string & ph )
- { return get_current_path_template( ph ); }
-
- BOOST_FILESYSTEM_DECL
- error_code
- set_current_path_api( const std::string & ph )
- { return set_current_path_template( ph ); }
-
- BOOST_FILESYSTEM_DECL error_code
- get_full_path_name_api( const std::string & ph, std::string & target )
- { return get_full_path_name_template( ph, target ); }
-
- BOOST_FILESYSTEM_DECL time_pair
- last_write_time_api( const std::string & ph )
- { return last_write_time_template( ph ); }
-
- BOOST_FILESYSTEM_DECL error_code
- last_write_time_api( const std::string & ph, std::time_t new_value )
- { return last_write_time_template( ph, new_value ); }
-
- BOOST_FILESYSTEM_DECL fs::detail::query_pair
- create_directory_api( const std::string & ph )
- { return create_directory_template( ph ); }
-
-#if _WIN32_WINNT >= 0x500
- BOOST_FILESYSTEM_DECL error_code
- create_hard_link_api( const std::string & to_ph,
- const std::string & from_ph )
- {
- return create_hard_link_template( to_ph, from_ph );
- }
-#endif
-
- BOOST_FILESYSTEM_DECL error_code
- create_symlink_api( const std::string & /*to_ph*/,
- const std::string & /*from_ph*/ )
- { return error_code( ERROR_NOT_SUPPORTED, system_category() ); }
-
- BOOST_FILESYSTEM_DECL error_code
- remove_api( const std::string & ph ) { return remove_template( ph ); }
-
- BOOST_FILESYSTEM_DECL error_code
- rename_api( const std::string & from, const std::string & to )
- {
- return error_code( ::MoveFileA( from.c_str(), to.c_str() )
- ? 0 : ::GetLastError(), system_category() );
- }
-
- BOOST_FILESYSTEM_DECL error_code
- copy_file_api( const std::string & from, const std::string & to, bool fail_if_exists )
- {
- return error_code( ::CopyFileA( from.c_str(), to.c_str(), fail_if_exists )
- ? 0 : ::GetLastError(), system_category() );
- }
-
- BOOST_FILESYSTEM_DECL error_code
- dir_itr_first( void *& handle, const std::string & dir,
- std::string & target, file_status & sf, file_status & symlink_sf )
- // Note: an empty root directory has no "." or ".." entries, so this
- // causes a ERROR_FILE_NOT_FOUND error which we do not considered an
- // error. It is treated as eof instead.
- {
- // use a form of search Sebastian Martel reports will work with Win98
- std::string dirpath( dir );
- dirpath += (dirpath.empty()
- || (dirpath[dirpath.size()-1] != '\\'
- && dirpath[dirpath.size()-1] != ':')) ? "\\*" : "*";
-
- WIN32_FIND_DATAA data;
- if ( (handle = ::FindFirstFileA( dirpath.c_str(), &data ))
- == INVALID_HANDLE_VALUE )
- {
- handle = 0;
- return error_code( (::GetLastError() == ERROR_FILE_NOT_FOUND
- // Windows Mobile returns ERROR_NO_MORE_FILES; see ticket #3551
- || ::GetLastError() == ERROR_NO_MORE_FILES)
- ? 0 : ::GetLastError(), system_category() );
- }
- target = data.cFileName;
- if ( data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
- { sf.type( directory_file ); symlink_sf.type( directory_file ); }
- else { sf.type( regular_file ); symlink_sf.type( regular_file ); }
- return ok;
- }
-
- BOOST_FILESYSTEM_DECL error_code
- dir_itr_close( void *& handle )
- {
- if ( handle != 0 )
- {
- bool ok = ::FindClose( handle ) != 0;
- handle = 0;
- return error_code( ok ? 0 : ::GetLastError(), system_category() );
- }
- return ok;
- }
-
- BOOST_FILESYSTEM_DECL error_code
- dir_itr_increment( void *& handle, std::string & target,
- file_status & sf, file_status & symlink_sf )
- {
- WIN32_FIND_DATAA data;
- if ( ::FindNextFileA( handle, &data ) == 0 ) // fails
- {
- int error = ::GetLastError();
- dir_itr_close( handle );
- return error_code( error == ERROR_NO_MORE_FILES ? 0 : error, system_category() );
- }
- target = data.cFileName;
- if ( data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
- { sf.type( directory_file ); symlink_sf.type( directory_file ); }
- else { sf.type( regular_file ); symlink_sf.type( regular_file ); }
- return ok;
- }
-
-# else // BOOST_POSIX_API
-
- BOOST_FILESYSTEM_DECL fs::file_status
- status_api( const std::string & ph, error_code & ec )
- {
- struct stat path_stat;
- if ( ::stat( ph.c_str(), &path_stat ) != 0 )
- {
- if ( errno == ENOENT || errno == ENOTDIR )
- {
- ec = ok;
- return fs::file_status( fs::file_not_found );
- }
- ec = error_code( errno, system_category() );
- return fs::file_status( fs::status_unknown );
- }
- ec = ok;
- if ( S_ISDIR( path_stat.st_mode ) )
- return fs::file_status( fs::directory_file );
- if ( S_ISREG( path_stat.st_mode ) )
- return fs::file_status( fs::regular_file );
- if ( S_ISBLK( path_stat.st_mode ) )
- return fs::file_status( fs::block_file );
- if ( S_ISCHR( path_stat.st_mode ) )
- return fs::file_status( fs::character_file );
- if ( S_ISFIFO( path_stat.st_mode ) )
- return fs::file_status( fs::fifo_file );
- if ( S_ISSOCK( path_stat.st_mode ) )
- return fs::file_status( fs::socket_file );
- return fs::file_status( fs::type_unknown );
- }
-
- BOOST_FILESYSTEM_DECL fs::file_status
- symlink_status_api( const std::string & ph, error_code & ec )
- {
- struct stat path_stat;
- if ( ::lstat( ph.c_str(), &path_stat ) != 0 )
- {
- if ( errno == ENOENT || errno == ENOTDIR )
- {
- ec = ok;
- return fs::file_status( fs::file_not_found );
- }
- ec = error_code( errno, system_category() );
- return fs::file_status( fs::status_unknown );
- }
- ec = ok;
- if ( S_ISREG( path_stat.st_mode ) )
- return fs::file_status( fs::regular_file );
- if ( S_ISDIR( path_stat.st_mode ) )
- return fs::file_status( fs::directory_file );
- if ( S_ISLNK( path_stat.st_mode ) )
- return fs::file_status( fs::symlink_file );
- if ( S_ISBLK( path_stat.st_mode ) )
- return fs::file_status( fs::block_file );
- if ( S_ISCHR( path_stat.st_mode ) )
- return fs::file_status( fs::character_file );
- if ( S_ISFIFO( path_stat.st_mode ) )
- return fs::file_status( fs::fifo_file );
- if ( S_ISSOCK( path_stat.st_mode ) )
- return fs::file_status( fs::socket_file );
- return fs::file_status( fs::type_unknown );
- }
-
- // suggested by Walter Landry
- BOOST_FILESYSTEM_DECL bool
- symbolic_link_exists_api( const std::string & ph )
- {
- struct stat path_stat;
- return ::lstat( ph.c_str(), &path_stat ) == 0
- && S_ISLNK( path_stat.st_mode );
- }
-
- BOOST_FILESYSTEM_DECL query_pair
- is_empty_api( const std::string & ph )
- {
- struct stat path_stat;
- if ( (::stat( ph.c_str(), &path_stat )) != 0 )
- return std::make_pair( error_code( errno, system_category() ), false );
- return std::make_pair( ok, S_ISDIR( path_stat.st_mode )
- ? is_empty_directory( ph )
- : path_stat.st_size == 0 );
- }
-
- BOOST_FILESYSTEM_DECL query_pair
- equivalent_api( const std::string & ph1, const std::string & ph2 )
- {
- struct stat s2;
- int e2( ::stat( ph2.c_str(), &s2 ) );
- struct stat s1;
- int e1( ::stat( ph1.c_str(), &s1 ) );
- if ( e1 != 0 || e2 != 0 )
- return std::make_pair( error_code( e1 != 0 && e2 != 0 ? errno : 0, system_category() ), false );
- // at this point, both stats are known to be valid
- return std::make_pair( ok,
- s1.st_dev == s2.st_dev
- && s1.st_ino == s2.st_ino
- // According to the POSIX stat specs, "The st_ino and st_dev fields
- // taken together uniquely identify the file within the system."
- // Just to be sure, size and mod time are also checked.
- && s1.st_size == s2.st_size
- && s1.st_mtime == s2.st_mtime );
- }
-
- BOOST_FILESYSTEM_DECL uintmax_pair
- file_size_api( const std::string & ph )
- {
- struct stat path_stat;
- if ( ::stat( ph.c_str(), &path_stat ) != 0 )
- return std::make_pair( error_code( errno, system_category() ), 0 );
- if ( !S_ISREG( path_stat.st_mode ) )
- return std::make_pair( error_code( EPERM, system_category() ), 0 );
- return std::make_pair( ok,
- static_cast<boost::uintmax_t>(path_stat.st_size) );
- }
-
- BOOST_FILESYSTEM_DECL space_pair
- space_api( const std::string & ph )
- {
- struct BOOST_STATVFS vfs;
- space_pair result;
- if ( ::BOOST_STATVFS( ph.c_str(), &vfs ) != 0 )
- {
- result.first = error_code( errno, system_category() );
- result.second.capacity = result.second.free
- = result.second.available = 0;
- }
- else
- {
- result.first = ok;
- result.second.capacity
- = static_cast<boost::uintmax_t>(vfs.f_blocks) * BOOST_STATVFS_F_FRSIZE;
- result.second.free
- = static_cast<boost::uintmax_t>(vfs.f_bfree) * BOOST_STATVFS_F_FRSIZE;
- result.second.available
- = static_cast<boost::uintmax_t>(vfs.f_bavail) * BOOST_STATVFS_F_FRSIZE;
- }
- return result;
- }
-
- BOOST_FILESYSTEM_DECL time_pair
- last_write_time_api( const std::string & ph )
- {
- struct stat path_stat;
- if ( ::stat( ph.c_str(), &path_stat ) != 0 )
- return std::make_pair( error_code( errno, system_category() ), 0 );
- return std::make_pair( ok, path_stat.st_mtime );
- }
-
- BOOST_FILESYSTEM_DECL error_code
- last_write_time_api( const std::string & ph, std::time_t new_value )
- {
- struct stat path_stat;
- if ( ::stat( ph.c_str(), &path_stat ) != 0 )
- return error_code( errno, system_category() );
- ::utimbuf buf;
- buf.actime = path_stat.st_atime; // utime() updates access time too:-(
- buf.modtime = new_value;
- return error_code( ::utime( ph.c_str(), &buf ) != 0 ? errno : 0, system_category() );
- }
-
- BOOST_FILESYSTEM_DECL error_code
- get_current_path_api( std::string & ph )
- {
- for ( long path_max = 32;; path_max *=2 ) // loop 'til buffer large enough
- {
- boost::scoped_array<char>
- buf( new char[static_cast<std::size_t>(path_max)] );
- if ( ::getcwd( buf.get(), static_cast<std::size_t>(path_max) ) == 0 )
- {
- if ( errno != ERANGE
- // bug in some versions of the Metrowerks C lib on the Mac: wrong errno set
-# if defined(__MSL__) && (defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__))
- && errno != 0
-# endif
- ) return error_code( errno, system_category() );
- }
- else
- {
- ph = buf.get();
- break;
- }
- }
- return ok;
- }
-
- BOOST_FILESYSTEM_DECL error_code
- set_current_path_api( const std::string & ph )
- {
- return error_code( ::chdir( ph.c_str() )
- ? errno : 0, system_category() );
- }
-
- BOOST_FILESYSTEM_DECL fs::detail::query_pair
- create_directory_api( const std::string & ph )
- {
- if ( ::mkdir( ph.c_str(), S_IRWXU|S_IRWXG|S_IRWXO ) == 0 )
- { return std::make_pair( ok, true ); }
- int ec=errno;
- error_code dummy;
- if ( ec != EEXIST
- || !fs::is_directory( status_api( ph, dummy ) ) )
- { return std::make_pair( error_code( ec, system_category() ), false ); }
- return std::make_pair( ok, false );
- }
-
- BOOST_FILESYSTEM_DECL error_code
- create_hard_link_api( const std::string & to_ph,
- const std::string & from_ph )
- {
- return error_code( ::link( to_ph.c_str(), from_ph.c_str() ) == 0
- ? 0 : errno, system_category() );
- }
-
- BOOST_FILESYSTEM_DECL error_code
- create_symlink_api( const std::string & to_ph,
- const std::string & from_ph )
- {
- return error_code( ::symlink( to_ph.c_str(), from_ph.c_str() ) == 0
- ? 0 : errno, system_category() );
- }
-
- BOOST_FILESYSTEM_DECL error_code
- remove_api( const std::string & ph )
- {
- if ( posix_remove( ph.c_str() ) == 0 )
- return ok;
- int error = errno;
- // POSIX says "If the directory is not an empty directory, rmdir()
- // shall fail and set errno to EEXIST or ENOTEMPTY."
- // Linux uses ENOTEMPTY, Solaris uses EEXIST.
- if ( error == EEXIST ) error = ENOTEMPTY;
-
- error_code ec;
-
- // ignore errors if post-condition satisfied
- return status_api(ph, ec).type() == file_not_found
- ? ok : error_code( error, system_category() ) ;
- }
-
- BOOST_FILESYSTEM_DECL error_code
- rename_api( const std::string & from, const std::string & to )
- {
- // POSIX is too permissive so must check
- error_code dummy;
- if ( fs::exists( status_api( to, dummy ) ) )
- return error_code( EEXIST, system_category() );
- return error_code( std::rename( from.c_str(), to.c_str() ) != 0
- ? errno : 0, system_category() );
- }
-
- BOOST_FILESYSTEM_DECL error_code
- copy_file_api( const std::string & from_file_ph,
- const std::string & to_file_ph, bool fail_if_exists )
- {
- const std::size_t buf_sz = 32768;
- boost::scoped_array<char> buf( new char [buf_sz] );
- int infile=-1, outfile=-1; // -1 means not open
-
- // bug fixed: code previously did a stat() on the from_file first, but that
- // introduced a gratuitous race condition; the stat() is now done after the open()
-
- if ( (infile = ::open( from_file_ph.c_str(), O_RDONLY )) < 0 )
- { return error_code( errno, system_category() ); }
-
- struct stat from_stat;
- if ( ::stat( from_file_ph.c_str(), &from_stat ) != 0 )
- {
- ::close(infile);
- return error_code( errno, system_category() );
- }
-
- int oflag = O_CREAT | O_WRONLY | O_TRUNC;
- if ( fail_if_exists )
- oflag |= O_EXCL;
- if ( (outfile = ::open( to_file_ph.c_str(), oflag, from_stat.st_mode )) < 0 )
- {
- int open_errno = errno;
- BOOST_ASSERT( infile >= 0 );
- ::close( infile );
- return error_code( open_errno, system_category() );
- }
-
- ssize_t sz, sz_read=1, sz_write;
- while ( sz_read > 0
- && (sz_read = ::read( infile, buf.get(), buf_sz )) > 0 )
- {
- // Allow for partial writes - see Advanced Unix Programming (2nd Ed.),
- // Marc Rochkind, Addison-Wesley, 2004, page 94
- sz_write = 0;
- do
- {
- if ( (sz = ::write( outfile, buf.get() + sz_write,
- sz_read - sz_write )) < 0 )
- {
- sz_read = sz; // cause read loop termination
- break; // and error to be thrown after closes
- }
- sz_write += sz;
- } while ( sz_write < sz_read );
- }
-
- if ( ::close( infile) < 0 ) sz_read = -1;
- if ( ::close( outfile) < 0 ) sz_read = -1;
-
- return error_code( sz_read < 0 ? errno : 0, system_category() );
- }
-
- // this code is based on Stevens and Rago, Advanced Programming in the
- // UNIX envirnment, 2nd Ed., ISBN 0-201-43307-9, page 49
- error_code path_max( std::size_t & result )
- {
-# ifdef PATH_MAX
- static std::size_t max = PATH_MAX;
-# else
- static std::size_t max = 0;
-# endif
- if ( max == 0 )
- {
- errno = 0;
- long tmp = ::pathconf( "/", _PC_NAME_MAX );
- if ( tmp < 0 )
- {
- if ( errno == 0 ) // indeterminate
- max = 4096; // guess
- else return error_code( errno, system_category() );
- }
- else max = static_cast<std::size_t>( tmp + 1 ); // relative root
- }
- result = max;
- return ok;
- }
-
- BOOST_FILESYSTEM_DECL error_code
- dir_itr_first( void *& handle, void *& buffer,
- const std::string & dir, std::string & target,
- file_status &, file_status & )
- {
- if ( (handle = ::opendir( dir.c_str() )) == 0 )
- return error_code( errno, system_category() );
- target = std::string( "." ); // string was static but caused trouble
- // when iteration called from dtor, after
- // static had already been destroyed
- std::size_t path_size (0); // initialization quiets gcc warning
- error_code ec = path_max( path_size );
- if ( ec ) return ec;
- dirent de;
- buffer = std::malloc( (sizeof(dirent) - sizeof(de.d_name))
- + path_size + 1 ); // + 1 for "/0"
- return ok;
- }
-
- BOOST_FILESYSTEM_DECL error_code
- dir_itr_close( void *& handle, void*& buffer )
- {
- std::free( buffer );
- buffer = 0;
- if ( handle == 0 ) return ok;
- DIR * h( static_cast<DIR*>(handle) );
- handle = 0;
- return error_code( ::closedir( h ) == 0 ? 0 : errno, system_category() );
- }
-
-#if defined(__PGI) && defined(__USE_FILE_OFFSET64)
-#define dirent dirent64
-#endif
-
- // warning: the only dirent member updated is d_name
- inline int readdir_r_simulator( DIR * dirp, struct dirent * entry,
- struct dirent ** result ) // *result set to 0 on end of directory
- {
- errno = 0;
-
- # if !defined(__CYGWIN__) \
- && defined(_POSIX_THREAD_SAFE_FUNCTIONS) \
- && defined(_SC_THREAD_SAFE_FUNCTIONS) \
- && (_POSIX_THREAD_SAFE_FUNCTIONS+0 >= 0) \
- && (!defined(__hpux) || defined(_REENTRANT)) \
- && (!defined(_AIX) || defined(__THREAD_SAFE))
- if ( ::sysconf( _SC_THREAD_SAFE_FUNCTIONS ) >= 0 )
- { return ::readdir_r( dirp, entry, result ); }
- # endif
-
- struct dirent * p;
- *result = 0;
- if ( (p = ::readdir( dirp )) == 0 )
- return errno;
- std::strcpy( entry->d_name, p->d_name );
- *result = entry;
- return 0;
- }
-
- BOOST_FILESYSTEM_DECL error_code
- dir_itr_increment( void *& handle, void *& buffer,
- std::string & target, file_status & sf, file_status & symlink_sf )
- {
- BOOST_ASSERT( buffer != 0 );
- dirent * entry( static_cast<dirent *>(buffer) );
- dirent * result;
- int return_code;
- if ( (return_code = readdir_r_simulator( static_cast<DIR*>(handle),
- entry, &result )) != 0 ) return error_code( errno, system_category() );
- if ( result == 0 ) return dir_itr_close( handle, buffer );
- target = entry->d_name;
-# ifdef BOOST_FILESYSTEM_STATUS_CACHE
- if ( entry->d_type == DT_UNKNOWN ) // filesystem does not supply d_type value
- {
- sf = symlink_sf = fs::file_status(fs::status_unknown);
- }
- else // filesystem supplies d_type value
- {
- if ( entry->d_type == DT_DIR )
- sf = symlink_sf = fs::file_status( fs::directory_file );
- else if ( entry->d_type == DT_REG )
- sf = symlink_sf = fs::file_status( fs::regular_file );
- else if ( entry->d_type == DT_LNK )
- {
- sf = fs::file_status( fs::status_unknown );
- symlink_sf = fs::file_status( fs::symlink_file );
- }
- else sf = symlink_sf = fs::file_status( fs::status_unknown );
- }
-# else
- sf = symlink_sf = fs::file_status( fs::status_unknown );
-# endif
- return ok;
- }
-
-# endif
- } // namespace detail
- } // namespace filesystem2
-} // namespace boost
diff --git a/libs/filesystem/v2/src/v2_path.cpp b/libs/filesystem/v2/src/v2_path.cpp
deleted file mode 100644
index 16f65833b0..0000000000
--- a/libs/filesystem/v2/src/v2_path.cpp
+++ /dev/null
@@ -1,177 +0,0 @@
-// path.cpp ----------------------------------------------------------------//
-
-// Copyright 2005 Beman Dawes
-
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-// See library home page at http://www.boost.org/libs/filesystem
-
-//----------------------------------------------------------------------------//
-
-// define BOOST_FILESYSTEM_SOURCE so that <boost/filesystem/config.hpp> knows
-// the library is being built (possibly exporting rather than importing code)
-#define BOOST_FILESYSTEM_SOURCE
-
-#ifndef BOOST_SYSTEM_NO_DEPRECATED
-# define BOOST_SYSTEM_NO_DEPRECATED
-#endif
-
-#include <boost/filesystem/v2/config.hpp>
-
-#ifndef BOOST_FILESYSTEM2_NARROW_ONLY
-
-#include <boost/filesystem/v2/path.hpp>
-#include <boost/scoped_array.hpp>
-
-#include <locale>
-#include <boost/cerrno.hpp>
-#include <boost/system/error_code.hpp>
-
-#include <cwchar> // for std::mbstate_t
-
-#if defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)
-# include <boost/filesystem/detail/utf8_codecvt_facet.hpp>
-#endif
-
-
-namespace
-{
- // std::locale construction can throw (if LC_MESSAGES is wrong, for example),
- // so a static at function scope is used to ensure that exceptions can be
- // caught. (A previous version was at namespace scope, so initialization
- // occurred before main(), preventing exceptions from being caught.)
- std::locale & loc()
- {
-#if !defined(macintosh) && !defined(__APPLE__) && !defined(__APPLE_CC__)
- // ISO C calls this "the locale-specific native environment":
- static std::locale lc("");
-#else // Mac OS
- // "All BSD system functions expect their string parameters to be in UTF-8 encoding
- // and nothing else."
- // See http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPInternational/Articles/FileEncodings.html
- std::locale global_loc = std::locale(); // Mac OS doesn't support locale("")
- static std::locale lc(global_loc,
- new boost::filesystem::detail::utf8_codecvt_facet);
-#endif
- return lc;
- }
-
- const std::codecvt<wchar_t, char, std::mbstate_t> *&
- converter()
- {
- static const std::codecvt<wchar_t, char, std::mbstate_t> *
- cvtr(
- &std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t> >
- ( loc() ) );
- return cvtr;
- }
-
- bool locked(false);
-} // unnamed namespace
-
-namespace boost
-{
- namespace filesystem2
- {
- bool wpath_traits::imbue( const std::locale & new_loc, const std::nothrow_t & )
- {
- if ( locked ) return false;
- locked = true;
- loc() = new_loc;
- converter() = &std::use_facet
- <std::codecvt<wchar_t, char, std::mbstate_t> >( loc() );
- return true;
- }
-
- void wpath_traits::imbue( const std::locale & new_loc )
- {
- if ( locked ) BOOST_FILESYSTEM_THROW(
- wfilesystem_error(
- "boost::filesystem::wpath_traits::imbue() after lockdown",
- make_error_code( system::errc::not_supported ) ) );
- imbue( new_loc, std::nothrow );
- }
-
- //namespace detail
- //{
- // BOOST_FILESYSTEM_DECL
- // const char * what( const char * sys_err_what,
- // const path & path1, const path & path2, std::string & target)
- // {
- // try
- // {
- // if ( target.empty() )
- // {
- // target = sys_err_what;
- // if ( !path1.empty() )
- // {
- // target += ": \"";
- // target += path1.file_string();
- // target += "\"";
- // }
- // if ( !path2.empty() )
- // {
- // target += ", \"";
- // target += path2.file_string();
- // target += "\"";
- // }
- // }
- // return target.c_str();
- // }
- // catch (...)
- // {
- // return sys_err_what;
- // }
- // }
- //}
-
-# ifdef BOOST_POSIX_API
-
-// Because this is POSIX only code, we don't have to worry about ABI issues
-// described in http://www.boost.org/more/separate_compilation.html
-
- wpath_traits::external_string_type
- wpath_traits::to_external( const wpath & ph,
- const internal_string_type & src )
- {
- locked = true;
- std::size_t work_size( converter()->max_length() * (src.size()+1) );
- boost::scoped_array<char> work( new char[ work_size ] );
- std::mbstate_t state = std::mbstate_t(); // perhaps unneeded, but cuts bug reports
- const internal_string_type::value_type * from_next;
- external_string_type::value_type * to_next;
- if ( converter()->out(
- state, src.c_str(), src.c_str()+src.size(), from_next, work.get(),
- work.get()+work_size, to_next ) != std::codecvt_base::ok )
- BOOST_FILESYSTEM_THROW( boost::filesystem::wfilesystem_error(
- "boost::filesystem::wpath::to_external conversion error",
- ph, system::error_code( system::errc::invalid_argument, system::system_category() ) ) );
- *to_next = '\0';
- return external_string_type( work.get() );
- }
-
- wpath_traits::internal_string_type
- wpath_traits::to_internal( const external_string_type & src )
- {
- locked = true;
- std::size_t work_size( src.size()+1 );
- boost::scoped_array<wchar_t> work( new wchar_t[ work_size ] );
- std::mbstate_t state = std::mbstate_t(); // perhaps unneeded, but cuts bug reports
- const external_string_type::value_type * from_next;
- internal_string_type::value_type * to_next;
- if ( converter()->in(
- state, src.c_str(), src.c_str()+src.size(), from_next, work.get(),
- work.get()+work_size, to_next ) != std::codecvt_base::ok )
- BOOST_FILESYSTEM_THROW( boost::filesystem::wfilesystem_error(
- "boost::filesystem::wpath::to_internal conversion error",
- system::error_code( system::errc::invalid_argument, system::system_category() ) ) );
- *to_next = L'\0';
- return internal_string_type( work.get() );
- }
-# endif // BOOST_POSIX_API
-
- } // namespace filesystem2
-} // namespace boost
-
-#endif // ifndef BOOST_FILESYSTEM2_NARROW_ONLY
diff --git a/libs/filesystem/v2/src/v2_portability.cpp b/libs/filesystem/v2/src/v2_portability.cpp
deleted file mode 100644
index 4d27543873..0000000000
--- a/libs/filesystem/v2/src/v2_portability.cpp
+++ /dev/null
@@ -1,119 +0,0 @@
-// portability.cpp ---------------------------------------------------------//
-
-// Copyright 2002-2005 Beman Dawes
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
-// at http://www.boost.org/LICENSE_1_0.txt)
-
-// See library home page at http://www.boost.org/libs/filesystem
-
-//----------------------------------------------------------------------------//
-
-// define BOOST_FILESYSTEM_SOURCE so that <boost/filesystem/config.hpp> knows
-// the library is being built (possibly exporting rather than importing code)
-#define BOOST_FILESYSTEM_SOURCE
-
-#ifndef BOOST_SYSTEM_NO_DEPRECATED
-# define BOOST_SYSTEM_NO_DEPRECATED
-#endif
-
-#include <boost/filesystem/v2/config.hpp>
-#include <boost/filesystem/v2/path.hpp>
-
-namespace fs = boost::filesystem2;
-
-#include <cstring> // SGI MIPSpro compilers need this
-
-# ifdef BOOST_NO_STDC_NAMESPACE
- namespace std { using ::strerror; }
-# endif
-
-//----------------------------------------------------------------------------//
-
-namespace
-{
- const char invalid_chars[] =
- "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F"
- "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F"
- "<>:\"/\\|";
- // note that the terminating '\0' is part of the string - thus the size below
- // is sizeof(invalid_chars) rather than sizeof(invalid_chars)-1. I
- const std::string windows_invalid_chars( invalid_chars, sizeof(invalid_chars) );
-
- const std::string valid_posix(
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-" );
-
-} // unnamed namespace
-
-namespace boost
-{
- namespace filesystem2
- {
-
- // name_check functions ----------------------------------------------//
-
-# ifdef BOOST_WINDOWS
- BOOST_FILESYSTEM_DECL bool native( const std::string & name )
- {
- return windows_name( name );
- }
-# else
- BOOST_FILESYSTEM_DECL bool native( const std::string & name )
- {
- return name.size() != 0
- && name[0] != ' '
- && name.find('/') == std::string::npos;
- }
-# endif
-
- BOOST_FILESYSTEM_DECL bool portable_posix_name( const std::string & name )
- {
- return name.size() != 0
- && name.find_first_not_of( valid_posix ) == std::string::npos;
- }
-
- BOOST_FILESYSTEM_DECL bool windows_name( const std::string & name )
- {
- return name.size() != 0
- && name[0] != ' '
- && name.find_first_of( windows_invalid_chars ) == std::string::npos
- && *(name.end()-1) != ' '
- && (*(name.end()-1) != '.'
- || name.length() == 1 || name == "..");
- }
-
- BOOST_FILESYSTEM_DECL bool portable_name( const std::string & name )
- {
- return
- name.size() != 0
- && ( name == "."
- || name == ".."
- || (windows_name( name )
- && portable_posix_name( name )
- && name[0] != '.' && name[0] != '-'));
- }
-
- BOOST_FILESYSTEM_DECL bool portable_directory_name( const std::string & name )
- {
- return
- name == "."
- || name == ".."
- || (portable_name( name )
- && name.find('.') == std::string::npos);
- }
-
- BOOST_FILESYSTEM_DECL bool portable_file_name( const std::string & name )
- {
- std::string::size_type pos;
- return
- portable_name( name )
- && name != "."
- && name != ".."
- && ( (pos = name.find( '.' )) == std::string::npos
- || (name.find( '.', pos+1 ) == std::string::npos
- && (pos + 5) > name.length() ))
- ;
- }
-
- } // namespace filesystem2
-} // namespace boost
diff --git a/libs/filesystem/v2/test/Jamfile.v2 b/libs/filesystem/v2/test/Jamfile.v2
deleted file mode 100644
index 2bb8700ebf..0000000000
--- a/libs/filesystem/v2/test/Jamfile.v2
+++ /dev/null
@@ -1,43 +0,0 @@
-# Boost Filesystem Library test Jamfile
-
-# (C) Copyright Beman Dawes 2002-2006
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or www.boost.org/LICENSE_1_0.txt)
-
-project
- : requirements
- <library>/boost/filesystem//boost_filesystem
- <toolset>msvc:<asynch-exceptions>on
- ;
-
- test-suite "filesystem" :
- [ run path_test.cpp
- : : : <link>static
- ]
- [ run path_test.cpp
- : : : : path_test_dll
- ]
- [ run operations_test.cpp
- : : : <link>static
- ]
- [ run operations_test.cpp
- : : : : operations_test_dll
- ]
- [ run fstream_test.cpp
- : : : <link>static
- ]
- [ run convenience_test.cpp
- : : : <link>static
- ]
- [ run large_file_support_test.cpp
- : : : <link>static
- ]
- [ run wide_test.cpp
- : : : <link>static
- ]
-
- [ compile deprecated_test.cpp ]
- [ compile ../example/mbcopy.cpp ]
- [ compile ../example/mbpath.cpp ]
- [ compile ../example/simple_ls.cpp ]
- ;
diff --git a/libs/filesystem/v2/test/convenience_test.cpp b/libs/filesystem/v2/test/convenience_test.cpp
deleted file mode 100644
index aa920547e6..0000000000
--- a/libs/filesystem/v2/test/convenience_test.cpp
+++ /dev/null
@@ -1,176 +0,0 @@
-// libs/filesystem/test/convenience_test.cpp -------------------------------//
-
-// Copyright Beman Dawes, 2002
-// Copyright Vladimir Prus, 2002
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// See library home page at http://www.boost.org/libs/filesystem
-
-#define BOOST_FILESYSTEM_VERSION 2
-
-#include <boost/config/warning_disable.hpp>
-
-// See deprecated_test for tests of deprecated features
-#ifndef BOOST_FILESYSTEM_NO_DEPRECATED
-# define BOOST_FILESYSTEM_NO_DEPRECATED
-#endif
-#ifndef BOOST_SYSTEM_NO_DEPRECATED
-# define BOOST_SYSTEM_NO_DEPRECATED
-#endif
-
-#include <boost/filesystem/convenience.hpp>
-namespace fs = boost::filesystem;
-using fs::path;
-namespace sys = boost::system;
-
-#include <boost/detail/lightweight_test.hpp>
-#include <boost/detail/lightweight_main.hpp>
-
-#include <boost/bind.hpp>
-#include <fstream>
-#include <iostream>
-
-#ifndef BOOST_FILESYSTEM2_NARROW_ONLY
-# define BOOST_FS_IS_EMPTY fs::is_empty
-# define BOOST_BND(BOOST_FUNC_TO_DO) BOOST_FUNC_TO_DO<fs::path>
-#else
-# define BOOST_FS_IS_EMPTY fs::_is_empty
-# define BOOST_BND(BOOST_FUNC_TO_DO) BOOST_FUNC_TO_DO
-#endif
-
-namespace
-{
- template< typename F >
- bool throws_fs_error( F func )
- {
- try { func(); }
-
- catch ( const fs::filesystem_error & )
- {
- return true;
- }
- return false;
- }
-
- void create_recursive_iterator( const fs::path & ph )
- {
- fs::recursive_directory_iterator it( ph );
- }
-}
-
-// --------------------------------------------------------------------------//
-
-int cpp_main( int, char*[] )
-{
-
-// create_directories() tests ----------------------------------------------//
-
- BOOST_TEST( !fs::create_directories( "" ) ); // should be harmless
- BOOST_TEST( !fs::create_directories( "/" ) ); // ditto
-
- fs::remove_all( "xx" ); // make sure slate is blank
- BOOST_TEST( !fs::exists( "xx" ) ); // reality check
-
- BOOST_TEST( fs::create_directories( "xx" ) );
- BOOST_TEST( fs::exists( "xx" ) );
- BOOST_TEST( fs::is_directory( "xx" ) );
-
- BOOST_TEST( fs::create_directories( "xx/yy/zz" ) );
- BOOST_TEST( fs::exists( "xx" ) );
- BOOST_TEST( fs::exists( "xx/yy" ) );
- BOOST_TEST( fs::exists( "xx/yy/zz" ) );
- BOOST_TEST( fs::is_directory( "xx" ) );
- BOOST_TEST( fs::is_directory( "xx/yy" ) );
- BOOST_TEST( fs::is_directory( "xx/yy/zz" ) );
-
- path is_a_file( "xx/uu" );
- {
- std::ofstream f( is_a_file.external_file_string().c_str() );
- BOOST_TEST( !!f );
- }
- BOOST_TEST( throws_fs_error(
- boost::bind( BOOST_BND(fs::create_directories), is_a_file ) ) );
- BOOST_TEST( throws_fs_error(
- boost::bind( BOOST_BND(fs::create_directories), is_a_file / "aa" ) ) );
-
-// recursive_directory_iterator tests ----------------------------------------//
-
- sys::error_code ec;
- fs::recursive_directory_iterator it( "/no-such-path", ec );
- BOOST_TEST( ec );
- BOOST_TEST( throws_fs_error(
- boost::bind( create_recursive_iterator, "/no-such-path" ) ) );
-
- fs::remove( "xx/uu" );
-
-#ifdef BOOST_WINDOWS_API
- // These tests depends on ordering of directory entries, and that's guaranteed
- // on Windows but not necessarily on other operating systems
- {
- std::ofstream f( "xx/yya" );
- BOOST_TEST( !!f );
- }
-
- for ( it = fs::recursive_directory_iterator( "xx" );
- it != fs::recursive_directory_iterator(); ++it )
- { std::cout << it->path() << '\n'; }
-
- it = fs::recursive_directory_iterator( "xx" );
- BOOST_TEST( it->path() == "xx/yy" );
- BOOST_TEST( it.level() == 0 );
- ++it;
- BOOST_TEST( it->path() == "xx/yy/zz" );
- BOOST_TEST( it.level() == 1 );
- it.pop();
- BOOST_TEST( it->path() == "xx/yya" );
- BOOST_TEST( it.level() == 0 );
- it++;
- BOOST_TEST( it == fs::recursive_directory_iterator() );
-
- it = fs::recursive_directory_iterator( "xx" );
- BOOST_TEST( it->path() == "xx/yy" );
- it.no_push();
- ++it;
- BOOST_TEST( it->path() == "xx/yya" );
- ++it;
- BOOST_TEST( it == fs::recursive_directory_iterator() );
-
- fs::remove( "xx/yya" );
-#endif
-
- it = fs::recursive_directory_iterator( "xx/yy/zz" );
- BOOST_TEST( it == fs::recursive_directory_iterator() );
-
- it = fs::recursive_directory_iterator( "xx" );
- BOOST_TEST( it->path() == "xx/yy" );
- BOOST_TEST( it.level() == 0 );
- ++it;
- BOOST_TEST( it->path() == "xx/yy/zz" );
- BOOST_TEST( it.level() == 1 );
- it++;
- BOOST_TEST( it == fs::recursive_directory_iterator() );
-
- it = fs::recursive_directory_iterator( "xx" );
- BOOST_TEST( it->path() == "xx/yy" );
- it.no_push();
- ++it;
- BOOST_TEST( it == fs::recursive_directory_iterator() );
-
- it = fs::recursive_directory_iterator( "xx" );
- BOOST_TEST( it->path() == "xx/yy" );
- ++it;
- it.pop();
- BOOST_TEST( it == fs::recursive_directory_iterator() );
-
-
-
- // nothrow wrong. see imp. Make sure failed basic_directory_iterator
- // ctor creates the end iterator.
-
-
-
-
- return ::boost::report_errors();
-}
diff --git a/libs/filesystem/v2/test/deprecated_test.cpp b/libs/filesystem/v2/test/deprecated_test.cpp
deleted file mode 100644
index 246ffe6713..0000000000
--- a/libs/filesystem/v2/test/deprecated_test.cpp
+++ /dev/null
@@ -1,205 +0,0 @@
-// deprecated_test program --------------------------------------------------//
-
-// Copyright Beman Dawes 2002
-// Copyright Vladimir Prus 2002
-
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// See library home page at http://www.boost.org/libs/filesystem
-
-// This test verifies that various deprecated names still compile. This is
-// important to preserve existing code that uses the old names.
-
-#define BOOST_FILESYSTEM_VERSION 2
-
-#include <boost/filesystem.hpp>
-#include <boost/detail/lightweight_test.hpp>
-#include <boost/detail/lightweight_main.hpp>
-
-namespace fs = boost::filesystem;
-using boost::filesystem::path;
-
-#define PATH_CHECK( a, b ) check( a, b, __LINE__ )
-
-namespace
-{
- std::string platform( BOOST_PLATFORM );
-
- void check( const fs::path & source,
- const std::string & expected, int line )
- {
- if ( source.string()== expected ) return;
-
- ++::boost::detail::test_errors();
-
- std::cout << '(' << line << ") source.string(): \"" << source.string()
- << "\" != expected: \"" << expected
- << "\"" << std::endl;
- }
-
- void check_normalize()
- {
- PATH_CHECK( path("").normalize(), "" );
- PATH_CHECK( path("/").normalize(), "/" );
- PATH_CHECK( path("//").normalize(), "//" );
- PATH_CHECK( path("///").normalize(), "/" );
- PATH_CHECK( path("f").normalize(), "f" );
- PATH_CHECK( path("foo").normalize(), "foo" );
- PATH_CHECK( path("foo/").normalize(), "foo/." );
- PATH_CHECK( path("f/").normalize(), "f/." );
- PATH_CHECK( path( "/foo" ).normalize(), "/foo" );
- PATH_CHECK( path( "foo/bar" ).normalize(), "foo/bar" );
- PATH_CHECK( path("..").normalize(), ".." );
- PATH_CHECK( path("../..").normalize(), "../.." );
- PATH_CHECK( path("/..").normalize(), "/.." );
- PATH_CHECK( path("/../..").normalize(), "/../.." );
- PATH_CHECK( path("../foo").normalize(), "../foo" );
- PATH_CHECK( path("foo/..").normalize(), "." );
- PATH_CHECK( path("foo/../").normalize(), "./." );
- PATH_CHECK( (path("foo") / "..").normalize() , "." );
- PATH_CHECK( path("foo/...").normalize(), "foo/..." );
- PATH_CHECK( path("foo/.../").normalize(), "foo/.../." );
- PATH_CHECK( path("foo/..bar").normalize(), "foo/..bar" );
- PATH_CHECK( path("../f").normalize(), "../f" );
- PATH_CHECK( path("/../f").normalize(), "/../f" );
- PATH_CHECK( path("f/..").normalize(), "." );
- PATH_CHECK( (path("f") / "..").normalize() , "." );
- PATH_CHECK( path("foo/../..").normalize(), ".." );
- PATH_CHECK( path("foo/../../").normalize(), "../." );
- PATH_CHECK( path("foo/../../..").normalize(), "../.." );
- PATH_CHECK( path("foo/../../../").normalize(), "../../." );
- PATH_CHECK( path("foo/../bar").normalize(), "bar" );
- PATH_CHECK( path("foo/../bar/").normalize(), "bar/." );
- PATH_CHECK( path("foo/bar/..").normalize(), "foo" );
- PATH_CHECK( path("foo/bar/../").normalize(), "foo/." );
- PATH_CHECK( path("foo/bar/../..").normalize(), "." );
- PATH_CHECK( path("foo/bar/../../").normalize(), "./." );
- PATH_CHECK( path("foo/bar/../blah").normalize(), "foo/blah" );
- PATH_CHECK( path("f/../b").normalize(), "b" );
- PATH_CHECK( path("f/b/..").normalize(), "f" );
- PATH_CHECK( path("f/b/../").normalize(), "f/." );
- PATH_CHECK( path("f/b/../a").normalize(), "f/a" );
- PATH_CHECK( path("foo/bar/blah/../..").normalize(), "foo" );
- PATH_CHECK( path("foo/bar/blah/../../bletch").normalize(), "foo/bletch" );
- PATH_CHECK( path( "//net" ).normalize(), "//net" );
- PATH_CHECK( path( "//net/" ).normalize(), "//net/" );
- PATH_CHECK( path( "//..net" ).normalize(), "//..net" );
- PATH_CHECK( path( "//net/.." ).normalize(), "//net/.." );
- PATH_CHECK( path( "//net/foo" ).normalize(), "//net/foo" );
- PATH_CHECK( path( "//net/foo/" ).normalize(), "//net/foo/." );
- PATH_CHECK( path( "//net/foo/.." ).normalize(), "//net/" );
- PATH_CHECK( path( "//net/foo/../" ).normalize(), "//net/." );
-
- PATH_CHECK( path( "/net/foo/bar" ).normalize(), "/net/foo/bar" );
- PATH_CHECK( path( "/net/foo/bar/" ).normalize(), "/net/foo/bar/." );
- PATH_CHECK( path( "/net/foo/.." ).normalize(), "/net" );
- PATH_CHECK( path( "/net/foo/../" ).normalize(), "/net/." );
-
- PATH_CHECK( path( "//net//foo//bar" ).normalize(), "//net/foo/bar" );
- PATH_CHECK( path( "//net//foo//bar//" ).normalize(), "//net/foo/bar/." );
- PATH_CHECK( path( "//net//foo//.." ).normalize(), "//net/" );
- PATH_CHECK( path( "//net//foo//..//" ).normalize(), "//net/." );
-
- PATH_CHECK( path( "///net///foo///bar" ).normalize(), "/net/foo/bar" );
- PATH_CHECK( path( "///net///foo///bar///" ).normalize(), "/net/foo/bar/." );
- PATH_CHECK( path( "///net///foo///.." ).normalize(), "/net" );
- PATH_CHECK( path( "///net///foo///..///" ).normalize(), "/net/." );
-
- if ( platform == "Windows" )
- {
- PATH_CHECK( path( "c:.." ).normalize(), "c:.." );
- PATH_CHECK( path( "c:foo/.." ).normalize(), "c:" );
-
- PATH_CHECK( path( "c:foo/../" ).normalize(), "c:." );
-
- PATH_CHECK( path( "c:/foo/.." ).normalize(), "c:/" );
- PATH_CHECK( path( "c:/foo/../" ).normalize(), "c:/." );
- PATH_CHECK( path( "c:/.." ).normalize(), "c:/.." );
- PATH_CHECK( path( "c:/../" ).normalize(), "c:/../." );
- PATH_CHECK( path( "c:/../.." ).normalize(), "c:/../.." );
- PATH_CHECK( path( "c:/../../" ).normalize(), "c:/../../." );
- PATH_CHECK( path( "c:/../foo" ).normalize(), "c:/../foo" );
- PATH_CHECK( path( "c:/../foo/" ).normalize(), "c:/../foo/." );
- PATH_CHECK( path( "c:/../../foo" ).normalize(), "c:/../../foo" );
- PATH_CHECK( path( "c:/../../foo/" ).normalize(), "c:/../../foo/." );
- PATH_CHECK( path( "c:/..foo" ).normalize(), "c:/..foo" );
- }
- else // POSIX
- {
- PATH_CHECK( path( "c:.." ).normalize(), "c:.." );
- PATH_CHECK( path( "c:foo/.." ).normalize(), "." );
- PATH_CHECK( path( "c:foo/../" ).normalize(), "./." );
- PATH_CHECK( path( "c:/foo/.." ).normalize(), "c:" );
- PATH_CHECK( path( "c:/foo/../" ).normalize(), "c:/." );
- PATH_CHECK( path( "c:/.." ).normalize(), "." );
- PATH_CHECK( path( "c:/../" ).normalize(), "./." );
- PATH_CHECK( path( "c:/../.." ).normalize(), ".." );
- PATH_CHECK( path( "c:/../../" ).normalize(), "../." );
- PATH_CHECK( path( "c:/../foo" ).normalize(), "foo" );
- PATH_CHECK( path( "c:/../foo/" ).normalize(), "foo/." );
- PATH_CHECK( path( "c:/../../foo" ).normalize(), "../foo" );
- PATH_CHECK( path( "c:/../../foo/" ).normalize(), "../foo/." );
- PATH_CHECK( path( "c:/..foo" ).normalize(), "c:/..foo" );
- }
- }
-} // unnamed namespace
-
-//----------------------------------------------------------------------------//
-
-int cpp_main( int /*argc*/, char * /*argv*/[] )
-{
- // The choice of platform is make at runtime rather than compile-time
- // so that compile errors for all platforms will be detected even though
- // only the current platform is runtime tested.
- platform = ( platform == "Win32" || platform == "Win64" || platform == "Cygwin" )
- ? "Windows"
- : "POSIX";
- std::cout << "Platform is " << platform << '\n';
-
- path::default_name_check( fs::no_check );
-
- fs::directory_entry de( "foo/bar" );
-
- de.replace_leaf( "", fs::file_status(), fs::file_status() );
-
- de.leaf();
- de.string();
-
- fs::path ng( " no-way, Jose" );
- BOOST_TEST( !fs::is_regular( ng ) ); // verify deprecated name still works
- BOOST_TEST( !fs::symbolic_link_exists( "nosuchfileordirectory" ) );
-
- check_normalize();
-
-// extension() tests ---------------------------------------------------------//
-
- BOOST_TEST( fs::extension("a/b") == "" );
- BOOST_TEST( fs::extension("a/b.txt") == ".txt" );
- BOOST_TEST( fs::extension("a/b.") == "." );
- BOOST_TEST( fs::extension("a.b.c") == ".c" );
- BOOST_TEST( fs::extension("a.b.c.") == "." );
- BOOST_TEST( fs::extension("") == "" );
- BOOST_TEST( fs::extension("a/") == "." );
-
-// basename() tests ----------------------------------------------------------//
-
- BOOST_TEST( fs::basename("b") == "b" );
- BOOST_TEST( fs::basename("a/b.txt") == "b" );
- BOOST_TEST( fs::basename("a/b.") == "b" );
- BOOST_TEST( fs::basename("a.b.c") == "a.b" );
- BOOST_TEST( fs::basename("a.b.c.") == "a.b.c" );
- BOOST_TEST( fs::basename("") == "" );
-
-// change_extension tests ---------------------------------------------------//
-
- BOOST_TEST( fs::change_extension("a.txt", ".tex").string() == "a.tex" );
- BOOST_TEST( fs::change_extension("a.", ".tex").string() == "a.tex" );
- BOOST_TEST( fs::change_extension("a", ".txt").string() == "a.txt" );
- BOOST_TEST( fs::change_extension("a.b.txt", ".tex").string() == "a.b.tex" );
- // see the rationale in html docs for explanation why this works
- BOOST_TEST( fs::change_extension("", ".png").string() == ".png" );
-
- return ::boost::report_errors();
-}
diff --git a/libs/filesystem/v2/test/fstream_test.cpp b/libs/filesystem/v2/test/fstream_test.cpp
deleted file mode 100644
index 331ccd0038..0000000000
--- a/libs/filesystem/v2/test/fstream_test.cpp
+++ /dev/null
@@ -1,184 +0,0 @@
-// fstream_test.cpp --------------------------------------------------------//
-
-// Copyright Beman Dawes 2002.
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// See library home page at http://www.boost.org/libs/filesystem
-
-#define BOOST_FILESYSTEM_VERSION 2
-
-#include <boost/config/warning_disable.hpp>
-
-// See deprecated_test for tests of deprecated features
-#ifndef BOOST_FILESYSTEM_NO_DEPRECATED
-# define BOOST_FILESYSTEM_NO_DEPRECATED
-#endif
-#ifndef BOOST_SYSTEM_NO_DEPRECATED
-# define BOOST_SYSTEM_NO_DEPRECATED
-#endif
-
-#include <boost/filesystem/fstream.hpp>
-#include <boost/filesystem/operations.hpp>
-#include <string>
-#include <iostream>
-#include <cstdio> // for std::remove
-
-#include <boost/filesystem/detail/utf8_codecvt_facet.hpp>
-
-#ifndef BOOST_FILESYSTEM2_NARROW_ONLY
-# include "lpath.hpp"
-#endif
-
-namespace fs = boost::filesystem;
-
-#include <boost/config.hpp>
-#ifdef BOOST_NO_STDC_NAMESPACE
- namespace std { using ::remove; }
-#endif
-
-#include <boost/detail/lightweight_test.hpp>
-#include <boost/detail/lightweight_main.hpp>
-
-namespace
-{
- bool cleanup = true;
-
- template< class Path >
- void test( const Path & p )
- {
- fs::remove( p );
-# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle open
- {
- std::cout << " in test 1\n";
- fs::filebuf fb1;
- fb1.open( p, std::ios_base::out );
- BOOST_TEST( fb1.is_open() );
- }
- {
- std::cout << " in test 2\n";
- fs::filebuf fb2;
- fb2.open( p, std::ios_base::in );
- BOOST_TEST( fb2.is_open() );
- }
-# else
- std::cout << "<note>\n";
- std::cout <<
- "VC++6.0 does not support boost::filesystem open()\n";
-# endif
- {
- std::cout << " in test 3\n";
- fs::ifstream tfs( p );
- BOOST_TEST( tfs.is_open() );
- }
- {
- std::cout << " in test 4\n";
- fs::ifstream tfs( p / p.filename() ); // should fail
- BOOST_TEST( !tfs.is_open() );
- }
- {
- std::cout << " in test 5\n";
- fs::ifstream tfs( p, std::ios_base::in );
- BOOST_TEST( tfs.is_open() );
- }
-# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle open
- {
- std::cout << " in test 6\n";
- fs::ifstream tfs;
- tfs.open( p );
- BOOST_TEST( tfs.is_open() );
- }
- {
- std::cout << " in test 7\n";
- fs::ifstream tfs;
- tfs.open( p, std::ios_base::in );
- BOOST_TEST( tfs.is_open() );
- }
-# endif
- {
- std::cout << " in test 8\n";
- fs::ofstream tfs( p );
- BOOST_TEST( tfs.is_open() );
- }
- {
- std::cout << " in test 9\n";
- fs::ofstream tfs( p, std::ios_base::out );
- BOOST_TEST( tfs.is_open() );
- }
-# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle open
- {
- std::cout << " in test 10\n";
- fs::ofstream tfs;
- tfs.open( p );
- BOOST_TEST( tfs.is_open() );
- }
- {
- std::cout << " in test 11\n";
- fs::ofstream tfs;
- tfs.open( p, std::ios_base::out );
- BOOST_TEST( tfs.is_open() );
- }
-# endif
- {
- std::cout << " in test 12\n";
- fs::fstream tfs( p );
- BOOST_TEST( tfs.is_open() );
- }
- {
- std::cout << " in test 13\n";
- fs::fstream tfs( p, std::ios_base::in|std::ios_base::out );
- BOOST_TEST( tfs.is_open() );
- }
-# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle open
- {
- std::cout << " in test 14\n";
- fs::fstream tfs;
- tfs.open( p );
- BOOST_TEST( tfs.is_open() );
- }
- {
- std::cout << " in test 15\n";
- fs::fstream tfs;
- tfs.open( p, std::ios_base::in|std::ios_base::out );
- BOOST_TEST( tfs.is_open() );
- }
-# endif
-
- if ( cleanup )
- fs::remove( p );
-
- } // test
-} // unnamed namespace
-
-int cpp_main( int argc, char*[] )
-{
- if ( argc > 1 ) cleanup = false;
-
- // test fs::path
- std::cout << "path tests:\n";
- test( fs::path( "v2_fstream_test" ) );
-
-#ifndef BOOST_FILESYSTEM2_NARROW_ONLY
-
- // So that tests are run with known encoding, use Boost UTF-8 codecvt
- std::locale global_loc = std::locale();
- std::locale loc( global_loc, new fs::detail::utf8_codecvt_facet );
- fs::wpath_traits::imbue( loc );
-
- // test fs::wpath
- // x2780 is circled 1 against white background == e2 9e 80 in UTF-8
- // x2781 is circled 2 against white background == e2 9e 81 in UTF-8
- std::cout << "\nwpath tests:\n";
- test( fs::wpath( L"v2_fstream_test_\x2780" ) );
-
- // test user supplied basic_path
- const long lname[] = { 'f', 's', 'r', 'e', 'a', 'm', '_', 't', 'e', 's',
- 't', '_', 'l', 'p', 'a', 't', 'h', 0 };
- std::cout << "\nlpath tests:\n";
- test( user::lpath( lname ) );
-
-#endif
-
- return ::boost::report_errors();
-}
diff --git a/libs/filesystem/v2/test/large_file_support_test.cpp b/libs/filesystem/v2/test/large_file_support_test.cpp
deleted file mode 100644
index 8d20240022..0000000000
--- a/libs/filesystem/v2/test/large_file_support_test.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-// Boost large_file_support_test.cpp ---------------------------------------//
-
-// Copyright Beman Dawes 2004.
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// See library home page at http://www.boost.org/libs/filesystem
-
-#define BOOST_FILESYSTEM_VERSION 2
-
-// See deprecated_test for tests of deprecated features
-#ifndef BOOST_FILESYSTEM_NO_DEPRECATED
-# define BOOST_FILESYSTEM_NO_DEPRECATED
-#endif
-#ifndef BOOST_SYSTEM_NO_DEPRECATED
-# define BOOST_SYSTEM_NO_DEPRECATED
-#endif
-
-#include <boost/filesystem/operations.hpp>
-namespace fs = boost::filesystem;
-
-#include <iostream>
-
-int main()
-{
- if ( fs::detail::possible_large_file_size_support() )
- {
- std::cout << "It appears that file sizes greater that 2 gigabytes are possible\n"
- "for this configuration on this platform since the operating system\n"
- "does use a large enough integer type to report large file sizes.\n\n"
- "Whether or not such support is actually present depends on the OS\n";
- return 0;
- }
- std::cout << "The operating system is using an integer type to report file sizes\n"
- "that can not represent file sizes greater that 2 gigabytes (31-bits).\n"
- "Thus the Filesystem Library will not correctly deal with such large\n"
- "files. If you think that this operatiing system should be able to\n"
- "support large files, please report the problem to the Boost developers\n"
- "mailing list.\n";
- return 1;
-}
diff --git a/libs/filesystem/v2/test/lpath.hpp b/libs/filesystem/v2/test/lpath.hpp
deleted file mode 100644
index 36671fa245..0000000000
--- a/libs/filesystem/v2/test/lpath.hpp
+++ /dev/null
@@ -1,101 +0,0 @@
-// Boost lpath.hpp ---------------------------------------------------------//
-
-// Copyright Beman Dawes 2005
-
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// See library home page at http://www.boost.org/libs/filesystem
-
-#include <boost/filesystem/v2/path.hpp>
-#include <cwchar> // for std::mbstate_t
-#include <string>
-#include <ios> // for std::streamoff
-
-namespace std
-{
- // Note well: this specialization is meant only to support wide_test.cpp.
- // It is not fully functional, fully correct, or efficient.
- template<> struct char_traits<long>
- {
- typedef long char_type;
- typedef long int_type;
- typedef streamoff off_type;
- typedef streampos pos_type;
- typedef mbstate_t state_type;
- static void assign(char_type& c1, const char_type& c2){c1=c2;}
- static bool eq(const char_type& c1, const char_type& c2){return c1==c2;}
- static bool lt(const char_type& c1, const char_type& c2){return c1<c2;}
- static int compare(const char_type* s1, const char_type* s2, size_t n)
- {
- const char_type* e = s1 + n;
- for ( ;s1 != e && *s1 == *s2; ++s1, ++s2 ) {}
- return s1 == e ? 0 : (*s1<*s2 ? -1 : 1);
- }
- static size_t length(const char_type* s)
- { const char_type* b=s; for(;*s!=0L;++s){} return s-b; }
-
- static const char_type* find(const char_type* /*s*/, size_t /*n*/, const char_type& /*a*/)
- { return 0; }
-
- // copy semantics will do for wide_test
- static char_type* move(char_type* s1, const char_type* s2, size_t n)
- { char_type* b=s1; for(const char_type* e=s1+n;s1!=e;++s1,++s2) *s1=*s2; return b; }
-
- static char_type* copy(char_type* s1, const char_type* s2, size_t n)
- { char_type* b=s1; for(const char_type* e=s1+n;s1!=e;++s1,++s2) *s1=*s2; return b; }
-
- static char_type* assign(char_type* s, size_t n, char_type a)
- { char_type* b=s; for(char_type* e=s+n;s!=e;++s) *s=a; return b; }
-
- static int_type not_eof(const int_type& c);
- static char_type to_char_type(const int_type& c);
- static int_type to_int_type(const char_type& c);
- static bool eq_int_type(const int_type& c1, const int_type& c2);
- static int_type eof();
- };
-}
-
-namespace user
-{
- typedef std::basic_string<long> lstring;
- struct lpath_traits;
- typedef boost::filesystem::basic_path<lstring, lpath_traits> lpath;
-
- struct lpath_traits
- {
- typedef lstring internal_string_type;
- typedef std::string external_string_type;
-
- static external_string_type to_external( const lpath &,
- const internal_string_type & src )
- {
- external_string_type tmp;
- for ( internal_string_type::const_iterator it( src.begin() );
- it != src.end(); ++it )
- {
- tmp += static_cast<external_string_type::value_type>(*it);
- }
- return tmp;
- }
-
- static internal_string_type to_internal( const external_string_type & src )
- {
- internal_string_type tmp;
- for ( external_string_type::const_iterator it( src.begin() );
- it != src.end(); ++it ) tmp += *it;
- return tmp;
- }
- };
-
-} // namespace user
-
-namespace boost
-{
- namespace filesystem2
- {
- template<> struct is_basic_path<user::lpath>
- { static const bool value = true; };
- }
-}
diff --git a/libs/filesystem/v2/test/msvc/common.vsprops b/libs/filesystem/v2/test/msvc/common.vsprops
deleted file mode 100644
index 07762e9078..0000000000
--- a/libs/filesystem/v2/test/msvc/common.vsprops
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioPropertySheet
- ProjectType="Visual C++"
- Version="8.00"
- Name="common"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../../../.."
- PreprocessorDefinitions="BOOST_ALL_NO_LIB;BOOST_SYSTEM_DYN_LINK;BOOST_FILESYSTEM_DYN_LINK"
- ExceptionHandling="2"
- WarningLevel="4"
- />
-</VisualStudioPropertySheet>
diff --git a/libs/filesystem/v2/test/msvc/convenience_test/convenience_test.vcproj b/libs/filesystem/v2/test/msvc/convenience_test/convenience_test.vcproj
deleted file mode 100644
index c05d0e861d..0000000000
--- a/libs/filesystem/v2/test/msvc/convenience_test/convenience_test.vcproj
+++ /dev/null
@@ -1,197 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="convenience_test"
- ProjectGUID="{1AA29237-E10E-400B-8A30-4DA67FFB648C}"
- RootNamespace="convenience_test"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot; --result_code=no --report_level=no"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot; --result_code=no --report_level=no"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\convenience_test.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v2/test/msvc/deprecated_test/deprecated_test.vcproj b/libs/filesystem/v2/test/msvc/deprecated_test/deprecated_test.vcproj
deleted file mode 100644
index 2a46cb4e2d..0000000000
--- a/libs/filesystem/v2/test/msvc/deprecated_test/deprecated_test.vcproj
+++ /dev/null
@@ -1,197 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="deprecated_test"
- ProjectGUID="{EA1530CD-7058-4912-8B51-8D55A07F0A1D}"
- RootNamespace="deprecated_test"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot; --result_code=no --report_level=no"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot; --result_code=no --report_level=no"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\deprecated_test.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v2/test/msvc/filesystem-v2.sln b/libs/filesystem/v2/test/msvc/filesystem-v2.sln
deleted file mode 100644
index 7b731dc055..0000000000
--- a/libs/filesystem/v2/test/msvc/filesystem-v2.sln
+++ /dev/null
@@ -1,119 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 10.00
-# Visual C++ Express 2008
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "filesystem_dll", "filesystem_dll\filesystem_dll.vcproj", "{F31C02C7-63A4-489C-A176-695D68E5BCA4}"
- ProjectSection(ProjectDependencies) = postProject
- {15371D22-F930-4286-9126-C3516E78CB09} = {15371D22-F930-4286-9126-C3516E78CB09}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "operations_test", "operations_test\operations_test.vcproj", "{9C8BACE4-BCA5-479C-801C-AB903DE931D1}"
- ProjectSection(ProjectDependencies) = postProject
- {15371D22-F930-4286-9126-C3516E78CB09} = {15371D22-F930-4286-9126-C3516E78CB09}
- {F31C02C7-63A4-489C-A176-695D68E5BCA4} = {F31C02C7-63A4-489C-A176-695D68E5BCA4}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "system_dll", "system_dll\system_dll.vcproj", "{15371D22-F930-4286-9126-C3516E78CB09}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "path_test", "path_test\path_test.vcproj", "{EAB6925F-DB89-4759-BC8E-6F1AB3176393}"
- ProjectSection(ProjectDependencies) = postProject
- {15371D22-F930-4286-9126-C3516E78CB09} = {15371D22-F930-4286-9126-C3516E78CB09}
- {F31C02C7-63A4-489C-A176-695D68E5BCA4} = {F31C02C7-63A4-489C-A176-695D68E5BCA4}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fstream_test", "fstream_test\fstream_test.vcproj", "{F80D96CE-07DC-48DF-85FD-399A7266E457}"
- ProjectSection(ProjectDependencies) = postProject
- {15371D22-F930-4286-9126-C3516E78CB09} = {15371D22-F930-4286-9126-C3516E78CB09}
- {F31C02C7-63A4-489C-A176-695D68E5BCA4} = {F31C02C7-63A4-489C-A176-695D68E5BCA4}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "convenience_test", "convenience_test\convenience_test.vcproj", "{1AA29237-E10E-400B-8A30-4DA67FFB648C}"
- ProjectSection(ProjectDependencies) = postProject
- {15371D22-F930-4286-9126-C3516E78CB09} = {15371D22-F930-4286-9126-C3516E78CB09}
- {F31C02C7-63A4-489C-A176-695D68E5BCA4} = {F31C02C7-63A4-489C-A176-695D68E5BCA4}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wide_test", "wide_test\wide_test.vcproj", "{124C635E-ABDE-4DA7-BECB-3E3AD16CDDF6}"
- ProjectSection(ProjectDependencies) = postProject
- {15371D22-F930-4286-9126-C3516E78CB09} = {15371D22-F930-4286-9126-C3516E78CB09}
- {F31C02C7-63A4-489C-A176-695D68E5BCA4} = {F31C02C7-63A4-489C-A176-695D68E5BCA4}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simple_ls", "simple_ls\simple_ls.vcproj", "{FE2BA1DC-82B5-4B4A-8E5C-A1C2AE0C6EF0}"
- ProjectSection(ProjectDependencies) = postProject
- {15371D22-F930-4286-9126-C3516E78CB09} = {15371D22-F930-4286-9126-C3516E78CB09}
- {F31C02C7-63A4-489C-A176-695D68E5BCA4} = {F31C02C7-63A4-489C-A176-695D68E5BCA4}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mbcopy", "mbcopy\mbcopy.vcproj", "{80712DDD-CA0F-4177-AD0F-1392BB497902}"
- ProjectSection(ProjectDependencies) = postProject
- {15371D22-F930-4286-9126-C3516E78CB09} = {15371D22-F930-4286-9126-C3516E78CB09}
- {F31C02C7-63A4-489C-A176-695D68E5BCA4} = {F31C02C7-63A4-489C-A176-695D68E5BCA4}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "large_file_support_test", "large_file_support_test\large_file_support_test.vcproj", "{49414D8C-BE1D-4C70-8E6B-7F2D3F5B18B0}"
- ProjectSection(ProjectDependencies) = postProject
- {15371D22-F930-4286-9126-C3516E78CB09} = {15371D22-F930-4286-9126-C3516E78CB09}
- {F31C02C7-63A4-489C-A176-695D68E5BCA4} = {F31C02C7-63A4-489C-A176-695D68E5BCA4}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "deprecated_test", "deprecated_test\deprecated_test.vcproj", "{EA1530CD-7058-4912-8B51-8D55A07F0A1D}"
- ProjectSection(ProjectDependencies) = postProject
- {15371D22-F930-4286-9126-C3516E78CB09} = {15371D22-F930-4286-9126-C3516E78CB09}
- {F31C02C7-63A4-489C-A176-695D68E5BCA4} = {F31C02C7-63A4-489C-A176-695D68E5BCA4}
- EndProjectSection
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Release|Win32 = Release|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {F31C02C7-63A4-489C-A176-695D68E5BCA4}.Debug|Win32.ActiveCfg = Debug|Win32
- {F31C02C7-63A4-489C-A176-695D68E5BCA4}.Debug|Win32.Build.0 = Debug|Win32
- {F31C02C7-63A4-489C-A176-695D68E5BCA4}.Release|Win32.ActiveCfg = Release|Win32
- {F31C02C7-63A4-489C-A176-695D68E5BCA4}.Release|Win32.Build.0 = Release|Win32
- {9C8BACE4-BCA5-479C-801C-AB903DE931D1}.Debug|Win32.ActiveCfg = Debug|Win32
- {9C8BACE4-BCA5-479C-801C-AB903DE931D1}.Debug|Win32.Build.0 = Debug|Win32
- {9C8BACE4-BCA5-479C-801C-AB903DE931D1}.Release|Win32.ActiveCfg = Release|Win32
- {9C8BACE4-BCA5-479C-801C-AB903DE931D1}.Release|Win32.Build.0 = Release|Win32
- {15371D22-F930-4286-9126-C3516E78CB09}.Debug|Win32.ActiveCfg = Debug|Win32
- {15371D22-F930-4286-9126-C3516E78CB09}.Debug|Win32.Build.0 = Debug|Win32
- {15371D22-F930-4286-9126-C3516E78CB09}.Release|Win32.ActiveCfg = Release|Win32
- {15371D22-F930-4286-9126-C3516E78CB09}.Release|Win32.Build.0 = Release|Win32
- {EAB6925F-DB89-4759-BC8E-6F1AB3176393}.Debug|Win32.ActiveCfg = Debug|Win32
- {EAB6925F-DB89-4759-BC8E-6F1AB3176393}.Debug|Win32.Build.0 = Debug|Win32
- {EAB6925F-DB89-4759-BC8E-6F1AB3176393}.Release|Win32.ActiveCfg = Release|Win32
- {EAB6925F-DB89-4759-BC8E-6F1AB3176393}.Release|Win32.Build.0 = Release|Win32
- {F80D96CE-07DC-48DF-85FD-399A7266E457}.Debug|Win32.ActiveCfg = Debug|Win32
- {F80D96CE-07DC-48DF-85FD-399A7266E457}.Debug|Win32.Build.0 = Debug|Win32
- {F80D96CE-07DC-48DF-85FD-399A7266E457}.Release|Win32.ActiveCfg = Release|Win32
- {F80D96CE-07DC-48DF-85FD-399A7266E457}.Release|Win32.Build.0 = Release|Win32
- {1AA29237-E10E-400B-8A30-4DA67FFB648C}.Debug|Win32.ActiveCfg = Debug|Win32
- {1AA29237-E10E-400B-8A30-4DA67FFB648C}.Debug|Win32.Build.0 = Debug|Win32
- {1AA29237-E10E-400B-8A30-4DA67FFB648C}.Release|Win32.ActiveCfg = Release|Win32
- {1AA29237-E10E-400B-8A30-4DA67FFB648C}.Release|Win32.Build.0 = Release|Win32
- {124C635E-ABDE-4DA7-BECB-3E3AD16CDDF6}.Debug|Win32.ActiveCfg = Debug|Win32
- {124C635E-ABDE-4DA7-BECB-3E3AD16CDDF6}.Debug|Win32.Build.0 = Debug|Win32
- {124C635E-ABDE-4DA7-BECB-3E3AD16CDDF6}.Release|Win32.ActiveCfg = Release|Win32
- {124C635E-ABDE-4DA7-BECB-3E3AD16CDDF6}.Release|Win32.Build.0 = Release|Win32
- {FE2BA1DC-82B5-4B4A-8E5C-A1C2AE0C6EF0}.Debug|Win32.ActiveCfg = Debug|Win32
- {FE2BA1DC-82B5-4B4A-8E5C-A1C2AE0C6EF0}.Debug|Win32.Build.0 = Debug|Win32
- {FE2BA1DC-82B5-4B4A-8E5C-A1C2AE0C6EF0}.Release|Win32.ActiveCfg = Release|Win32
- {FE2BA1DC-82B5-4B4A-8E5C-A1C2AE0C6EF0}.Release|Win32.Build.0 = Release|Win32
- {80712DDD-CA0F-4177-AD0F-1392BB497902}.Debug|Win32.ActiveCfg = Debug|Win32
- {80712DDD-CA0F-4177-AD0F-1392BB497902}.Debug|Win32.Build.0 = Debug|Win32
- {80712DDD-CA0F-4177-AD0F-1392BB497902}.Release|Win32.ActiveCfg = Release|Win32
- {80712DDD-CA0F-4177-AD0F-1392BB497902}.Release|Win32.Build.0 = Release|Win32
- {49414D8C-BE1D-4C70-8E6B-7F2D3F5B18B0}.Debug|Win32.ActiveCfg = Debug|Win32
- {49414D8C-BE1D-4C70-8E6B-7F2D3F5B18B0}.Debug|Win32.Build.0 = Debug|Win32
- {49414D8C-BE1D-4C70-8E6B-7F2D3F5B18B0}.Release|Win32.ActiveCfg = Release|Win32
- {49414D8C-BE1D-4C70-8E6B-7F2D3F5B18B0}.Release|Win32.Build.0 = Release|Win32
- {EA1530CD-7058-4912-8B51-8D55A07F0A1D}.Debug|Win32.ActiveCfg = Debug|Win32
- {EA1530CD-7058-4912-8B51-8D55A07F0A1D}.Debug|Win32.Build.0 = Debug|Win32
- {EA1530CD-7058-4912-8B51-8D55A07F0A1D}.Release|Win32.ActiveCfg = Release|Win32
- {EA1530CD-7058-4912-8B51-8D55A07F0A1D}.Release|Win32.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/libs/filesystem/v2/test/msvc/filesystem_dll/filesystem_dll.vcproj b/libs/filesystem/v2/test/msvc/filesystem_dll/filesystem_dll.vcproj
deleted file mode 100644
index 39ab3c0c2a..0000000000
--- a/libs/filesystem/v2/test/msvc/filesystem_dll/filesystem_dll.vcproj
+++ /dev/null
@@ -1,207 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="filesystem_dll"
- ProjectGUID="{F31C02C7-63A4-489C-A176-695D68E5BCA4}"
- RootNamespace="filesystem_dll"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="2"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;FILESYSTEM_DLL_EXPORTS"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DefaultCharIsUnsigned="false"
- UsePrecompiledHeader="0"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="2"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;FILESYSTEM_DLL_EXPORTS"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\..\..\v3\src\utf8_codecvt_facet.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\v2_operations.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\v2_path.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\v2_portability.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v2/test/msvc/fstream_test/fstream_test.vcproj b/libs/filesystem/v2/test/msvc/fstream_test/fstream_test.vcproj
deleted file mode 100644
index d2aff8bf8d..0000000000
--- a/libs/filesystem/v2/test/msvc/fstream_test/fstream_test.vcproj
+++ /dev/null
@@ -1,199 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="fstream_test"
- ProjectGUID="{F80D96CE-07DC-48DF-85FD-399A7266E457}"
- RootNamespace="fstream_test"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot; --result_code=no --report_level=no"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot; --result_code=no --report_level=no"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\fstream_test.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v2/test/msvc/large_file_support_test/large_file_support_test.vcproj b/libs/filesystem/v2/test/msvc/large_file_support_test/large_file_support_test.vcproj
deleted file mode 100644
index 2c3202b7df..0000000000
--- a/libs/filesystem/v2/test/msvc/large_file_support_test/large_file_support_test.vcproj
+++ /dev/null
@@ -1,199 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="large_file_support_test"
- ProjectGUID="{49414D8C-BE1D-4C70-8E6B-7F2D3F5B18B0}"
- RootNamespace="large_file_support_test"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot; --result_code=no --report_level=no"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot; --result_code=no --report_level=no"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\large_file_support_test.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v2/test/msvc/mbcopy/mbcopy.vcproj b/libs/filesystem/v2/test/msvc/mbcopy/mbcopy.vcproj
deleted file mode 100644
index 0e22c0e752..0000000000
--- a/libs/filesystem/v2/test/msvc/mbcopy/mbcopy.vcproj
+++ /dev/null
@@ -1,199 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="mbcopy"
- ProjectGUID="{80712DDD-CA0F-4177-AD0F-1392BB497902}"
- RootNamespace="mbcopy"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine=""
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine=""
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\..\example\mbcopy.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\example\mbpath.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v2/test/msvc/mbpath/mbpath.vcproj b/libs/filesystem/v2/test/msvc/mbpath/mbpath.vcproj
deleted file mode 100644
index 4748370193..0000000000
--- a/libs/filesystem/v2/test/msvc/mbpath/mbpath.vcproj
+++ /dev/null
@@ -1,195 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="mbpath"
- ProjectGUID="{B81C9F3C-AAF4-480B-A194-D60D011AC1AF}"
- RootNamespace="mbpath"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\..\example\mbpath.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v2/test/msvc/operations_test/operations_test.vcproj b/libs/filesystem/v2/test/msvc/operations_test/operations_test.vcproj
deleted file mode 100644
index ed099e9f58..0000000000
--- a/libs/filesystem/v2/test/msvc/operations_test/operations_test.vcproj
+++ /dev/null
@@ -1,197 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="operations_test"
- ProjectGUID="{9C8BACE4-BCA5-479C-801C-AB903DE931D1}"
- RootNamespace="operations_test"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot; --result_code=no --report_level=no"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot; --result_code=no --report_level=no"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\operations_test.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v2/test/msvc/path_test/path_test.vcproj b/libs/filesystem/v2/test/msvc/path_test/path_test.vcproj
deleted file mode 100644
index ffe4342b8e..0000000000
--- a/libs/filesystem/v2/test/msvc/path_test/path_test.vcproj
+++ /dev/null
@@ -1,197 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="path_test"
- ProjectGUID="{EAB6925F-DB89-4759-BC8E-6F1AB3176393}"
- RootNamespace="path_test"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot; --result_code=no --report_level=no"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot; --result_code=no --report_level=no"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\path_test.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v2/test/msvc/simple_ls/simple_ls.vcproj b/libs/filesystem/v2/test/msvc/simple_ls/simple_ls.vcproj
deleted file mode 100644
index 19f98ff794..0000000000
--- a/libs/filesystem/v2/test/msvc/simple_ls/simple_ls.vcproj
+++ /dev/null
@@ -1,195 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="simple_ls"
- ProjectGUID="{FE2BA1DC-82B5-4B4A-8E5C-A1C2AE0C6EF0}"
- RootNamespace="simple_ls"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine=""
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine=""
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\..\example\simple_ls.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v2/test/msvc/system_dll/system_dll.vcproj b/libs/filesystem/v2/test/msvc/system_dll/system_dll.vcproj
deleted file mode 100644
index 7a5ccdeb68..0000000000
--- a/libs/filesystem/v2/test/msvc/system_dll/system_dll.vcproj
+++ /dev/null
@@ -1,193 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="system_dll"
- ProjectGUID="{15371D22-F930-4286-9126-C3516E78CB09}"
- RootNamespace="system_dll"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="2"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SYSTEM_DLL_EXPORTS"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="2"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SYSTEM_DLL_EXPORTS"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\..\..\..\system\src\error_code.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v2/test/msvc/wide_test/wide_test.vcproj b/libs/filesystem/v2/test/msvc/wide_test/wide_test.vcproj
deleted file mode 100644
index dd87db7894..0000000000
--- a/libs/filesystem/v2/test/msvc/wide_test/wide_test.vcproj
+++ /dev/null
@@ -1,198 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="wide_test"
- ProjectGUID="{124C635E-ABDE-4DA7-BECB-3E3AD16CDDF6}"
- RootNamespace="wide_test"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DefaultCharIsUnsigned="false"
- UsePrecompiledHeader="0"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot; --result_code=no --report_level=no"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot; --result_code=no --report_level=no"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\wide_test.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v2/test/operations_test.cpp b/libs/filesystem/v2/test/operations_test.cpp
deleted file mode 100644
index c61f8b249f..0000000000
--- a/libs/filesystem/v2/test/operations_test.cpp
+++ /dev/null
@@ -1,953 +0,0 @@
-// Boost operations_test.cpp -----------------------------------------------//
-
-// Copyright Beman Dawes 2002.
-
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-// See library home page at http://www.boost.org/libs/filesystem
-
-#define BOOST_FILESYSTEM_VERSION 2
-
-#include <boost/config/warning_disable.hpp>
-
-// See deprecated_test for tests of deprecated features
-#ifndef BOOST_FILESYSTEM_NO_DEPRECATED
-# define BOOST_FILESYSTEM_NO_DEPRECATED
-#endif
-#ifndef BOOST_SYSTEM_NO_DEPRECATED
-# define BOOST_SYSTEM_NO_DEPRECATED
-#endif
-
-#include <boost/filesystem/operations.hpp>
-#include <boost/filesystem/convenience.hpp>
-#include <boost/cerrno.hpp>
-namespace fs = boost::filesystem;
-
-#include <boost/config.hpp>
-#include <boost/detail/lightweight_test.hpp>
-#include <boost/detail/lightweight_main.hpp>
-
-using boost::system::error_code;
-using boost::system::system_category;
-using boost::system::system_error;
-
-#include <fstream>
-#include <iostream>
-#include <string>
-#include <cstring> // for strncmp, etc.
-#include <ctime>
-#include <cstdlib> // for system()
-
-#ifndef BOOST_FILESYSTEM2_NARROW_ONLY
-# define BOOST_BND(BOOST_FUNC_TO_DO) BOOST_FUNC_TO_DO<fs::path>
-#else
-# define BOOST_BND(BOOST_FUNC_TO_DO) BOOST_FUNC_TO_DO
-#endif
-
-// VC++ 7.0 and earlier has a serious namespace bug that causes a clash
-// between boost::filesystem::is_empty and the unrelated type trait
-// boost::is_empty.
-#if !defined( BOOST_MSVC ) || BOOST_MSVC > 1300
-# define BOOST_FS_IS_EMPTY fs::is_empty
-#else
-# define BOOST_FS_IS_EMPTY fs::_is_empty
-#endif
-
-# ifdef BOOST_NO_STDC_NAMESPACE
- namespace std { using ::asctime; using ::gmtime; using ::localtime;
- using ::difftime; using ::time; using ::tm; using ::mktime; using ::system; }
-# endif
-
-#ifdef BOOST_WINDOWS_API
-# include <windows.h>
-#endif
-
-#define CHECK_EXCEPTION(Functor,Expect) throws_fs_error(Functor,Expect,__LINE__)
-
-namespace
-{
- typedef int errno_t;
- std::string platform( BOOST_PLATFORM );
- bool report_throws;
- fs::directory_iterator end_itr;
-
- unsigned short language_id; // 0 except for Windows
-
- const char * temp_dir_name = "v2_operations_test";
-
- void create_file( const fs::path & ph, const std::string & contents )
- {
- std::ofstream f( ph.file_string().c_str() );
- if ( !f )
- BOOST_FILESYSTEM_THROW( fs::filesystem_error( "operations_test create_file",
- ph, error_code(errno, system_category()) ) );
- if ( !contents.empty() ) f << contents;
- }
-
- void verify_file( const fs::path & ph, const std::string & expected )
- {
- std::ifstream f( ph.file_string().c_str() );
- if ( !f )
- BOOST_FILESYSTEM_THROW( fs::filesystem_error( "operations_test verify_file",
- ph, error_code(errno, system_category()) ) );
- std::string contents;
- f >> contents;
- if ( contents != expected )
- BOOST_FILESYSTEM_THROW( fs::filesystem_error( "operations_test verify_file contents \""
- + contents + "\" != \"" + expected + "\"", ph, error_code() ) );
- }
-
- template< typename F >
- bool throws_fs_error( F func, errno_t en, int line )
- {
- try { func(); }
-
- catch ( const fs::filesystem_error & ex )
- {
- if ( report_throws )
- {
- // use the what() convenience function to display exceptions
- std::cout << "\n" << ex.what() << "\n";
- }
- if ( en == 0
- || en == ex.code().default_error_condition().value() ) return true;
- std::cout
- << "\nWarning: line " << line
- << " exception reports default_error_condition().value() " << ex.code().default_error_condition().value()
- << ", should be " << en
- << "\n value() is " << ex.code().value()
- << std::endl;
- return true;
- }
- return false;
- }
-
- // compile-only two argument "do-the-right-thing" tests
- // verifies that all overload combinations compile without error
- void do_not_call()
- {
- fs::path p;
- std::string s;
- const char * a = 0;
- fs::copy_file( p, p );
- fs::copy_file( s, p );
- fs::copy_file( a, p );
- fs::copy_file( p, s );
- fs::copy_file( p, a );
- fs::copy_file( s, s );
- fs::copy_file( a, s );
- fs::copy_file( s, a );
- fs::copy_file( a, a );
- }
-
- void exception_tests()
- {
- bool exception_thrown;
- exception_thrown = false;
- try
- {
- fs::create_directory( "no-such-dir/foo/bar" );
- }
- catch ( std::runtime_error x )
- {
- exception_thrown = true;
- if ( report_throws ) std::cout << x.what() << std::endl;
- if ( platform == "Windows" && language_id == 0x0409 ) // English (United States)
- // the stdcxx standard library apparently appends additional info
- // to what(), so check only the initial portion:
- BOOST_TEST( std::strncmp( x.what(),
- "boost::filesystem::create_directory",
- sizeof("boost::filesystem::create_directory")-1 ) == 0 );
- }
- BOOST_TEST( exception_thrown );
-
- exception_thrown = false;
- try
- {
- fs::create_directory( "no-such-dir/foo/bar" );
- }
- catch ( system_error x )
- {
- exception_thrown = true;
- if ( report_throws ) std::cout << x.what() << std::endl;
- if ( platform == "Windows" && language_id == 0x0409 ) // English (United States)
- BOOST_TEST( std::strcmp( x.what(),
- "boost::filesystem::create_directory: The system cannot find the path specified" ) == 0 );
- }
- BOOST_TEST( exception_thrown );
-
- exception_thrown = false;
- try
- {
- fs::create_directory( "no-such-dir/foo/bar" );
- }
- catch ( fs::filesystem_error x )
- {
- exception_thrown = true;
- if ( report_throws ) std::cout << x.what() << std::endl;
- if ( platform == "Windows" && language_id == 0x0409 ) // English (United States)
- {
- bool ok ( std::strcmp( x.what(),
- "boost::filesystem::create_directory: The system cannot find the path specified: \"no-such-dir\\foo\\bar\"" ) == 0 );
- BOOST_TEST( ok );
- if ( !ok )
- {
- std::cout << "what returns \"" << x.what() << "\"" << std::endl;
- }
- }
- }
- BOOST_TEST( exception_thrown );
-
- exception_thrown = false;
- try
- {
- fs::create_directory( "no-such-dir/foo/bar" );
- }
- catch ( const fs::filesystem_error & x )
- {
- exception_thrown = true;
- if ( report_throws ) std::cout << x.what() << std::endl;
- if ( platform == "Windows" && language_id == 0x0409 ) // English (United States)
- {
- bool ok ( std::strcmp( x.what(),
- "boost::filesystem::create_directory: The system cannot find the path specified: \"no-such-dir\\foo\\bar\"" ) == 0 );
- BOOST_TEST( ok );
- if ( !ok )
- {
- std::cout << "what returns \"" << x.what() << "\"" << std::endl;
- }
- }
- }
- BOOST_TEST( exception_thrown );
- }
-
- void bad_file_size()
- {
- fs::file_size( " No way, Jose" );
- }
-
- void bad_directory_size()
- {
- fs::file_size( fs::current_path<fs::path>() );
- }
-
- fs::path bad_create_directory_path;
- void bad_create_directory()
- {
- fs::create_directory( bad_create_directory_path );
- }
-
- void bad_equivalent()
- {
- fs::equivalent( "no-such-path", "another-not-present-path" );
- }
-
- fs::path bad_remove_dir;
- void bad_remove()
- {
- fs::remove( bad_remove_dir );
- }
-
- class renamer
- {
- public:
- renamer( const fs::path & p1, const fs::path & p2 )
- : from(p1), to(p2) {}
- void operator()()
- {
- fs::rename( from, to );
- }
- private:
- fs::path from;
- fs::path to;
- };
-
-} // unnamed namespace
-
-// main ------------------------------------------------------------------------------//
-
-int cpp_main( int argc, char * argv[] )
-{
- if ( argc > 1 && *argv[1]=='-' && *(argv[1]+1)=='t' ) report_throws = true;
-
- // The choice of platform is make at runtime rather than compile-time
- // so that compile errors for all platforms will be detected even though
- // only the current platform is runtime tested.
-# if defined( BOOST_POSIX_API )
- platform = "POSIX";
-# elif defined( BOOST_WINDOWS_API )
- platform = "Windows";
-# if !defined(__MINGW32__) && !defined(__CYGWIN__)
- language_id = ::GetUserDefaultUILanguage();
-# else
- language_id = 0x0409; // Assume US English
-# endif
-# else
-# error API should always be defined. Something is wrong with boost/system/api_config.hpp
-# endif
- std::cout << "API is " << platform << std::endl;
-
- exception_tests();
-
- std::cout << "\ninitial_path<path>().string() is\n \""
- << fs::initial_path<fs::path>().string()
- << "\"\n";
- std::cout << "\ninitial_path<fs::path>().file_string() is\n \""
- << fs::initial_path<fs::path>().file_string()
- << "\"\n\n";
- BOOST_TEST( fs::initial_path<fs::path>().is_complete() );
- BOOST_TEST( fs::current_path<fs::path>().is_complete() );
- BOOST_TEST( fs::initial_path<fs::path>().string()
- == fs::current_path<fs::path>().string() );
-
- BOOST_TEST( fs::complete( "" ).empty() );
- BOOST_TEST( fs::complete( "/" ).string() == fs::initial_path<fs::path>().root_path().string() );
- BOOST_TEST( fs::complete( "foo" ).string() == fs::initial_path<fs::path>().string()+"/foo" );
- BOOST_TEST( fs::complete( "/foo" ).string() == fs::initial_path<fs::path>().root_path().string()+"foo" );
- BOOST_TEST( fs::complete( "foo", fs::path( "//net/bar" ) ).string()
- == "//net/bar/foo" );
-
- // predicate and status tests
- BOOST_TEST( fs::exists( "/" ) );
- fs::path ng( " no-way, Jose" );
- BOOST_TEST( !fs::exists( ng ) );
- BOOST_TEST( !fs::is_directory( ng ) );
- BOOST_TEST( !fs::is_regular_file( ng ) );
- BOOST_TEST( !fs::is_symlink( ng ) );
- fs::file_status stat( fs::status( ng ) );
- BOOST_TEST( fs::status_known( stat ) );
- BOOST_TEST( !fs::exists( stat ) );
- BOOST_TEST( !fs::is_directory( stat ) );
- BOOST_TEST( !fs::is_regular_file( stat ) );
- BOOST_TEST( !fs::is_other( stat ) );
- BOOST_TEST( !fs::is_symlink( stat ) );
- stat = fs::status( "" );
- BOOST_TEST( fs::status_known( stat ) );
- BOOST_TEST( !fs::exists( stat ) );
- BOOST_TEST( !fs::is_directory( stat ) );
- BOOST_TEST( !fs::is_regular_file( stat ) );
- BOOST_TEST( !fs::is_other( stat ) );
- BOOST_TEST( !fs::is_symlink( stat ) );
-
- fs::path dir( fs::initial_path<fs::path>() / temp_dir_name );
-
- if ( fs::exists( dir ) )
- fs::remove_all( dir ); // remove residue from prior failed tests
- BOOST_TEST( !fs::exists( dir ) );
-
- // create a directory, then check it for consistency
- // take extra care to report problems, since if this fails
- // many subsequent tests will fail
- try
- {
- fs::create_directory( dir );
- }
-
- catch ( const fs::filesystem_error & x )
- {
- std::cout << x.what() << "\n\n"
- "***** Creating directory " << dir.string() << " failed. *****\n"
- "***** This is a serious error that will prevent further tests *****\n"
- "***** from returning useful results. Further testing is aborted. *****\n\n";
- return 1;
- }
-
- catch ( ... )
- {
- std::cout << "\n\n"
- "***** Creating directory " << dir.string() << " failed. *****\n"
- "***** This is a serious error that will prevent further tests *****\n"
- "***** from returning useful results. Further testing is aborted. *****\n\n";
- return 1;
- }
-
- BOOST_TEST( fs::exists( dir ) );
- BOOST_TEST( BOOST_FS_IS_EMPTY( dir ) );
- BOOST_TEST( fs::is_directory( dir ) );
- BOOST_TEST( !fs::is_regular_file( dir ) );
- BOOST_TEST( !fs::is_other( dir ) );
- BOOST_TEST( !fs::is_symlink( dir ) );
- stat = fs::status( dir );
- BOOST_TEST( fs::exists( stat ) );
- BOOST_TEST( fs::is_directory( stat ) );
- BOOST_TEST( !fs::is_regular_file( stat ) );
- BOOST_TEST( !fs::is_other( stat ) );
- BOOST_TEST( !fs::is_symlink( stat ) );
-
- // Windows only tests
- if ( platform == "Windows" )
- {
- BOOST_TEST( !fs::exists( fs::path( "//share-not" ) ) );
- BOOST_TEST( !fs::exists( fs::path( "//share-not/" ) ) );
- BOOST_TEST( !fs::exists( fs::path( "//share-not/foo" ) ) );
- BOOST_TEST( !fs::exists( "tools/jam/src/:sys:stat.h" ) ); // !exists() if ERROR_INVALID_NAME
- BOOST_TEST( !fs::exists( ":sys:stat.h" ) ); // !exists() if ERROR_INVALID_PARAMETER
- BOOST_TEST( !fs::exists( "1:/" ) );
- BOOST_TEST( dir.string().size() > 1
- && dir.string()[1] == ':' ); // verify path includes drive
-
- BOOST_TEST( fs::system_complete( "" ).empty() );
- BOOST_TEST( fs::system_complete( "/" ).string()
- == fs::initial_path<fs::path>().root_path().string() );
- BOOST_TEST( fs::system_complete( "foo" ).string()
- == fs::initial_path<fs::path>().string()+"/foo" );
- BOOST_TEST( fs::system_complete( "/foo" ).string()
- == fs::initial_path<fs::path>().root_path().string()+"foo" );
- BOOST_TEST( fs::complete( fs::path( "c:/" ) ).string()
- == "c:/" );
- BOOST_TEST( fs::complete( fs::path( "c:/foo" ) ).string()
- == "c:/foo" );
-
- BOOST_TEST( fs::system_complete( fs::path( fs::initial_path<fs::path>().root_name() ) ).string() == fs::initial_path<fs::path>().string() );
- BOOST_TEST( fs::system_complete( fs::path( fs::initial_path<fs::path>().root_name()
- + "foo" ) ).string() == fs::initial_path<fs::path>().string()+"/foo" );
- BOOST_TEST( fs::system_complete( fs::path( "c:/" ) ).string()
- == "c:/" );
- BOOST_TEST( fs::system_complete( fs::path( "c:/foo" ) ).string()
- == "c:/foo" );
- BOOST_TEST( fs::system_complete( fs::path( "//share" ) ).string()
- == "//share" );
- } // Windows
-
- else if ( platform == "POSIX" )
- {
- BOOST_TEST( fs::system_complete( "" ).empty() );
- BOOST_TEST( fs::initial_path<fs::path>().root_path().string() == "/" );
- BOOST_TEST( fs::system_complete( "/" ).string() == "/" );
- BOOST_TEST( fs::system_complete( "foo" ).string()
- == fs::initial_path<fs::path>().string()+"/foo" );
- BOOST_TEST( fs::system_complete( "/foo" ).string()
- == fs::initial_path<fs::path>().root_path().string()+"foo" );
- } // POSIX
-
- // the bound functions should throw, so CHECK_EXCEPTION() should return true
- BOOST_TEST( CHECK_EXCEPTION( bad_file_size, ENOENT ) );
-
- // test path::exception members
- try { fs::file_size( ng ); } // will throw
-
- catch ( const fs::filesystem_error & ex )
- {
- BOOST_TEST( ex.path1().string() == " no-way, Jose" );
- }
- // several functions give unreasonable results if uintmax_t isn't 64-bits
- std::cout << "sizeof(boost::uintmax_t) = " << sizeof(boost::uintmax_t) << '\n';
- BOOST_TEST( sizeof( boost::uintmax_t ) >= 8 );
-
- // set the current directory, then check it for consistency
- fs::path original_dir = fs::current_path<fs::path>();
- BOOST_TEST( dir != original_dir );
- fs::current_path( dir );
- BOOST_TEST( fs::current_path<fs::path>() == dir );
- BOOST_TEST( fs::current_path<fs::path>() != original_dir );
- fs::current_path( original_dir );
- BOOST_TEST( fs::current_path<fs::path>() == original_dir );
- BOOST_TEST( fs::current_path<fs::path>() != dir );
- // make sure the overloads work
- fs::current_path( dir.string().c_str() );
- BOOST_TEST( fs::current_path<fs::path>() == dir );
- BOOST_TEST( fs::current_path<fs::path>() != original_dir );
- fs::current_path( original_dir.string() );
- BOOST_TEST( fs::current_path<fs::path>() == original_dir );
- BOOST_TEST( fs::current_path<fs::path>() != dir );
-
- // make some reasonable assuptions for testing purposes
- fs::space_info spi( fs::space( dir ) );
- BOOST_TEST( spi.capacity > 1000000 );
- BOOST_TEST( spi.free > 1000 );
- BOOST_TEST( spi.capacity > spi.free );
- BOOST_TEST( spi.free >= spi.available );
-
- // it is convenient to display space, but older VC++ versions choke
-# if !defined(BOOST_MSVC) || _MSC_VER >= 1300 // 1300 == VC++ 7.0
- std::cout << " capacity = " << spi.capacity << '\n';
- std::cout << " free = " << spi.free << '\n';
- std::cout << "available = " << spi.available << '\n';
-# endif
-
- if ( platform == "Windows" )
- BOOST_TEST( CHECK_EXCEPTION( bad_directory_size, ENOENT ) );
- else
- BOOST_TEST( CHECK_EXCEPTION( bad_directory_size, 0 ) );
- BOOST_TEST( !fs::create_directory( dir ) );
-
- BOOST_TEST( !fs::is_symlink( dir ) );
- BOOST_TEST( !fs::is_symlink( "nosuchfileordirectory" ) );
-
- fs::path d1( dir / "d1" );
- BOOST_TEST( fs::create_directory( d1 ) );
- BOOST_TEST( fs::exists( d1 ) );
- BOOST_TEST( fs::is_directory( d1 ) );
- BOOST_TEST( BOOST_FS_IS_EMPTY( d1 ) );
-
-// boost::function_requires< boost::InputIteratorConcept< fs::directory_iterator > >();
-
- bool dir_itr_exception(false);
- try { fs::directory_iterator it( "" ); }
- catch ( const fs::filesystem_error & ) { dir_itr_exception = true; }
- BOOST_TEST( dir_itr_exception );
-
- dir_itr_exception = false;
- try { fs::directory_iterator it( "nosuchdirectory" ); }
- catch ( const fs::filesystem_error & ) { dir_itr_exception = true; }
- BOOST_TEST( dir_itr_exception );
-
- dir_itr_exception = false;
- try
- {
- error_code ec;
- fs::directory_iterator it( "nosuchdirectory", ec );
- BOOST_TEST( ec );
- BOOST_TEST( ec == fs::detail::not_found_error() );
- }
- catch ( const fs::filesystem_error & ) { dir_itr_exception = true; }
- BOOST_TEST( !dir_itr_exception );
-
- {
- // probe query function overloads
- fs::directory_iterator dir_itr( dir );
- BOOST_TEST( fs::is_directory( *dir_itr ) );
- BOOST_TEST( fs::is_directory( dir_itr->status() ) );
- BOOST_TEST( fs::is_directory( fs::symlink_status(*dir_itr) ) );
- BOOST_TEST( fs::is_directory( dir_itr->symlink_status() ) );
- BOOST_TEST( dir_itr->path().filename() == "d1" );
- }
-
- // create a second directory named d2
- fs::path d2( dir / "d2" );
- fs::create_directory(d2 );
- BOOST_TEST( fs::exists( d2 ) );
- BOOST_TEST( fs::is_directory( d2 ) );
-
- // test the basic operation of directory_iterators, and test that
- // stepping one iterator doesn't affect a different iterator.
- {
- fs::directory_iterator dir_itr( dir );
- BOOST_TEST( fs::exists(dir_itr->status()) );
- BOOST_TEST( fs::is_directory(dir_itr->status()) );
- BOOST_TEST( !fs::is_regular_file(dir_itr->status()) );
- BOOST_TEST( !fs::is_other(dir_itr->status()) );
- BOOST_TEST( !fs::is_symlink(dir_itr->status()) );
-
- fs::directory_iterator dir_itr2( dir );
- BOOST_TEST( dir_itr->path().filename() == "d1"
- || dir_itr->path().filename() == "d2" );
- BOOST_TEST( dir_itr2->path().filename() == "d1" || dir_itr2->path().filename() == "d2" );
- if ( dir_itr->path().filename() == "d1" )
- {
- BOOST_TEST( (++dir_itr)->path().filename() == "d2" );
- BOOST_TEST( dir_itr2->path().filename() == "d1" );
- BOOST_TEST( (++dir_itr2)->path().filename() == "d2" );
- }
- else
- {
- BOOST_TEST( dir_itr->path().filename() == "d2" );
- BOOST_TEST( (++dir_itr)->path().filename() == "d1" );
- BOOST_TEST( (dir_itr2)->path().filename() == "d2" );
- BOOST_TEST( (++dir_itr2)->path().filename() == "d1" );
- }
- BOOST_TEST( ++dir_itr == fs::directory_iterator() );
- BOOST_TEST( dir_itr2 != fs::directory_iterator() );
- BOOST_TEST( ++dir_itr2 == fs::directory_iterator() );
- }
-
- { // *i++ must work to meet the standard's InputIterator requirements
- fs::directory_iterator dir_itr( dir );
- BOOST_TEST( dir_itr->path().filename() == "d1"
- || dir_itr->path().filename() == "d2" );
- if ( dir_itr->path().filename() == "d1" )
- {
- BOOST_TEST( (*dir_itr++).path().filename() == "d1" );
- BOOST_TEST( dir_itr->path().filename() == "d2" );
- }
- else
- {
- // Check C++98 input iterator requirements
- BOOST_TEST( (*dir_itr++).path().filename() == "d2" );
- // input iterator requirements in the current WP would require this check:
- // BOOST_TEST( implicit_cast<std::string const&>(*dir_itr++).filename() == "d1" );
-
- BOOST_TEST( dir_itr->path().filename() == "d1" );
- }
-
- // test case reported in comment to SourceForge bug tracker [937606]
- fs::directory_iterator it( dir );
- const fs::path p1 = *it++;
- BOOST_TEST( it != fs::directory_iterator() );
- const fs::path p2 = *it++;
- BOOST_TEST( p1 != p2 );
- BOOST_TEST( it == fs::directory_iterator() );
- }
-
- // Windows has a tricky special case when just the root-name is given,
- // causing the rest of the path to default to the current directory.
- // Reported as S/F bug [ 1259176 ]
- if ( platform == "Windows" )
- {
- fs::path root_name_path( fs::current_path<fs::path>().root_name() );
- fs::directory_iterator it( root_name_path );
- BOOST_TEST( it != fs::directory_iterator() );
- BOOST_TEST( fs::exists( *it ) );
- BOOST_TEST( it->path().parent_path() == root_name_path );
- bool found(false);
- do
- {
- if ( it->path().filename() == temp_dir_name ) found = true;
- } while ( ++it != fs::directory_iterator() );
- BOOST_TEST( found );
- }
-
- // create an empty file named "f0"
- fs::path file_ph( dir / "f0");
- create_file( file_ph, "" );
- BOOST_TEST( fs::exists( file_ph ) );
- BOOST_TEST( !fs::is_directory( file_ph ) );
- BOOST_TEST( fs::is_regular_file( file_ph ) );
- BOOST_TEST( BOOST_FS_IS_EMPTY( file_ph ) );
- BOOST_TEST( fs::file_size( file_ph ) == 0 );
- bad_create_directory_path = file_ph;
- BOOST_TEST( CHECK_EXCEPTION( bad_create_directory, EEXIST ) );
- stat = fs::status( file_ph );
- BOOST_TEST( fs::status_known( stat ) );
- BOOST_TEST( fs::exists( stat ) );
- BOOST_TEST( !fs::is_directory( stat ) );
- BOOST_TEST( fs::is_regular_file( stat ) );
- BOOST_TEST( !fs::is_other( stat ) );
- BOOST_TEST( !fs::is_symlink( stat ) );
-
- // create a file named "f1"
- file_ph = dir / "f1";
- create_file( file_ph, "foobar1" );
-
- BOOST_TEST( fs::exists( file_ph ) );
- BOOST_TEST( !fs::is_directory( file_ph ) );
- BOOST_TEST( fs::is_regular_file( file_ph ) );
- BOOST_TEST( fs::file_size( file_ph ) == 7 );
- verify_file( file_ph, "foobar1" );
-
- // equivalence tests
- BOOST_TEST( CHECK_EXCEPTION( bad_equivalent, ENOENT ) );
- BOOST_TEST( fs::equivalent( file_ph, dir / "f1" ) );
- BOOST_TEST( fs::equivalent( dir, d1 / ".." ) );
- BOOST_TEST( !fs::equivalent( file_ph, dir ) );
- BOOST_TEST( !fs::equivalent( dir, file_ph ) );
- BOOST_TEST( !fs::equivalent( d1, d2 ) );
- BOOST_TEST( !fs::equivalent( dir, ng ) );
- BOOST_TEST( !fs::equivalent( ng, dir ) );
- BOOST_TEST( !fs::equivalent( file_ph, ng ) );
- BOOST_TEST( !fs::equivalent( ng, file_ph ) );
-
- // hard link tests
- fs::path from_ph( dir / "f3" );
- BOOST_TEST( !fs::exists( from_ph ) );
- BOOST_TEST( fs::exists( file_ph ) );
- bool create_hard_link_ok(true);
- try { fs::create_hard_link( file_ph, from_ph ); }
- catch ( const fs::filesystem_error & ex )
- {
- create_hard_link_ok = false;
- std::cout
- << "create_hard_link() attempt failed\n"
- << "filesystem_error.what() reports: " << ex.what() << '\n'
- << "create_hard_link() may not be supported on this file system\n";
- }
-
- if ( create_hard_link_ok )
- {
- std::cout << "create_hard_link(\"" << file_ph << "\", \""
- << from_ph << "\") succeeded\n";
- BOOST_TEST( fs::exists( from_ph ) );
- BOOST_TEST( fs::exists( file_ph ) );
- BOOST_TEST( fs::equivalent( from_ph, file_ph ) );
- }
-
- error_code ec;
- BOOST_TEST( fs::create_hard_link( fs::path("doesnotexist"),
- fs::path("shouldnotwork"), ec ) );
- BOOST_TEST( ec );
-
- // symbolic link tests
- from_ph = dir / "f4";
- BOOST_TEST( !fs::exists( from_ph ) );
- BOOST_TEST( fs::exists( file_ph ) );
- bool create_symlink_ok(true);
- try { fs::create_symlink( file_ph, from_ph ); }
- catch ( const fs::filesystem_error & ex )
- {
- create_symlink_ok = false;
- std::cout
- << "create_symlink() attempt failed\n"
- << "filesystem_error.what() reports: " << ex.what() << '\n'
- << "create_symlink() may not be supported on this file system\n";
- }
-
- if ( create_symlink_ok )
- {
- std::cout << "create_symlink() succeeded\n";
- BOOST_TEST( fs::exists( from_ph ) );
- BOOST_TEST( fs::is_symlink( from_ph ) );
- BOOST_TEST( fs::exists( file_ph ) );
- BOOST_TEST( fs::equivalent( from_ph, file_ph ) );
- stat = fs::symlink_status( from_ph );
- BOOST_TEST( fs::exists( stat ) );
- BOOST_TEST( !fs::is_directory( stat ) );
- BOOST_TEST( !fs::is_regular_file( stat ) );
- BOOST_TEST( !fs::is_other( stat ) );
- BOOST_TEST( fs::is_symlink( stat ) );
- }
-
- ec = error_code();
- BOOST_TEST( fs::create_symlink( "doesnotexist", "", ec ) );
- BOOST_TEST( ec );
-
- // there was an inital bug in directory_iterator that caused premature
- // close of an OS handle. This block will detect regression.
- {
- fs::directory_iterator di;
- { di = fs::directory_iterator( dir ); }
- BOOST_TEST( ++di != fs::directory_iterator() );
- }
-
- // copy_file() tests
- std::cout << "begin copy_file test..." << std::endl;
- fs::copy_file( file_ph, d1 / "f2" );
- std::cout << "copying complete" << std::endl;
- BOOST_TEST( fs::exists( file_ph ) );
- BOOST_TEST( fs::exists( d1 / "f2" ) );
- BOOST_TEST( !fs::is_directory( d1 / "f2" ) );
- verify_file( d1 / "f2", "foobar1" );
-
- bool copy_ex_ok = false;
- try { fs::copy_file( file_ph, d1 / "f2" ); }
- catch ( const fs::filesystem_error & ) { copy_ex_ok = true; }
- BOOST_TEST( copy_ex_ok );
-
- copy_ex_ok = false;
- try { fs::copy_file( file_ph, d1 / "f2", fs::copy_option::fail_if_exists ); }
- catch ( const fs::filesystem_error & ) { copy_ex_ok = true; }
- BOOST_TEST( copy_ex_ok );
-
- copy_ex_ok = true;
- try { fs::copy_file( file_ph, d1 / "f2", fs::copy_option::overwrite_if_exists ); }
- catch ( const fs::filesystem_error & ) { copy_ex_ok = false; }
- BOOST_TEST( copy_ex_ok );
-
- std::cout << "copy_file test complete" << std::endl;
-
- // rename() test case numbers refer to operations.htm#rename table
-
- // [case 1] make sure can't rename() a non-existent file
- BOOST_TEST( !fs::exists( d1 / "f99" ) );
- BOOST_TEST( !fs::exists( d1 / "f98" ) );
- renamer n1a( d1 / "f99", d1 / "f98" );
- BOOST_TEST( CHECK_EXCEPTION( n1a, ENOENT ) );
- renamer n1b( fs::path(""), d1 / "f98" );
- BOOST_TEST( CHECK_EXCEPTION( n1b, ENOENT ) );
-
- // [case 2] rename() target.empty()
- renamer n2( file_ph, "" );
- BOOST_TEST( CHECK_EXCEPTION( n2, ENOENT ) );
-
- // [case 3] make sure can't rename() to an existent file or directory
- BOOST_TEST( fs::exists( dir / "f1" ) );
- BOOST_TEST( fs::exists( d1 / "f2" ) );
- renamer n3a( dir / "f1", d1 / "f2" );
- BOOST_TEST( CHECK_EXCEPTION( n3a, EEXIST ) );
- // several POSIX implementations (cygwin, openBSD) report ENOENT instead of EEXIST,
- // so we don't verify error type on the above test.
- renamer n3b( dir, d1 );
- BOOST_TEST( CHECK_EXCEPTION( n3b, 0 ) );
-
- // [case 4A] can't rename() file to a nonexistent parent directory
- BOOST_TEST( !fs::is_directory( dir / "f1" ) );
- BOOST_TEST( !fs::exists( dir / "d3/f3" ) );
- renamer n4a( dir / "f1", dir / "d3/f3" );
- BOOST_TEST( CHECK_EXCEPTION( n4a, ENOENT ) );
-
- // [case 4B] rename() file in same directory
- BOOST_TEST( fs::exists( d1 / "f2" ) );
- BOOST_TEST( !fs::exists( d1 / "f50" ) );
- fs::rename( d1 / "f2", d1 / "f50" );
- BOOST_TEST( !fs::exists( d1 / "f2" ) );
- BOOST_TEST( fs::exists( d1 / "f50" ) );
- fs::rename( d1 / "f50", d1 / "f2" );
- BOOST_TEST( fs::exists( d1 / "f2" ) );
- BOOST_TEST( !fs::exists( d1 / "f50" ) );
-
- // [case 4C] rename() file d1/f2 to d2/f3
- fs::rename( d1 / "f2", d2 / "f3" );
- BOOST_TEST( !fs::exists( d1 / "f2" ) );
- BOOST_TEST( !fs::exists( d2 / "f2" ) );
- BOOST_TEST( fs::exists( d2 / "f3" ) );
- BOOST_TEST( !fs::is_directory( d2 / "f3" ) );
- verify_file( d2 / "f3", "foobar1" );
- fs::rename( d2 / "f3", d1 / "f2" );
- BOOST_TEST( fs::exists( d1 / "f2" ) );
-
- // [case 5A] rename() directory to nonexistent parent directory
- BOOST_TEST( fs::exists( d1 ) );
- BOOST_TEST( !fs::exists( dir / "d3/d5" ) );
- BOOST_TEST( !fs::exists( dir / "d3" ) );
- renamer n5a( d1, dir / "d3/d5" );
- BOOST_TEST( CHECK_EXCEPTION( n5a, ENOENT ) );
-
- // [case 5B] rename() on directory
- fs::path d3( dir / "d3" );
- BOOST_TEST( fs::exists( d1 ) );
- BOOST_TEST( fs::exists( d1 / "f2" ) );
- BOOST_TEST( !fs::exists( d3 ) );
- fs::rename( d1, d3 );
- BOOST_TEST( !fs::exists( d1 ) );
- BOOST_TEST( fs::exists( d3 ) );
- BOOST_TEST( fs::is_directory( d3 ) );
- BOOST_TEST( !fs::exists( d1 / "f2" ) );
- BOOST_TEST( fs::exists( d3 / "f2" ) );
- fs::rename( d3, d1 );
- BOOST_TEST( fs::exists( d1 ) );
- BOOST_TEST( fs::exists( d1 / "f2" ) );
- BOOST_TEST( !fs::exists( d3 ) );
-
- // [case 5C] rename() rename and move d1 to d2 / "d20"
- BOOST_TEST( fs::exists( d1 ) );
- BOOST_TEST( !fs::exists( d2 / "d20" ) );
- BOOST_TEST( fs::exists( d1 / "f2" ) );
- fs::rename( d1, d2 / "d20" );
- BOOST_TEST( !fs::exists( d1 ) );
- BOOST_TEST( fs::exists( d2 / "d20" ) );
- BOOST_TEST( fs::exists( d2 / "d20" / "f2" ) );
- fs::rename( d2 / "d20", d1 );
- BOOST_TEST( fs::exists( d1 ) );
- BOOST_TEST( !fs::exists( d2 / "d20" ) );
- BOOST_TEST( fs::exists( d1 / "f2" ) );
-
- // remove() file
- file_ph = dir / "shortlife";
- BOOST_TEST( !fs::exists( file_ph ) );
- create_file( file_ph, "" );
- BOOST_TEST( fs::exists( file_ph ) );
- BOOST_TEST( !fs::is_directory( file_ph ) );
- BOOST_TEST( fs::remove( file_ph ) );
- BOOST_TEST( !fs::exists( file_ph ) );
- BOOST_TEST( !fs::remove( "no-such-file" ) );
- BOOST_TEST( !fs::remove( "no-such-directory/no-such-file" ) );
-
- // remove() directory
- d1 = dir / "shortlife_dir";
- BOOST_TEST( !fs::exists( d1 ) );
- fs::create_directory( d1 );
- BOOST_TEST( fs::exists( d1 ) );
- BOOST_TEST( fs::is_directory( d1 ) );
- BOOST_TEST( BOOST_FS_IS_EMPTY( d1 ) );
- bad_remove_dir = dir;
- BOOST_TEST( CHECK_EXCEPTION( bad_remove, ENOTEMPTY ) );
- BOOST_TEST( fs::remove( d1 ) );
- BOOST_TEST( !fs::exists( d1 ) );
-
- if ( create_symlink_ok ) // only if symlinks supported
- {
- // remove() dangling symbolic link
- fs::path link( "dangling_link" );
- fs::remove( link ); // remove any residue from past tests
- BOOST_TEST( !fs::is_symlink( link ) );
- BOOST_TEST( !fs::exists( link ) );
- fs::create_symlink( "nowhere", link );
- BOOST_TEST( !fs::exists( link ) );
- BOOST_TEST( fs::is_symlink( link ) );
- BOOST_TEST( fs::remove( link ) );
- BOOST_TEST( !fs::is_symlink( link ) );
-
- // remove() self-refering symbolic link
- link = "link_to_self";
- fs::remove( link ); // remove any residue from past tests
- BOOST_TEST( !fs::is_symlink( link ) );
- BOOST_TEST( !fs::exists( link ) );
- fs::create_symlink( link, link );
- BOOST_TEST( fs::remove( link ) );
- BOOST_TEST( !fs::exists( link ) );
- BOOST_TEST( !fs::is_symlink( link ) );
-
- // remove() cyclic symbolic link
- link = "link_to_a";
- fs::path link2( "link_to_b" );
- fs::remove( link ); // remove any residue from past tests
- fs::remove( link2 ); // remove any residue from past tests
- BOOST_TEST( !fs::is_symlink( link ) );
- BOOST_TEST( !fs::exists( link ) );
- fs::create_symlink( link, link2 );
- fs::create_symlink( link2, link );
- BOOST_TEST( fs::remove( link ) );
- BOOST_TEST( fs::remove( link2 ) );
- BOOST_TEST( !fs::exists( link ) );
- BOOST_TEST( !fs::exists( link2 ) );
- BOOST_TEST( !fs::is_symlink( link ) );
-
- // remove() symbolic link to file
- file_ph = "link_target";
- fs::remove( file_ph ); // remove any residue from past tests
- BOOST_TEST( !fs::exists( file_ph ) );
- create_file( file_ph, "" );
- BOOST_TEST( fs::exists( file_ph ) );
- BOOST_TEST( !fs::is_directory( file_ph ) );
- BOOST_TEST( fs::is_regular_file( file_ph ) );
- link = "non_dangling_link";
- fs::create_symlink( file_ph, link );
- BOOST_TEST( fs::exists( link ) );
- BOOST_TEST( !fs::is_directory( link ) );
- BOOST_TEST( fs::is_regular_file( link ) );
- BOOST_TEST( fs::is_symlink( link ) );
- BOOST_TEST( fs::remove( link ) );
- BOOST_TEST( fs::exists( file_ph ) );
- BOOST_TEST( !fs::exists( link ) );
- BOOST_TEST( !fs::is_symlink( link ) );
- BOOST_TEST( fs::remove( file_ph ) );
- BOOST_TEST( !fs::exists( file_ph ) );
- }
-
- // write time tests
-
- file_ph = dir / "foobar2";
- create_file( file_ph, "foobar2" );
- BOOST_TEST( fs::exists( file_ph ) );
- BOOST_TEST( !fs::is_directory( file_ph ) );
- BOOST_TEST( fs::is_regular_file( file_ph ) );
- BOOST_TEST( fs::file_size( file_ph ) == 7 );
- verify_file( file_ph, "foobar2" );
-
- // Some file system report last write time as local (FAT), while
- // others (NTFS) report it as UTC. The C standard does not specify
- // if time_t is local or UTC.
-
- std::time_t ft = fs::last_write_time( file_ph );
- std::cout << "\nUTC last_write_time() for a file just created is "
- << std::asctime(std::gmtime(&ft)) << std::endl;
-
- std::tm * tmp = std::localtime( &ft );
- std::cout << "\nYear is " << tmp->tm_year << std::endl;
- --tmp->tm_year;
- std::cout << "Change year to " << tmp->tm_year << std::endl;
- fs::last_write_time( file_ph, std::mktime( tmp ) );
- std::time_t ft2 = fs::last_write_time( file_ph );
- std::cout << "last_write_time() for the file is now "
- << std::asctime(std::gmtime(&ft2)) << std::endl;
- BOOST_TEST( ft != fs::last_write_time( file_ph ) );
-
-
- std::cout << "\nReset to current time" << std::endl;
- fs::last_write_time( file_ph, ft );
- double time_diff = std::difftime( ft, fs::last_write_time( file_ph ) );
- std::cout
- << "original last_write_time() - current last_write_time() is "
- << time_diff << " seconds" << std::endl;
- BOOST_TEST( time_diff >= -60.0 && time_diff <= 60.0 );
-
- // post-test cleanup
- BOOST_TEST( fs::remove_all( dir ) != 0 );
- // above was added just to simplify testing, but it ended up detecting
- // a bug (failure to close an internal search handle).
- BOOST_TEST( !fs::exists( dir ) );
- BOOST_TEST( fs::remove_all( dir ) == 0 );
-
- return ::boost::report_errors();
-} // main
-
diff --git a/libs/filesystem/v2/test/path_test.cpp b/libs/filesystem/v2/test/path_test.cpp
deleted file mode 100644
index fb55adb9a9..0000000000
--- a/libs/filesystem/v2/test/path_test.cpp
+++ /dev/null
@@ -1,1380 +0,0 @@
-// path_test program -------------------------------------------------------//
-
-// Copyright Beman Dawes 2002
-// Copyright Vladimir Prus 2002
-
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// See library home page at http://www.boost.org/libs/filesystem
-
-// basic_path's stem(), extension(), and replace_extension() tests are based
-// on basename(), extension(), and change_extension() tests from the original
-// convenience_test.cpp by Vladimir Prus.
-
-#define BOOST_FILESYSTEM_VERSION 2
-
-// See deprecated_test for tests of deprecated features
-#ifndef BOOST_FILESYSTEM_NO_DEPRECATED
-# define BOOST_FILESYSTEM_NO_DEPRECATED
-#endif
-#ifndef BOOST_SYSTEM_NO_DEPRECATED
-# define BOOST_SYSTEM_NO_DEPRECATED
-#endif
-
-#include <boost/filesystem/operations.hpp>
-#include <boost/utility.hpp>
-#include <iostream>
-#include <sstream>
-#include <string>
-#include <vector>
-#include <cstring>
-#include <cassert>
-
-namespace fs = boost::filesystem;
-using boost::filesystem::path;
-
-
-#include <boost/detail/lightweight_test.hpp>
-#include <boost/detail/lightweight_main.hpp>
-
-#define PATH_CHECK( a, b ) check( a, b, __LINE__ )
-#define DIR_CHECK( a, b ) check_dir( a, b, __LINE__ )
-#define CHECK_EQUAL( a,b ) check_equal( a, b, __LINE__ )
-
-
-namespace
-{
- std::string platform( BOOST_PLATFORM );
-
- void check( const fs::path & source,
- const std::string & expected, int line )
- {
- if ( source.string()== expected ) return;
-
- ++::boost::detail::test_errors();
-
- std::cout << '(' << line << ") source.string(): \"" << source.string()
- << "\" != expected: \"" << expected
- << "\"" << std::endl;
- }
-
- void check_dir( const fs::path & source,
- const std::string & expected, int line )
- {
- if ( source.directory_string()== expected ) return;
-
- ++::boost::detail::test_errors();
-
- std::cout << '(' << line << ") source.directory_string(): \""
- << source.directory_string()
- << "\" != expected: \"" << expected
- << "\"" << std::endl;
- }
-
- void check_equal( const std::string & value,
- const std::string & expected, int line )
- {
- if ( value == expected ) return;
-
- ++::boost::detail::test_errors();
-
- std::cout << '(' << line << ") value: \"" << value
- << "\" != expected: \"" << expected
- << "\"" << std::endl;
- }
-
-
- void exception_tests()
- {
- const std::string str_1("string-1");
- boost::system::error_code ec( 12345, boost::system::system_category());
- try { BOOST_FILESYSTEM_THROW( fs::filesystem_error( str_1, ec ) ); }
- catch ( const fs::filesystem_error & ex )
- {
- //std::cout << ex.what() << "*" << std::endl;
- //BOOST_TEST( std::strcmp( ex.what(),
- // "string-1: Unknown error" ) == 0 );
- BOOST_TEST( ex.code() == ec );
- }
-
- try { BOOST_FILESYSTEM_THROW( fs::filesystem_error( str_1, "p1", "p2", ec ) ); }
- catch ( const fs::filesystem_error & ex )
- {
- //std::cout << ex.what() << "*" << std::endl;
- //BOOST_TEST( std::strcmp( ex.what(),
- // "string-1: Unknown error: \"p1\", \"p2\"" ) == 0 );
- BOOST_TEST( ex.code() == ec );
- BOOST_TEST( ex.path1().string() == "p1" );
- BOOST_TEST( ex.path2().string() == "p2" );
- }
- }
-
-
- // name_function_tests ---------------------------------------------------//
-
- void name_function_tests()
- {
- std::cout << "name_function_tests..." << std::endl;
-
- BOOST_TEST( fs::portable_posix_name( std::string( "x" ) ) );
- BOOST_TEST( fs::windows_name( std::string( "x" ) ) );
- BOOST_TEST( fs::portable_name( std::string( "x" ) ) );
- BOOST_TEST( fs::portable_directory_name( std::string( "x" ) ) );
- BOOST_TEST( fs::portable_file_name( std::string( "x" ) ) );
-
- BOOST_TEST( fs::portable_posix_name( std::string( "." ) ) );
- BOOST_TEST( fs::windows_name( std::string( "." ) ) );
- BOOST_TEST( fs::portable_name( std::string( "." ) ) );
- BOOST_TEST( fs::portable_directory_name( std::string( "." ) ) );
- BOOST_TEST( !fs::portable_file_name( std::string( "." ) ) );
-
- BOOST_TEST( fs::portable_posix_name( std::string( ".." ) ) );
- BOOST_TEST( fs::windows_name( std::string( ".." ) ) );
- BOOST_TEST( fs::portable_name( std::string( ".." ) ) );
- BOOST_TEST( fs::portable_directory_name( std::string( ".." ) ) );
- BOOST_TEST( !fs::portable_file_name( std::string( ".." ) ) );
-
- BOOST_TEST( !fs::native( std::string( "" ) ) );
- BOOST_TEST( !fs::portable_posix_name( std::string( "" ) ) );
- BOOST_TEST( !fs::windows_name( std::string( "" ) ) );
- BOOST_TEST( !fs::portable_name( std::string( "" ) ) );
- BOOST_TEST( !fs::portable_directory_name( std::string( "" ) ) );
- BOOST_TEST( !fs::portable_file_name( std::string( "" ) ) );
-
- BOOST_TEST( !fs::native( std::string( " " ) ) );
- BOOST_TEST( !fs::portable_posix_name( std::string( " " ) ) );
- BOOST_TEST( !fs::windows_name( std::string( " " ) ) );
- BOOST_TEST( !fs::portable_name( std::string( " " ) ) );
- BOOST_TEST( !fs::portable_directory_name( std::string( " " ) ) );
- BOOST_TEST( !fs::portable_file_name( std::string( " " ) ) );
-
- BOOST_TEST( !fs::portable_posix_name( std::string( ":" ) ) );
- BOOST_TEST( !fs::windows_name( std::string( ":" ) ) );
- BOOST_TEST( !fs::portable_name( std::string( ":" ) ) );
- BOOST_TEST( !fs::portable_directory_name( std::string( ":" ) ) );
- BOOST_TEST( !fs::portable_file_name( std::string( ":" ) ) );
-
- BOOST_TEST( fs::portable_posix_name( std::string( "-" ) ) );
- BOOST_TEST( fs::windows_name( std::string( "-" ) ) );
- BOOST_TEST( !fs::portable_name( std::string( "-" ) ) );
- BOOST_TEST( !fs::portable_directory_name( std::string( "-" ) ) );
- BOOST_TEST( !fs::portable_file_name( std::string( "-" ) ) );
-
- BOOST_TEST( !fs::portable_posix_name( std::string( "foo bar" ) ) );
- BOOST_TEST( fs::windows_name( std::string( "foo bar" ) ) );
- BOOST_TEST( !fs::windows_name( std::string( " bar" ) ) );
- BOOST_TEST( !fs::windows_name( std::string( "foo " ) ) );
- BOOST_TEST( !fs::portable_name( std::string( "foo bar" ) ) );
- BOOST_TEST( !fs::portable_directory_name( std::string( "foo bar" ) ) );
- BOOST_TEST( !fs::portable_file_name( std::string( "foo bar" ) ) );
-
- BOOST_TEST( fs::portable_posix_name( std::string( "foo.bar" ) ) );
- BOOST_TEST( fs::windows_name( std::string( "foo.bar" ) ) );
- BOOST_TEST( fs::portable_name( std::string( "foo.bar" ) ) );
- BOOST_TEST( !fs::portable_directory_name( std::string( "foo.bar" ) ) );
- BOOST_TEST( fs::portable_file_name( std::string( "foo.bar" ) ) );
-
- BOOST_TEST( fs::portable_posix_name( std::string( "foo.barf" ) ) );
- BOOST_TEST( fs::windows_name( std::string( "foo.barf" ) ) );
- BOOST_TEST( fs::portable_name( std::string( "foo.barf" ) ) );
- BOOST_TEST( !fs::portable_directory_name( std::string( "foo.barf" ) ) );
- BOOST_TEST( !fs::portable_file_name( std::string( "foo.barf" ) ) );
-
- BOOST_TEST( fs::portable_posix_name( std::string( ".foo" ) ) );
- BOOST_TEST( fs::windows_name( std::string( ".foo" ) ) );
- BOOST_TEST( !fs::portable_name( std::string( ".foo" ) ) );
- BOOST_TEST( !fs::portable_directory_name( std::string( ".foo" ) ) );
- BOOST_TEST( !fs::portable_file_name( std::string( ".foo" ) ) );
-
- BOOST_TEST( fs::portable_posix_name( std::string( "foo." ) ) );
- BOOST_TEST( !fs::windows_name( std::string( "foo." ) ) );
- BOOST_TEST( !fs::portable_name( std::string( "foo." ) ) );
- BOOST_TEST( !fs::portable_directory_name( std::string( "foo." ) ) );
- BOOST_TEST( !fs::portable_file_name( std::string( "foo." ) ) );
- }
-
-} // unnamed namespace
-
-int cpp_main( int, char* [] )
-{
- // The choice of platform is make at runtime rather than compile-time
- // so that compile errors for all platforms will be detected even though
- // only the current platform is runtime tested.
- platform = ( platform == "Win32" || platform == "Win64" || platform == "Cygwin" )
- ? "Windows"
- : "POSIX";
- std::cout << "Platform is " << platform << '\n';
-
- path p1( "fe/fi/fo/fum" );
- path p2( p1 );
- path p3;
- BOOST_TEST( p1.string() != p3.string() );
-
- // check each overload
- BOOST_TEST( p1 != p3 );
- BOOST_TEST( p1 != p3.string() );
- BOOST_TEST( p1 != p3.string().c_str() );
- BOOST_TEST( p1.string() != p3 );
- BOOST_TEST( p1.string().c_str() != p3 );
-
- p3 = p2;
- BOOST_TEST( p1.string() == p3.string() );
-
- // check each overload
- BOOST_TEST( p1 == p3 );
- BOOST_TEST( p1 == p3.string() );
- BOOST_TEST( p1 == p3.string().c_str() );
- BOOST_TEST( p1.string() == p3 );
- BOOST_TEST( p1.string().c_str() == p3 );
-
- path p4( "foobar" );
- BOOST_TEST( p4.string() == "foobar" );
- p4 = p4; // self-assignment
- BOOST_TEST( p4.string() == "foobar" );
-
- if ( platform == "Windows" )
- {
- path p10 ("c:\\file");
- path p11 ("c:/file");
- // check each overload
- BOOST_TEST( p10.string() == p11.string() );
- BOOST_TEST( p10 == p11 );
- BOOST_TEST( p10 == p11.string() );
- BOOST_TEST( p10 == p11.string().c_str() );
- BOOST_TEST( p10.string() == p11 );
- BOOST_TEST( p10.string().c_str() == p11 );
- BOOST_TEST( p10 == "c:\\file" );
- BOOST_TEST( p10 == "c:/file" );
- BOOST_TEST( p11 == "c:\\file" );
- BOOST_TEST( p11 == "c:/file" );
- BOOST_TEST( "c:\\file" == p10 );
- BOOST_TEST( "c:/file" == p10 );
- BOOST_TEST( "c:\\file" == p11 );
- BOOST_TEST( "c:/file" == p11 );
- }
-
- exception_tests();
- name_function_tests();
-
- // These verify various overloads don't cause compiler errors
-
- fs::exists( p1 );
- fs::exists( "foo" );
- fs::exists( std::string( "foo" ) );
-
- fs::exists( p1 / path( "foo" ) );
- fs::exists( p1 / "foo" );
- fs::exists( p1 / std::string( "foo" ) );
-
- fs::exists( "foo" / p1 );
- fs::exists( std::string( "foo" ) / p1 );
-
- p4 /= path( "foo" );
- p4 /= "foo";
- p4 /= std::string( "foo" );
-
- path p5;
- std::string s1( "//:somestring" );
-
- // verify deprecated names still available
-
-# ifndef BOOST_FILESYSTEM_NO_DEPRECATED
-
- p1.branch_path();
- p1.leaf();
- path p_remove_leaf;
- p_remove_leaf.remove_leaf();
-
-# endif
-
-
-# ifndef BOOST_NO_MEMBER_TEMPLATES
-
- // check the path member templates
- p5.assign( s1.begin(), s1.end() );
-
- PATH_CHECK( p5, "somestring" );
- p5 = s1;
- PATH_CHECK( p5, "somestring" );
-
- BOOST_TEST( p4.string() == path( p4.string().begin(), p4.string().end() ).string() );
-
- char c0 = 'a';
- p5.assign( &c0, &c0 );
- PATH_CHECK( p5, "" );
- p5 /= "";
- PATH_CHECK( p5, "" );
- p5 /= "foo/bar";
- PATH_CHECK( p5, "foo/bar" );
- p5.append( &c0, &c0 );
- PATH_CHECK( p5, "foo/bar" );
- p5 /= "";
- PATH_CHECK( p5, "foo/bar" );
- char bf[]= "bar/foo";
- p5.assign( bf, bf + sizeof(bf) );
- PATH_CHECK( p5, bf );
- p5.append( bf, bf + sizeof(bf) );
- PATH_CHECK( p5, "bar/foo/bar/foo" );
-
- // this code, courtesy of David Whetstone, detected a now fixed bug that
- // derefereced the end iterator (assuming debug build with checked itors)
- std::vector<char> v1;
- p5.assign( v1.begin(), v1.end() );
- std::string s2( v1.begin(), v1.end() );
- PATH_CHECK( p5, s2 );
- p5.assign( s1.begin(), s1.begin() + 1 );
- PATH_CHECK( p5, "/" );
-
-# endif
- path clear_path( "foo" );
-
- BOOST_TEST( !clear_path.empty() );
- clear_path.clear();
- BOOST_TEST( clear_path.empty() );
-
- BOOST_TEST( p1 != p4 );
- BOOST_TEST( p1.string() == p2.string() );
- BOOST_TEST( p1.string() == p3.string() );
- BOOST_TEST( path( "foo" ).filename() == "foo" );
- BOOST_TEST( path( "foo" ).parent_path().string() == "" );
- BOOST_TEST( p1.filename() == "fum" );
- BOOST_TEST( p1.parent_path().string() == "fe/fi/fo" );
- BOOST_TEST( path( "" ).empty() == true );
- BOOST_TEST( path( "foo" ).empty() == false );
-
- PATH_CHECK( "", "" );
-
- PATH_CHECK( "foo", "foo" );
- PATH_CHECK( "f", "f" );
-
- PATH_CHECK( "foo/", "foo/" );
- PATH_CHECK( "f/", "f/" );
- PATH_CHECK( "foo/..", "foo/.." );
- PATH_CHECK( "foo/../", "foo/../" );
- PATH_CHECK( "foo/bar/../..", "foo/bar/../.." );
- PATH_CHECK( "foo/bar/../../", "foo/bar/../../" );
- PATH_CHECK( path("") / "foo", "foo" );
- PATH_CHECK( path("") / "foo/", "foo/" );
- PATH_CHECK( path("foo") / "", "foo" );
- PATH_CHECK( path( "/" ), "/" );
- PATH_CHECK( path( "/" ) / "", "/" );
- PATH_CHECK( path( "/f" ), "/f" );
-
- PATH_CHECK( "/foo", "/foo" );
- PATH_CHECK( path("") / "/foo", "/foo" );
- PATH_CHECK( path("/foo") / "", "/foo" );
-
- if ( platform == "Windows" )
- {
- PATH_CHECK( path("c:") / "foo", "c:foo" );
- PATH_CHECK( path("c:") / "/foo", "c:/foo" );
- }
-
- if ( platform == "Windows" )
- {
- PATH_CHECK( path("c:") / "foo", "c:foo" );
- PATH_CHECK( path("c:") / "/foo", "c:/foo" );
- }
-
- PATH_CHECK( "foo/bar", "foo/bar" );
- PATH_CHECK( path("foo") / path("bar"), "foo/bar" ); // path arg
- PATH_CHECK( path("foo") / "bar", "foo/bar" ); // const char * arg
- PATH_CHECK( path("foo") / path("woo/bar").filename(), "foo/bar" ); // const std::string & arg
- PATH_CHECK( "foo" / path("bar"), "foo/bar" );
-
- PATH_CHECK( "a/b", "a/b" ); // probe for length effects
- PATH_CHECK( path("a") / "b", "a/b" );
-
- PATH_CHECK( "..", ".." );
- PATH_CHECK( path("..") / "", ".." );
- PATH_CHECK( path("") / "..", ".." );
-
- PATH_CHECK( "../..", "../.." );
- PATH_CHECK( path("..") / ".." , "../.." );
-
- PATH_CHECK( "/..", "/.." );
- PATH_CHECK( path("/") / ".." , "/.." );
-
- PATH_CHECK( "/../..", "/../.." );
- PATH_CHECK( path("/..") / ".." , "/../.." );
-
- PATH_CHECK( "../foo", "../foo" );
- PATH_CHECK( path("..") / "foo" , "../foo" );
-
- PATH_CHECK( "foo/..", "foo/.." );
- PATH_CHECK( path("foo") / ".." , "foo/.." );
- PATH_CHECK( path( "foo/..bar"), "foo/..bar" );
-
- PATH_CHECK( "../f", "../f" );
- PATH_CHECK( path("..") / "f" , "../f" );
-
- PATH_CHECK( "/../f", "/../f" );
- PATH_CHECK( path("/..") / "f" , "/../f" );
-
- PATH_CHECK( "f/..", "f/.." );
- PATH_CHECK( path("f") / ".." , "f/.." );
-
- PATH_CHECK( "foo/../..", "foo/../.." );
- PATH_CHECK( path("foo") / ".." / ".." , "foo/../.." );
-
- PATH_CHECK( "foo/../../..", "foo/../../.." );
- PATH_CHECK( path("foo") / ".." / ".." / ".." , "foo/../../.." );
-
- PATH_CHECK( "foo/../bar", "foo/../bar" );
- PATH_CHECK( path("foo") / ".." / "bar" , "foo/../bar" );
-
- PATH_CHECK( "foo/bar/..", "foo/bar/.." );
- PATH_CHECK( path("foo") / "bar" / ".." , "foo/bar/.." );
-
- PATH_CHECK( "foo/bar/../..", "foo/bar/../.." );
- PATH_CHECK( path("foo") / "bar" / ".." / "..", "foo/bar/../.." );
-
- PATH_CHECK( "foo/bar/../blah", "foo/bar/../blah" );
- PATH_CHECK( path("foo") / "bar" / ".." / "blah", "foo/bar/../blah" );
-
- PATH_CHECK( "f/../b", "f/../b" );
- PATH_CHECK( path("f") / ".." / "b" , "f/../b" );
-
- PATH_CHECK( "f/b/..", "f/b/.." );
- PATH_CHECK( path("f") / "b" / ".." , "f/b/.." );
-
- PATH_CHECK( "f/b/../a", "f/b/../a" );
- PATH_CHECK( path("f") / "b" / ".." / "a", "f/b/../a" );
-
- PATH_CHECK( "foo/bar/blah/../..", "foo/bar/blah/../.." );
- PATH_CHECK( path("foo") / "bar" / "blah" / ".." / "..", "foo/bar/blah/../.." );
-
- PATH_CHECK( "foo/bar/blah/../../bletch", "foo/bar/blah/../../bletch" );
- PATH_CHECK( path("foo") / "bar" / "blah" / ".." / ".." / "bletch", "foo/bar/blah/../../bletch" );
-
- PATH_CHECK( "...", "..." );
- PATH_CHECK( "....", "...." );
- PATH_CHECK( "foo/...", "foo/..." );
- PATH_CHECK( "abc.", "abc." );
- PATH_CHECK( "abc..", "abc.." );
- PATH_CHECK( "foo/abc.", "foo/abc." );
- PATH_CHECK( "foo/abc..", "foo/abc.." );
-
- PATH_CHECK( path(".abc"), ".abc" );
- PATH_CHECK( "a.c", "a.c" );
- PATH_CHECK( path("..abc"), "..abc" );
- PATH_CHECK( "a..c", "a..c" );
- PATH_CHECK( path("foo/.abc"), "foo/.abc" );
- PATH_CHECK( "foo/a.c", "foo/a.c" );
- PATH_CHECK( path("foo/..abc"), "foo/..abc" );
- PATH_CHECK( "foo/a..c", "foo/a..c" );
-
- PATH_CHECK( ".", "." );
- PATH_CHECK( path("") / ".", "." );
- PATH_CHECK( "./foo", "./foo" );
- PATH_CHECK( path(".") / "foo", "./foo" );
- PATH_CHECK( "./..", "./.." );
- PATH_CHECK( path(".") / "..", "./.." );
- PATH_CHECK( "./../foo", "./../foo" );
- PATH_CHECK( "foo/.", "foo/." );
- PATH_CHECK( path("foo") / ".", "foo/." );
- PATH_CHECK( "../.", "../." );
- PATH_CHECK( path("..") / ".", "../." );
- PATH_CHECK( "./.", "./." );
- PATH_CHECK( path(".") / ".", "./." );
- PATH_CHECK( "././.", "././." );
- PATH_CHECK( path(".") / "." / ".", "././." );
- PATH_CHECK( "./foo/.", "./foo/." );
- PATH_CHECK( path(".") / "foo" / ".", "./foo/." );
- PATH_CHECK( "foo/./bar", "foo/./bar" );
- PATH_CHECK( path("foo") / "." / "bar", "foo/./bar" );
- PATH_CHECK( "foo/./.", "foo/./." );
- PATH_CHECK( path("foo") / "." / ".", "foo/./." );
- PATH_CHECK( "foo/./..", "foo/./.." );
- PATH_CHECK( path("foo") / "." / "..", "foo/./.." );
- PATH_CHECK( "foo/./../bar", "foo/./../bar" );
- PATH_CHECK( "foo/../.", "foo/../." );
- PATH_CHECK( path(".") / "." / "..", "././.." );
- PATH_CHECK( "././..", "././.." );
- PATH_CHECK( path(".") / "." / "..", "././.." );
- PATH_CHECK( "./../.", "./../." );
- PATH_CHECK( path(".") / ".." / ".", "./../." );
- PATH_CHECK( ".././.", ".././." );
- PATH_CHECK( path("..") / "." / ".", ".././." );
-
- // iterator tests
-
- path itr_ck = "";
- path::const_iterator itr = itr_ck.begin();
- BOOST_TEST( itr == itr_ck.end() );
-
- itr_ck = "/";
- itr = itr_ck.begin();
- BOOST_TEST( *itr == std::string( "/" ) );
- BOOST_TEST( ++itr == itr_ck.end() );
- BOOST_TEST( *--itr == std::string( "/" ) );
-
- itr_ck = "foo";
- BOOST_TEST( *itr_ck.begin() == std::string( "foo" ) );
- BOOST_TEST( boost::next( itr_ck.begin() ) == itr_ck.end() );
- BOOST_TEST( *boost::prior( itr_ck.end() ) == std::string( "foo" ) );
- BOOST_TEST( boost::prior( itr_ck.end() ) == itr_ck.begin() );
-
- itr_ck = path( "/foo" );
- BOOST_TEST( *itr_ck.begin() == std::string( "/" ) );
- BOOST_TEST( *boost::next( itr_ck.begin() ) == std::string( "foo" ) );
- BOOST_TEST( boost::next(boost::next( itr_ck.begin() )) == itr_ck.end() );
- BOOST_TEST( boost::next( itr_ck.begin() ) == boost::prior( itr_ck.end() ) );
- BOOST_TEST( *boost::prior( itr_ck.end() ) == std::string( "foo" ) );
- BOOST_TEST( *boost::prior(boost::prior( itr_ck.end() )) == std::string( "/" ) );
- BOOST_TEST( boost::prior(boost::prior( itr_ck.end() )) == itr_ck.begin() );
-
- itr_ck = "/foo/bar";
- itr = itr_ck.begin();
- BOOST_TEST( *itr == std::string( "/" ) );
- BOOST_TEST( *++itr == std::string( "foo" ) );
- BOOST_TEST( *++itr == std::string( "bar" ) );
- BOOST_TEST( ++itr == itr_ck.end() );
- CHECK_EQUAL( *--itr, "bar" );
- CHECK_EQUAL( *--itr, "foo" );
- CHECK_EQUAL( *--itr, "/" );
-
- itr_ck = "../f"; // previously failed due to short name bug
- itr = itr_ck.begin();
- CHECK_EQUAL( *itr, ".." );
- CHECK_EQUAL( *++itr, "f" );
- BOOST_TEST( ++itr == itr_ck.end() );
- CHECK_EQUAL( *--itr, "f" );
- CHECK_EQUAL( *--itr, ".." );
-
- // POSIX says treat "/foo/bar/" as "/foo/bar/."
- itr_ck = "/foo/bar/";
- itr = itr_ck.begin();
- CHECK_EQUAL( *itr, "/" );
- CHECK_EQUAL( *++itr, "foo" );
- CHECK_EQUAL( *++itr, "bar" );
- CHECK_EQUAL( *++itr, "." );
- BOOST_TEST( ++itr == itr_ck.end() );
- CHECK_EQUAL( *--itr, "." );
- CHECK_EQUAL( *--itr, "bar" );
- CHECK_EQUAL( *--itr, "foo" );
- CHECK_EQUAL( *--itr, "/" );
-
- // POSIX says treat "/f/b/" as "/f/b/."
- itr_ck = "/f/b/";
- itr = itr_ck.begin();
- CHECK_EQUAL( *itr, "/" );
- CHECK_EQUAL( *++itr, "f" );
- CHECK_EQUAL( *++itr, "b" );
- CHECK_EQUAL( *++itr, "." );
- BOOST_TEST( ++itr == itr_ck.end() );
- CHECK_EQUAL( *--itr, "." );
- CHECK_EQUAL( *--itr, "b" );
- CHECK_EQUAL( *--itr, "f" );
- CHECK_EQUAL( *--itr, "/" );
-
- itr_ck = "//net";
- itr = itr_ck.begin();
- // two leading slashes are permitted by POSIX (as implementation defined),
- // while for Windows it is always well defined (as a network name)
- CHECK_EQUAL( *itr, "//net" );
- BOOST_TEST( ++itr == itr_ck.end() );
- CHECK_EQUAL( *--itr, "//net" );
-
- itr_ck = "//net/";
- itr = itr_ck.begin();
- CHECK_EQUAL( *itr, "//net" );
- CHECK_EQUAL( *++itr, "/" );
- BOOST_TEST( ++itr == itr_ck.end() );
- CHECK_EQUAL( *--itr, "/" );
- CHECK_EQUAL( *--itr, "//net" );
-
- itr_ck = "//foo///bar///";
- itr = itr_ck.begin();
- CHECK_EQUAL( *itr, "//foo" );
- CHECK_EQUAL( *++itr, "/" );
- CHECK_EQUAL( *++itr, "bar" );
- CHECK_EQUAL( *++itr, "." );
- BOOST_TEST( ++itr == itr_ck.end() );
- CHECK_EQUAL( *--itr, "." );
- CHECK_EQUAL( *--itr, "bar" );
- CHECK_EQUAL( *--itr, "/" );
- CHECK_EQUAL( *--itr, "//foo" );
-
- itr_ck = "///foo///bar///";
- itr = itr_ck.begin();
- // three or more leading slashes are to be treated as a single slash
- CHECK_EQUAL( *itr, "/" );
- CHECK_EQUAL( *++itr, "foo" );
- CHECK_EQUAL( *++itr, "bar" );
- CHECK_EQUAL( *++itr, "." );
- BOOST_TEST( ++itr == itr_ck.end() );
- CHECK_EQUAL( *--itr, "." );
- CHECK_EQUAL( *--itr, "bar" );
- CHECK_EQUAL( *--itr, "foo" );
- CHECK_EQUAL( *--itr, "/" );
-
- if ( platform == "Windows" )
- {
- itr_ck = "c:/";
- itr = itr_ck.begin();
- CHECK_EQUAL( *itr, "c:" );
- CHECK_EQUAL( *++itr, "/" );
- BOOST_TEST( ++itr == itr_ck.end() );
- CHECK_EQUAL( *--itr, "/" );
- CHECK_EQUAL( *--itr, "c:" );
-
- itr_ck = "c:/foo";
- itr = itr_ck.begin();
- BOOST_TEST( *itr == std::string( "c:" ) );
- BOOST_TEST( *++itr == std::string( "/" ) );
- BOOST_TEST( *++itr == std::string( "foo" ) );
- BOOST_TEST( ++itr == itr_ck.end() );
- BOOST_TEST( *--itr == std::string( "foo" ) );
- BOOST_TEST( *--itr == std::string( "/" ) );
- BOOST_TEST( *--itr == std::string( "c:" ) );
-
- itr_ck = "c:foo";
- itr = itr_ck.begin();
- BOOST_TEST( *itr == std::string( "c:" ) );
- BOOST_TEST( *++itr == std::string( "foo" ) );
- BOOST_TEST( ++itr == itr_ck.end() );
- BOOST_TEST( *--itr == std::string( "foo" ) );
- BOOST_TEST( *--itr == std::string( "c:" ) );
-
- itr_ck = "c:foo/";
- itr = itr_ck.begin();
- BOOST_TEST( *itr == std::string( "c:" ) );
- BOOST_TEST( *++itr == std::string( "foo" ) );
- BOOST_TEST( *++itr == std::string( "." ) );
- BOOST_TEST( ++itr == itr_ck.end() );
- BOOST_TEST( *--itr == std::string( "." ) );
- BOOST_TEST( *--itr == std::string( "foo" ) );
- BOOST_TEST( *--itr == std::string( "c:" ) );
- }
- else
- {
- itr_ck = "///";
- itr = itr_ck.begin();
- CHECK_EQUAL( *itr, "/" );
- BOOST_TEST( ++itr == itr_ck.end() );
- }
-
- path p;
-
- p = "";
- BOOST_TEST( p.relative_path().string() == "" );
- BOOST_TEST( p.parent_path().string() == "" );
- BOOST_TEST( p.filename() == "" );
- BOOST_TEST( p.root_name() == "" );
- BOOST_TEST( p.root_directory() == "" );
- BOOST_TEST( p.root_path().string() == "" );
- BOOST_TEST( !p.has_root_path() );
- BOOST_TEST( !p.has_root_name() );
- BOOST_TEST( !p.has_root_directory() );
- BOOST_TEST( !p.has_relative_path() );
- BOOST_TEST( !p.has_filename() );
- BOOST_TEST( !p.has_parent_path() );
- BOOST_TEST( !p.is_complete() );
-
- p = "/";
- BOOST_TEST( p.relative_path().string() == "" );
- BOOST_TEST( p.parent_path().string() == "" );
- BOOST_TEST( p.filename() == "/" );
- BOOST_TEST( p.root_name() == "" );
- BOOST_TEST( p.root_directory() == "/" );
- BOOST_TEST( p.root_path().string() == "/" );
- BOOST_TEST( p.has_root_path() );
- BOOST_TEST( !p.has_root_name() );
- BOOST_TEST( p.has_root_directory() );
- BOOST_TEST( !p.has_relative_path() );
- BOOST_TEST( p.has_filename() );
- BOOST_TEST( !p.has_parent_path() );
- if ( platform == "POSIX" )
- BOOST_TEST( p.is_complete() );
- else
- BOOST_TEST( !p.is_complete() );
-
- p = "//";
- CHECK_EQUAL( p.relative_path().string(), "" );
- CHECK_EQUAL( p.parent_path().string(), "" );
- CHECK_EQUAL( p.filename(), "//" );
- CHECK_EQUAL( p.root_name(), "//" );
- CHECK_EQUAL( p.root_directory(), "" );
- CHECK_EQUAL( p.root_path().string(), "//" );
- BOOST_TEST( p.has_root_path() );
- BOOST_TEST( p.has_root_name() );
- BOOST_TEST( !p.has_root_directory() );
- BOOST_TEST( !p.has_relative_path() );
- BOOST_TEST( p.has_filename() );
- BOOST_TEST( !p.has_parent_path() );
- BOOST_TEST( !p.is_complete() );
-
-
- p = "///";
- CHECK_EQUAL( p.relative_path().string(), "" );
- CHECK_EQUAL( p.parent_path().string(), "" );
- CHECK_EQUAL( p.filename(), "/" );
- CHECK_EQUAL( p.root_name(), "" );
- CHECK_EQUAL( p.root_directory(), "/" );
- CHECK_EQUAL( p.root_path().string(), "/" );
- BOOST_TEST( p.has_root_path() );
- BOOST_TEST( !p.has_root_name() );
- BOOST_TEST( p.has_root_directory() );
- BOOST_TEST( !p.has_relative_path() );
- BOOST_TEST( p.has_filename() );
- BOOST_TEST( !p.has_parent_path() );
- if ( platform == "POSIX" )
- BOOST_TEST( p.is_complete() );
- else
- BOOST_TEST( !p.is_complete() );
-
- p = ".";
- BOOST_TEST( p.relative_path().string() == "." );
- BOOST_TEST( p.parent_path().string() == "" );
- BOOST_TEST( p.filename() == "." );
- BOOST_TEST( p.root_name() == "" );
- BOOST_TEST( p.root_directory() == "" );
- BOOST_TEST( p.root_path().string() == "" );
- BOOST_TEST( !p.has_root_path() );
- BOOST_TEST( !p.has_root_name() );
- BOOST_TEST( !p.has_root_directory() );
- BOOST_TEST( p.has_relative_path() );
- BOOST_TEST( p.has_filename() );
- BOOST_TEST( !p.has_parent_path() );
- BOOST_TEST( !p.is_complete() );
-
- p = "..";
- BOOST_TEST( p.relative_path().string() == ".." );
- BOOST_TEST( p.parent_path().string() == "" );
- BOOST_TEST( p.filename() == ".." );
- BOOST_TEST( p.root_name() == "" );
- BOOST_TEST( p.root_directory() == "" );
- BOOST_TEST( p.root_path().string() == "" );
- BOOST_TEST( !p.has_root_path() );
- BOOST_TEST( !p.has_root_name() );
- BOOST_TEST( !p.has_root_directory() );
- BOOST_TEST( p.has_relative_path() );
- BOOST_TEST( p.has_filename() );
- BOOST_TEST( !p.has_parent_path() );
- BOOST_TEST( !p.is_complete() );
-
- p = "foo";
- BOOST_TEST( p.relative_path().string() == "foo" );
- BOOST_TEST( p.parent_path().string() == "" );
- BOOST_TEST( p.filename() == "foo" );
- BOOST_TEST( p.root_name() == "" );
- BOOST_TEST( p.root_directory() == "" );
- BOOST_TEST( p.root_path().string() == "" );
- BOOST_TEST( !p.has_root_path() );
- BOOST_TEST( !p.has_root_name() );
- BOOST_TEST( !p.has_root_directory() );
- BOOST_TEST( p.has_relative_path() );
- BOOST_TEST( p.has_filename() );
- BOOST_TEST( !p.has_parent_path() );
- BOOST_TEST( !p.is_complete() );
-
- p = "/foo";
- CHECK_EQUAL( p.relative_path().string(), "foo" );
- CHECK_EQUAL( p.parent_path().string(), "/" );
- CHECK_EQUAL( p.filename(), "foo" );
- CHECK_EQUAL( p.root_name(), "" );
- CHECK_EQUAL( p.root_directory(), "/" );
- CHECK_EQUAL( p.root_path().string(), "/" );
- BOOST_TEST( p.has_root_path() );
- BOOST_TEST( !p.has_root_name() );
- BOOST_TEST( p.has_root_directory() );
- BOOST_TEST( p.has_relative_path() );
- BOOST_TEST( p.has_filename() );
- BOOST_TEST( p.has_parent_path() );
- if ( platform == "POSIX" )
- BOOST_TEST( p.is_complete() );
- else
- BOOST_TEST( !p.is_complete() );
-
- p = "/foo/";
- CHECK_EQUAL( p.relative_path().string(), "foo/" );
- CHECK_EQUAL( p.parent_path().string(), "/foo" );
- CHECK_EQUAL( p.filename(), "." );
- CHECK_EQUAL( p.root_name(), "" );
- CHECK_EQUAL( p.root_directory(), "/" );
- CHECK_EQUAL( p.root_path().string(), "/" );
- BOOST_TEST( p.has_root_path() );
- BOOST_TEST( !p.has_root_name() );
- BOOST_TEST( p.has_root_directory() );
- BOOST_TEST( p.has_relative_path() );
- BOOST_TEST( p.has_filename() );
- BOOST_TEST( p.has_parent_path() );
- if ( platform == "POSIX" )
- BOOST_TEST( p.is_complete() );
- else
- BOOST_TEST( !p.is_complete() );
-
- p = "///foo";
- CHECK_EQUAL( p.relative_path().string(), "foo" );
- CHECK_EQUAL( p.parent_path().string(), "/" );
- CHECK_EQUAL( p.filename(), "foo" );
- CHECK_EQUAL( p.root_name(), "" );
- CHECK_EQUAL( p.root_directory(), "/" );
- CHECK_EQUAL( p.root_path().string(), "/" );
- BOOST_TEST( p.has_root_path() );
- BOOST_TEST( !p.has_root_name() );
- BOOST_TEST( p.has_root_directory() );
- BOOST_TEST( p.has_relative_path() );
- BOOST_TEST( p.has_filename() );
- BOOST_TEST( p.has_parent_path() );
- if ( platform == "POSIX" )
- BOOST_TEST( p.is_complete() );
- else
- BOOST_TEST( !p.is_complete() );
-
- p = "foo/bar";
- BOOST_TEST( p.relative_path().string() == "foo/bar" );
- BOOST_TEST( p.parent_path().string() == "foo" );
- BOOST_TEST( p.filename() == "bar" );
- BOOST_TEST( p.root_name() == "" );
- BOOST_TEST( p.root_directory() == "" );
- BOOST_TEST( p.root_path().string() == "" );
- BOOST_TEST( !p.has_root_path() );
- BOOST_TEST( !p.has_root_name() );
- BOOST_TEST( !p.has_root_directory() );
- BOOST_TEST( p.has_relative_path() );
- BOOST_TEST( p.has_filename() );
- BOOST_TEST( p.has_parent_path() );
- BOOST_TEST( !p.is_complete() );
-
- p = "../foo";
- BOOST_TEST( p.relative_path().string() == "../foo" );
- BOOST_TEST( p.parent_path().string() == ".." );
- BOOST_TEST( p.filename() == "foo" );
- BOOST_TEST( p.root_name() == "" );
- BOOST_TEST( p.root_directory() == "" );
- BOOST_TEST( p.root_path().string() == "" );
- BOOST_TEST( !p.has_root_path() );
- BOOST_TEST( !p.has_root_name() );
- BOOST_TEST( !p.has_root_directory() );
- BOOST_TEST( p.has_relative_path() );
- BOOST_TEST( p.has_filename() );
- BOOST_TEST( p.has_parent_path() );
- BOOST_TEST( !p.is_complete() );
-
- p = "..///foo";
- CHECK_EQUAL( p.relative_path().string(), "..///foo" );
- CHECK_EQUAL( p.parent_path().string(), ".." );
- CHECK_EQUAL( p.filename(), "foo" );
- CHECK_EQUAL( p.root_name(), "" );
- CHECK_EQUAL( p.root_directory(), "" );
- CHECK_EQUAL( p.root_path().string(), "" );
- BOOST_TEST( !p.has_root_path() );
- BOOST_TEST( !p.has_root_name() );
- BOOST_TEST( !p.has_root_directory() );
- BOOST_TEST( p.has_relative_path() );
- BOOST_TEST( p.has_filename() );
- BOOST_TEST( p.has_parent_path() );
- BOOST_TEST( !p.is_complete() );
-
- p = "/foo/bar";
- BOOST_TEST( p.relative_path().string() == "foo/bar" );
- BOOST_TEST( p.parent_path().string() == "/foo" );
- BOOST_TEST( p.filename() == "bar" );
- BOOST_TEST( p.root_name() == "" );
- BOOST_TEST( p.root_directory() == "/" );
- BOOST_TEST( p.root_path().string() == "/" );
- BOOST_TEST( p.has_root_path() );
- BOOST_TEST( !p.has_root_name() );
- BOOST_TEST( p.has_root_directory() );
- BOOST_TEST( p.has_relative_path() );
- BOOST_TEST( p.has_filename() );
- BOOST_TEST( p.has_parent_path() );
- if ( platform == "POSIX" )
- BOOST_TEST( p.is_complete() );
- else
- BOOST_TEST( !p.is_complete() );
-
- // Both POSIX and Windows allow two leading slashs
- // (POSIX meaning is implementation defined)
- PATH_CHECK( path( "//resource" ), "//resource" );
- PATH_CHECK( path( "//resource/" ), "//resource/" );
- PATH_CHECK( path( "//resource/foo" ), "//resource/foo" );
-
- p = path( "//net" );
- CHECK_EQUAL( p.string(), "//net" );
- CHECK_EQUAL( p.relative_path().string(), "" );
- CHECK_EQUAL( p.parent_path().string(), "" );
- CHECK_EQUAL( p.filename(), "//net" );
- CHECK_EQUAL( p.root_name(), "//net" );
- CHECK_EQUAL( p.root_directory(), "" );
- CHECK_EQUAL( p.root_path().string(), "//net" );
- BOOST_TEST( p.has_root_path() );
- BOOST_TEST( p.has_root_name() );
- BOOST_TEST( !p.has_root_directory() );
- BOOST_TEST( !p.has_relative_path() );
- BOOST_TEST( p.has_filename() );
- BOOST_TEST( !p.has_parent_path() );
- BOOST_TEST( !p.is_complete() );
-
- p = path( "//net/" );
- BOOST_TEST( p.relative_path().string() == "" );
- BOOST_TEST( p.parent_path().string() == "//net" );
- BOOST_TEST( p.filename() == "/" );
- BOOST_TEST( p.root_name() == "//net" );
- BOOST_TEST( p.root_directory() == "/" );
- BOOST_TEST( p.root_path().string() == "//net/" );
- BOOST_TEST( p.has_root_path() );
- BOOST_TEST( p.has_root_name() );
- BOOST_TEST( p.has_root_directory() );
- BOOST_TEST( !p.has_relative_path() );
- BOOST_TEST( p.has_filename() );
- BOOST_TEST( p.has_parent_path() );
- BOOST_TEST( p.is_complete() );
-
- p = path( "//net/foo" );
- BOOST_TEST( p.relative_path().string() == "foo" );
- BOOST_TEST( p.parent_path().string() == "//net/" );
- BOOST_TEST( p.filename() == "foo" );
- BOOST_TEST( p.root_name() == "//net" );
- BOOST_TEST( p.root_directory() == "/" );
- BOOST_TEST( p.root_path().string() == "//net/" );
- BOOST_TEST( p.has_root_path() );
- BOOST_TEST( p.has_root_name() );
- BOOST_TEST( p.has_root_directory() );
- BOOST_TEST( p.has_relative_path() );
- BOOST_TEST( p.has_filename() );
- BOOST_TEST( p.has_parent_path() );
- BOOST_TEST( p.is_complete() );
-
- p = path( "//net///foo" );
- CHECK_EQUAL( p.relative_path().string(), "foo" );
- CHECK_EQUAL( p.parent_path().string(), "//net/" );
- CHECK_EQUAL( p.filename(), "foo" );
- CHECK_EQUAL( p.root_name(), "//net" );
- CHECK_EQUAL( p.root_directory(), "/" );
- CHECK_EQUAL( p.root_path().string(), "//net/" );
- BOOST_TEST( p.has_root_path() );
- BOOST_TEST( p.has_root_name() );
- BOOST_TEST( p.has_root_directory() );
- BOOST_TEST( p.has_relative_path() );
- BOOST_TEST( p.has_filename() );
- BOOST_TEST( p.has_parent_path() );
- BOOST_TEST( p.is_complete() );
-
- if ( platform == "Windows" )
- {
- DIR_CHECK( path( "/foo/bar/" ), "\\foo\\bar\\" );
- DIR_CHECK( path( "//foo//bar//" ), "\\\\foo\\bar\\\\" );
- DIR_CHECK( path( "///foo///bar///" ), "\\foo\\\\\\bar\\\\\\" );
-
- DIR_CHECK( path( "\\/foo\\/bar\\/" ), "\\\\foo\\bar\\\\" );
- DIR_CHECK( path( "\\//foo\\//bar\\//" ), "\\foo\\\\\\bar\\\\\\" );
-
-
- DIR_CHECK( path( "\\foo\\bar\\" ), "\\foo\\bar\\" );
- DIR_CHECK( path( "\\\\foo\\\\bar\\\\" ), "\\\\foo\\bar\\\\" );
- DIR_CHECK( path( "\\\\\\foo\\\\\\bar\\\\\\" ), "\\foo\\\\\\bar\\\\\\" );
-
- PATH_CHECK( path( "\\" ), "/" );
- PATH_CHECK( path( "\\f" ), "/f" );
- PATH_CHECK( path( "\\foo" ), "/foo" );
- PATH_CHECK( path( "foo\\bar" ), "foo/bar" );
- PATH_CHECK( path( "foo bar" ), "foo bar" );
- PATH_CHECK( path( "c:" ), "c:" );
- PATH_CHECK( path( "c:/" ), "c:/" );
- PATH_CHECK( path( "c:." ), "c:." );
- PATH_CHECK( path( "c:./foo" ), "c:./foo" );
- PATH_CHECK( path( "c:.\\foo" ), "c:./foo" );
- PATH_CHECK( path( "c:.." ), "c:.." );
- PATH_CHECK( path( "c:/." ), "c:/." );
- PATH_CHECK( path( "c:/.." ), "c:/.." );
- PATH_CHECK( path( "c:/../" ), "c:/../" );
- PATH_CHECK( path( "c:\\..\\" ), "c:/../" );
- PATH_CHECK( path( "c:/../.." ), "c:/../.." );
- PATH_CHECK( path( "c:/../foo" ), "c:/../foo" );
- PATH_CHECK( path( "c:\\..\\foo" ), "c:/../foo" );
- PATH_CHECK( path( "c:../foo" ), "c:../foo" );
- PATH_CHECK( path( "c:..\\foo" ), "c:../foo" );
- PATH_CHECK( path( "c:/../../foo" ), "c:/../../foo" );
- PATH_CHECK( path( "c:\\..\\..\\foo" ), "c:/../../foo" );
- PATH_CHECK( path( "c:foo/.." ), "c:foo/.." );
- PATH_CHECK( path( "c:/foo/.." ), "c:/foo/.." );
- PATH_CHECK( path( "c:/..foo" ), "c:/..foo" );
- PATH_CHECK( path( "c:foo" ), "c:foo" );
- PATH_CHECK( path( "c:/foo" ), "c:/foo" );
- PATH_CHECK( path( "\\\\netname" ), "//netname" );
- PATH_CHECK( path( "\\\\netname\\" ), "//netname/" );
- PATH_CHECK( path( "\\\\netname\\foo" ), "//netname/foo" );
- PATH_CHECK( path( "c:/foo" ), "c:/foo" );
- PATH_CHECK( path( "prn:" ), "prn:" );
-
- p = path( "c:" );
- BOOST_TEST( p.relative_path().string() == "" );
- BOOST_TEST( p.parent_path().string() == "" );
- BOOST_TEST( p.filename() == "c:" );
- BOOST_TEST( p.root_name() == "c:" );
- BOOST_TEST( p.root_directory() == "" );
- BOOST_TEST( p.root_path().string() == "c:" );
- BOOST_TEST( p.has_root_path() );
- BOOST_TEST( p.has_root_name() );
- BOOST_TEST( !p.has_root_directory() );
- BOOST_TEST( !p.has_relative_path() );
- BOOST_TEST( p.has_filename() );
- BOOST_TEST( !p.has_parent_path() );
- BOOST_TEST( !p.is_complete() );
-
- p = path( "c:foo" );
- BOOST_TEST( p.relative_path().string() == "foo" );
- BOOST_TEST( p.parent_path().string() == "c:" );
- BOOST_TEST( p.filename() == "foo" );
- BOOST_TEST( p.root_name() == "c:" );
- BOOST_TEST( p.root_directory() == "" );
- BOOST_TEST( p.root_path().string() == "c:" );
- BOOST_TEST( p.has_root_path() );
- BOOST_TEST( p.has_root_name() );
- BOOST_TEST( !p.has_root_directory() );
- BOOST_TEST( p.has_relative_path() );
- BOOST_TEST( p.has_filename() );
- BOOST_TEST( p.has_parent_path() );
- BOOST_TEST( !p.is_complete() );
-
- p = path( "c:/" );
- BOOST_TEST( p.relative_path().string() == "" );
- BOOST_TEST( p.parent_path().string() == "c:" );
- BOOST_TEST( p.filename() == "/" );
- BOOST_TEST( p.root_name() == "c:" );
- BOOST_TEST( p.root_directory() == "/" );
- BOOST_TEST( p.root_path().string() == "c:/" );
- BOOST_TEST( p.has_root_path() );
- BOOST_TEST( p.has_root_name() );
- BOOST_TEST( p.has_root_directory() );
- BOOST_TEST( !p.has_relative_path() );
- BOOST_TEST( p.has_filename() );
- BOOST_TEST( p.has_parent_path() );
- BOOST_TEST( p.is_complete() );
-
- p = path( "c:.." );
- BOOST_TEST( p.relative_path().string() == ".." );
- BOOST_TEST( p.parent_path().string() == "c:" );
- BOOST_TEST( p.filename() == ".." );
- BOOST_TEST( p.root_name() == "c:" );
- BOOST_TEST( p.root_directory() == "" );
- BOOST_TEST( p.root_path().string() == "c:" );
- BOOST_TEST( p.has_root_path() );
- BOOST_TEST( p.has_root_name() );
- BOOST_TEST( !p.has_root_directory() );
- BOOST_TEST( p.has_relative_path() );
- BOOST_TEST( p.has_filename() );
- BOOST_TEST( p.has_parent_path() );
- BOOST_TEST( !p.is_complete() );
-
- p = path( "c:/foo" );
- CHECK_EQUAL( p.relative_path().string(), "foo" );
- CHECK_EQUAL( p.parent_path().string(), "c:/" );
- CHECK_EQUAL( p.filename(), "foo" );
- CHECK_EQUAL( p.root_name(), "c:" );
- CHECK_EQUAL( p.root_directory(), "/" );
- CHECK_EQUAL( p.root_path().string(), "c:/" );
- BOOST_TEST( p.has_root_path() );
- BOOST_TEST( p.has_root_name() );
- BOOST_TEST( p.has_root_directory() );
- BOOST_TEST( p.has_relative_path() );
- BOOST_TEST( p.has_filename() );
- BOOST_TEST( p.has_parent_path() );
- BOOST_TEST( p.is_complete() );
-
- p = path( "c://foo" );
- CHECK_EQUAL( p.relative_path().string(), "foo" );
- CHECK_EQUAL( p.parent_path().string(), "c:/" );
- CHECK_EQUAL( p.filename(), "foo" );
- CHECK_EQUAL( p.root_name(), "c:" );
- CHECK_EQUAL( p.root_directory(), "/" );
- CHECK_EQUAL( p.root_path().string(), "c:/" );
- BOOST_TEST( p.has_root_path() );
- BOOST_TEST( p.has_root_name() );
- BOOST_TEST( p.has_root_directory() );
- BOOST_TEST( p.has_relative_path() );
- BOOST_TEST( p.has_filename() );
- BOOST_TEST( p.has_parent_path() );
- BOOST_TEST( p.is_complete() );
-
- p = path( "c:\\foo\\bar" );
- CHECK_EQUAL( p.relative_path().string(), "foo/bar" );
- CHECK_EQUAL( p.parent_path().string(), "c:/foo" );
- CHECK_EQUAL( p.filename(), "bar" );
- CHECK_EQUAL( p.root_name(), "c:" );
- CHECK_EQUAL( p.root_directory(), "/" );
- CHECK_EQUAL( p.root_path().string(), "c:/" );
- BOOST_TEST( p.has_root_path() );
- BOOST_TEST( p.has_root_name() );
- BOOST_TEST( p.has_root_directory() );
- BOOST_TEST( p.has_relative_path() );
- BOOST_TEST( p.has_filename() );
- BOOST_TEST( p.has_parent_path() );
- BOOST_TEST( p.is_complete() );
-
- p = path( "prn:" );
- BOOST_TEST( p.relative_path().string() == "" );
- BOOST_TEST( p.parent_path().string() == "" );
- BOOST_TEST( p.filename() == "prn:" );
- BOOST_TEST( p.root_name() == "prn:" );
- BOOST_TEST( p.root_directory() == "" );
- BOOST_TEST( p.root_path().string() == "prn:" );
- BOOST_TEST( p.has_root_path() );
- BOOST_TEST( p.has_root_name() );
- BOOST_TEST( !p.has_root_directory() );
- BOOST_TEST( !p.has_relative_path() );
- BOOST_TEST( p.has_filename() );
- BOOST_TEST( !p.has_parent_path() );
- BOOST_TEST( !p.is_complete() );
-
- p = path( "\\\\net\\\\\\foo" );
- CHECK_EQUAL( p.relative_path().string(), "foo" );
- CHECK_EQUAL( p.parent_path().string(), "//net/" );
- CHECK_EQUAL( p.filename(), "foo" );
- CHECK_EQUAL( p.root_name(), "//net" );
- CHECK_EQUAL( p.root_directory(), "/" );
- CHECK_EQUAL( p.root_path().string(), "//net/" );
- BOOST_TEST( p.has_root_path() );
- BOOST_TEST( p.has_root_name() );
- BOOST_TEST( p.has_root_directory() );
- BOOST_TEST( p.has_relative_path() );
- BOOST_TEST( p.has_filename() );
- BOOST_TEST( p.has_parent_path() );
- BOOST_TEST( p.is_complete() );
-
- itr_ck = path( "c:" );
- BOOST_TEST( *itr_ck.begin() == std::string( "c:" ) );
- BOOST_TEST( boost::next( itr_ck.begin() ) == itr_ck.end() );
- BOOST_TEST( boost::prior( itr_ck.end() ) == itr_ck.begin() );
- BOOST_TEST( *boost::prior( itr_ck.end() ) == std::string( "c:" ) );
-
- itr_ck = path( "c:/" );
- BOOST_TEST( *itr_ck.begin() == std::string( "c:" ) );
- BOOST_TEST( *boost::next( itr_ck.begin() ) == std::string( "/" ) );
- BOOST_TEST( boost::next( boost::next( itr_ck.begin() )) == itr_ck.end() );
- BOOST_TEST( boost::prior( boost::prior( itr_ck.end() )) == itr_ck.begin() );
- BOOST_TEST( *boost::prior( itr_ck.end() ) == std::string( "/" ) );
- BOOST_TEST( *boost::prior( boost::prior( itr_ck.end() )) == std::string( "c:" ) );
-
- itr_ck = path( "c:foo" );
- BOOST_TEST( *itr_ck.begin() == std::string( "c:" ) );
- BOOST_TEST( *boost::next( itr_ck.begin() ) == std::string( "foo" ) );
- BOOST_TEST( boost::next(boost::next( itr_ck.begin() )) == itr_ck.end() );
- BOOST_TEST( boost::prior(boost::prior( itr_ck.end() )) == itr_ck.begin() );
- BOOST_TEST( *boost::prior( itr_ck.end() ) == std::string( "foo" ) );
- BOOST_TEST( *boost::prior(boost::prior( itr_ck.end() )) == std::string( "c:" ) );
-
- itr_ck = path( "c:/foo" );
- BOOST_TEST( *itr_ck.begin() == std::string( "c:" ) );
- BOOST_TEST( *boost::next( itr_ck.begin() ) == std::string( "/" ) );
- BOOST_TEST( *boost::next( boost::next( itr_ck.begin() )) == std::string( "foo" ) );
- BOOST_TEST( boost::next( boost::next( boost::next( itr_ck.begin() ))) == itr_ck.end() );
- BOOST_TEST( boost::prior( boost::prior( boost::prior( itr_ck.end() ))) == itr_ck.begin() );
- BOOST_TEST( *boost::prior( itr_ck.end() ) == std::string( "foo" ) );
- BOOST_TEST( *boost::prior( boost::prior( itr_ck.end() )) == std::string( "/" ) );
- BOOST_TEST( *boost::prior( boost::prior( boost::prior( itr_ck.end() ))) == std::string( "c:" ) );
-
- itr_ck = path( "//net" );
- BOOST_TEST( *itr_ck.begin() == std::string( "//net" ) );
- BOOST_TEST( boost::next( itr_ck.begin() ) == itr_ck.end() );
- BOOST_TEST( boost::prior( itr_ck.end() ) == itr_ck.begin() );
- BOOST_TEST( *boost::prior( itr_ck.end() ) == std::string( "//net" ) );
-
- itr_ck = path( "//net/" );
- CHECK_EQUAL( *itr_ck.begin(), "//net" );
- CHECK_EQUAL( *boost::next( itr_ck.begin() ), "/" );
- BOOST_TEST( boost::next(boost::next( itr_ck.begin() )) == itr_ck.end() );
- BOOST_TEST( boost::prior(boost::prior( itr_ck.end() )) == itr_ck.begin() );
- CHECK_EQUAL( *boost::prior( itr_ck.end() ), "/" );
- CHECK_EQUAL( *boost::prior(boost::prior( itr_ck.end() )), "//net" );
-
- itr_ck = path( "//net/foo" );
- BOOST_TEST( *itr_ck.begin() == std::string( "//net" ) );
- BOOST_TEST( *boost::next( itr_ck.begin() ) == std::string( "/" ) );
- BOOST_TEST( *boost::next(boost::next( itr_ck.begin() )) == std::string( "foo" ) );
- BOOST_TEST( boost::next(boost::next(boost::next( itr_ck.begin() ))) == itr_ck.end() );
- BOOST_TEST( boost::prior(boost::prior(boost::prior( itr_ck.end() ))) == itr_ck.begin() );
- BOOST_TEST( *boost::prior( itr_ck.end() ) == std::string( "foo" ) );
- BOOST_TEST( *boost::prior(boost::prior( itr_ck.end() )) == std::string( "/" ) );
- BOOST_TEST( *boost::prior(boost::prior(boost::prior( itr_ck.end() ))) == std::string( "//net" ) );
-
- itr_ck = path( "prn:" );
- BOOST_TEST( *itr_ck.begin() == std::string( "prn:" ) );
- BOOST_TEST( boost::next( itr_ck.begin() ) == itr_ck.end() );
- BOOST_TEST( boost::prior( itr_ck.end() ) == itr_ck.begin() );
- BOOST_TEST( *boost::prior( itr_ck.end() ) == std::string( "prn:" ) );
- } // Windows
-
- else
- { // POSIX
- DIR_CHECK( path( "/foo/bar/" ), "/foo/bar/" );
- DIR_CHECK( path( "//foo//bar//" ), "//foo//bar//" );
- DIR_CHECK( path( "///foo///bar///" ), "///foo///bar///" );
-
- p = path( "/usr/local/bin:/usr/bin:/bin" );
- BOOST_TEST( p.file_string() == "/usr/local/bin:/usr/bin:/bin" );
- } // POSIX
-
- // test non-member functions, particularly operator overloads
-
- path e, e2;
- std::string es, es2;
- char ecs[] = "";
- char ecs2[] = "";
-
- char acs[] = "a";
- std::string as(acs);
- path a( as );
-
- char acs2[] = "a";
- std::string as2(acs2);
- path a2( as2 );
-
- char bcs[] = "b";
- std::string bs(bcs);
- path b( bs );
-
- // swap
- a.swap( b );
- BOOST_TEST( a.string() == "b" );
- BOOST_TEST( b.string() == "a" );
- fs::swap( a, b );
- BOOST_TEST( a.string() == "a" );
- BOOST_TEST( b.string() == "b" );
-
- // probe operator /
- BOOST_TEST( (b / a).string() == "b/a" );
- BOOST_TEST( (bs / a).string() == "b/a" );
- BOOST_TEST( (bcs / a).string() == "b/a" );
- BOOST_TEST( (b / as).string() == "b/a" );
- BOOST_TEST( (b / acs).string() == "b/a" );
-
- // probe operator <
- BOOST_TEST( !(e < e2) );
- BOOST_TEST( !(es < e2) );
- BOOST_TEST( !(ecs < e2) );
- BOOST_TEST( !(e < es2) );
- BOOST_TEST( !(e < ecs2) );
-
- BOOST_TEST( e < a );
- BOOST_TEST( es < a );
- BOOST_TEST( ecs < a );
- BOOST_TEST( e < as );
- BOOST_TEST( e < acs );
-
- BOOST_TEST( a < b );
- BOOST_TEST( as < b );
- BOOST_TEST( acs < b );
- BOOST_TEST( a < bs );
- BOOST_TEST( a < bcs );
-
- BOOST_TEST( !(a < a2) );
- BOOST_TEST( !(as < a2) );
- BOOST_TEST( !(acs < a2) );
- BOOST_TEST( !(a < as2) );
- BOOST_TEST( !(a < acs2) );
-
- // make sure basic_path overloads don't conflict with std::string overloads
-
- BOOST_TEST( !(as < as) );
- BOOST_TEST( !(as < acs) );
- BOOST_TEST( !(acs < as) );
-
- // reality check character set is as expected
- BOOST_TEST( std::string("a.b") < std::string("a/b") );
- // verify compare is actually lexicographical
- BOOST_TEST( path("a/b") < path("a.b") );
-
- // make sure the derivative operators also work
- BOOST_TEST( a == a2 );
- BOOST_TEST( as == a2 );
- BOOST_TEST( acs == a2 );
- BOOST_TEST( a == as2 );
- BOOST_TEST( a == acs2 );
-
- BOOST_TEST( a != b );
- BOOST_TEST( as != b );
- BOOST_TEST( acs != b );
- BOOST_TEST( a != bs );
- BOOST_TEST( a != bcs );
-
- BOOST_TEST( b > a );
- BOOST_TEST( b > as );
- BOOST_TEST( b > acs );
- BOOST_TEST( bs > a);
- BOOST_TEST( bcs > a);
-
- BOOST_TEST( !(a2 > a) );
- BOOST_TEST( !(a2 > as) );
- BOOST_TEST( !(a2 > acs) );
- BOOST_TEST( !(as2 > a) );
- BOOST_TEST( !(acs2 > a) );
-
- BOOST_TEST( a <= b );
- BOOST_TEST( as <= b );
- BOOST_TEST( acs <= b );
- BOOST_TEST( a <= bs );
- BOOST_TEST( a <= bcs );
-
- BOOST_TEST( a <= a2 );
- BOOST_TEST( as <= a2 );
- BOOST_TEST( acs <= a2 );
- BOOST_TEST( a <= as2 );
- BOOST_TEST( a <= acs2 );
-
- BOOST_TEST( b >= a );
- BOOST_TEST( bs >= a );
- BOOST_TEST( bcs >= a );
- BOOST_TEST( b >= as );
- BOOST_TEST( b >= acs );
-
- BOOST_TEST( a2 >= a );
- BOOST_TEST( as2 >= a );
- BOOST_TEST( acs2 >= a );
- BOOST_TEST( a2 >= as );
- BOOST_TEST( a2 >= acs );
-
-// extension() tests
-
- BOOST_TEST( path("a/b").extension() == "" );
- BOOST_TEST( path("a.b/c").extension() == "" );
- BOOST_TEST( path("a/b.txt").extension() == ".txt" );
- BOOST_TEST( path("a/b.").extension() == "." );
- BOOST_TEST( path("a.b.c").extension() == ".c" );
- BOOST_TEST( path("a.b.c.").extension() == "." );
- BOOST_TEST( path("").extension() == "" );
- BOOST_TEST( path("a/").extension() == "." );
-
-// stem() tests
-
- BOOST_TEST( path("b").stem() == "b" );
- BOOST_TEST( path("a/b.txt").stem() == "b" );
- BOOST_TEST( path("a/b.").stem() == "b" );
- BOOST_TEST( path("a.b.c").stem() == "a.b" );
- BOOST_TEST( path("a.b.c.").stem() == "a.b.c" );
- BOOST_TEST( path("").stem() == "" );
-
-// replace_extension() tests
-
- BOOST_TEST( path("a.txt").replace_extension("").string() == "a" );
- BOOST_TEST( path("a.txt").replace_extension(".").string() == "a." );
- BOOST_TEST( path("a.txt").replace_extension(".tex").string() == "a.tex" );
- BOOST_TEST( path("a.txt").replace_extension("tex").string() == "a.tex" );
- BOOST_TEST( path("a.").replace_extension(".tex").string() == "a.tex" );
- BOOST_TEST( path("a.").replace_extension("tex").string() == "a.tex" );
- BOOST_TEST( path("a").replace_extension(".txt").string() == "a.txt" );
- BOOST_TEST( path("a").replace_extension("txt").string() == "a.txt" );
- BOOST_TEST( path("a.b.txt" ).replace_extension(".tex").string() == "a.b.tex" );
- BOOST_TEST( path("a.b.txt" ).replace_extension("tex").string() == "a.b.tex" );
- // see the rationale in html docs for explanation why this works
- BOOST_TEST( path("").replace_extension(".png").string() == ".png" );
- BOOST_TEST_EQ(path("a.txt/b").replace_extension(".c"), "a.txt/b.c"); // ticket 4702
-
- // inserter and extractor tests
-# if !defined( BOOST_MSVC ) || BOOST_MSVC > 1300 // bypass VC++ 7.0 and earlier
- std::cout << "\nInserter and extractor test...";
- std::stringstream ss;
- ss << fs::path( "foo bar" ) << std::endl; // ensure space in path roundtrips
- fs::path round_trip;
- ss >> round_trip;
- BOOST_TEST( round_trip.string() == "foo bar" );
- std::cout << round_trip.string() << "..." << round_trip << " complete\n";
-# endif
-
- return ::boost::report_errors();
-}
diff --git a/libs/filesystem/v2/test/wide_test.cpp b/libs/filesystem/v2/test/wide_test.cpp
deleted file mode 100644
index 1d1b7b0538..0000000000
--- a/libs/filesystem/v2/test/wide_test.cpp
+++ /dev/null
@@ -1,169 +0,0 @@
-// Boost wide_test.cpp -----------------------------------------------------//
-
-// Copyright Beman Dawes 2005
-
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// See library home page at http://www.boost.org/libs/filesystem
-
-#define BOOST_FILESYSTEM_VERSION 2
-
-#include <boost/config/warning_disable.hpp>
-
-// See deprecated_test for tests of deprecated features
-#ifndef BOOST_FILESYSTEM_NO_DEPRECATED
-# define BOOST_FILESYSTEM_NO_DEPRECATED
-#endif
-#ifndef BOOST_SYSTEM_NO_DEPRECATED
-# define BOOST_SYSTEM_NO_DEPRECATED
-#endif
-
-#include <boost/filesystem/config.hpp>
-# ifdef BOOST_FILESYSTEM2_NARROW_ONLY
-# error This compiler or standard library does not support wide-character strings or paths
-# endif
-
-#include <boost/filesystem/operations.hpp>
-#include <boost/filesystem/fstream.hpp>
-#include <boost/scoped_array.hpp>
-#include <boost/detail/lightweight_test.hpp>
-#include <boost/detail/lightweight_main.hpp>
-
-#include <boost/filesystem/detail/utf8_codecvt_facet.hpp>
-
-namespace fs = boost::filesystem;
-
-#include <iostream>
-#include <iomanip>
-#include <ios>
-#include <string>
-#include <cerrno>
-
-#include "lpath.hpp"
-
-namespace
-{
- bool cleanup = true;
-
- template< class Path >
- void create_file( const Path & ph, const std::string & contents )
- {
- // TODO: why missing symbol error on Darwin
-# ifndef __APPLE__
- fs::ofstream f( ph );
-# else
- std::ofstream f( ph.external_file_string().c_str() );
-# endif
- if ( !f )
- BOOST_FILESYSTEM_THROW( fs::basic_filesystem_error<Path>( "wide_test create_file",
- ph,
- boost::system::error_code( errno, boost::system::generic_category() ) ) );
- if ( !contents.empty() ) f << contents;
- }
-
- template< class Path >
- void test( const Path & dir, const Path & file, const Path & dot )
- {
- Path tmp;
- tmp = file;
- BOOST_TEST( tmp == file );
- tmp = file.string();
- BOOST_TEST( tmp == file );
- tmp = file.string().c_str();
- BOOST_TEST( tmp == file );
- fs::initial_path<Path>();
- fs::current_path<Path>();
- fs::remove( dir / file );
- fs::remove( dir );
- BOOST_TEST( !fs::exists( dir / file ) );
- BOOST_TEST( !fs::exists( dir ) );
- BOOST_TEST( fs::create_directory( dir ) );
- BOOST_TEST( fs::exists( dir ) );
- BOOST_TEST( fs::is_directory( dir ) );
- BOOST_TEST( fs::is_empty( dir ) );
- create_file( dir / file, "wide_test file contents" );
- BOOST_TEST( fs::exists( dir / file ) );
- BOOST_TEST( !fs::is_directory( dir / file ) );
- BOOST_TEST( !fs::is_empty( dir / file ) );
- BOOST_TEST( fs::file_size( dir / file ) == 23 || fs::file_size( dir / file ) == 24 );
- BOOST_TEST( fs::equivalent( dir / file, dot / dir / file ) );
- BOOST_TEST( fs::last_write_time( dir / file ) );
- typedef fs::basic_directory_iterator<Path> it_t;
- int count(0);
- for ( it_t it( dir ); it != it_t(); ++it )
- {
- BOOST_TEST( it->path() == dir / file );
- BOOST_TEST( !fs::is_empty( it->path() ) );
- ++count;
- }
- BOOST_TEST( count == 1 );
- if ( cleanup )
- {
- fs::remove( dir / file );
- fs::remove( dir );
- }
- }
-
- // test boost::detail::utf8_codecvt_facet - even though it is not used by
- // Boost.Filesystem on Windows, early detection of problems is worthwhile.
- std::string to_external( const std::wstring & src )
- {
- fs::detail::utf8_codecvt_facet convertor;
- std::size_t work_size( convertor.max_length() * (src.size()+1) );
- boost::scoped_array<char> work( new char[ work_size ] );
- std::mbstate_t state;
- const wchar_t * from_next;
- char * to_next;
- if ( convertor.out(
- state, src.c_str(), src.c_str()+src.size(), from_next, work.get(),
- work.get()+work_size, to_next ) != std::codecvt_base::ok )
- boost::throw_exception( std::runtime_error("to_external conversion error") );
- *to_next = '\0';
- return std::string( work.get() );
- }
-
-} // unnamed namespace
-
-// main ------------------------------------------------------------------------------//
-
-int cpp_main( int argc, char * /*argv*/[] )
-{
-
- if ( argc > 1 ) cleanup = false;
-
- // So that tests are run with known encoding, use Boost UTF-8 codecvt
- std::locale global_loc = std::locale();
- std::locale loc( global_loc, new fs::detail::utf8_codecvt_facet );
- fs::wpath_traits::imbue( loc );
-
- std::string s( to_external( L"\x2780" ) );
- for (std::size_t i = 0; i < s.size(); ++i )
- std::cout << std::hex << int( static_cast<unsigned char>(s[i]) ) << " ";
- std::cout << std::dec << std::endl;
- BOOST_TEST( to_external( L"\x2780" ).size() == 3 );
- BOOST_TEST( to_external( L"\x2780" ) == "\xE2\x9E\x80" );
-
- // test fs::path
- std::cout << "begin path test..." << std::endl;
- test( fs::path( "foo" ), fs::path( "bar" ), fs::path( "." ) );
- std::cout << "complete\n\n";
-
- // test fs::wpath
- // x2780 is circled 1 against white background == e2 9e 80 in UTF-8
- // x2781 is circled 2 against white background == e2 9e 81 in UTF-8
- std::cout << "begin wpath test..." << std::endl;
- test( fs::wpath( L"\x2780" ), fs::wpath( L"\x2781" ), fs::wpath( L"." ) );
- std::cout << "complete\n\n";
-
- // test user supplied basic_path
- const long dir[] = { 'b', 'o', 'o', 0 };
- const long file[] = { 'f', 'a', 'r', 0 };
- const long dot[] = { '.', 0 };
- std::cout << "begin lpath test..." << std::endl;
- test( ::user::lpath( dir ), ::user::lpath( file ), ::user::lpath( dot ) );
- std::cout << "complete\n\n";
-
- return ::boost::report_errors();
-}
diff --git a/libs/filesystem/v3/build/Jamfile.v2 b/libs/filesystem/v3/build/Jamfile.v2
deleted file mode 100644
index c35cbbb057..0000000000
--- a/libs/filesystem/v3/build/Jamfile.v2
+++ /dev/null
@@ -1,32 +0,0 @@
-# Boost Filesystem Library Build Jamfile
-
-# (C) Copyright Beman Dawes 2002-2006
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or www.boost.org/LICENSE_1_0.txt)
-
-
-# See library home page at http://www.boost.org/libs/filesystem
-
-project boost/filesystem
- : source-location ../src
- : usage-requirements # pass these requirement to dependents (i.e. users)
- <link>shared:<define>BOOST_FILESYSTEM_DYN_LINK=1
- ;
-
-SOURCES =
- operations path path_traits portability unique_path utf8_codecvt_facet windows_file_codecvt codecvt_error_category ;
-
-lib boost_filesystem
- : $(SOURCES).cpp ../../system/build//boost_system
- : <link>shared:<define>BOOST_FILESYSTEM_DYN_LINK=1 # tell source we're building dll's
- :
- : # Boost.Filesystem uses some of Boost.System functions in inlined/templated
- # functions, so clients that use Boost.Filesystem will have direct references
- # to Boost.System symbols. On Windows, Darwin, and some other platforms, this
- # means those clients have to be directly linked to Boost.System. For static
- # linking this happens anyway, but for shared we need to make it happen. Since
- # doing so is harmless even when not needed, we do it for all platforms.
- <link>shared:<library>../../system/build//boost_system
- ;
-
-boost-install boost_filesystem ; \ No newline at end of file
diff --git a/libs/filesystem/v3/doc/src/build.bat b/libs/filesystem/v3/doc/src/build.bat
deleted file mode 100644
index c787591e8e..0000000000
--- a/libs/filesystem/v3/doc/src/build.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-del tr2.html >nul
-mmp TARGET=TR2 source.html tr2.html
-del reference.html >nul
-mmp TARGET=BOOST source.html reference.html
diff --git a/libs/filesystem/v3/doc/src/tr2_snippets.html b/libs/filesystem/v3/doc/src/tr2_snippets.html
deleted file mode 100644
index d01df92b2b..0000000000
--- a/libs/filesystem/v3/doc/src/tr2_snippets.html
+++ /dev/null
@@ -1,310 +0,0 @@
-<html>
-
-<head>
-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<title>New Page 1</title>
-</head>
-
-<body>
-
-$id frontmatter=
- <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="579">
- <tr>
- <td width="153" align="left" valign="top">Document number:</td>
- <td width="426">N3335=12-0025</td>
- </tr>
- <tr>
- <td width="153" align="left" valign="top">Date:</td>
- <td width="426">
- <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%Y-%m-%d" startspan -->2012-01-13<!--webbot bot="Timestamp" endspan i-checksum="12045" --></td>
- </tr>
- <tr>
- <td width="153" align="left" valign="top">Project:</td>
- <td width="426">Programming Language C++, Library Working Group</td>
- </tr>
- <tr>
- <td width="153" align="left" valign="top">Reply-to:</td>
- <td width="426">Beman Dawes &lt;bdawes at acm dot org&gt;</td>
- </tr>
- </table>
-
-
-<h1>Filesystem Library for C++11/TR2 (Revision 1)</h1>
-
-
-<p>This paper proposes that the&nbsp;filesystem library component of <i>C++ Standard
-Library Technical Report 2</i> be based on Version 3 of the Boost Filesystem
-Library (see <a href="http://www.boost.org/libs/filesystem">
-www.boost.org/libs/filesystem</a>). Preliminary wording is provided. A
-<a href="#TODO">TODO</a> list identifies remaining work to be done.</p>
-
-
-<h2>Revision history</h2>
-
-
-<p><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3335.html">
-N3335=12-0025</a>, Filesystem Library for C++11/TR2 (Revision 1). Changes
-include:</p>
-
-
- <ul>
- <li>Regenerated the proposed wording from the Boost Filesystem library
- reference documentation, using an automated process. This process reduces
- the likelihood of inadvertent discrepancies between descriptions.</li>
- <li>An <a href="#Issues-List">Issues list</a> was added, seeded with issues
- raised by the LWG review of N3239 at the Bloomington meeting, and private
- communications from LWG members.</li>
- <li>Namespace changed to <code>files</code> as an experiment. Made this
- issue number 1 so the LWG can pass judgement.</li>
- <li>New functions were added, suggested by David Svoboda, to generate
- canonical paths and manage permissions.</li>
- <li>More C++11 functionality was applied. This process is still incomplete,
- however.</li>
- <li>Added proposed changes to header &lt;fstream&gt;. The previous paper had
- inadvertently supplied the wrong wording.</li>
- <li>Continued the general cleanup of wording.</li>
-</ul>
-
-
-<p><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3239.html">
-N3239 = 11-0009</a>, Filesystem Library Update for TR2 (Preliminary), reflected
-changes made to the Boost library version 3 since the previously accepted
-committee paper:</p>
-
-
- <ul>
- <li>A single class <code>path</code> handles all aspects of
- internationalization, replacing the previous template and its <code>path</code>
- and <code>wpath</code> instantiations. Character types <code>char</code>,
- <code>wchar_t</code>, <code>char16_t</code>, and <code>char32_t</code> are
- supported. This is a major simplification of the path abstraction,
- particularly for functions that take path arguments. This change was based
- on a suggestion by Peter Dimov.</li>
- <li>Several operational functions have been added, including much better
- symlink support, the ability to resize a file, and the ability to generate a
- unique path.</li>
- <li>Support for error reporting via <code>error_code</code> is now uniform
- throughout the operations functions.</li>
- <li>Several functions have been renamed, based on feedback from users.</li>
- </ul>
-
-
-<p><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1975.html">
-N1975 = 06-0045</a>, Filesystem Library Proposal for TR2 (Revision 3), was
-adopted by the committee in April, 2006, at the Berlin meeting. Shortly
-afterward the Library Working Group set aside work on TR2 to concentrate on
-C++0x.</p>
-
-
-<h2>Motivation and Scope</h2>
-
-
-<p>The motivation and scope for a filesystem library were described in <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1975.html">
-N1975</a>, and are not repeated here. A minor scope reduction is that an
-addition to the current C++ runtime library is no longer needed.</p>
-
-
-<p>Boost Filesystem Version 3 introduced a single path type that interoperates well with both <code>
-basic_string</code> and user defined string types. Thus the following Design
-alternatives paragraph is no long applicable:</p>
-
-
- <blockquote>
-
-
-<p><strike><i>Single path type which can at runtime accept narrow or wide character
-pathnames.</i> Although certainly interesting, and possibly superior, such a
-design would not interoperate well with the current Standard Library's
-compile-time typed <code>basic_string</code>. A new runtime polymorphic string
-class would be the best place to experiment with this concept, not a path class.</strike></p>
-
-
- </blockquote>
-
-
- <h2><a name="TODO">TODO</a></h2>
- <ul>
- <li>Apply more C++0X features. Boost.Filesystem needs to implement these to verify their
- application is correct.</li>
- <li>Boost.Filesystem needs to implement <code>char16_t</code> and <code>char32_t</code> support to verify the
- specification for these is correct.</li>
- <li>Replace path inserter and extractor <i>Effects</i> with prose, since the
- current wording relies on
- <code>boost::io::quoted</code></span>.</li>
- <li>The Boost implementation has more class path non-member relational
- functions that shown in the docs, and the specific set of relational
- functions varies between Windows and POSIX. Figure out what's happening and
- document it.</li>
- <li><code><a href="#Source">Source</a></code> is not specified as actually
- implemented. Expose <code>path_traits</code>?</li>
- <li><i>Effects</i> for <code>copy</code> and <code>copy_directory</code>
- need to be reviewed, revised, tested, peer reviewed.</li>
- <li>Review changes to header &lt;fstream&gt;. Add semantics. Add section
- names. Verify still in sync with WP.</li>
- </ul>
-
- $endid
-
-$id wording_prefix=
-<h2>Proposed Wording</h2>
-
-<p><span style="font-style: italic; background-color: rgb(224, 224, 224);">
-Gray-shaded italic text is commentary on the proposal. It is not to be added to
-the TR.</span></p>
-<p><span style="font-style: italic; background-color: #E0E0E0">Add the following
-to the Technical Report's front matter:</span></p>
-<p>The following standard contains provisions which, through reference in this
-text, constitute provisions of this Technical Report. At the time of
-publication, the editions indicated were valid. All standards are subject to
-revision, and parties to agreements based on this Technical Report are
-encouraged to investigate the possibility of applying the most recent editions
-of the standard indicated below. Members of IEC and ISO maintain registers of
-currently valid International Standards.</p>
-<ul>
- <li>ISO/IEC 9945:2003, <i>Portable Operating System Interface (POSIX<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1975.html#Footnote-1"><sup>1</sup></a>),
- part 1 (Base Definitions) and part 2 (System Interfaces)</i>, both as
- corrected by their respective 2004 Correction 1 documents.<p>[<i>Note:</i>
- ISO/IEC 9945:2003 is also IEEE&nbsp;Std&nbsp;1003.1-2001, and The Open Group Base
- Specifications, Issue 6, and is also known as The Single Unix<font face="Times New Roman"><sup><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1975.html#Footnote-2">2</a></sup><i><b>
- </b></i>Specification, Version 3. It is available from each of those
- organizations, and may be read online or downloaded from
- <a href="http://www.unix.org/single_unix_specification/">
- www.unix.org/single_unix_specification/</a> <i>-- end note</i>]</font></li>
-</ul>
-<p>ISO/IEC 9945:2003, with the indicated corrections, is hereinafter called <i>
-POSIX</i>.</p>
-<p><a name="Footnote-1">Footnote 1</a>: <i>POSIX</i>® is a registered trademark
-of The IEEE.</p>
-<p><a name="Footnote-2">Footnote 2</a>: <i>UNIX</i>® is a registered trademark
-of The Open Group.</p>
-<p><span style="font-style: italic; background-color: #E0E0E0">Add the following
-to the Technical Report as a new Clause:</span></p>
-<h2>Filesystem Library</h2>
-
-$endid
-
-$id wording_suffix=
-<p><span style="font-style: italic; background-color: #E0E0E0">End of new
-Clause.</span></p>
-<p dir="ltr"><span style="font-style: italic; background-color: #E0E0E0">Modify <a name="File-streams">File streams</a>
-[fstreams] as follows:</span></p>
-<p><span style="font-style: italic; background-color: #E0E0E0">To class
-basic_filebuf public members add:</span></p>
-<blockquote>
-<pre>basic_filebuf&lt;charT,traits&gt;* open(const path&amp; p, std::ios_base::openmode mode);</pre>
-
-</blockquote>
-<p><span style="font-style: italic; background-color: #E0E0E0">To class
-basic_ifstream public members add:</span></p>
-
-<blockquote>
-<pre>explicit basic_ifstream(const path&amp; p, std::ios_base::openmode mode=std::ios_base::in)</pre>
-
-<pre>void open(const path&amp; p, std::ios_base::openmode mode=std::ios_base::in);</pre>
-
-</blockquote>
-<p><span style="font-style: italic; background-color: #E0E0E0">To class
-basic_ofstream public members add:</span></p>
-
-<blockquote>
- <pre>explicit basic_ofstream(const path&amp; p, std::ios_base::openmode mode=std::ios_base::out);</pre>
- <pre>void open(const path&amp; p, std::ios_base::openmode mode=std::ios_base::out);</pre>
-</blockquote>
-<p><span style="font-style: italic; background-color: #E0E0E0">To class
-basic_fstream public members add:</span></p>
-<blockquote>
- <pre>explicit basic_fstream(const path&amp; p,
- std::ios_base::openmode mode=std::ios_base::in | std::ios_base::out);</pre>
- <pre>void open(const path&amp; p,
- std::ios_base::openmode mode=std::ios_base::in | std::ios_base::out);</pre>
-</blockquote>
-<p>
-
-<span style="font-style: italic; background-color: rgb(224, 224, 224);">
-End of proposed wording.</span> </p>
-<hr>
-<h2><a name="Issues-List">Issues List</a></h2>
-<hr>
-<h3>Issue 1: What is the appropriate namespace?</h3>
-<h4>Discussion</h4>
-<p>The proposal places the library in <code>namespace std::tr2::$SUBNAMESPACE;</code>.
-Rationale for a sub-namespace is that the library uses several names that don't
-seem appropriate for namespace <code>tr2</code> since full standardization would
-then put the names into <code>std</code>. The function names <code>remove</code>
-and <code>rename</code> are of particular concern because these functions differ
-in behavior from current standard library functions with those names. It also
-doesn't seem desirable to preempt names like <code>equivalent</code> and <code>
-status</code>.</p>
-<p>The Boost Filesystem library used <code>namespace boost::filesystem</code>,
-but that always seemed a bit too long.</p>
-<h4>Proposed resolution</h4>
-<p>Status quo. Leave in <code>namespace std::tr2::$SUBNAMESPACE;</code>.</p>
-<hr>
-<h3>Issue 2: Excessive use of <code>const codecvt_type&amp;</code> arguments</h3>
-<h4>Discussion</h4>
-<p>Users sometimes need to do path conversions that use something other than the
-imbued codecvt facet. The need is particularly acute in multi-threaded
-applications where changing the imbued facet would introduce a data race. That
-said, providing an optional <code>const codecvt_type&amp;</code> argument for every
-function where the need might possibly arise is excessive because its use is so
-rare and it adds considerable interface clutter.</p>
-<h4>Proposed resolution</h4>
-<p dir="ltr">Remove all existing class path <code>const codecvt_type&amp;</code>
-arguments.</p>
-<p>Add an additional non-member function:</p>
-<blockquote>
- <pre>unspecified-iterator-type convert(<code>const path&amp; p, const codecvt_type&amp; codecvt</code>);</pre>
- <p dir="ltr"><i>Returns: </i>An unspecified iterator type whose value type is
- <code>path::value_type</code>. The returned iterator points to the beginning
- of a sequence equivalent to <code>p.native()</code> with encoding as specified
- by <code>codecvt</code>.</p>
-</blockquote>
-<hr>
-<h3>Issue 3: Possible &quot;implicit cast to native type&quot;?</h3>
-<h4>Discussion</h4>
-<p>In Bloomington there was discussion of &quot;implicit cast to implicit cast to
-native OS type to inter operate with existing iostream library and native
-functions instead of modifying fstream&quot;.</p>
-<p>Beman comments: I wasn't in Bloomington and am not sure of the context of the
-above. N3239 inadvertently included the Boost docs for &lt;fstream&gt; rather than
-suggested &lt;fstream&gt; changes for TR2, and that may have caused some confusion. Or
-maybe I'm just missing something from the wiki notes. Some further discussions
-are needed to better define the issue.</p>
-<h4>Proposed resolution</h4>
-<hr>
-<h3>Issue 4: Given move semantics, it is best not to return const strings.</h3>
-<h4>Discussion</h4>
-<p>The issue title pretty much says it all.</p>
-<h4>Proposed resolution</h4>
-<p>As part of the C++11 refinements to the interface, review returns of const
-strings and change to plain strings where appropriate.</p>
-<hr>
-<h3>Issue 5: Is there a way to handle characters that are illegal for particular
-OS?</h3>
-<h4>Discussion</h4>
-<p>Question raised by Pablo in Bloomington.</p>
-<h4>Proposed resolution</h4>
-<p>Beman suggests NAD, Future. I've done some work on this, including looking at
-systems like OpenVMS that have an escape mechanism to handle otherwise
-unrepresentable characters. There was a comment to that effect in N3239. I
-believe it should be deferred to some future release since (1) it is complex
-enough that I'd like to see actual implementation and use experience (presumably
-via Boost), and (2) I can't recall a user ever requesting such a feature.</p>
-<hr>
-<h3>Issue 6: Could allocator support be class path?</h3>
-<h4>Discussion</h4>
-<p>Question raised by a committee member in private email.</p>
-<p>Comment from Beman: How would allocator support work, given that class path
-is not a template?</p>
-<h4>Proposed resolution</h4>
-<hr>
-<p>$endid
-
-$id backmatter=
-$endid </p>
-
-</body>
-
-</html> \ No newline at end of file
diff --git a/libs/filesystem/v3/index.html b/libs/filesystem/v3/index.html
deleted file mode 100644
index bbd0918eca..0000000000
--- a/libs/filesystem/v3/index.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0; URL=doc/index.htm">
-</head>
-<body>
-Automatic redirection failed, please go to
-<a href="doc/index.htm">doc/index.htm</a>.
-<hr>
-<p>&copy; Copyright Beman Dawes, 2003</p>
-<p> Distributed under the Boost Software
-License, Version 1.0. (See accompanying file <a href="../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
-www.boost.org/LICENSE_1_0.txt</a>)</p>
-</body>
-</html>
diff --git a/libs/filesystem/v3/test/Jamfile.v2 b/libs/filesystem/v3/test/Jamfile.v2
deleted file mode 100644
index b076ffe8d2..0000000000
--- a/libs/filesystem/v3/test/Jamfile.v2
+++ /dev/null
@@ -1,35 +0,0 @@
-# Boost Filesystem Library test Jamfile
-
-# (C) Copyright Beman Dawes 2002-2006
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or www.boost.org/LICENSE_1_0.txt)
-
-project
- : requirements
- <library>/boost/filesystem//boost_filesystem
- <library>/boost/system//boost_system
- <toolset>msvc:<asynch-exceptions>on
- ;
-
-# Some tests are run both statically and as shared libraries since it is helpful
-# to know if failures in shared library tests are related to sharing or not.
-
- test-suite "filesystem" :
- [ run path_unit_test.cpp : : : <link>shared ]
- [ run path_unit_test.cpp : : : <link>static : path_unit_test_static ]
- [ run path_test.cpp : : : <link>shared ]
- [ run path_test.cpp : : : <link>static : path_test_static ]
- [ run operations_unit_test.cpp : : : <link>shared ]
- [ run operations_unit_test.cpp : : : <link>static : operations_unit_test_static ]
- [ run operations_test.cpp : : : <link>shared ]
- [ run operations_test.cpp : : : <link>static : operations_test_static ]
- [ run fstream_test.cpp ]
- [ run convenience_test.cpp ]
- [ run large_file_support_test.cpp ]
- [ run deprecated_test.cpp ]
- [ run ../example/simple_ls.cpp ]
- [ run ../example/file_status.cpp ]
-
-# [ compile ../example/mbcopy.cpp ]
-# [ compile ../example/mbpath.cpp ]
- ;
diff --git a/libs/filesystem/v3/test/equivalent.cpp b/libs/filesystem/v3/test/equivalent.cpp
deleted file mode 100644
index be3089afd6..0000000000
--- a/libs/filesystem/v3/test/equivalent.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-// equivalent program -------------------------------------------------------//
-
-// Copyright (c) 2004 Beman Dawes
-
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
-// at http://www.boost.org/LICENSE_1_0.txt)
-
-// See library home page at http://www.boost.org/libs/filesystem
-
-//----------------------------------------------------------------------------//
-
-#include <boost/filesystem/operations.hpp>
-#include <iostream>
-#include <exception>
-
-int main( int argc, char * argv[] )
-{
- boost::filesystem::path::default_name_check( boost::filesystem::native );
- if ( argc != 3 )
- {
- std::cout << "Usage: equivalent path1 path2\n";
- return 2;
- }
-
- bool eq;
- try
- {
- eq = boost::filesystem::equivalent( argv[1], argv[2] );
- }
- catch ( const std::exception & ex )
- {
- std::cout << ex.what() << "\n";
- return 3;
- }
-
- std::cout << (eq ? "Paths are equivalent\n" : "Paths are not equivalent\n");
- return !eq;
-}
diff --git a/libs/filesystem/v3/test/msvc/common.vsprops b/libs/filesystem/v3/test/msvc/common.vsprops
deleted file mode 100644
index 9820ca15cf..0000000000
--- a/libs/filesystem/v3/test/msvc/common.vsprops
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioPropertySheet
- ProjectType="Visual C++"
- Version="8.00"
- Name="common"
- OutputDirectory="$(TEMP)\$(SolutionName)\$(ConfigurationName)"
- IntermediateDirectory="$(TEMP)\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="../../../../../.."
- PreprocessorDefinitions="BOOST_FILESYSTEM_VERSION=3;BOOST_SYSTEM_NO_DEPRECATED;BOOST_ALL_NO_LIB;BOOST_ALL_DYN_LINK"
- ExceptionHandling="2"
- DisableLanguageExtensions="false"
- WarningLevel="4"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalLibraryDirectories=""
- />
-</VisualStudioPropertySheet>
diff --git a/libs/filesystem/v3/test/msvc/convenience_test/convenience_test.vcproj b/libs/filesystem/v3/test/msvc/convenience_test/convenience_test.vcproj
deleted file mode 100644
index 49435cf50b..0000000000
--- a/libs/filesystem/v3/test/msvc/convenience_test/convenience_test.vcproj
+++ /dev/null
@@ -1,195 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="convenience_test"
- ProjectGUID="{08986FB5-0C83-4BC4-92DF-05E12E1C03C1}"
- RootNamespace="convenience_test"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot;"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot;"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\convenience_test.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v3/test/msvc/deprecated_test/deprecated_test.vcproj b/libs/filesystem/v3/test/msvc/deprecated_test/deprecated_test.vcproj
deleted file mode 100644
index c0b3ecdc4b..0000000000
--- a/libs/filesystem/v3/test/msvc/deprecated_test/deprecated_test.vcproj
+++ /dev/null
@@ -1,195 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="deprecated_test"
- ProjectGUID="{D73BC50F-956E-4A44-BF9F-A8BB80DF0000}"
- RootNamespace="deprecated_test"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="BOOST_ALL_NO_LIB;BOOST_SYSTEM_DYN_LINK;BOOST_FILESYSTEM_DYN_LINK;WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot;"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- PreprocessorDefinitions="BOOST_ALL_NO_LIB;BOOST_SYSTEM_DYN_LINK;BOOST_FILESYSTEM_DYN_LINK;WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot;"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\deprecated_test.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v3/test/msvc/error_demo/error_demo.vcproj b/libs/filesystem/v3/test/msvc/error_demo/error_demo.vcproj
deleted file mode 100644
index 91e29843b6..0000000000
--- a/libs/filesystem/v3/test/msvc/error_demo/error_demo.vcproj
+++ /dev/null
@@ -1,191 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="error_demo"
- ProjectGUID="{709A954B-4F1E-4375-A418-BCBFFE598715}"
- RootNamespace="error_demo"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\..\example\error_demo.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v3/test/msvc/filesystem-v3.sln b/libs/filesystem/v3/test/msvc/filesystem-v3.sln
deleted file mode 100644
index 344008b924..0000000000
--- a/libs/filesystem/v3/test/msvc/filesystem-v3.sln
+++ /dev/null
@@ -1,173 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 10.00
-# Visual C++ Express 2008
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "path_unit_test", "path_unit_test\path_unit_test.vcproj", "{3C77F610-2E31-4087-9DF2-7CD45198A02D}"
- ProjectSection(ProjectDependencies) = postProject
- {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1}
- {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "operations_unit_test", "operations_unit_test\operations_unit_test.vcproj", "{5DAF595A-4640-4F86-8A5F-E54E3E4CE7D0}"
- ProjectSection(ProjectDependencies) = postProject
- {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1}
- {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "operations_test", "operations_test\operations_test.vcproj", "{8BB7E604-46EF-42BE-ABB5-D7044B3E8A40}"
- ProjectSection(ProjectDependencies) = postProject
- {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1}
- {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "path_test", "path_test\path_test.vcproj", "{F3D230C4-9185-4C2B-AB0E-0F0D28D8268C}"
- ProjectSection(ProjectDependencies) = postProject
- {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1}
- {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "system_dll", "system_dll\system_dll.vcproj", "{F94CCADD-A90B-480C-A304-C19D015D36B1}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "filesystem_dll", "filesystem_dll\filesystem_dll.vcproj", "{FFD738F7-96F0-445C-81EA-551665EF53D1}"
- ProjectSection(ProjectDependencies) = postProject
- {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "convenience_test", "convenience_test\convenience_test.vcproj", "{08986FB5-0C83-4BC4-92DF-05E12E1C03C1}"
- ProjectSection(ProjectDependencies) = postProject
- {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1}
- {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fstream_test", "fstream_test\fstream_test.vcproj", "{A9939CD7-BE1C-4334-947C-4C320D49B3CA}"
- ProjectSection(ProjectDependencies) = postProject
- {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1}
- {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "deprecated_test", "deprecated_test\deprecated_test.vcproj", "{D73BC50F-956E-4A44-BF9F-A8BB80DF0000}"
- ProjectSection(ProjectDependencies) = postProject
- {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1}
- {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simple_ls", "simple_ls\simple_ls.vcproj", "{6B8EC880-702E-418A-BC63-CA46C6CC7B27}"
- ProjectSection(ProjectDependencies) = postProject
- {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1}
- {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "error_demo", "error_demo\error_demo.vcproj", "{709A954B-4F1E-4375-A418-BCBFFE598715}"
- ProjectSection(ProjectDependencies) = postProject
- {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1}
- {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut1", "tut1\tut1.vcproj", "{6376B8E4-7FD4-466B-978E-E8DA6E938689}"
- ProjectSection(ProjectDependencies) = postProject
- {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1}
- {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut3", "tut3\tut3.vcproj", "{4FF64FA7-6806-401D-865C-79DD064D4A9E}"
- ProjectSection(ProjectDependencies) = postProject
- {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1}
- {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut2", "tut2\tut2.vcproj", "{CD69B175-389E-4F8F-85DC-03C56A47CD1D}"
- ProjectSection(ProjectDependencies) = postProject
- {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1}
- {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut4", "tut4\tut4.vcproj", "{256EA89A-E073-4CE8-B675-BE2FBC6B2691}"
- ProjectSection(ProjectDependencies) = postProject
- {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1}
- {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hebrew_example", "hebrew_example\hebrew_example.vcproj", "{F9F236A2-8B57-415A-8397-7145144400F5}"
- ProjectSection(ProjectDependencies) = postProject
- {F94CCADD-A90B-480C-A304-C19D015D36B1} = {F94CCADD-A90B-480C-A304-C19D015D36B1}
- {FFD738F7-96F0-445C-81EA-551665EF53D1} = {FFD738F7-96F0-445C-81EA-551665EF53D1}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "enable_if_test", "enable_if_test\enable_if_test.vcproj", "{03FC7556-1052-45FF-A162-90D595713EAB}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Release|Win32 = Release|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {3C77F610-2E31-4087-9DF2-7CD45198A02D}.Debug|Win32.ActiveCfg = Debug|Win32
- {3C77F610-2E31-4087-9DF2-7CD45198A02D}.Debug|Win32.Build.0 = Debug|Win32
- {3C77F610-2E31-4087-9DF2-7CD45198A02D}.Release|Win32.ActiveCfg = Release|Win32
- {3C77F610-2E31-4087-9DF2-7CD45198A02D}.Release|Win32.Build.0 = Release|Win32
- {5DAF595A-4640-4F86-8A5F-E54E3E4CE7D0}.Debug|Win32.ActiveCfg = Debug|Win32
- {5DAF595A-4640-4F86-8A5F-E54E3E4CE7D0}.Debug|Win32.Build.0 = Debug|Win32
- {5DAF595A-4640-4F86-8A5F-E54E3E4CE7D0}.Release|Win32.ActiveCfg = Release|Win32
- {5DAF595A-4640-4F86-8A5F-E54E3E4CE7D0}.Release|Win32.Build.0 = Release|Win32
- {8BB7E604-46EF-42BE-ABB5-D7044B3E8A40}.Debug|Win32.ActiveCfg = Debug|Win32
- {8BB7E604-46EF-42BE-ABB5-D7044B3E8A40}.Debug|Win32.Build.0 = Debug|Win32
- {8BB7E604-46EF-42BE-ABB5-D7044B3E8A40}.Release|Win32.ActiveCfg = Release|Win32
- {8BB7E604-46EF-42BE-ABB5-D7044B3E8A40}.Release|Win32.Build.0 = Release|Win32
- {F3D230C4-9185-4C2B-AB0E-0F0D28D8268C}.Debug|Win32.ActiveCfg = Debug|Win32
- {F3D230C4-9185-4C2B-AB0E-0F0D28D8268C}.Debug|Win32.Build.0 = Debug|Win32
- {F3D230C4-9185-4C2B-AB0E-0F0D28D8268C}.Release|Win32.ActiveCfg = Release|Win32
- {F3D230C4-9185-4C2B-AB0E-0F0D28D8268C}.Release|Win32.Build.0 = Release|Win32
- {F94CCADD-A90B-480C-A304-C19D015D36B1}.Debug|Win32.ActiveCfg = Debug|Win32
- {F94CCADD-A90B-480C-A304-C19D015D36B1}.Debug|Win32.Build.0 = Debug|Win32
- {F94CCADD-A90B-480C-A304-C19D015D36B1}.Release|Win32.ActiveCfg = Release|Win32
- {F94CCADD-A90B-480C-A304-C19D015D36B1}.Release|Win32.Build.0 = Release|Win32
- {FFD738F7-96F0-445C-81EA-551665EF53D1}.Debug|Win32.ActiveCfg = Debug|Win32
- {FFD738F7-96F0-445C-81EA-551665EF53D1}.Debug|Win32.Build.0 = Debug|Win32
- {FFD738F7-96F0-445C-81EA-551665EF53D1}.Release|Win32.ActiveCfg = Release|Win32
- {FFD738F7-96F0-445C-81EA-551665EF53D1}.Release|Win32.Build.0 = Release|Win32
- {08986FB5-0C83-4BC4-92DF-05E12E1C03C1}.Debug|Win32.ActiveCfg = Debug|Win32
- {08986FB5-0C83-4BC4-92DF-05E12E1C03C1}.Debug|Win32.Build.0 = Debug|Win32
- {08986FB5-0C83-4BC4-92DF-05E12E1C03C1}.Release|Win32.ActiveCfg = Release|Win32
- {08986FB5-0C83-4BC4-92DF-05E12E1C03C1}.Release|Win32.Build.0 = Release|Win32
- {A9939CD7-BE1C-4334-947C-4C320D49B3CA}.Debug|Win32.ActiveCfg = Debug|Win32
- {A9939CD7-BE1C-4334-947C-4C320D49B3CA}.Debug|Win32.Build.0 = Debug|Win32
- {A9939CD7-BE1C-4334-947C-4C320D49B3CA}.Release|Win32.ActiveCfg = Release|Win32
- {A9939CD7-BE1C-4334-947C-4C320D49B3CA}.Release|Win32.Build.0 = Release|Win32
- {D73BC50F-956E-4A44-BF9F-A8BB80DF0000}.Debug|Win32.ActiveCfg = Debug|Win32
- {D73BC50F-956E-4A44-BF9F-A8BB80DF0000}.Debug|Win32.Build.0 = Debug|Win32
- {D73BC50F-956E-4A44-BF9F-A8BB80DF0000}.Release|Win32.ActiveCfg = Release|Win32
- {D73BC50F-956E-4A44-BF9F-A8BB80DF0000}.Release|Win32.Build.0 = Release|Win32
- {6B8EC880-702E-418A-BC63-CA46C6CC7B27}.Debug|Win32.ActiveCfg = Debug|Win32
- {6B8EC880-702E-418A-BC63-CA46C6CC7B27}.Debug|Win32.Build.0 = Debug|Win32
- {6B8EC880-702E-418A-BC63-CA46C6CC7B27}.Release|Win32.ActiveCfg = Release|Win32
- {6B8EC880-702E-418A-BC63-CA46C6CC7B27}.Release|Win32.Build.0 = Release|Win32
- {709A954B-4F1E-4375-A418-BCBFFE598715}.Debug|Win32.ActiveCfg = Debug|Win32
- {709A954B-4F1E-4375-A418-BCBFFE598715}.Debug|Win32.Build.0 = Debug|Win32
- {709A954B-4F1E-4375-A418-BCBFFE598715}.Release|Win32.ActiveCfg = Release|Win32
- {709A954B-4F1E-4375-A418-BCBFFE598715}.Release|Win32.Build.0 = Release|Win32
- {6376B8E4-7FD4-466B-978E-E8DA6E938689}.Debug|Win32.ActiveCfg = Debug|Win32
- {6376B8E4-7FD4-466B-978E-E8DA6E938689}.Debug|Win32.Build.0 = Debug|Win32
- {6376B8E4-7FD4-466B-978E-E8DA6E938689}.Release|Win32.ActiveCfg = Release|Win32
- {6376B8E4-7FD4-466B-978E-E8DA6E938689}.Release|Win32.Build.0 = Release|Win32
- {4FF64FA7-6806-401D-865C-79DD064D4A9E}.Debug|Win32.ActiveCfg = Debug|Win32
- {4FF64FA7-6806-401D-865C-79DD064D4A9E}.Debug|Win32.Build.0 = Debug|Win32
- {4FF64FA7-6806-401D-865C-79DD064D4A9E}.Release|Win32.ActiveCfg = Release|Win32
- {4FF64FA7-6806-401D-865C-79DD064D4A9E}.Release|Win32.Build.0 = Release|Win32
- {CD69B175-389E-4F8F-85DC-03C56A47CD1D}.Debug|Win32.ActiveCfg = Debug|Win32
- {CD69B175-389E-4F8F-85DC-03C56A47CD1D}.Debug|Win32.Build.0 = Debug|Win32
- {CD69B175-389E-4F8F-85DC-03C56A47CD1D}.Release|Win32.ActiveCfg = Release|Win32
- {CD69B175-389E-4F8F-85DC-03C56A47CD1D}.Release|Win32.Build.0 = Release|Win32
- {256EA89A-E073-4CE8-B675-BE2FBC6B2691}.Debug|Win32.ActiveCfg = Debug|Win32
- {256EA89A-E073-4CE8-B675-BE2FBC6B2691}.Debug|Win32.Build.0 = Debug|Win32
- {256EA89A-E073-4CE8-B675-BE2FBC6B2691}.Release|Win32.ActiveCfg = Release|Win32
- {256EA89A-E073-4CE8-B675-BE2FBC6B2691}.Release|Win32.Build.0 = Release|Win32
- {F9F236A2-8B57-415A-8397-7145144400F5}.Debug|Win32.ActiveCfg = Debug|Win32
- {F9F236A2-8B57-415A-8397-7145144400F5}.Debug|Win32.Build.0 = Debug|Win32
- {F9F236A2-8B57-415A-8397-7145144400F5}.Release|Win32.ActiveCfg = Release|Win32
- {F9F236A2-8B57-415A-8397-7145144400F5}.Release|Win32.Build.0 = Release|Win32
- {03FC7556-1052-45FF-A162-90D595713EAB}.Debug|Win32.ActiveCfg = Debug|Win32
- {03FC7556-1052-45FF-A162-90D595713EAB}.Release|Win32.ActiveCfg = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/libs/filesystem/v3/test/msvc/filesystem_dll/filesystem_dll.vcproj b/libs/filesystem/v3/test/msvc/filesystem_dll/filesystem_dll.vcproj
deleted file mode 100644
index 1120bf3fd5..0000000000
--- a/libs/filesystem/v3/test/msvc/filesystem_dll/filesystem_dll.vcproj
+++ /dev/null
@@ -1,227 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="filesystem_dll"
- ProjectGUID="{FFD738F7-96F0-445C-81EA-551665EF53D1}"
- RootNamespace="filesystem_dll"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(TEMP)\$(SolutionName)\$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="2"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;FILESYSTEM_DLL_EXPORTS"
- MinimalRebuild="true"
- ExceptionHandling="2"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(TEMP)\$(SolutionName)\$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="2"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;FILESYSTEM_DLL_EXPORTS"
- ExceptionHandling="2"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\..\src\codecvt_error_category.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\operations.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\path.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\path_traits.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\portability.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\unique_path.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\utf8_codecvt_facet.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\windows_file_codecvt.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v3/test/msvc/fstream_test/fstream_test.vcproj b/libs/filesystem/v3/test/msvc/fstream_test/fstream_test.vcproj
deleted file mode 100644
index 6eb91af5ad..0000000000
--- a/libs/filesystem/v3/test/msvc/fstream_test/fstream_test.vcproj
+++ /dev/null
@@ -1,195 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="fstream_test"
- ProjectGUID="{A9939CD7-BE1C-4334-947C-4C320D49B3CA}"
- RootNamespace="fstream_test"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot;"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot;"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\fstream_test.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v3/test/msvc/operations_test/operations_test.vcproj b/libs/filesystem/v3/test/msvc/operations_test/operations_test.vcproj
deleted file mode 100644
index 5e0cac2c72..0000000000
--- a/libs/filesystem/v3/test/msvc/operations_test/operations_test.vcproj
+++ /dev/null
@@ -1,194 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="operations_test"
- ProjectGUID="{8BB7E604-46EF-42BE-ABB5-D7044B3E8A40}"
- RootNamespace="operations_test"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="BOOST_FILEYSTEM_INCLUDE_IOSTREAM"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot; -x"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot; -x"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\operations_test.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v3/test/msvc/operations_unit_test/operations_unit_test.vcproj b/libs/filesystem/v3/test/msvc/operations_unit_test/operations_unit_test.vcproj
deleted file mode 100644
index a5f95ed74a..0000000000
--- a/libs/filesystem/v3/test/msvc/operations_unit_test/operations_unit_test.vcproj
+++ /dev/null
@@ -1,197 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="operations_unit_test"
- ProjectGUID="{5DAF595A-4640-4F86-8A5F-E54E3E4CE7D0}"
- RootNamespace="operations_unit_test"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot;"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot;"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\operations_unit_test.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v3/test/msvc/path_test/path_test.vcproj b/libs/filesystem/v3/test/msvc/path_test/path_test.vcproj
deleted file mode 100644
index 1131adfa5d..0000000000
--- a/libs/filesystem/v3/test/msvc/path_test/path_test.vcproj
+++ /dev/null
@@ -1,195 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="path_test"
- ProjectGUID="{F3D230C4-9185-4C2B-AB0E-0F0D28D8268C}"
- RootNamespace="path_test"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="BOOST_FILESYSTEM_PATH_CTOR_COUNT;WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot;"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot;"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\path_test.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v3/test/msvc/path_test_dynamic_link/path_test_dynamic_linkl.vcproj b/libs/filesystem/v3/test/msvc/path_test_dynamic_link/path_test_dynamic_linkl.vcproj
deleted file mode 100644
index 9a754ef7c9..0000000000
--- a/libs/filesystem/v3/test/msvc/path_test_dynamic_link/path_test_dynamic_linkl.vcproj
+++ /dev/null
@@ -1,201 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="path_test_dynamic_link"
- ProjectGUID="{54347DE3-6AA2-4466-A2EC-7176E0EC1110}"
- RootNamespace="path_test_dynamic_link"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(TEMP)\$(SolutionName)\$(ConfigurationName)"
- IntermediateDirectory="$(TEMP)\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\..\.."
- PreprocessorDefinitions="BOOST_ALL_NO_LIB;BOOST_SYSTEM_DYN_LINK;BOOST_FILESYSTEM_DYN_LINK;WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- ExceptionHandling="2"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot;"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(TEMP)\$(SolutionName)\$(ConfigurationName)"
- IntermediateDirectory="$(TEMP)\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- AdditionalIncludeDirectories="..\..\..\..\.."
- PreprocessorDefinitions="BOOST_ALL_NO_LIB;BOOST_SYSTEM_DYN_LINK;BOOST_FILESYSTEM_DYN_LINK;WIN32;NDEBUG;_CONSOLE"
- ExceptionHandling="2"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot;"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\path_test.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v3/test/msvc/path_unit_test/path_unit_test.vcproj b/libs/filesystem/v3/test/msvc/path_unit_test/path_unit_test.vcproj
deleted file mode 100644
index 0f39d3bc59..0000000000
--- a/libs/filesystem/v3/test/msvc/path_unit_test/path_unit_test.vcproj
+++ /dev/null
@@ -1,195 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="path_unit_test"
- ProjectGUID="{3C77F610-2E31-4087-9DF2-7CD45198A02D}"
- RootNamespace="path_unit_test"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot;"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot;"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\path_unit_test.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v3/test/msvc/simple_ls/simple_ls.vcproj b/libs/filesystem/v3/test/msvc/simple_ls/simple_ls.vcproj
deleted file mode 100644
index 3d52d4becd..0000000000
--- a/libs/filesystem/v3/test/msvc/simple_ls/simple_ls.vcproj
+++ /dev/null
@@ -1,201 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="simple_ls"
- ProjectGUID="{6B8EC880-702E-418A-BC63-CA46C6CC7B27}"
- RootNamespace="simple_ls"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(TEMP)\$(SolutionName)\$(ConfigurationName)"
- IntermediateDirectory="$(TEMP)\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\..\.."
- PreprocessorDefinitions="BOOST_ALL_NO_LIB;BOOST_SYSTEM_DYN_LINK;BOOST_FILESYSTEM_DYN_LINK;WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot;"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(TEMP)\$(SolutionName)\$(ConfigurationName)"
- IntermediateDirectory="$(TEMP)\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- AdditionalIncludeDirectories="..\..\..\..\.."
- PreprocessorDefinitions="BOOST_ALL_NO_LIB;BOOST_SYSTEM_DYN_LINK;BOOST_FILESYSTEM_DYN_LINK;WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot;"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\..\example\simple_ls.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v3/test/msvc/system_dll/system_dll.vcproj b/libs/filesystem/v3/test/msvc/system_dll/system_dll.vcproj
deleted file mode 100644
index 792371fd34..0000000000
--- a/libs/filesystem/v3/test/msvc/system_dll/system_dll.vcproj
+++ /dev/null
@@ -1,199 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="system_dll"
- ProjectGUID="{F94CCADD-A90B-480C-A304-C19D015D36B1}"
- RootNamespace="system_dll"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(TEMP)\$(SolutionName)\$(ConfigurationName)"
- IntermediateDirectory="$(TEMP)\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="2"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions="BOOST_ALL_NO_LIB;BOOST_ALL_DYN_LINK;WIN32;_DEBUG;_WINDOWS;_USRDLL;SYSTEM_DLL_EXPORTS"
- MinimalRebuild="true"
- ExceptionHandling="2"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(TEMP)\$(SolutionName)\$(ConfigurationName)"
- IntermediateDirectory="$(TEMP)\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="2"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions="BOOST_ALL_NO_LIB;BOOST_ALL_DYN_LINK;WIN32;NDEBUG;_WINDOWS;_USRDLL;SYSTEM_DLL_EXPORTS"
- ExceptionHandling="2"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\..\..\..\system\src\error_code.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v3/test/msvc/tchar_example/tchar_example.vcproj b/libs/filesystem/v3/test/msvc/tchar_example/tchar_example.vcproj
deleted file mode 100644
index 80548e2e8c..0000000000
--- a/libs/filesystem/v3/test/msvc/tchar_example/tchar_example.vcproj
+++ /dev/null
@@ -1,212 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="tchar_example"
- ProjectGUID="{2D4CD761-6DF6-40AC-B4A5-F169D5F93226}"
- RootNamespace="tchar_example"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(TEMP)\$(SolutionName)\$(ConfigurationName)"
- IntermediateDirectory="$(TEMP)\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot;"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(TEMP)\$(SolutionName)\$(ConfigurationName)"
- IntermediateDirectory="$(TEMP)\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Executing test $(TargetName).exe..."
- CommandLine="&quot;$(TargetDir)\$(TargetName).exe&quot;"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\..\..\system\src\error_code.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\operations.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\src\path.cpp"
- >
- </File>
- <File
- RelativePath="..\..\..\example\tchar.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v3/test/msvc/tut0/tut0.vcproj b/libs/filesystem/v3/test/msvc/tut0/tut0.vcproj
deleted file mode 100644
index fea6600ba4..0000000000
--- a/libs/filesystem/v3/test/msvc/tut0/tut0.vcproj
+++ /dev/null
@@ -1,190 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="tut0"
- ProjectGUID="{6B5ABD07-0289-484D-BD96-6F1BC92677D3}"
- RootNamespace="tut0"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\..\example\tut0.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v3/test/msvc/tut1/tut1.vcproj b/libs/filesystem/v3/test/msvc/tut1/tut1.vcproj
deleted file mode 100644
index d288e52720..0000000000
--- a/libs/filesystem/v3/test/msvc/tut1/tut1.vcproj
+++ /dev/null
@@ -1,193 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="tut1"
- ProjectGUID="{6376B8E4-7FD4-466B-978E-E8DA6E938689}"
- RootNamespace="tut1"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\..\example\tut1.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v3/test/msvc/tut2/tut2.vcproj b/libs/filesystem/v3/test/msvc/tut2/tut2.vcproj
deleted file mode 100644
index 47d157d8d7..0000000000
--- a/libs/filesystem/v3/test/msvc/tut2/tut2.vcproj
+++ /dev/null
@@ -1,189 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="tut2"
- ProjectGUID="{CD69B175-389E-4F8F-85DC-03C56A47CD1D}"
- RootNamespace="tut2"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\..\example\tut2.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v3/test/msvc/tut3/tut3.vcproj b/libs/filesystem/v3/test/msvc/tut3/tut3.vcproj
deleted file mode 100644
index 37964b0efb..0000000000
--- a/libs/filesystem/v3/test/msvc/tut3/tut3.vcproj
+++ /dev/null
@@ -1,187 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="tut3"
- ProjectGUID="{4FF64FA7-6806-401D-865C-79DD064D4A9E}"
- RootNamespace="tut3"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\..\example\tut3.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v3/test/msvc/tut4/tut4.vcproj b/libs/filesystem/v3/test/msvc/tut4/tut4.vcproj
deleted file mode 100644
index 307b9b7cc0..0000000000
--- a/libs/filesystem/v3/test/msvc/tut4/tut4.vcproj
+++ /dev/null
@@ -1,189 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="tut4"
- ProjectGUID="{256EA89A-E073-4CE8-B675-BE2FBC6B2691}"
- RootNamespace="tut4"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- AdditionalIncludeDirectories=""
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\..\example\tut4.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/libs/filesystem/v3/test/msvc/wide_test/wide_test.vcproj b/libs/filesystem/v3/test/msvc/wide_test/wide_test.vcproj
deleted file mode 100644
index d16960254e..0000000000
--- a/libs/filesystem/v3/test/msvc/wide_test/wide_test.vcproj
+++ /dev/null
@@ -1,191 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="wide_test"
- ProjectGUID="{DE12E87D-87C1-4FF3-AF16-85097F2A5184}"
- RootNamespace="wide_test"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- ConfigurationType="1"
- InheritedPropertySheets="..\common.vsprops"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\wide_test.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>