diff options
Diffstat (limited to 'src/third_party/boost/libs')
177 files changed, 0 insertions, 47697 deletions
diff --git a/src/third_party/boost/libs/detail/utf8_codecvt_facet.cpp b/src/third_party/boost/libs/detail/utf8_codecvt_facet.cpp deleted file mode 100644 index 7ea5eebbf00..00000000000 --- a/src/third_party/boost/libs/detail/utf8_codecvt_facet.cpp +++ /dev/null @@ -1,285 +0,0 @@ -/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 -// utf8_codecvt_facet.cpp - -// Copyright (c) 2001 Ronald Garcia, Indiana University (garcia@osl.iu.edu) -// Andrew Lumsdaine, Indiana University (lums@osl.iu.edu). -// 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) - -// Please see the comments in <boost/detail/utf8_codecvt_facet.hpp> to -// learn how this file should be used. - -#include <boost/detail/utf8_codecvt_facet.hpp> - -#include <cstdlib> // for multi-byte converson routines -#include <cassert> - -#include <boost/limits.hpp> -#include <boost/config.hpp> - -// If we don't have wstring, then Unicode support -// is not available anyway, so we don't need to even -// compiler this file. This also fixes the problem -// with mingw, which can compile this file, but will -// generate link error when building DLL. -#ifndef BOOST_NO_STD_WSTRING - -BOOST_UTF8_BEGIN_NAMESPACE - -/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 -// implementation for wchar_t - -// Translate incoming UTF-8 into UCS-4 -std::codecvt_base::result utf8_codecvt_facet::do_in( - std::mbstate_t& /*state*/, - const char * from, - const char * from_end, - const char * & from_next, - wchar_t * to, - wchar_t * to_end, - wchar_t * & to_next -) const { - // Basic algorithm: The first octet determines how many - // octets total make up the UCS-4 character. The remaining - // "continuing octets" all begin with "10". To convert, subtract - // the amount that specifies the number of octets from the first - // octet. Subtract 0x80 (1000 0000) from each continuing octet, - // then mash the whole lot together. Note that each continuing - // octet only uses 6 bits as unique values, so only shift by - // multiples of 6 to combine. - while (from != from_end && to != to_end) { - - // Error checking on the first octet - if (invalid_leading_octet(*from)){ - from_next = from; - to_next = to; - return std::codecvt_base::error; - } - - // The first octet is adjusted by a value dependent upon - // the number of "continuing octets" encoding the character - const int cont_octet_count = get_cont_octet_count(*from); - const wchar_t octet1_modifier_table[] = { - 0x00, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc - }; - - // The unsigned char conversion is necessary in case char is - // signed (I learned this the hard way) - wchar_t ucs_result = - (unsigned char)(*from++) - octet1_modifier_table[cont_octet_count]; - - // Invariants : - // 1) At the start of the loop, 'i' continuing characters have been - // processed - // 2) *from points to the next continuing character to be processed. - int i = 0; - while(i != cont_octet_count && from != from_end) { - - // Error checking on continuing characters - if (invalid_continuing_octet(*from)) { - from_next = from; - to_next = to; - return std::codecvt_base::error; - } - - ucs_result *= (1 << 6); - - // each continuing character has an extra (10xxxxxx)b attached to - // it that must be removed. - ucs_result += (unsigned char)(*from++) - 0x80; - ++i; - } - - // If the buffer ends with an incomplete unicode character... - if (from == from_end && i != cont_octet_count) { - // rewind "from" to before the current character translation - from_next = from - (i+1); - to_next = to; - return std::codecvt_base::partial; - } - *to++ = ucs_result; - } - from_next = from; - to_next = to; - - // Were we done converting or did we run out of destination space? - if(from == from_end) return std::codecvt_base::ok; - else return std::codecvt_base::partial; -} - -std::codecvt_base::result utf8_codecvt_facet::do_out( - std::mbstate_t& /*state*/, - const wchar_t * from, - const wchar_t * from_end, - const wchar_t * & from_next, - char * to, - char * to_end, - char * & to_next -) const -{ - // RG - consider merging this table with the other one - const wchar_t octet1_modifier_table[] = { - 0x00, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc - }; - - wchar_t max_wchar = (std::numeric_limits<wchar_t>::max)(); - while (from != from_end && to != to_end) { - - // Check for invalid UCS-4 character - if (*from > max_wchar) { - from_next = from; - to_next = to; - return std::codecvt_base::error; - } - - int cont_octet_count = get_cont_octet_out_count(*from); - - // RG - comment this formula better - int shift_exponent = (cont_octet_count) * 6; - - // Process the first character - *to++ = static_cast<char>(octet1_modifier_table[cont_octet_count] + - (unsigned char)(*from / (1 << shift_exponent))); - - // Process the continuation characters - // Invariants: At the start of the loop: - // 1) 'i' continuing octets have been generated - // 2) '*to' points to the next location to place an octet - // 3) shift_exponent is 6 more than needed for the next octet - int i = 0; - while (i != cont_octet_count && to != to_end) { - shift_exponent -= 6; - *to++ = static_cast<char>(0x80 + ((*from / (1 << shift_exponent)) % (1 << 6))); - ++i; - } - // If we filled up the out buffer before encoding the character - if(to == to_end && i != cont_octet_count) { - from_next = from; - to_next = to - (i+1); - return std::codecvt_base::partial; - } - ++from; - } - from_next = from; - to_next = to; - // Were we done or did we run out of destination space - if(from == from_end) return std::codecvt_base::ok; - else return std::codecvt_base::partial; -} - -// How many char objects can I process to get <= max_limit -// wchar_t objects? -int utf8_codecvt_facet::do_length( - BOOST_CODECVT_DO_LENGTH_CONST std::mbstate_t &, - const char * from, - const char * from_end, - std::size_t max_limit -#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) -) const throw() -#else -) const -#endif -{ - // RG - this code is confusing! I need a better way to express it. - // and test cases. - - // Invariants: - // 1) last_octet_count has the size of the last measured character - // 2) char_count holds the number of characters shown to fit - // within the bounds so far (no greater than max_limit) - // 3) from_next points to the octet 'last_octet_count' before the - // last measured character. - int last_octet_count=0; - std::size_t char_count = 0; - const char* from_next = from; - // Use "<" because the buffer may represent incomplete characters - while (from_next+last_octet_count <= from_end && char_count <= max_limit) { - from_next += last_octet_count; - last_octet_count = (get_octet_count(*from_next)); - ++char_count; - } - return static_cast<int>(from_next-from_end); -} - -unsigned int utf8_codecvt_facet::get_octet_count( - unsigned char lead_octet -){ - // if the 0-bit (MSB) is 0, then 1 character - if (lead_octet <= 0x7f) return 1; - - // Otherwise the count number of consecutive 1 bits starting at MSB -// assert(0xc0 <= lead_octet && lead_octet <= 0xfd); - - if (0xc0 <= lead_octet && lead_octet <= 0xdf) return 2; - else if (0xe0 <= lead_octet && lead_octet <= 0xef) return 3; - else if (0xf0 <= lead_octet && lead_octet <= 0xf7) return 4; - else if (0xf8 <= lead_octet && lead_octet <= 0xfb) return 5; - else return 6; -} -BOOST_UTF8_END_NAMESPACE - -namespace { -template<std::size_t s> -int get_cont_octet_out_count_impl(wchar_t word){ - if (word < 0x80) { - return 0; - } - if (word < 0x800) { - return 1; - } - return 2; -} - -template<> -int get_cont_octet_out_count_impl<4>(wchar_t word){ - if (word < 0x80) { - return 0; - } - if (word < 0x800) { - return 1; - } - - // Note that the following code will generate warnings on some platforms - // where wchar_t is defined as UCS2. The warnings are superfluous as the - // specialization is never instantitiated with such compilers, but this - // can cause problems if warnings are being treated as errors, so we guard - // against that. Including <boost/detail/utf8_codecvt_facet.hpp> as we do - // should be enough to get WCHAR_MAX defined. -#if !defined(WCHAR_MAX) -# error WCHAR_MAX not defined! -#endif - // cope with VC++ 7.1 or earlier having invalid WCHAR_MAX -#if defined(_MSC_VER) && _MSC_VER <= 1310 // 7.1 or earlier - return 2; -#elif WCHAR_MAX > 0x10000 - - if (word < 0x10000) { - return 2; - } - if (word < 0x200000) { - return 3; - } - if (word < 0x4000000) { - return 4; - } - return 5; - -#else - return 2; -#endif -} - -} // namespace anonymous - -BOOST_UTF8_BEGIN_NAMESPACE -// How many "continuing octets" will be needed for this word -// == total octets - 1. -int utf8_codecvt_facet::get_cont_octet_out_count( - wchar_t word -) const { - return get_cont_octet_out_count_impl<sizeof(wchar_t)>(word); -} -BOOST_UTF8_END_NAMESPACE - -#endif diff --git a/src/third_party/boost/libs/filesystem/v2/build/Jamfile.v2 b/src/third_party/boost/libs/filesystem/v2/build/Jamfile.v2 deleted file mode 100644 index 8ba63102887..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v2/doc/design.htm b/src/third_party/boost/libs/filesystem/v2/doc/design.htm deleted file mode 100644 index 8c79da9b640..00000000000 --- a/src/third_party/boost/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. Scripts were written in -Python, Perl, Bash, and Windows command languages. 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. The need is particularly acute - when C++ is the only toolset allowed in the tool chain. File system - operations are provided by many languages 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> - </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> - </li> - <li>Avoid dangerous programming practices. Particularly, all-too-easy-to-ignore error notifications - and use of global variables. If a dangerous feature is provided, identify it as such.<br> - <br> - Rationale: Normally this would be covered by "the usual Boost requirements...", - 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 "current - working directory".<br> - </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. 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. 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. - Thus the need to interface smoothly with standard library I/O.<br> - </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> - </li> - <li>The usual Boost <a href="http://www.boost.org/more/lib_guide.htm">requirements and - guidelines</a> apply.<br> - </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> - </li> - <li>Avoid giving the illusion of portability where portability in fact does not - exist.<br> - <br> - Rationale: Leaving important behavior unspecified or "implementation defined" 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> - </li> - <li>Some file systems provide both a long and short form of filenames.<br> - </li> - <li>Some file systems have different syntax for file paths and directory - paths.<br> - </li> - <li>Some file systems have different rules for valid file names and valid - directory names.<br> - </li> - <li>Some file systems (ISO-9660, level 1, for example) use very restricted - (so-called 8.3) file names.<br> - </li> - <li>Some operating systems allow file systems with different - characteristics to be "mounted" within a directory tree. Thus a - ISO-9660 or Windows - file system may end up as a sub-tree of a POSIX directory tree.<br> - </li> - <li>Wide-character versions of directory and file operations are available on some operating - systems, and not available on others.<br> - </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> - </li> - <li>Some file systems have a concept of file "version number" or "generation - number". Some don't.<br> - </li> - <li>Not all operating systems use single character separators in path names. Some use - paired notations. A typical fully-specified OpenVMS filename - might look something like this:<br> - <br> - <code> DISK$SCRATCH:[GEORGE.PROJECT1.DAT]BIG_DATA_FILE.NTP;5<br> - </code><br> - The general OpenVMS format is:<br> - <br> - - <i>Device:[directories.dot.separated]filename.extension;version_number</i><br> - </li> - <li>For common file systems, determining if two descriptors are for same - entity is extremely difficult or impossible. 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> - </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. 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. For example:<br> - <br> - <code> assert( exists("foo") == exists("foo") ); - // may fail!<br> - assert( is_directory("foo") == is_directory("foo"); - // may fail!<br> - </code><br> - In the first example, the file may have been deleted between calls to - exists(). 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> - </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> - </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> pointing to <code>b/c</code>, - then under POSIX Pathname Resolution rules a path of <code>"/a/x/.."</code> - should resolve to <code>"/a/b"</code>. If <code>"/a/x/.."</code> were first - normalized to <code>"/a"</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. 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( "foo" -)</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<string></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. -Rather, the programmer must think out the question "What operating systems do I -want this path to be portable to?" 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. Some with -operations functions. 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, is much simpler and straightforward, although it does depend to -some extent on programmer discipline. 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 Std 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/src/third_party/boost/libs/filesystem/v2/doc/do-list.htm b/src/third_party/boost/libs/filesystem/v2/doc/do-list.htm deleted file mode 100644 index ff7f383eab3..00000000000 --- a/src/third_party/boost/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 -> 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): >Comparison between paths doesn't use locale.<br> - ><br> - >The paths are not treated as plain characters since a lexicographical <br> - >compare is made. But the individual elements are treated<br> - >as plain characters and the internal string type's operator< is used. This - <br> - >is a bit contradicting. <br> - ><br> - >I think the comparison operators should compare the elements in a locale <br> - >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< 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>© 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/src/third_party/boost/libs/filesystem/v2/doc/faq.htm b/src/third_party/boost/libs/filesystem/v2/doc/faq.htm deleted file mode 100644 index 938c71f8e51..00000000000 --- a/src/third_party/boost/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> - <a href="index.htm">Library Home</a> - <a href="index.htm#tutorial">Tutorial</a> <a href="reference.html"> - Reference</a> <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. 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. Thus for the primary "portable script-style file system -operations" 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? 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>"/foo"</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. 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 "file system" -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 "portable script-style -file system operations" 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. </p> -<p>The case for the "handle" (opaque data type to identify a file) -style may be strongest for directory iterator value type. (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. -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. OTOH, the specific functionality needed for several trial -applications was very easy for the user to construct from the lower-level -toolkit functions. 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<> 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. Return codes or error notification variables are often ignored -by programmers. 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 "read-only" turned out to be so -system depend as to be disqualified as a "guaranteed presence" 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. -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/src/third_party/boost/libs/filesystem/v2/doc/i18n.html b/src/third_party/boost/libs/filesystem/v2/doc/i18n.html deleted file mode 100644 index 1305493d897..00000000000 --- a/src/third_party/boost/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> - </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> - </li> - <li><a href="#Rationalization">Rationalization</a> of predicate function - design, including the addition of several new functions.<br> - </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> - </li> - <li><a href="#Preservation">Preservation</a> of existing user code whenever - possible.<br> - </li> - <li><a href="#More_efficient">More efficient operations</a> when iterating over directories.<br> - </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<std::string, ...> path; -typedef basic_path<std::wstring, ...> wpath; - -typedef basic_filesystem_error<path> filesystem_error; -typedef basic_filesystem_error<wpath> wfilesystem_error; - -typedef basic_directory_iterator<path> directory_iterator; -typedef basic_directory_iterator<wpath> 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">"do-the-right-thing" 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> - </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>"//:"</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> - </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> & error_flag<br> - Returns: status() & 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 "regular file" flag.)</td> - <td width="108%">Throws: if status() & error_flag<br> - Returns: status() & 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() & error_flag<br> - Returns: status() & (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>() & - error_flag<br> - Returns: symlink_status() & symlink_flag</td> - </tr> - <tr> - <td width="22%">!exists(p) && ((p.has_branch_path() && exists( p.branch_path()) - || (!p.has_branch_path() && !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> - </td> - <td width="108%"> </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%"> </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 & 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 & initial_path() - -// the new basic_directory_entry provides leaf() -// to cover the common existing use case itr->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 &() 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> - </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->f() sufficiently - different.</li> - <li>Most common iterator use is longer: it->path(), but by providing - "operator const basic_path &" it is still possible to write a bare *it.</li> - <li>Breaks some existing code. The "operator const basic_path &" - 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>"c:foo/bar"</code>. On many POSIX systems, <code>"c:foo"</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>"c:"</code> is a -drive specification, so we have a three element path. All calls to the operating -system will result in <code>"c:"</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>"native-path:"</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, 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> - </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> - </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> - </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 "symlink" second argument produced more -understandable code. The original implementation of the function used the name "symlink_status", -but that just didn't read right in real code.</p> -<h3>POSIX wpath_traits defaults to locale(""), 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("") 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/src/third_party/boost/libs/filesystem/v2/doc/index.htm b/src/third_party/boost/libs/filesystem/v2/doc/index.htm deleted file mode 100644 index ee0c0891394..00000000000 --- a/src/third_party/boost/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> - <a href="index.htm">Library Home</a> <a href="#tutorial">Tutorial</a> <a href="reference.html"> - Reference</a> <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> - <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 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 headers:</p> - -<ul> - <li>Header <<a href="../../../../boost/filesystem.hpp">boost/filesystem.hpp</a>> 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> - </li> - <li>Header <<a href="../../../../boost/filesystem/fstream.hpp">boost/filesystem<i>/</i>fstream.hpp</a>> 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 "boost/filesystem.hpp" // includes all needed Boost.Filesystem declarations -#include <iostream> // 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( "some_dir/file.txt" );</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>"some_dir:file.txt"</code>, <code>"[some_dir]file.txt"</code>, -<code>"some_dir/file.txt"</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&</i>, so that even though the Filesystem Library -functions used in the following code snippet have <i>const path&</i> formal -parameters, the user can just -code C-style strings as actual arguments:</p> -<blockquote> - <pre>remove_all( "foobar" ); -create_directory( "foobar" ); -ofstream file( "foobar/cheeze" ); -file << "tastes good!\n"; -file.close(); -if ( !exists( "foobar/cheeze" ) ) - std::cout << "Something is rotten in foobar\n";</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 / "foo/bar" ); -ifstream file2( arg_path / "foo" / "bar" );</pre> -</blockquote> -<p>The expressions <i>arg_path / "foo/bar"</i> and <i>arg_path / "foo" -/ "bar"</i> yield identical results.</p> -<p>Paths can include references to the current directory, using "<code>.</code>" -notation, and the parent directory, using "<code>..</code>" -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. The code -below is extracted from a real program, slightly modified for clarity:</p> -<blockquote> - <pre>bool find_file( const path & dir_path, // in this directory, - const std::string & file_name, // search for this name, - path & 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->status()) ) - { - if ( find_file( itr->path(), file_name, path_found ) ) return true; - } - else if ( itr->path().filename() == file_name ) // see below - { - path_found = itr->path(); - return true; - } - } - return false; -}</pre> -</blockquote> -<p>The expression <i>itr->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( "foo" ) == exists( "foo" ) ); // -(1)<br> -<br> -remove_all( "foo" );<br> -assert( !exists( "foo" ) ); // (2)<br> -<br> -assert( is_directory( "foo" ) == is_directory( "foo" ) ); // -(3)</code></p> -</blockquote> -<p>(1) will fail if a non-existent "foo" comes into existence, or an -existent "foo" 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 "foo" is created by another -thread, process, or computer.</p> -<p>(3) will fail if another thread, process, or computer removes an -existing file "foo" and then creates a directory named "foo", 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 "Throws" 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. 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 & str,<br> - 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> - 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 & 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 "illusion -of portability" 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() -> filename().</li> - <li>has_leaf() -> has_filename().</li> - <li>branch_path() -> parent_path().</li> - <li>has_branch_path() -> has_parent_path().</li> - <li>remove_leaf() -> remove_filename().</li> - </ul> - </li> - <li>Changed operations.hpp function names:<ul> - <li>is_regular() -> is_regular_file().</li> - </ul> - </li> - <li>Bug fix: Add path.cpp #include <cwchar></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 "/" 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> <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>© 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/src/third_party/boost/libs/filesystem/v2/doc/portability_guide.htm b/src/third_party/boost/libs/filesystem/v2/doc/portability_guide.htm deleted file mode 100644 index 9dc23182093..00000000000 --- a/src/third_party/boost/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. 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 "fighting chance" 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&<i> name</i>)</code></td> - <td><b>Returns:</b> <i>true</i> if <code>!name.empty() && 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&<i> name</i>)</code></td> - <td><b>Returns:</b> <i>true</i> if <code>!name.empty() && name</code> contains - only the characters specified by the Windows platform SDK as valid - regardless of the file system <code>&& (name</code> is <code>"."</code> or - <code>".."</code> or does not end with a trailing space or period<code>)</code>. - The allowed characters are anything except <code>0x0-0x1F</code>, <code>'<'</code>, - <code>'>'</code>, <code>':'</code>, <code>'"'</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&<i> name</i>)</code></td> - <td><b>Returns:</b> <code> windows_name(name) && portable_posix_name(name) - && (name</code> is <code>"."</code> or <code>".."</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&<i> name</i>)</code></td> - <td><b>Returns:</b> <code>portable_name(name) && (name</code> is <code>"."</code> - or <code>".."</code> 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&<i> name</i>)</code></td> - <td><b>Returns:</b> <code>portable_name(name) && </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 "file extension" - but limit its length.</td> - </tr> - <tr> - <td align="left" valign="top"><code><a name="native">native</a>(const - std::string&<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 "portable_" <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 "Foo" and "foo". </td> - <td valign="top">Some file systems are case insensitive. 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. For example, do not expect a file - created with the name of "Foo" to be opened successfully with the name of "foo".</td> - <td valign="top">Some file systems are case sensitive. 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. - 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. 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. Pick the specific limit according to - the operating systems and or file systems you wish portability to:<br> - Not a concern:: POSIX, Windows, MAC OS X.<br> - 31 characters: Classic Mac OS<br> - 8 characters + period + 3 characters: ISO 9660 level 1<br> - 32 characters: ISO 9660 level 2 and 3<br> - 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/src/third_party/boost/libs/filesystem/v2/doc/reference.html b/src/third_party/boost/libs/filesystem/v2/doc/reference.html deleted file mode 100644 index 8db3b6ccd2f..00000000000 --- a/src/third_party/boost/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> - <a href="index.htm">Library Home</a> - <a href="index.htm#tutorial">Tutorial</a> <a href="reference.html"> - Reference</a> <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> - -<a href="#Requirements-on-programs">Requirements on programs</a><br> - <a href="#Requirements-on-implementations">Requirementson implementations</a><br> - <a href="#Header-filesystem-synopsis"> - Header <filesystem> synopsis</a><br> - <a href="#Path-traits">Path traits</a><br> - <a href="#Class-template-basic_path"> - Class template basic_path</a><br> - -<a href="#Pathname-formats">Pathname formats</a><br> - -<a href="#Pathname-grammar">Pathname grammar</a><br> - -<a href="#Filename-conversion">Filename conversion</a><br> - -<a href="#basic_path-requirements">Requirements</a> </td> - <td width="35%" valign="top"> Class template basic_path (continued)<br> - -<a href="#basic_path-requirements">basic_path constructors</a><br> - -<a href="#basic_path-assignments">basic_path assignments</a><br> - -<a href="#basic_path-modifiers">basic_path modifiers</a><br> - -<a href="#basic_path-inserter-extractor">basic_path operators</a><br> - -<a href="#basic_path-observers">basic_path observers</a><br> - -<a href="#basic_path-iterators">basic_path iterators</a><br> - -<a href="#basic_path-non-member-functions">basic_path non-member functions</a><br> - -<a href="#basic_path-inserter-extractor">basic_path inserter and extractor</a><span style="background-color: #FFFFFF"><br> -</span> -<a href="#Class-template-basic_filesystem_error">Class template - basic_filesystem_error</a><br> - -<a href="#basic_filesystem_error-constructors">basic_filesystem_error - constructors</a><br> - -<a href="#basic_filesystem_error-observers">basic_filesystem_error observers</a><br> - -<a href="#Class-template-basic_directory_entry">Class template - basic_directory_entry</a><br> - -<a href="#basic_directory_entry-constructors">basic_directory_entry constructors</a><br> - -<a href="#basic_directory_entry-modifiers">basic_directory_entry modifiers</a><br> - -<a href="#basic_directory_entry-observers">basic_directory_entry observers</a><br> - -<a href="#basic_directory_entry-comparisons">basic_directory_entry comparisons</a></td> - <td width="89%" valign="top">Filesystem library chapter (continued)<br> - -<a href="#Class-template-basic_directory_iterator">Class template - basic_directory_iterator</a><br> - -<a href="#basic_directory_iterator-constructors">basic_directory_iterator - constructors</a><br> - -<a href="#Class-template-basic_recursive_directory_iterator">Class template - basic_recursive_directory_iterator</a><br> - <a href="#file_status">Class - file_status</a><br> - <a href="#Non-member-functions"> - Non-member operational functions</a><br> - -<a href="#Status-functions">Status functions</a><br> - -<a href="#Predicate-functions">Predicate functions</a><br> - -<a href="#Attribute-functions">Attribute functions</a><br> - -<a href="#Operations-functions">Other operations functions</a><br> - -<a href="#Convenience-functions">Convenience functions</a><br> - <a href="#header-fstream">Additions - to header <fstream></a><br> -<a href="#Suggestions-for-fstream">Suggestions for <code><fstream></code></a><code><br> - </code> -<a href="#Suggestions-for-fstream"> 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> - </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 "as if" 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 -"dangling" 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 "do-the-right-thing" rule allows users to write <code>exists("foo")</code>, -taking advantage of class <code>basic_path</code>'s string conversion -constructor, rather -than the lengthier and more error prone <code>exists(path("foo"))</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 <class Path> - typename boost::enable_if<is_basic_path<Path>,bool>::type exists(const Path& p); -inline bool exists(const path& p) { return exists<path>(p); } -inline bool exists(const wpath& p) { return exists<wpath>(p); }</pre> - </blockquote> - <p> 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. <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& 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& 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& 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><boost/filesystem></code> synopsis</a></h3> -<pre> namespace boost - { - namespace filesystem - { - template <class String, class Traits> class <a href="#Class-template-basic_path">basic_path</a>; - - template<class String, class Traits> - void swap(basic_path<String, Traits> & lhs, basic_path<String, Traits> & rhs); - - template<class String, class Traits> bool operator<(<i>a</i> a, <i>b</i> b); - template<class String, class Traits> bool operator==(<i>a</i> a, <i>b</i> b); - template<class String, class Traits> bool operator!=(<i>a</i> a, <i>b</i> b); - template<class String, class Traits> bool operator>(<i>a</i> a, <i>b</i> b); - template<class String, class Traits> bool operator<=(<i>a</i> a, <i>b</i> b); - template<class String, class Traits> bool operator>=(<i>a</i> a, <i>b</i> b); - template<class String, class Traits> bool operator/(<i>a</i> a, <i>b</i> b); - - template<class Path> - basic_ostream<typename Path::string_type::value_type, typename Path::string_type::traits_type> & - operator<<(basic_ostream<typename Path::string_type::value_type, typename Path::string_type::traits_type>& os, const Path & ph); - - template<class Path> - basic_istream<typename Path::string_type::value_type, typename Path::string_type::traits_type> & - operator>>(basic_istream<typename Path::string_type::value_type, typename Path::string_type::traits_type>& is, Path & ph); - - struct path_traits; - struct wpath_traits; - - typedef basic_path<std::string, path_traits> path; - typedef basic_path<std::wstring, wpath_traits> wpath; - - template<class Path> struct is_basic_path; - - template<class Path> struct slash { static const char value = '/'; }; - template<class Path> struct dot { static const char value = '.'; }; -<span style="background-color: #FFFFFF"> template<class Path> 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 <class Path> class <a href="#Class-template-basic_filesystem_error">basic_filesystem_error</a>; - - typedef basic_filesystem_error<path> filesystem_error; - typedef basic_filesystem_error<wpath> wfilesystem_error; - - <span style="background-color: #FFFFFF">template <class Path> class <a href="#Class-template-basic_directory_entry">basic_directory_entry</a>; - - typedef basic_directory_entry<path> directory_entry; - typedef basic_directory_entry<wpath> wdirectory_entry; -</span> - template <class Path> class <a href="#Class-template-basic_directory_iterator">basic_directory_iterator</a>; - - typedef basic_directory_iterator<path> directory_iterator; - typedef basic_directory_iterator<wpath> wdirectory_iterator; - - template <class Path> class <a href="#Class-template-basic_recursive_directory_iterator">basic_recursive_directory_iterator</a>; - - typedef basic_recursive_directory_iterator<path> <a name="recursive_directory_iterator">recursive_directory_iterator</a>; - typedef basic_recursive_directory_iterator<wpath> 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 <class Path> file_status status(const Path& p); - template <class Path> file_status status(const Path& p, error_code& ec); - template <class Path> file_status symlink_status(const Path& p); - template <class Path> file_status symlink_status(const Path& p, error_code& 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 <class Path> bool exists(const Path& p); - template <class Path> bool is_directory(const Path& p); - template <class Path> bool is_regular_file(const Path& p); - template <class Path> bool is_other(const Path& p); - template <class Path> bool is_symlink(const Path& p); - template <class Path> bool is_empty(const Path& p); - - template <class Path1, class Path2> - bool equivalent(const Path1& p1, const Path2& p2); - - // <a href="#Attribute-functions">attribute functions</a> - template <class Path> Path current_path(); - template <class Path> void current_path(const Path& p); - template <class Path> const Path& initial_path(); - template <class Path> <span style="background-color: #FFFFFF; ">uintmax_t</span> file_size(const Path& p); -<span style="background-color: #FFFFFF"> template <class Path> space_info space(const Path& p);</span><span style="background-color: #FFFF00"> -</span> template <class Path> std::time_t last_write_time(const Path& p); - template <class Path> - void last_write_time(const Path& p, const std::time_t new_time); - - // <a href="#Operations-functions">operations functions</a> - template <class Path> bool create_directory(const Path& dp); - template <class Path1, class Path2> - void create_hard_link(const Path1& old_fp, const Path2& new_fp); -<span style="background-color: #FFFFFF"> template <class Path1, class Path2> - error_code create_hard_link(const Path1& old_fp, const Path2& new_fp, error_code& ec); - template <class Path1, class Path2> - void create_symlink(const Path1& old_fp, const Path2& new_fp); - template <class Path1, class Path2> - error_code create_symlink(const Path1& old_fp, const Path2& new_fp, error_code& ec); -</span> template <class Path> bool remove(const Path& p); - template <class Path1, class Path2> - void rename(const Path1& from_p, const Path2& to_p); - - BOOST_SCOPED_ENUM_START(<a name="copy_option">copy_option</a>) - { fail_if_exists, overwrite_if_exists }; - BOOST_SCOPED_ENUM_END - - template <class Path1, class Path2> - void copy_file(const Path1& from_fp, const Path2& to_fp, - BOOST_SCOPED_ENUM(copy_option) option=copy_option::fail_if_exists); - - template <class Path> Path system_complete(const Path& p); - template <class Path> Path complete(const Path& p, const Path& base=initial_path<Path>()); - - // <a href="#Convenience-functions">convenience functions</a> - template <class Path> bool create_directories(const Path& p); - template <class Path> typename Path::string_type extension(const Path& p); - template <class Path> typename Path::string_type basename(const Path& p); - template <class Path> - Path change_extension(const Path& p, const typename Path::string_type& 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 <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. 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 <class String, class Traits> class basic_path - { - public: - typedef basic_path<String, Traits> 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& p); - basic_path(const string_type& s); - basic_path(const value_type* s); - template <class InputIterator> - basic_path(InputIterator first, InputIterator last); - - ~basic_path(); - - // <a href="#basic_path-assignments">assignments</a> - basic_path& operator=(const basic_path& p); - basic_path& operator=(const string_type& s); - basic_path& operator=(const value_type* s); - template <class InputIterator> - basic_path& assign(InputIterator first, InputIterator last); - - // <a href="#basic_path-modifiers">modifiers</a> - basic_path& operator/=(const basic_path& rhs); - basic_path& operator/=(const string_type& s); - basic_path& operator/=(const value_type* s); - template <class InputIterator> - basic_path& append(InputIterator first, InputIterator last); - - <span style="background-color: #FFFFFF">void clear(); - void swap( basic_path & rhs );</span> - basic_path& remove_filename(); - basic_path& replace_extension(const string_type & new_extension = ""); - - // <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 <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 "<code>const string_type</code>" or -"<code>const external_string_type</code>", implementations are permitted to return -"<code>const string_type&</code>" or "<code>const external_string_type&</code>" -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. --</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> 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. 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>"SYS1::DISK1:[JANE.TYLER.HARRY]</code>" is treated -as a native pathname with a system name, drive name, and three directory -filenames, rather than a portable pathname with one filename.</p> -<p><i>-- Windows: </i><code>"c:\\jane\\tyler\\harry"</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> ("if it looks -like a duck, walks like a duck, and quacks like a duck, it must be a duck") -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> - root-name<sub>opt</sub> -root-directory<sub>opt</sub> relative-path<sub>opt</sub></i></p> -<p><i>root-name:<br> - -implementation-defined</i></p> -<p><i>root-directory:<br> - slash<br> - -root-directory slash<br> - -implementation-defined</i></p> -<p><i>relative-path:<br> - -filename<br> - relative-path -slash<br> - relative-path -slash filename</i></p> -<p><i>filename:<br> - name<br> - dot<br> - dot dot</i></p> -<p><i>slash:<br> - <code> -slash<Path>::value</code></i></p> -<p><i>dot:<br> - <code> -dot<Path>::value</code></i></p> -</blockquote> -<p>The grammar is aligned with 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. 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 "do-the-right-thing" 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& s); -basic_path(const value_type * s); -template <class InputIterator> - 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& operator=(const string_type& s); -basic_path& operator=(const value_type* s); -template <class InputIterator> - basic_path& 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& operator/=(const basic_path& 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& operator/=(const string_type& s); -basic_path& operator/=(const value_type* s); -template <class InputIterator> -basic_path& 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->empty()</code> is true.</p> -</blockquote> -<pre><code><span style="background-color: #FFFFFF">void swap( basic_path & 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->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->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& 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 <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& replace_extension( const string_type & new_extension = "" );</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("/cats/jane").file_string()</code> -would return the string <code>"[CATS]JANE"</code> while <code>path("/cats/jane").directory_string()</code> -would return the string <code>"[CATS.JANE]"</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("") : - <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 & 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 & 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<class String, class Traits> -void swap( basic_path<String, Traits> & lhs, basic_path<String, Traits> & 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"><</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">, - </span> <code><span style="background-color: #FFFFFF">>=</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"><class - String, class Traits></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<String, Traits>& a, basic_path<String, Traits>& - b</code></span></td> - </tr> - <tr> - <td width="100%"><span style="background-color: #FFFFFF"><code>const - typename basic_path<String, Traits>::string_type& a, - basic_path<String, Traits>& b</code></span></td> - </tr> - <tr> - <td width="100%"><span style="background-color: #FFFFFF"><code>const - typename basic_path<String, Traits>::string_type::value_type* a, - basic_path<String, Traits>& b</code></span></td> - </tr> - <tr> - <td width="100%"><span style="background-color: #FFFFFF"><code>const - basic_path<String, Traits>& a, typename basic_path<String, Traits>::string_type& - b</code></span></td> - </tr> - <tr> - <td width="100%"><span style="background-color: #FFFFFF"><code>const - basic_path<String, Traits>& a, typename - basic_path<String, Traits>::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<String, Traits>&</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<String, Traits></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<String, Traits></span></code></td> - <td width="55%" height="30"><code><span style="background-color: #FFFFFF"> - basic_path<String, Traits> 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 < 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"> - < </span></code><i><b><span style="background-color: #FFFFFF">b'</span></b></i><code><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><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 > 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"> - < </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">b'</span></b></i><code><span style="background-color: #FFFFFF"> - < </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> -</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 "abc" and "ABC" 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 "abc" - and "ABC" 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 "the same" must decide if - "the same" means "the same representation" or "resolve to the same actual - file", 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<class Path> - basic_istream<typename Path::string_type::value_type, typename Path::string_type::traits_type>& - operator>>(basic_istream< typename Path::string_type::value_type, typename Path::string_type::traits_type>& is, - Path& ph );</span></pre> -<blockquote> - <p><i><span style="background-color: #FFFFFF">Effects: </span></i> - <code><span style="background-color: #FFFFFF">typename Path::string_type str;<br> - - is >> str;<br> - - 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<class Path> - basic_ostream<typename Path::string_type::value_type, typename Path::string_type::traits_type>& - operator<<(basic_ostream< typename Path::string_type::value_type, typename Path::string_type::traits_type>& os, - const Path& ph );</span></pre> -<blockquote> - <p><i><span style="background-color: #FFFFFF">Effects:</span></i><span style="background-color: #FFFFFF"> - </span> <code><span style="background-color: #FFFFFF">os << 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 <class Path> 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& <span style="background-color: #FFFFFF">what_arg</span>, error_code ec); - basic_filesystem_error(const std::string& <span style="background-color: #FFFFFF">what_arg</span>, const path_type& p1, error_code ec); - basic_filesystem_error(const std::string& <span style="background-color: #FFFFFF">what_arg</span>, const path_type& p1, const path_type& p2, error_code ec); - - const path_type& path1() const; - const path_type& 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& <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& <span style="background-color: #FFFFFF">what_arg</span>, const path_type& 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& <span style="background-color: #FFFFFF">what_arg</span>, const path_type& p1, const path_type& 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& 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& 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<> const char -* basic_filesystem_error<path>::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 <class Path> 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& 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& 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& 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& path() const; - operator const Path&() const; -<span style="background-color: #FFFFFF"> - file_status status() const; - file_status status(error_code& ec) const; - file_status symlink_status() const; - file_status symlink_status(error_code& ec) const; -</span><span style="background-color: #FFFF00"> -</span> // <a href="#basic_directory_entry-comparisons">comparisons</a> - bool operator<(const basic_directory_entry<Path>& rhs); - bool operator==(const basic_directory_entry<Path>& rhs); - bool operator!=(const basic_directory_entry<Path>& rhs); - bool operator>(const basic_directory_entry<Path>& rhs); - bool operator<=(const basic_directory_entry<Path>& rhs); - bool operator>=(const basic_directory_entry<Path>& 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& 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& 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& 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& path() const; -operator const Path&() 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) && !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& 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) && !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& 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 <class Path> - class basic_directory_iterator : - public iterator<input_iterator_tag, basic_directory_entry<Path> > - { - public: - typedef Path path_type; - - // <a href="#basic_directory_iterator-constructors">constructors</a> - basic_directory_iterator(); - explicit basic_directory_iterator(const Path& dp); - basic_directory_iterator(const Path& dp, error_code& ec); - basic_directory_iterator(const basic_directory_iterator& bdi); - basic_directory_iterator& operator=(const basic_directory_iterator& 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<Path></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<Path>&</code> is returned. The result of -<code>operator-></code> on an end iterator is not defined. For any other -iterator value a <code>const basic_directory_entry<Path>*</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 <iostream> -#include <filesystem> - -using std::tr2::sys; -using std::cout; - -int main(int argc, char* argv[]) -{ - std::string p(argc <= 1 ? "." : argv[1]); - - if (is_directory(p)) - { - for (directory_iterator itr(p); itr!=directory_iterator(); ++itr) - { - cout << itr->path().filename() << ' '; // display filename only - if (is_regular_file(itr->status())) cout << " [" << file_size(itr->path()) << ']'; - cout << '\n'; - } - } - else cout << (exists(p) ? "Found: " : "Not found: ") << p << '\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& 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(".")</code> rather than <code>directory_iterator("")</code>. -<i>-- end note</i>]</p> -</blockquote> -<pre><code>basic_directory_iterator(const Path& dp, error_code& 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 <class Path> - class basic_recursive_directory_iterator : - public iterator<input_iterator_tag, basic_directory_entry<Path> > - { - public: - typedef Path path_type; - - // constructors - basic_recursive_directory_iterator(); - explicit basic_recursive_directory_iterator(const Path& dp); - basic_recursive_directory_iterator(const basic_recursive_directory_iterator& brdi); - basic_recursive_directory_iterator& operator=(const basic_recursive_directory_iterator& 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->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 <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 <class Path> file_status status(const Path& p, error_code& ec); -template <class Path> file_status <a name="symlink_status">symlink_status</a>(const Path& p, error_code& 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. <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> 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><fstream></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><fstream></code> operations would -fail on a directory. -<i>-- end note</i>]</p> -</blockquote> -<pre>template <class Path> file_status status(const Path& p);</pre> -<blockquote> - <p><i>Effects:</i> <code>system_error_code ec;</code><br> - - <code>file_status stat(status(p, ec));</code></p> - <p><i>Throws:</i> <code>basic_filesystem_error<Path></code> if <code>ec - != 0</code></p> - <p><i>Returns:</i> <code>stat</code></p> -</blockquote> -<pre>template <class Path> file_status symlink_status(const Path& p);</pre> -<blockquote> - <p><i>Effects:</i> <code>system_error_code ec;</code><br> - - <code>file_status stat(symlink_status(p, ec));</code></p> - <p><i>Throws:</i> <code>basic_filesystem_error<Path></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) && s.type() != file_not_found</code></span></p> -</blockquote> -<pre>template <class Path> bool <a name="exists">exists</a>(const Path& 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 <class Path> bool is_regular_file(const Path& 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 <class Path> bool is_directory(const Path& 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 <class Path> bool is_symlink(const Path& 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) && !is_regular_file(s) && !is_directory(s) && !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 <class Path> bool is_other(const Path& p);</code></pre> -<blockquote> - <p><i>Returns:</i> <code>is_other( status(p) )</code></p> -</blockquote> -<pre><code>template <class Path> bool <span style="background-color: #FFFFFF; text-decoration:underline">is_</span>empty(const Path& 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<Path></code> if <code>!exist(s) || - is_other(s)</code>.</p> - <p><i>Returns:</i> <code>is_directory(s)<br> - ? - basic_directory_iterator<Path>(p) == basic_directory_iterator<Path>()<br> - : file_size(p) == 0;</code></p> -</blockquote> -<pre><code>template <class Path1, class Path2> bool <a name="equivalent">equivalent</a>(const Path1& p1, const Path2& 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 <code>status(p2)</code>, - respectively.</p> - <p><i>Throws:</i> <code>basic_filesystem_error<Path1></code><span style="background-color: #FFFFFF"> </span> - if <code>(!exists(s1) && !exists(s2)) || (is_other(s1) && - 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>"st_dev</i> must be unique - within a Local Area Network". 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 "same" 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 <class Path> const Path& <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 <class Path> 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 <class Path> void current_path(const Path& p);</pre> -<blockquote> -<p><i>Postcondition:</i> equivalent( p, current_path() );</p> -</blockquote> -<pre>template <class Path> <span style="background-color: #FFFFFF; ">uintmax_t</span> file_size(const Path& 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> <class Path> space_info space(const Path& 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 <class Path> std::time_t last_write_time(const Path& 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> 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 <class Path> void last_write_time(const Path& 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 <class Path> bool create_directory(const Path& 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<Path></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 <class Path1, class Path2> - error_code create_hard_link(const Path1& to_p, const Path2& from_p, error_code& 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"> </span><code><span style="background-color: #FFFFFF">exists(to_p) && exists(from_p) && 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 <class Path1, class Path2> - void create_hard_link(const Path1& to_p, const Path2& 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<Path1, Path2></code><span style="background-color: #FFFFFF"> - if <code>ec</code> is not zero.</span></p> - </blockquote> -<pre><span style="background-color: #FFFFFF">template <class Path1, class Path2> - error_code create_symlink(const Path1& to_p, const Path2& from_p, error_code& 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 <class Path1, class Path2> - void create_symlink(const Path1& to_p, const Path2& 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<Path1, Path2></code><span style="background-color: #FFFFFF"> - if <code>ec</code> is not zero.</span></p> - </blockquote> -<pre>template <class Path> bool remove(const Path& p, system::error_code & ec = <i>singular</i> );</pre> -<blockquote> - <p><i>Effects:</i> 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<Path></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 <class Path> unsigned long remove_all(const Path& p);</pre> -<blockquote> - <p><i>Effects:</i> 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 <class Path1, class Path2> void rename(const Path1& from_p, const Path2& 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) && 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 <class Path1, class Path2> - void copy_file(const Path1& from_fp, const Path2& 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<Path></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 && exists(to_fp))</code></p> -</blockquote> -<pre>template <class Path> Path complete(const Path& p, const Path& base=initial_path<Path>());</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"> </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() && (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 <class Path> Path system_complete(const Path& 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 <class Path> bool create_directories(const Path & 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> <code>basic_filesystem_error<Path></code> if<code> - exists(p) && !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 <class Path> typename Path::string_type extension(const Path & 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 <class Path> typename Path::string_type basename(const Path & 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 <class Path> - Path change_extension(const Path & p, const typename Path::string_type & new_extension);</pre> -<blockquote> - <p><i>Postcondition:</i> <code>basename(<i>return_value</i>) == basename(p) && - 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><fstream></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><fstream></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 -"do-the-right-thing" rule from <a href="#Requirements-on-implementations"> -Requirements on implementations</a> does apply to header <code><fstream></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 <class Path> </span><span style="background-color: #FFFFFF">basic_filebuf</span><span style="background-color: #FFFFFF"><charT,traits>* </span><span style="background-color: #FFFFFF">open(const</span><span style="background-color: #FFFFFF"> Path& 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 <class Path> explicit basic_ifstream(const Path& p, ios_base::openmode mode = ios_base::in); -template <class Path> void open(const Path& 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()->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()->open(path(s), mode | -ios_base::in)</code> or <code>rdbuf()->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()->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()->open(path(s), mode | -ios_base::in)</code> or <code>rdbuf()->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 <class Path> explicit basic_ofstream(const Path& p, ios_base::openmode mode = ios_base::out); -template <class Path> void open(const Path& 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()->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()->open(path(s), mode | -ios_base::out)</code> or <code>rdbuf()->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()->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()->open(path(s), mode | -ios_base::out)</code> or <code>rdbuf()->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 <class Path> explicit basic_fstream(const Path& p, ios_base::openmode mode = ios_base::in|ios_base::out); -template <class Path> void open(const Path& 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()->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()->open(path(s), mode)</code> -or <code>rdbuf()->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()->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()->open(path(s), mode)</code> -or <code>rdbuf()->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> - <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>""</code></td> -<td width="160"><code>""</code></td> -<td width="112"><code>""</code></td> -<td width="112"><code>""</code></td> -<td width="72"><code>""</code></td> -<td width="48"><code>""</code></td> -<td width="88"><code>""</code></td> -<td width="96"><code>""</code></td> -<td width="72"><code>""</code></td> -<td width="72"><code>""</code></td> -</tr> -<tr> -<td width="112"><code>"."</code></td> -<td width="160"><code>"."</code></td> -<td width="112"><code>"."</code></td> -<td width="112"><code>"."</code></td> -<td width="72"><code>""</code></td> -<td width="48"><code>""</code></td> -<td width="88"><code>""</code></td> -<td width="96"><code>"."</code></td> -<td width="72"><code>""</code></td> -<td width="72"><code>"."</code></td> -</tr> -<tr> -<td width="112"><code>".."</code></td> -<td width="160"><code>".."</code></td> -<td width="112"><code>".."</code></td> -<td width="112"><code>".."</code></td> -<td width="72"><code>""</code></td> -<td width="48"><code>""</code></td> -<td width="88"><code>""</code></td> -<td width="96"><code>".."</code></td> -<td width="72"><code>""</code></td> -<td width="72"><code>".."</code></td> -</tr> -<tr> -<td width="112"><code>"foo"</code></td> -<td width="160"><code>"foo"</code></td> -<td width="112"><code>"foo"</code></td> -<td width="112"><code>"foo"</code></td> -<td width="72"><code>""</code></td> -<td width="48"><code>""</code></td> -<td width="88"><code>""</code></td> -<td width="96"><code>"foo"</code></td> -<td width="72"><code>""</code></td> -<td width="72"><code>"foo"</code></td> -</tr> -<tr> -<td width="112"><code>"/"</code></td> -<td width="160"><code>"/"</code></td> -<td width="112"><code>"/"</code></td> -<td bgcolor="#99FF66" width="112"><code>"/"<br>"\"</code></td> -<td width="72"><code>"/"</code></td> -<td width="48"><code>""</code></td> -<td width="88"><code>"/"</code></td> -<td width="96"><code>""</code></td> -<td width="72"><code>""</code></td> -<td width="72"><code>"/"</code></td> -</tr> -<tr> -<td width="112"><code>"/foo"</code></td> -<td width="160"><code>"/","foo"</code></td> -<td width="112"><code>"/foo"</code></td> -<td bgcolor="#99FF66" width="112"><code>"/foo"<br>"\foo"</code></td> -<td width="72"><code>"/"</code></td> -<td width="48"><code>""</code></td> -<td width="88"><code>"/"</code></td> -<td width="96"><code>"foo"</code></td> -<td width="72"><code>"/"</code></td> -<td width="72"><code>"foo"</code></td> -</tr> -<tr> -<td width="112"><code>"foo/"</code></td> -<td width="160"><code>"foo","."</code></td> -<td width="112"><code>"foo/"</code></td> -<td bgcolor="#99FF66" width="112"><code>"foo/"<br>"foo\"</code></td> -<td width="72"><code>""</code></td> -<td width="48"><code>""</code></td> -<td width="88"><code>""</code></td> -<td width="96"><code>"foo/"</code></td> -<td width="72"><code>"foo"</code></td> -<td width="72"><code>"."</code></td> -</tr> -<tr> -<td width="112"><code>"/foo/"</code></td> -<td width="160"><code>"/","foo","."</code></td> -<td width="112"><code>"/foo/"</code></td> -<td bgcolor="#99FF66" width="112"><code>"/foo/"<br>"\foo\"</code></td> -<td width="72"><code>"/"</code></td> -<td width="48"><code>""</code></td> -<td width="88"><code>"/"</code></td> -<td width="96"><code>"foo/"</code></td> -<td width="72"><code>"/foo"</code></td> -<td width="72"><code>"."</code></td> -</tr> -<tr> -<td width="112"><code>"foo/bar"</code></td> -<td width="160"><code>"foo","bar"</code></td> -<td width="112"><code>"foo/bar"</code></td> -<td bgcolor="#99FF66" width="112"><code>"foo/bar"<br>"foo\bar"</code></td> -<td width="72"><code>""</code></td> -<td width="48"><code>""</code></td> -<td width="88"><code>""</code></td> -<td width="96"><code>"foo/bar"</code></td> -<td width="72"><code>"foo"</code></td> -<td width="72"><code>"bar"</code></td> -</tr> -<tr> -<td width="112"><code>"/foo/bar"</code></td> -<td width="160"><code>"/","foo","bar"</code></td> -<td width="112"><code>"/foo/bar"</code></td> -<td bgcolor="#99FF66" width="112"><code>"/foo/bar"<br>"\foo\bar"</code></td> -<td width="72"><code>"/"</code></td> -<td width="48"><code>""</code></td> -<td width="88"><code>"/"</code></td> -<td width="96"><code>"foo/bar"</code></td> -<td width="72"><code>"/foo"</code></td> -<td width="72"><code>"bar"</code></td> -</tr> -<tr> -<td width="112"><code>"///foo///"</code></td> -<td width="160"><code>"/","foo","."</code></td> -<td width="112"><code>"///foo///"</code></td> -<td bgcolor="#99FF66" width="112"><code>"///foo///"<br>"\foo\\\"</code></td> -<td width="72"><code>"/"</code></td> -<td width="48"><code>""</code></td> -<td width="88"><code>"/"</code></td> -<td width="96"><code>"foo///"</code></td> -<td width="72"><code>"///foo"</code></td> -<td width="72"><code>"."</code></td> -</tr> -<tr> -<td width="112"><code>"///foo///bar"</code></td> -<td width="160"><code>"/","foo","bar"</code></td> -<td width="112"><code>"///foo///bar"</code></td> -<td bgcolor="#99FF66" width="112"><code>"///foo///bar"<br>"\foo\\\bar"</code></td> -<td width="72"><code>"/"</code></td> -<td width="48"><code>""</code></td> -<td width="88"><code>"/"</code></td> -<td width="96"><code>"foo///bar"</code></td> -<td width="72"><code>"///foo"</code></td> -<td width="72"><code>"bar"</code></td> -</tr> -<tr> -<td width="112"><code>"/."</code></td> -<td width="160"><code>"/","."</code></td> -<td width="112"><code>"/."</code></td> -<td bgcolor="#99FF66" width="112"><code>"/."<br>"\."</code></td> -<td width="72"><code>"/"</code></td> -<td width="48"><code>""</code></td> -<td width="88"><code>"/"</code></td> -<td width="96"><code>"."</code></td> -<td width="72"><code>"/"</code></td> -<td width="72"><code>"."</code></td> -</tr> -<tr> -<td width="112"><code>"./"</code></td> -<td width="160"><code>".","."</code></td> -<td width="112"><code>"./"</code></td> -<td bgcolor="#99FF66" width="112"><code>"./"<br>".\"</code></td> -<td width="72"><code>""</code></td> -<td width="48"><code>""</code></td> -<td width="88"><code>""</code></td> -<td width="96"><code>"./"</code></td> -<td width="72"><code>"."</code></td> -<td width="72"><code>"."</code></td> -</tr> -<tr> -<td width="112"><code>"/.."</code></td> -<td width="160"><code>"/",".."</code></td> -<td width="112"><code>"/.."</code></td> -<td bgcolor="#99FF66" width="112"><code>"/.."<br>"\.."</code></td> -<td width="72"><code>"/"</code></td> -<td width="48"><code>""</code></td> -<td width="88"><code>"/"</code></td> -<td width="96"><code>".."</code></td> -<td width="72"><code>"/"</code></td> -<td width="72"><code>".."</code></td> -</tr> -<tr> -<td width="112"><code>"../"</code></td> -<td width="160"><code>"..","."</code></td> -<td width="112"><code>"../"</code></td> -<td bgcolor="#99FF66" width="112"><code>"../"<br>"..\"</code></td> -<td width="72"><code>""</code></td> -<td width="48"><code>""</code></td> -<td width="88"><code>""</code></td> -<td width="96"><code>"../"</code></td> -<td width="72"><code>".."</code></td> -<td width="72"><code>"."</code></td> -</tr> -<tr> -<td width="112"><code>"foo/."</code></td> -<td width="160"><code>"foo","."</code></td> -<td width="112"><code>"foo/."</code></td> -<td bgcolor="#99FF66" width="112"><code>"foo/."<br>"foo\."</code></td> -<td width="72"><code>""</code></td> -<td width="48"><code>""</code></td> -<td width="88"><code>""</code></td> -<td width="96"><code>"foo/."</code></td> -<td width="72"><code>"foo"</code></td> -<td width="72"><code>"."</code></td> -</tr> -<tr> -<td width="112"><code>"foo/.."</code></td> -<td width="160"><code>"foo",".."</code></td> -<td width="112"><code>"foo/.."</code></td> -<td bgcolor="#99FF66" width="112"><code>"foo/.."<br>"foo\.."</code></td> -<td width="72"><code>""</code></td> -<td width="48"><code>""</code></td> -<td width="88"><code>""</code></td> -<td width="96"><code>"foo/.."</code></td> -<td width="72"><code>"foo"</code></td> -<td width="72"><code>".."</code></td> -</tr> -<tr> -<td width="112"><code>"foo/./"</code></td> -<td width="160"><code>"foo",".","."</code></td> -<td width="112"><code>"foo/./"</code></td> -<td bgcolor="#99FF66" width="112"><code>"foo/./"<br>"foo\.\"</code></td> -<td width="72"><code>""</code></td> -<td width="48"><code>""</code></td> -<td width="88"><code>""</code></td> -<td width="96"><code>"foo/./"</code></td> -<td width="72"><code>"foo/."</code></td> -<td width="72"><code>"."</code></td> -</tr> -<tr> -<td width="112"><code>"foo/./bar"</code></td> -<td width="160"><code>"foo",".","bar"</code></td> -<td width="112"><code>"foo/./bar"</code></td> -<td bgcolor="#99FF66" width="112"><code>"foo/./bar"<br>"foo\.\bar"</code></td> -<td width="72"><code>""</code></td> -<td width="48"><code>""</code></td> -<td width="88"><code>""</code></td> -<td width="96"><code>"foo/./bar"</code></td> -<td width="72"><code>"foo/."</code></td> -<td width="72"><code>"bar"</code></td> -</tr> -<tr> -<td width="112"><code>"foo/.."</code></td> -<td width="160"><code>"foo",".."</code></td> -<td width="112"><code>"foo/.."</code></td> -<td bgcolor="#99FF66" width="112"><code>"foo/.."<br>"foo\.."</code></td> -<td width="72"><code>""</code></td> -<td width="48"><code>""</code></td> -<td width="88"><code>""</code></td> -<td width="96"><code>"foo/.."</code></td> -<td width="72"><code>"foo"</code></td> -<td width="72"><code>".."</code></td> -</tr> -<tr> -<td width="112"><code>"foo/../"</code></td> -<td width="160"><code>"foo","..","."</code></td> -<td width="112"><code>"foo/../"</code></td> -<td bgcolor="#99FF66" width="112"><code>"foo/../"<br>"foo\..\"</code></td> -<td width="72"><code>""</code></td> -<td width="48"><code>""</code></td> -<td width="88"><code>""</code></td> -<td width="96"><code>"foo/../"</code></td> -<td width="72"><code>"foo/.."</code></td> -<td width="72"><code>"."</code></td> -</tr> -<tr> -<td width="112"><code>"foo/../bar"</code></td> -<td width="160"><code>"foo","..","bar"</code></td> -<td width="112"><code>"foo/../bar"</code></td> -<td bgcolor="#99FF66" width="112"><code>"foo/../bar"<br>"foo\..\bar"</code></td> -<td width="72"><code>""</code></td> -<td width="48"><code>""</code></td> -<td width="88"><code>""</code></td> -<td width="96"><code>"foo/../bar"</code></td> -<td width="72"><code>"foo/.."</code></td> -<td width="72"><code>"bar"</code></td> -</tr> -<tr> -<td width="112"><code>"c:"</code></td> -<td width="160"><code>"c:"</code></td> -<td width="112"><code>"c:"</code></td> -<td width="112"><code>"c:"</code></td> -<td bgcolor="#99FF66" width="72"><code>""<br>"c:"</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> -""<br>"c:"</code></td> -<td width="88"><code>""</code></td> -<td bgcolor="#99FF66" width="96"><code>"c:"<br>""</code></td> -<td width="72"><code>""</code></td> -<td width="72"><code>"c:"</code></td> -</tr> -<tr> -<td width="112"><code>"c:/"</code></td> -<td bgcolor="#99FF66" width="160"><code>"c:","."<br>"c:","/"</code></td> -<td width="112"><code>"c:/"</code></td> -<td bgcolor="#99FF66" width="112"><code><span style="background-color: #99FF66"> -"c:/"<br>"c:\"</span></code></td> -<td bgcolor="#99FF66" width="72"><code>""<br>"c:/"</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> -""<br>"c:"</code></td> -<td bgcolor="#99FF66" width="88"><code>""<br>"/"</code></td> -<td bgcolor="#99FF66" width="96"><code>"c:/"<br>""</code></td> -<td width="72"><code>"c:"</code></td> -<td bgcolor="#99FF66" width="72"><code>"."<br>"/"</code></td> -</tr> -<tr> -<td width="112"><code>"c:foo"</code></td> -<td bgcolor="#99FF66" width="160"><code>"c:foo"<br>"c:","foo"</code></td> -<td width="112"><code>"c:foo"</code></td> -<td width="112"><code>"c:foo"</code></td> -<td bgcolor="#99FF66" width="72"><code>""<br>"c:"</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> -""<br>"c:"</code></td> -<td width="88"><code>""</code></td> -<td bgcolor="#99FF66" width="96"><code>"c:foo"<br>"foo"</code></td> -<td bgcolor="#99FF66" width="72"><code>""<br>"c:"</code></td> -<td bgcolor="#99FF66" width="72"><code>"c:foo"<br>"foo"</code></td> -</tr> -<tr> -<td width="112"><code>"c:/foo"</code></td> -<td bgcolor="#99FF66" width="160"><code>"c:","foo"<br>"c:","/","foo"</code></td> -<td width="112"><code>"c:/foo"</code></td> -<td bgcolor="#99FF66" width="112"><code>"c:/foo"<br>"c:\foo"</code></td> -<td bgcolor="#99FF66" width="72"><code>""<br>"c:/"</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> -""<br>"c:"</code></td> -<td bgcolor="#99FF66" width="88"><code>""<br>"/"</code></td> -<td bgcolor="#99FF66" width="96"><code>"c:/foo"<br>"foo"</code></td> -<td bgcolor="#99FF66" width="72"><code>"c:"<br>"c:/"</code></td> -<td width="72"><code>"foo"</code></td> -</tr> -<tr> -<td width="112"><code>"c:foo/"</code></td> -<td bgcolor="#99FF66" width="160"><code>"c:foo","."<br>"c:","foo","."</code></td> -<td width="112"><code>"c:foo/"</code></td> -<td bgcolor="#99FF66" width="112"><code>"c:foo/"<br>"c:foo\"</code></td> -<td bgcolor="#99FF66" width="72"><code>""<br>"c:"</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> -""<br>"c:"</code></td> -<td width="88"><code>""</code></td> -<td bgcolor="#99FF66" width="96"><code>"c:foo/"<br>"foo/"</code></td> -<td width="72"><code>"c:foo"</code></td> -<td width="72"><code>"."</code></td> -</tr> -<tr> -<td width="112"><code>"c:/foo/"</code></td> -<td bgcolor="#99FF66" width="160"><code>"c:","foo","."<br>"c:","/","foo","."</code></td> -<td width="112"><code>"c:/foo/"</code></td> -<td bgcolor="#99FF66" width="112"><code>"c:/foo/"<br>"c:\foo\"</code></td> -<td bgcolor="#99FF66" width="72"><code>""<br>"c:/"</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> -""<br>"c:"</code></td> -<td bgcolor="#99FF66" width="88"><code>""<br>"/"</code></td> -<td bgcolor="#99FF66" width="96"><code>"c:/foo/"<br>"foo/"</code></td> -<td width="72"><code>"c:/foo"</code></td> -<td width="72"><code>"."</code></td> -</tr> -<tr> -<td width="112"><code>"c:/foo/bar"</code></td> -<td bgcolor="#99FF66" width="160"><code>"c:","foo","bar"<br>"c:","/","foo","bar"</code></td> -<td width="112"><code>"c:/foo/bar"</code></td> -<td bgcolor="#99FF66" width="112"><code>"c:/foo/bar"<br>"c:\foo\bar"</code></td> -<td bgcolor="#99FF66" width="72"><code>""<br>"c:/"</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> -""<br>"c:"</code></td> -<td bgcolor="#99FF66" width="88"><code>""<br>"/"</code></td> -<td bgcolor="#99FF66" width="96"><code>"c:/foo/bar"<br>"foo/bar"</code></td> -<td width="72"><code>"c:/foo"</code></td> -<td width="72"><code>"bar"</code></td> -</tr> -<tr> -<td width="112"><code>"prn:"</code></td> -<td width="160"><code>"prn:"</code></td> -<td width="112"><code>"prn:"</code></td> -<td width="112"><code>"prn:"</code></td> -<td bgcolor="#99FF66" width="72"><code>""<br>"prn:"</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> -""<br>"prn:"</code></td> -<td width="88"><code>""</code></td> -<td bgcolor="#99FF66" width="96"><code>"prn:"<br>""</code></td> -<td width="72"><code>""</code></td> -<td width="72"><code>"prn:"</code></td> -</tr> -<tr> -<td width="112"><code>"c:\"</code></td> -<td bgcolor="#99FF66" width="160"><code>"c:\"<br>"c:","/"</code></td> -<td bgcolor="#99FF66" width="112"><code>"c:\"<br>"c:/"</code></td> -<td width="112"><code>"c:\"</code></td> -<td bgcolor="#99FF66" width="72"><code>""<br>"c:/"</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> -""<br>"c:"</code></td> -<td bgcolor="#99FF66" width="88"><code>""<br>"/"</code></td> -<td bgcolor="#99FF66" width="96"><code>"c:\"<br>""</code></td> -<td bgcolor="#99FF66" width="72"><code>""<br>"c:"</code></td> -<td bgcolor="#99FF66" width="72"><code>"c:\"<br>"/"</code></td> -</tr> -<tr> -<td width="112"><code>"c:foo"</code></td> -<td bgcolor="#99FF66" width="160"><code>"c:foo"<br>"c:","foo"</code></td> -<td width="112"><code>"c:foo"</code></td> -<td width="112"><code>"c:foo"</code></td> -<td bgcolor="#99FF66" width="72"><code>""<br>"c:"</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> -""<br>"c:"</code></td> -<td width="88"><code>""</code></td> -<td bgcolor="#99FF66" width="96"><code>"c:foo"<br>"foo"</code></td> -<td bgcolor="#99FF66" width="72"><code>""<br>"c:"</code></td> -<td bgcolor="#99FF66" width="72"><code>"c:foo"<br>"foo"</code></td> -</tr> -<tr> -<td width="112"><code>"c:\foo"</code></td> -<td bgcolor="#99FF66" width="160"><code>"c:\foo"<br>"c:","/","foo"</code></td> -<td bgcolor="#99FF66" width="112"><code>"c:\foo"<br>"c:/foo"</code></td> -<td width="112"><code>"c:\foo"</code></td> -<td bgcolor="#99FF66" width="72"><code>""<br>"c:/"</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> -""<br>"c:"</code></td> -<td bgcolor="#99FF66" width="88"><code>""<br>"/"</code></td> -<td bgcolor="#99FF66" width="96"><code>"c:\foo"<br>"foo"</code></td> -<td bgcolor="#99FF66" width="72"><code>""<br>"c:/"</code></td> -<td bgcolor="#99FF66" width="72"><code>"c:\foo"<br>"foo"</code></td> -</tr> -<tr> -<td width="112"><code>"c:foo\"</code></td> -<td bgcolor="#99FF66" width="160"><code>"c:foo\"<br>"c:","foo","."</code></td> -<td bgcolor="#99FF66" width="112"><code>"c:foo\"<br>"c:foo/"</code></td> -<td width="112"><code>"c:foo\"</code></td> -<td bgcolor="#99FF66" width="72"><code>""<br>"c:"</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> -""<br>"c:"</code></td> -<td width="88"><code>""</code></td> -<td bgcolor="#99FF66" width="96"><code>"c:foo\"<br>"foo/"</code></td> -<td bgcolor="#99FF66" width="72"><code>""<br>"c:foo"</code></td> -<td bgcolor="#99FF66" width="72"><code>"c:foo\"<br>"."</code></td> -</tr> -<tr> -<td width="112"><code>"c:\foo\"</code></td> -<td bgcolor="#99FF66" width="160"><code>"c:\foo\"<br>"c:","/","foo","."</code></td> -<td bgcolor="#99FF66" width="112"><code>"c:\foo\"<br>"c:/foo/"</code></td> -<td width="112"><code>"c:\foo\"</code></td> -<td bgcolor="#99FF66" width="72"><code>""<br>"c:/"</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> -""<br>"c:"</code></td> -<td bgcolor="#99FF66" width="88"><code>""<br>"/"</code></td> -<td bgcolor="#99FF66" width="96"><code>"c:\foo\"<br>"foo/"</code></td> -<td bgcolor="#99FF66" width="72"><code>""<br>"c:/foo"</code></td> -<td bgcolor="#99FF66" width="72"><code>"c:\foo\"<br>"."</code></td> -</tr> -<tr> -<td width="112"><code>"c:\foo/"</code></td> -<td bgcolor="#99FF66" width="160"><code>"c:\foo","."<br>"c:","/","foo","."</code></td> -<td bgcolor="#99FF66" width="112"><code>"c:\foo/"<br>"c:/foo/"</code></td> -<td bgcolor="#99FF66" width="112"><code>"c:\foo/"<br>"c:\foo\"</code></td> -<td bgcolor="#99FF66" width="72"><code>""<br>"c:/"</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> -""<br>"c:"</code></td> -<td bgcolor="#99FF66" width="88"><code>""<br>"/"</code></td> -<td bgcolor="#99FF66" width="96"><code>"c:\foo/"<br>"foo/"</code></td> -<td bgcolor="#99FF66" width="72"><code>"c:\foo"<br>"c:/foo"</code></td> -<td width="72"><code>"."</code></td> -</tr> -<tr> -<td width="112"><code>"c:/foo\bar"</code></td> -<td bgcolor="#99FF66" width="160"><code>"c:","foo\bar"<br>"c:","/","foo","bar"</code></td> -<td bgcolor="#99FF66" width="112"><code>"c:/foo\bar"<br>"c:/foo/bar"</code></td> -<td bgcolor="#99FF66" width="112"><code>"c:/foo\bar"<br>"c:\foo\bar"</code></td> -<td bgcolor="#99FF66" width="72"><code>""<br>"c:/"</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> -""<br>"c:"</code></td> -<td bgcolor="#99FF66" width="88"><code>""<br>"/"</code></td> -<td bgcolor="#99FF66" width="96"><code>"c:/foo\bar"<br>"foo/bar"</code></td> -<td bgcolor="#99FF66" width="72"><code>"c:"<br>"c:/foo"</code></td> -<td bgcolor="#99FF66" width="72"><code>"foo\bar"<br>"bar"</code></td> -</tr> -</table> -<h2><a name="Suggestions-for-fstream">Suggestions for <code><fstream></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><fstream></code> additions, affected implementations are -encouraged to allow disabling the <code><fstream></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 Std 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/src/third_party/boost/libs/filesystem/v2/example/Jamfile.v2 b/src/third_party/boost/libs/filesystem/v2/example/Jamfile.v2 deleted file mode 100644 index edb41a4aaa0..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v2/example/file_size.cpp b/src/third_party/boost/libs/filesystem/v2/example/file_size.cpp deleted file mode 100644 index 0d6b7a32976..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v2/example/mbcopy.cpp b/src/third_party/boost/libs/filesystem/v2/example/mbcopy.cpp deleted file mode 100644 index 6f004d44a6f..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v2/example/mbpath.cpp b/src/third_party/boost/libs/filesystem/v2/example/mbpath.cpp deleted file mode 100644 index 25cefbb09f4..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v2/example/mbpath.hpp b/src/third_party/boost/libs/filesystem/v2/example/mbpath.hpp deleted file mode 100644 index 281e8d09c98..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v2/example/path_table.cpp b/src/third_party/boost/libs/filesystem/v2/example/path_table.cpp deleted file mode 100644 index b1758737a02..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v2/example/simple_ls.cpp b/src/third_party/boost/libs/filesystem/v2/example/simple_ls.cpp deleted file mode 100644 index 7861e1e29e7..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v2/src/v2_operations.cpp b/src/third_party/boost/libs/filesystem/v2/src/v2_operations.cpp deleted file mode 100644 index a93b54ada5b..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v2/src/v2_path.cpp b/src/third_party/boost/libs/filesystem/v2/src/v2_path.cpp deleted file mode 100644 index 16f65833b03..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v2/src/v2_portability.cpp b/src/third_party/boost/libs/filesystem/v2/src/v2_portability.cpp deleted file mode 100644 index 4d275438731..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v2/test/Jamfile.v2 b/src/third_party/boost/libs/filesystem/v2/test/Jamfile.v2 deleted file mode 100644 index 2bb8700ebf7..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v2/test/convenience_test.cpp b/src/third_party/boost/libs/filesystem/v2/test/convenience_test.cpp deleted file mode 100644 index aa920547e6c..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v2/test/deprecated_test.cpp b/src/third_party/boost/libs/filesystem/v2/test/deprecated_test.cpp deleted file mode 100644 index 246ffe67136..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v2/test/equivalent.cpp b/src/third_party/boost/libs/filesystem/v2/test/equivalent.cpp deleted file mode 100644 index be3089afd60..00000000000 --- a/src/third_party/boost/libs/filesystem/v2/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/src/third_party/boost/libs/filesystem/v2/test/fstream_test.cpp b/src/third_party/boost/libs/filesystem/v2/test/fstream_test.cpp deleted file mode 100644 index 331ccd0038b..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v2/test/large_file_support_test.cpp b/src/third_party/boost/libs/filesystem/v2/test/large_file_support_test.cpp deleted file mode 100644 index 8d202400227..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v2/test/lpath.hpp b/src/third_party/boost/libs/filesystem/v2/test/lpath.hpp deleted file mode 100644 index 36671fa2451..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v2/test/msvc/common.vsprops b/src/third_party/boost/libs/filesystem/v2/test/msvc/common.vsprops deleted file mode 100644 index 07762e9078e..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v2/test/msvc/convenience_test/convenience_test.vcproj b/src/third_party/boost/libs/filesystem/v2/test/msvc/convenience_test/convenience_test.vcproj deleted file mode 100644 index c05d0e861d8..00000000000 --- a/src/third_party/boost/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=""$(TargetDir)\$(TargetName).exe" --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=""$(TargetDir)\$(TargetName).exe" --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/src/third_party/boost/libs/filesystem/v2/test/msvc/deprecated_test/deprecated_test.vcproj b/src/third_party/boost/libs/filesystem/v2/test/msvc/deprecated_test/deprecated_test.vcproj deleted file mode 100644 index 2a46cb4e2d8..00000000000 --- a/src/third_party/boost/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=""$(TargetDir)\$(TargetName).exe" --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=""$(TargetDir)\$(TargetName).exe" --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/src/third_party/boost/libs/filesystem/v2/test/msvc/filesystem-v2.sln b/src/third_party/boost/libs/filesystem/v2/test/msvc/filesystem-v2.sln deleted file mode 100644 index 7b731dc0552..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v2/test/msvc/filesystem_dll/filesystem_dll.vcproj b/src/third_party/boost/libs/filesystem/v2/test/msvc/filesystem_dll/filesystem_dll.vcproj deleted file mode 100644 index 39ab3c0c2a0..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v2/test/msvc/fstream_test/fstream_test.vcproj b/src/third_party/boost/libs/filesystem/v2/test/msvc/fstream_test/fstream_test.vcproj deleted file mode 100644 index d2aff8bf8dc..00000000000 --- a/src/third_party/boost/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=""$(TargetDir)\$(TargetName).exe" --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=""$(TargetDir)\$(TargetName).exe" --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/src/third_party/boost/libs/filesystem/v2/test/msvc/large_file_support_test/large_file_support_test.vcproj b/src/third_party/boost/libs/filesystem/v2/test/msvc/large_file_support_test/large_file_support_test.vcproj deleted file mode 100644 index 2c3202b7df6..00000000000 --- a/src/third_party/boost/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=""$(TargetDir)\$(TargetName).exe" --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=""$(TargetDir)\$(TargetName).exe" --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/src/third_party/boost/libs/filesystem/v2/test/msvc/mbcopy/mbcopy.vcproj b/src/third_party/boost/libs/filesystem/v2/test/msvc/mbcopy/mbcopy.vcproj deleted file mode 100644 index 0e22c0e7526..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v2/test/msvc/mbpath/mbpath.vcproj b/src/third_party/boost/libs/filesystem/v2/test/msvc/mbpath/mbpath.vcproj deleted file mode 100644 index 4748370193a..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v2/test/msvc/operations_test/operations_test.vcproj b/src/third_party/boost/libs/filesystem/v2/test/msvc/operations_test/operations_test.vcproj deleted file mode 100644 index ed099e9f582..00000000000 --- a/src/third_party/boost/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=""$(TargetDir)\$(TargetName).exe" --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=""$(TargetDir)\$(TargetName).exe" --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/src/third_party/boost/libs/filesystem/v2/test/msvc/path_test/path_test.vcproj b/src/third_party/boost/libs/filesystem/v2/test/msvc/path_test/path_test.vcproj deleted file mode 100644 index ffe4342b8e2..00000000000 --- a/src/third_party/boost/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=""$(TargetDir)\$(TargetName).exe" --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=""$(TargetDir)\$(TargetName).exe" --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/src/third_party/boost/libs/filesystem/v2/test/msvc/simple_ls/simple_ls.vcproj b/src/third_party/boost/libs/filesystem/v2/test/msvc/simple_ls/simple_ls.vcproj deleted file mode 100644 index 19f98ff794c..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v2/test/msvc/system_dll/system_dll.vcproj b/src/third_party/boost/libs/filesystem/v2/test/msvc/system_dll/system_dll.vcproj deleted file mode 100644 index 7a5ccdeb686..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v2/test/msvc/wide_test/wide_test.vcproj b/src/third_party/boost/libs/filesystem/v2/test/msvc/wide_test/wide_test.vcproj deleted file mode 100644 index dd87db78942..00000000000 --- a/src/third_party/boost/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=""$(TargetDir)\$(TargetName).exe" --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=""$(TargetDir)\$(TargetName).exe" --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/src/third_party/boost/libs/filesystem/v2/test/operations_test.cpp b/src/third_party/boost/libs/filesystem/v2/test/operations_test.cpp deleted file mode 100644 index c61f8b249fa..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v2/test/path_test.cpp b/src/third_party/boost/libs/filesystem/v2/test/path_test.cpp deleted file mode 100644 index fb55adb9a94..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v2/test/wide_test.cpp b/src/third_party/boost/libs/filesystem/v2/test/wide_test.cpp deleted file mode 100644 index 1d1b7b05383..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v3/build/Jamfile.v2 b/src/third_party/boost/libs/filesystem/v3/build/Jamfile.v2 deleted file mode 100644 index c35cbbb0578..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v3/doc/Jamfile.v2 b/src/third_party/boost/libs/filesystem/v3/doc/Jamfile.v2 deleted file mode 100644 index 4de58f538c2..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/doc/Jamfile.v2 +++ /dev/null @@ -1,19 +0,0 @@ -# Boost Filesystem Library Example Jamfile - -# Copyright Beman Dawes 2010 - -# Distributed under the Boost Software License, Version 1.0. -# See www.boost.org/LICENSE_1_0.txt - -# Library home page: http://www.boost.org/libs/filesystem - -project - : requirements - <library>/boost/filesystem//boost_filesystem - <library>/boost/system//boost_system - <toolset>msvc:<asynch-exceptions>on - <link>static - ; - -exe path_table : path_table.cpp ; -install path_table-copy : path_table : <location>. ;
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/doc/POSIX_filename_encoding.txt b/src/third_party/boost/libs/filesystem/v3/doc/POSIX_filename_encoding.txt deleted file mode 100644 index 14c45c07f28..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/doc/POSIX_filename_encoding.txt +++ /dev/null @@ -1,55 +0,0 @@ -http://www.linuxfromscratch.org/blfs/view/svn/introduction/locale-issues.html - -"The POSIX standard mandates that the filename encoding is the encoding implied by the current LC_CTYPE locale category." - -------- - -http://mail.nl.linux.org/linux-utf8/2001-02/msg00103.html - -From: Markus Kuhn - -Tom Tromey wrote on 2001-02-05 00:36 UTC: -> Kai> IMAO, a *real* filesystem should use some encoding of ISO 10646 - -> Kai> UTF-8, UTF-16, or UTF-32 are all viable options. The same should -> Kai> be true for the kernel filename interfaces. -> -> I like this, but what should I do right now? - -The POSIX kernel file system interface is engraved into stone and -extremely unlikely to change. File names are arbitrary binary strings, -with only the '/' and '\0' bytes having any special semantics. You can -use arbitrary coded character sets on it as long as they do not -introduce '/' and '\0' bytes spuriously. Writers and readers have to -somehow agree on what encoding to use and the only really practical way -is to use the same encoding on all systems that share files. Eventually, -everyone will be using UTF-8 for file names on POSIX systems. Right now, -I would recommend users to use only ASCII for filenames, as this is -already UTF-8 and therefore simplifies migration. Using the ISO 8859, -JIS, etc. filenames should soon be considered deprecated practice. - -> I work on libgcj, the runtime component of gcj, the Java front end to -> GCC. In libgcj of course we use UCS-2 everywhere, since that is what -> Java does. Currently, for Unixy systems, we assume that all file -> names are UTF-8. - -The best solution is to assume that the file names are in the -locale-specific multi-byte encoding. Simply use mbrtowc and wcrtomb to -convert between Unicode and the locale-dependent multi-byte encoding -used in file names and text files if the ISO C 99 symbol -__STDC_ISO_10646__ is defined (which guarantees that wchar_t = UCS). On -Linux, this has been the case since glibc 2.2. - -> (Actually, we do something notably worse, which is -> assume that file names are Java-style UTF-8, with the weird encoding -> for \u0000.) - -\u0000 = NUL was never a character allowed in filenames under POSIX. -Raise an exception if someone tries to use it in a filename. Problem -solved. - -I never understood, why Java found it necessary to introduce two -distinct ASCII NUL characters. - ------- - -Interesting idea. Use iconv to create shift-jis or other mbcs test cases. diff --git a/src/third_party/boost/libs/filesystem/v3/doc/deprecated.html b/src/third_party/boost/libs/filesystem/v3/doc/deprecated.html deleted file mode 100644 index 19df50cd15c..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/doc/deprecated.html +++ /dev/null @@ -1,385 +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 Deprecated Features</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"> - <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 Deprecated Features</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> - <a href="release_history.html">Releases</a> - <a href="reference.html">Reference</a> - <a href="tutorial.html">Tutorial</a> - <a href="faq.htm">FAQ</a> - <a href="portability_guide.htm">Portability</a> - <a href="v3.html">V3 Intro</a> - <a href="v3_design.html">V3 Design</a> - <a href="deprecated.html">Deprecated</a> - </td> -</table> - -<h2><a name="Deprecated-names">Deprecated names</a> and features</h2> -<p style="font-size: 10pt">As the library evolves over time, names sometimes -change or old features are removed to make way for new features. To ease transition, Boost.Filesystem deprecates -the old names and features, but by default continues to provide many of them. -The deprecated names and other workarounds can be suppressed by defining macro <code> -BOOST_FILESYSTEM_NO_DEPRECATED</code>, and this is recommended for all new code.</p> -<p style="font-size: 10pt">In the table, ✔ indicates a synonym or other -workaround is provided unless <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" valign="top"> - <b><i>Component or location</i></b></td> - <td style="font-size: 10pt" valign="top"> - <p style="font-size: 10pt"><b><i>Old name, now deprecated</i></b></td> - <td style="font-size: 10pt" valign="top"> - ✔</td> - <td style="font-size: 10pt" valign="top"> - <p style="font-size: 10pt"><b><i>New name</i></b></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"><code>class path</code></td> - <td style="font-size: 10pt" valign="top"><code>branch_path()</code></td> - <td style="font-size: 10pt" valign="top">✔</td> - <td style="font-size: 10pt" valign="top"><code>parent_path()</code></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"> - <code>class path</code></td> - <td style="font-size: 10pt" valign="top"> - <code>canonize()</code></td> - <td style="font-size: 10pt" valign="top"> - </td> - <td style="font-size: 10pt" valign="top"> - <i>Function removed</i></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"> - <code>class path</code></td> - <td style="font-size: 10pt" valign="top"> - <code>default_name_check()</code></td> - <td style="font-size: 10pt" valign="top"> - ✔</td> - <td style="font-size: 10pt" valign="top"> - <i>Function removed</i></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"> - <code>class path</code></td> - <td style="font-size: 10pt" valign="top"> - <code>default_name_check(name_check)</code></td> - <td style="font-size: 10pt" valign="top"> - ✔</td> - <td style="font-size: 10pt" valign="top"> - <i>Function removed</i></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"> - <code>class path</code></td> - <td style="font-size: 10pt" valign="top"> - <code>default_name_check_writable()</code></td> - <td style="font-size: 10pt" valign="top"> - ✔</td> - <td style="font-size: 10pt" valign="top"> - <i>Function removed</i></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"><code>class path</code></td> - <td style="font-size: 10pt" valign="top"><code>directory_string()</code></td> - <td style="font-size: 10pt" valign="top">✔</td> - <td style="font-size: 10pt" valign="top"><code>string</code></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"><code>class path</code></td> - <td style="font-size: 10pt" valign="top"><code>external_directory_string()</code></td> - <td style="font-size: 10pt" valign="top">✔</td> - <td style="font-size: 10pt" valign="top"><code>native()</code></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"><code>class path</code></td> - <td style="font-size: 10pt" valign="top"><code>external_file_string()</code></td> - <td style="font-size: 10pt" valign="top">✔</td> - <td style="font-size: 10pt" valign="top"><code>native()</code></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"><code>class path</code></td> - <td style="font-size: 10pt" valign="top"><code>file_string()</code></td> - <td style="font-size: 10pt" valign="top">✔</td> - <td style="font-size: 10pt" valign="top"><code>string()</code></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"><code>class path</code></td> - <td style="font-size: 10pt" valign="top"><code>has_branch_path()</code></td> - <td style="font-size: 10pt" valign="top">✔</td> - <td style="font-size: 10pt" valign="top"><code>has_parent_path()</code></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"><code>class path</code></td> - <td style="font-size: 10pt" valign="top"><code>has_leaf()</code></td> - <td style="font-size: 10pt" valign="top">✔</td> - <td style="font-size: 10pt" valign="top"><code>has_filename()</code></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"><code>class path</code></td> - <td style="font-size: 10pt" valign="top"><code>is_complere()</code></td> - <td style="font-size: 10pt" valign="top">✔</td> - <td style="font-size: 10pt" valign="top"><code>is_absolute()</code></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"><code>class path</code></td> - <td style="font-size: 10pt" valign="top"><code>leaf()</code></td> - <td style="font-size: 10pt" valign="top">✔</td> - <td style="font-size: 10pt" valign="top"><code>filename()</code></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"> - <code>class path</code></td> - <td style="font-size: 10pt" valign="top"> - <code>native_directory_string()</code></td> - <td style="font-size: 10pt" valign="top"> - ✔</td> - <td style="font-size: 10pt" valign="top"> - <code>string()</code></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"> - <code>class path</code></td> - <td style="font-size: 10pt" valign="top"> - <code>native_file_string()</code></td> - <td style="font-size: 10pt" valign="top"> - ✔</td> - <td style="font-size: 10pt" valign="top"> - <code>string()</code></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"> - <code>class path</code></td> - <td style="font-size: 10pt" valign="top"> - <code>normalize()</code></td> - <td style="font-size: 10pt" valign="top"> - ✔</td> - <td style="font-size: 10pt" valign="top"> - <i>Function removed</i></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"> - <code>class path</code></td> - <td style="font-size: 10pt" valign="top"> - <code>path(const string_type& str, name_check)</code></td> - <td style="font-size: 10pt" valign="top"> - ✔</td> - <td style="font-size: 10pt" valign="top"> - <i>Function removed. Workaround ignores </i><code>name_check</code><i> - argument.</i></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"> - <code>class path</code></td> - <td style="font-size: 10pt" valign="top"> - <code>path(const string_type::value_type* s, name_check)</code></td> - <td style="font-size: 10pt" valign="top"> - ✔</td> - <td style="font-size: 10pt" valign="top"> - <i>Function removed. Workaround ignores </i><code>name_check</code><i> - argument.</i></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"> - <code>class path</code></td> - <td style="font-size: 10pt" valign="top"> - <p style="font-size: 10pt"><code>remove_leaf()</code></td> - <td style="font-size: 10pt" valign="top"> - ✔</td> - <td style="font-size: 10pt" valign="top"> - <p style="font-size: 10pt"><code>remove_filename()</code></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"> - <code>path.hpp</code></td> - <td style="font-size: 10pt" valign="top"> - <code>template<class String, class Traits><br> - class basic_path;</code></td> - <td style="font-size: 10pt" valign="top"> - </td> - <td style="font-size: 10pt" valign="top"> - Class template <code>basic_path</code> is replaced by <code>class path</code>. - No workaround for an explicitly coded <code>basic_path</code> is provided, - but see the next row - <code>path</code>.</td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"> - <code>path.hpp</code></td> - <td style="font-size: 10pt" valign="top"> - <code>typedef basic_path<std::string, path_traits> path</code></td> - <td style="font-size: 10pt" valign="top"> - ✔</td> - <td style="font-size: 10pt" valign="top"> - <code>class path</code></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"> - <code>path.hpp</code></td> - <td style="font-size: 10pt" valign="top"> - <code>typedef basic_path<std::wstring, wpath_traits> wpath</code></td> - <td style="font-size: 10pt" valign="top"> - ✔</td> - <td style="font-size: 10pt" valign="top"> - <i>Removed; use </i><code>class path</code><i> instead. Workaround provides - </i><code>typedef path wpath</code></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"> - <code>operations.hpp</code></td> - <td style="font-size: 10pt" valign="top"> - <code>initial_path()</code></td> - <td style="font-size: 10pt" valign="top"> - ✔</td> - <td style="font-size: 10pt" valign="top"> - <i>Function removed</i></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"> - <code>operations.hpp</code></td> - <td style="font-size: 10pt" valign="top"> - <p dir="ltr"><code>template <class Path><br> - Path complete(const Path& p,<br> - const Path& base=<br> - initial_path<Path>())</code></td> - <td style="font-size: 10pt" valign="top"> - ✔</td> - <td style="font-size: 10pt" valign="top"> - <p dir="ltr"><code>path absolute(const path& p, const path& base=<br> - current_path())</code></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"> - <code>operations.hpp</code></td> - <td style="font-size: 10pt" valign="top"> - <code>is_regular(file_status f)</code></td> - <td style="font-size: 10pt" valign="top"> - ✔</td> - <td style="font-size: 10pt" valign="top"> - <p dir="ltr"> - <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" valign="top"> - <code>symbolic_link_exists(const path& ph)</code></td> - <td style="font-size: 10pt" valign="top"> - </td> - <td style="font-size: 10pt" valign="top"> - <i>Function removed</i></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"> - <code>class directory_entry</code></td> - <td style="font-size: 10pt" valign="top"> - <code>filename()</code></td> - <td style="font-size: 10pt" valign="top"> - ✔</td> - <td style="font-size: 10pt" valign="top"> - <i>Function removed, use </i><code>path().filename()</code><i> instead.</i></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"> - <code>class directory_entry</code></td> - <td style="font-size: 10pt" valign="top"> - <code>leaf()</code></td> - <td style="font-size: 10pt" valign="top"> - ✔</td> - <td style="font-size: 10pt" valign="top"> - <i>Function removed, use </i><code>path().filename()</code><i> instead.</i></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"> - <code>class directory_entry</code></td> - <td style="font-size: 10pt" valign="top"> - <code>string()</code></td> - <td style="font-size: 10pt" valign="top"> - ✔</td> - <td style="font-size: 10pt" valign="top"> - <i>Function removed, use </i><code>path().string()</code><i> instead.</i></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"> - Macro definitions</td> - <td style="font-size: 10pt" valign="top"> - <code>BOOST_WINDOW_API</code></td> - <td style="font-size: 10pt" valign="top"> - </td> - <td style="font-size: 10pt" valign="top"> - <i>No longer supported; API selection is always automatic.</i></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"> - Macro definitions</td> - <td style="font-size: 10pt" valign="top"> - <code>BOOST_POSIX_API</code></td> - <td style="font-size: 10pt" valign="top"> - </td> - <td style="font-size: 10pt" valign="top"> - <i>No longer supported; API selection is always automatic.</i></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"> - Macro definitions</td> - <td style="font-size: 10pt" valign="top"> - <code>BOOST_WINDOW_PATH</code></td> - <td style="font-size: 10pt" valign="top"> - </td> - <td style="font-size: 10pt" valign="top"> - <i>No longer supported; native path format selection is always automatic.</i></td> - </tr> - <tr> - <td style="font-size: 10pt" valign="top"> - Macro definitions</td> - <td style="font-size: 10pt" valign="top"> - <code>BOOST_POSIX_PATH</code></td> - <td style="font-size: 10pt" valign="top"> - </td> - <td style="font-size: 10pt" valign="top"> - <i>No longer supported; native path format selection is always automatic.</i></td> - </tr> -</table> - -<h2>Deprecation rationale</h2> -<h3><code>initial_path</code> function</h3> -<p dir="ltr">Full implementation of <code>initial_path()</code> would require -support from the C++ runtime startup code, and that doesn't seem likely to -happen. Depending on the user to call <code>initial_path()</code> at the -beginning of <code>main()</code> is too error prone. An equivalent -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> - -<p>© Copyright Beman Dawes, 2002-2005, 2010</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/src/third_party/boost/libs/filesystem/v3/doc/design.htm b/src/third_party/boost/libs/filesystem/v3/doc/design.htm deleted file mode 100644 index 17ac7d68b2e..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/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> -<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 -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. Scripts were written in -Python, Perl, Bash, and Windows command languages. 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. The need is particularly acute - when C++ is the only toolset allowed in the tool chain. File system - operations are provided by many languages 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> - </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> - </li> - <li>Avoid dangerous programming practices. Particularly, all-too-easy-to-ignore error notifications - and use of global variables. If a dangerous feature is provided, identify it as such.<br> - <br> - Rationale: Normally this would be covered by "the usual Boost requirements...", - 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 "current - working directory".<br> - </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. 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. 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. - Thus the need to interface smoothly with standard library I/O.<br> - </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> - </li> - <li>The usual Boost <a href="http://www.boost.org/more/lib_guide.htm">requirements and - guidelines</a> apply.<br> - </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> - </li> - <li>Avoid giving the illusion of portability where portability in fact does not - exist.<br> - <br> - Rationale: Leaving important behavior unspecified or "implementation defined" 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> - </li> - <li>Some file systems provide both a long and short form of filenames.<br> - </li> - <li>Some file systems have different syntax for file paths and directory - paths.<br> - </li> - <li>Some file systems have different rules for valid file names and valid - directory names.<br> - </li> - <li>Some file systems (ISO-9660, level 1, for example) use very restricted - (so-called 8.3) file names.<br> - </li> - <li>Some operating systems allow file systems with different - characteristics to be "mounted" within a directory tree. Thus a - ISO-9660 or Windows - file system may end up as a sub-tree of a POSIX directory tree.<br> - </li> - <li>Wide-character versions of directory and file operations are available on some operating - systems, and not available on others.<br> - </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> - </li> - <li>Some file systems have a concept of file "version number" or "generation - number". Some don't.<br> - </li> - <li>Not all operating systems use single character separators in path names. Some use - paired notations. A typical fully-specified OpenVMS filename - might look something like this:<br> - <br> - <code> DISK$SCRATCH:[GEORGE.PROJECT1.DAT]BIG_DATA_FILE.NTP;5<br> - </code><br> - The general OpenVMS format is:<br> - <br> - - <i>Device:[directories.dot.separated]filename.extension;version_number</i><br> - </li> - <li>For common file systems, determining if two descriptors are for same - entity is extremely difficult or impossible. 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> - </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. 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. For example:<br> - <br> - <code> assert( exists("foo") == exists("foo") ); - // may fail!<br> - assert( is_directory("foo") == is_directory("foo"); - // may fail!<br> - </code><br> - In the first example, the file may have been deleted between calls to - exists(). 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> - </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> - </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> pointing to <code>b/c</code>, - then under POSIX Pathname Resolution rules a path of <code>"/a/x/.."</code> - should resolve to <code>"/a/b"</code>. If <code>"/a/x/.."</code> were first - normalized to <code>"/a"</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. 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( "foo" -)</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<string></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. -Rather, the programmer must think out the question "What operating systems do I -want this path to be portable to?" 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="v3_design.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. Some with -operations functions. 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, is much simpler and straightforward, although it does depend to -some extent on programmer discipline. 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 Std 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 -->18 February, 2010<!--webbot bot="Timestamp" endspan i-checksum="40538" --></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/src/third_party/boost/libs/filesystem/v3/doc/do_list.html b/src/third_party/boost/libs/filesystem/v3/doc/do_list.html deleted file mode 100644 index 65588032794..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/doc/do_list.html +++ /dev/null @@ -1,146 +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>Do List</title> -<style type="text/css"> - body { font-family: sans-serif; margin: 1em; } - p, td, li, blockquote { font-size: 10pt; } - pre { font-size: 9pt; } -</style> -</head> - -<body> - -<h1>Boost Filesystem Do List<br> -<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B %Y" startspan -->24 June 2010<!--webbot bot="Timestamp" endspan i-checksum="17552" --></h1> - -<h2>Beta 1 comments</h2> -<ul> - <li dir="ltr"> - -<p dir="ltr">Zach Laine:</li> -</ul> -<blockquote> - <pre dir="ltr">The descriptions for portable_name() and portable_directory_name() -appear to be at odds. - -portable_name() : ... && (name is "." or "..", and the first character -not a period or hyphen) - -portable_directory_name(): ... && (name is "." or ".." or contains no periods) - -Should portable_name() be "... && (name is "." or "..", or contains no -periods) && (first character not a hyphen)"? Maybe I'm missing -something?</pre> -</blockquote> -<ul> - <li dir="ltr"> -<p dir="ltr">Scott McMurray - treat as Wish List:</li> -</ul> -<blockquote> - <pre dir="ltr">- uncomplete(p, base) - -My pet request. It may be useful to simplify other functions as well, -since there's no current way to go from an absolute path to a relative -one, meaning that most functions need to handle relative ones even -when that might not be natural. With this functionality, -preconditions requiring absolute paths would be less onerous. - - Precondition: p.is_absolute() && base.is_absolute() - - Effects: Extracts a path, rp, from p relative to base such that -canonical(p) == complete(rp, base). Any ".." path elements in rp form -a prefix. - - Returns: The extracted path. - - Postconditions: For the returned path, rp, rp.is_relative() == -(p.root_name() == b.root_name()). - -[Notes: This function simplifies paths by omitting context. It is -particularly useful for serializing paths such that it can be usefully -moved between hosts where the context may be different, such as inside -source control trees. It can also be helpful for display to users, -such as in shells where paths are often shown relative to $HOME. - -In the presence of symlinks, the result of this function may differ -between implementations, as some may expand symlinks that others may -not. The simplest implementation uses canonical to expand both p and -base, then removes the common prefix and prepends the requisite ".." -elements. Smarter implementations will avoid expanding symlinks -unnecessarily. No implementation is expected to discover new symlinks -to return paths with fewer elements.]</pre> -</blockquote> -<h2 dir="ltr">Docs</h2> -<ul> - <li>Reorganize files - delete examples that no longer apply.</li> - <li>Should minimal.css be changed to used relative font sizes? See - <a href="http://www.w3schools.com/CSS/pr_font_font-size.asp/">http://www.w3schools.com/CSS/pr_font_font-size.asp\</a></li> - <li>Document behavior of path::replace_extension has change WRT argument w/o a - dot.</li> - <li style="font-size: 10pt">Document leading //: no longer treated specially. - But is that really correct?</li> - <li style="font-size: 10pt">Behavior of root_path() has been changed. Change - needs to be propagated to trunk?</li> - <li style="font-size: 10pt">Regenerate path decomposition table.</li> -</ul> - -<h2>Code</h2> -<h3>All</h3> -<ul> - <li style="font-size: 10pt">Move semantics.</li> - <li style="font-size: 10pt">Use BOOST_DELETED, BOOST_DEFAULTED, where - appropriate.</li> - <li style="font-size: 10pt">Other C++0x features.</li> -</ul> -<h3>Class path</h3> -<ul> - <li>Windows, POSIX, conversions for char16_t, char32_t for C++0x compilers.</li> - <li>Add Windows Alternate Data Stream test cases. See http://en.wikipedia.org/wiki/NTFS - Features.</li> - <li>Add test case: relational operators on paths differing only in trailing - separator. Rationale?</li> - <li>Provide the name check functions for more character types? Templatize? - take a path argument?</li> - <li style="font-size: 10pt">Add codepage 936/950/etc test cases.</li> - <li style="font-size: 10pt">Should UDT's be supported?</li> - <li style="font-size: 10pt">Should path iteration to a separator result in:<br> - -- the actual separator used<br> - -- the preferred separator<br> - -- the generic separator <-- makes it easier to write portable code<br> - -- a dot</li> -</ul> -<h3>Operations</h3> -<ul> - <li>Would complete(), system_complete() be clearer if renamed absolute(), - absolute_system() (or absolute_native())?</li> - <li>Review all operations.cpp code for race conditions similar to #2925. Fix - or document.</li> - <li>Enable all BOOST_FILESYSTEM_NO_DEPRECATED code.</li> - <li>rename and remove names are problems. If users says "using - namespace boost::filesystem"<br> - and some header included stdio, there is just too much chance of silent error.</li> - <li>create_directories error handling needs work.</li> - <li>Fold convenience.hpp into operations.hpp</li> - <li>Two argument recursive_directory_iterator ctor isn't recognizing throws(). - Would it be better to fold into a single two argument ctor with default?</li> - <li>Add the push_directory class from tools/release/required_files.cpp</li> -</ul> - -<h3>Miscellaneous</h3> -<ul> - <li style="font-size: 10pt"><i>Regular</i> classes need hash functions.</li> -</ul> - -<hr> -<p>© Copyright Beman Dawes, 2010</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> - -</body> - -</html>
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/doc/faq.htm b/src/third_party/boost/libs/filesystem/v3/doc/faq.htm deleted file mode 100644 index 781098c55fa..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/doc/faq.htm +++ /dev/null @@ -1,147 +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"> - <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 FAQ</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> - <a href="release_history.html">Releases</a> - <a href="reference.html">Reference</a> - <a href="tutorial.html">Tutorial</a> - <a href="faq.htm">FAQ</a> - <a href="portability_guide.htm">Portability</a> - <a href="v3.html">V3 Intro</a> - <a href="v3_design.html">V3 Design</a> - <a href="deprecated.html">Deprecated</a> - </td> - </tr> -</table> - -<h1 dir="ltr"> -Frequently Asked Questions</h1> -<h2>General questions</h2> -<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. Features specific to a particular operating system or file system -can always be accessed by using the operating system's API.</p> - -<h2 dir="ltr"> -Class <code><font size="6">path</font></code> questions </h2> -<p><b>Why base the generic pathname format on POSIX?</b></p> -<p><a href="design.htm#POSIX-01">POSIX</a> is an ISO Standard. It is the basis for the most familiar -pathname formats, -not just for POSIX-based operating systems but also for Windows and the -URL portion of URI's. It is ubiquitous and -familiar. 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. Thus for the primary "portable script-style file system -operations" 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? 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 coding errors and decrease code -readability. There was no apparent upside benefit.</p> -<p><b>Why do path decomposition functions yielding a single element return a -path rather than a string?</b></p> -<p>Interface simplicity. If they returned strings, flavors would be needed for -<code>string</code>, <code>wstring</code>, <code>u16string</code>, <code> -u32string</code>, and generic strings.</p> -<p><b>Why don't path member functions have overloads with error_code& arguments?</b></p> -<p>They have not been requested by users; the need for error reporting via -error_code seems limited to operations failures rather than path failures.</p> -<h2>Operations function questions</h2> -<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 "portable script-style -file system operations" 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. </p> -<p>The case for the "handle" (opaque data type to identify a file) -style may be strongest for directory iterator value type. (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 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. -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. OTOH, the specific functionality needed for several trial -applications was very easy for the user to construct from the lower-level -toolkit functions. 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, <code>remove_all()</code>.</p> -<p><b>Why are there directory_iterator 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 the operations 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 globally shared resources, and thus subject to -race conditions.</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 "read-only" turned out to be so -system depend as to be disqualified as a "guaranteed presence" operation.)</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. -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 -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 -->20 February, 2011<!--webbot bot="Timestamp" endspan i-checksum="40524" --></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/src/third_party/boost/libs/filesystem/v3/doc/index.htm b/src/third_party/boost/libs/filesystem/v3/doc/index.htm deleted file mode 100644 index 44e2eb486a7..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/doc/index.htm +++ /dev/null @@ -1,495 +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"> - <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> - 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> - <a href="release_history.html">Releases</a> - <a href="reference.html">Reference</a> - <a href="tutorial.html">Tutorial</a> - <a href="faq.htm">FAQ</a> - <a href="portability_guide.htm">Portability</a> - <a href="v3.html">V3 Intro</a> - <a href="v3_design.html">V3 Design</a> - <a href="deprecated.html">Deprecated</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="#Documentation">Documentation</a><br> - <a href="#Using">Using the library</a><br> - <a href="#Coding-guidelines">Coding guidelines</a><br> - <a href="#Cautions">Cautions</a><br> - <a href="#Headers">Headers</a><br> - <a href="#Examples">Example programs</a><br> - <a href="#Implementation">Implementation</a><br> - <a href="#Macros">Macros</a><br> - <a href="#Building">Building the object-library</a><br> - <a href="#Cgywin">Notes for Cygwin users</a><br> - <a href="#Change-history">Version history<br> - with acknowledgements</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 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> - </td> - </tr> - </table> - </center> -</div> - -<h2><a name="Introduction">Introduction</a></h2> -<p>The Boost.Filesystem library provides facilities to manipulate files and directories, -and the paths that identify them.</p> - -<p>The features of the library include:</p> - -<ul> - <li><b>A modern C++ interface, highly compatible with the C++ standard - library.</b></li> -</ul> -<blockquote> - <blockquote> - -<p>Many users say the interface is their primary motivation for using -Boost.Filesystem. They like its use of familiar idioms based on standard library -containers, iterators, and algorithms. They like having errors reported by -throwing exceptions.</p> - - </blockquote> -</blockquote> -<ul> - <li><b>Portability between operating systems.</b><br> - <ul> - <li>At the C++ syntax level, it is convenient to learn and use one interface - regardless of the operating system.</li> - <li>At the semantic level, behavior of code is reasonably portable across - operating systems.</li> - <li>Dual generic or native path format support encourages program - portability, yet still allows communication with users in system specific - formats.<br> - </li> - </ul> - </li> - <li><b>Error handling and reporting via C++ exceptions (the default) or error - codes.</b><br> - <ul> - <li>C++ exceptions are the preferred error reporting mechanism for most - applications. The exception thrown includes the detailed error code - information important for diagnosing the exact cause of file system errors.</li> - <li>Error reporting via error code allows user code that provides detailed - error recovery to avoid becoming so littered with try-catch blocks as to be - unmaintainable. <br> - </li> - </ul> - </li> - <li><b>Suitable for a broad spectrum of applications, ranging from simple - script-like operations to extremely complex production code.</b><br> - <ul> - <li>At the simple script-like end of the spectrum, the intent is not to - compete with Python, Perl, or shell languages, but rather to provide - filesystem operations when C++ is already the language of choice.</li> - <li>Finer grained control over operations and error handling is available to - support more complex applications or other cases where throwing exceptions - isn't desired.</li> - </ul> - </li> -</ul> - -<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. That proposal was based on version 2 of -Boost.Filesystem; presumably the final TR2 form will be based on version 3.</p> - -<h2><a name="Documentation">Documentation</a></h2> - -<p><b><a href="tutorial.html">Tutorial</a></b> - A gentle introduction to -the library, with example programs provided for you to experiment with.</p> - -<p><b><a href="reference.html">Reference</a></b> - Formal documentation in the -style of the C++ standard for -every component of the library.</p> - -<p><b><a href="faq.htm">FAQ</a></b> - Frequently asked questions.</p> - -<p><b><a href="portability_guide.htm">Portability Guide</a></b> - Help for those -concerned with writing code to run on multiple operating systems.</p> - -<p><b><a href="deprecated.html">Deprecated Features</a></b> - Identifies -deprecated features and their replacements.</p> - -<p><b><a href="v3.html">Version 3 Introduction</a></b> - Aimed at users of prior -Boost.Filesystem versions.</p> - -<p><b><a href="v3_design.html">Version 3 Design</a></b> - Historical document -from the start of the Version 3 design process.</p> - -<p><b><a href="design.htm">Original Design</a></b> - Historical document from -the start of the Version 1 design process.</p> - -<p><b><a href="do_list.html">Do List</a></b> - Boost.Filesystem development work -in the pipeline.</p> - -<h2><a name="Using">Using</a> the library</h2> -<p>Boost.Filesystem is implemented as a separately compiled library, so you must install -binaries in a location that can be found by your linker. If you followed the -<a href="http://www.boost.org/doc/libs/release/more/getting_started/index.html">Boost Getting Started</a> instructions, that's already been done for you.</p> -<h2><a name="Coding-guidelines">Coding guidelines</a></h2> -<p>For new code, defining <code>BOOST_FILESYSTEM_NO_DEPRECATED</code> before -including filesystem headers is strongly recommended. This prevents inadvertent -use of old features, particularly legacy function names, that have been replaced -and are going to go away in the future.</p> -<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( "foo" ) == exists( "foo" ) ); // -(1)<br> -<br> -remove_all( "foo" );<br> -assert( !exists( "foo" ) ); // (2)<br> -<br> -assert( is_directory( "foo" ) == is_directory( "foo" ) ); // -(3)</code></p> -</blockquote> -<p>(1) will fail if a non-existent "foo" comes into existence, or an -existent "foo" 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 "foo" is created by another -thread, process, or computer.</p> -<p>(3) will fail if another thread, process, or computer removes an -existing file "foo" and then creates a directory named "foo", 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 "Throws" 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="Headers">Headers</a></h2> - -<p>The Boost.Filesystem library provides several headers:</p> - -<ul> - <li>Header <<a href="../../../../boost/filesystem.hpp">boost/filesystem.hpp</a>> - provides access to all features of the library, except file streams.<br> - </li> - <li>Header <<a href="../../../../boost/filesystem/fstream.hpp">boost/filesystem<i>/</i>fstream.hpp</a>> - inherits the same components as the C++ Standard - Library's <i>fstream</i> header, but files are identified by <code>const path&</code> - arguments rather that <code>const char*</code> arguments.</li> -</ul> -<h2><a name="Examples">Example programs</a></h2> -<p>See the <a href="tutorial.html">tutorial</a> for example programs.</p> -<h3>Other examples</h3> -<p>The programs used to generate the Boost regression test status tables use the -Filesystem Library extensively. 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> -<h2><a name="Implementation">Implementation</a></h2> -<p>The current implementation supports operating systems which provide -the POSIX or Windows API's.</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_NO_DEPRECATED</code></td> - <td valign="top">Not defined.</td> - <td valign="top">Deprecated features are excluded from headers.</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">The Boost.Filesystem 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.Filesystem library does not use the Boost auto-link - facility.</td> - </tr> - </table> -<p>User-defined BOOST_POSIX_API and BOOST_WINDOWS_API macros are no longer -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 -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 and so 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> <a href="http://www.cygwin.com/">Cygwin</a> version 1.7 or later is -required because only versions of GCC with wide character strings are supported.</p> - -<p> The library's implementation code treats Cygwin as a Windows platform, and -thus uses the Windows API and uses Windows path syntax as the native path -syntax.</p> - -<h2><a name="Change-history">Version history</a></h2> - -<h3>Version 3</h3> - -<p>Boost <span style="background-color: #FFFF00">1.??.0 - ???, 2010</span> - Internationalization via single class <code>path</code>. -More uniform error handling.</p> - -<p>Peter Dimov suggested use of a single path class rather than a <code>basic_path</code> -class template. That idea was the basis for the Version 3 redesign.</p> - -<p>Thanks for comments from Robert Stewart, Zach Laine, Peter Dimov, Gregory -Peele, Scott McMurray, John Bytheway, Jeff Flinn, Jeffery Bosboom.</p> - -<h3>Version 2</h3> - -<p>Boost 1.34.0 - May, 2007 - Internationalization via <code>basic_path</code> -template.</p> - -<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> - -<h3>Version 1</h3> - -<p>Boost 1.30.0 - March, 2003 - Initial official Boost release.</p> - -<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 "illusion -of portability" 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> - -<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> - -<p>© 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/src/third_party/boost/libs/filesystem/v3/doc/path_table.cpp b/src/third_party/boost/libs/filesystem/v3/doc/path_table.cpp deleted file mode 100644 index cb811cacfeb..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/doc/path_table.cpp +++ /dev/null @@ -1,260 +0,0 @@ -// Generate an HTML table showing path decomposition ---------------------------------// - -// Copyright Beman Dawes 2005. - -// Distributed under the Boost Software License, Version 1.0. -// See 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 - -#include "boost/filesystem.hpp" -#include <iostream> -#include <fstream> - -using boost::filesystem::path; -using std::string; -using std::cout; - -namespace -{ - std::ifstream infile; - std::ofstream posix_outfile; - std::ifstream posix_infile; - std::ofstream outfile; - - bool posix; - - const string empty_string; - - struct column_base - { - virtual string heading() const = 0; - virtual string cell_value( const path & p ) const = 0; - }; - - struct c0 : public column_base - { - string heading() const { return string("<code>string()</code>"); } - string cell_value( const path & p ) const { return p.string(); } - } o0; - - struct c1 : public column_base - { - string heading() const { return string("<code>generic_<br>string()</code>"); } - string cell_value( const path & p ) const { return p.generic_string(); } - } o1; - - struct c2 : public column_base - { - string heading() const { return string("Iteration<br>over<br>Elements"); } - string cell_value( const path & p ) const - { - string s; - for( path::iterator i(p.begin()); i != p.end(); ++i ) - { - if ( i != p.begin() ) s += ','; - s += (*i).string(); - } - return s; - } - } o2; - - struct c3 : public column_base - { - string heading() const { return string("<code>root_<br>path()</code>"); } - string cell_value( const path & p ) const { return p.root_path().string(); } - } o3; - - struct c4 : public column_base - { - string heading() const { return string("<code>root_<br>name()</code>"); } - string cell_value( const path & p ) const { return p.root_name().string(); } - } o4; - - struct c5 : public column_base - { - string heading() const { return string("<code>root_<br>directory()</code>"); } - string cell_value( const path & p ) const { return p.root_directory().string(); } - } o5; - - struct c6 : public column_base - { - string heading() const { return string("<code>relative_<br>path()</code>"); } - string cell_value( const path & p ) const { return p.relative_path().string(); } - } o6; - - struct c7 : public column_base - { - string heading() const { return string("<code>parent_<br>path()</code>"); } - string cell_value( const path & p ) const { return p.parent_path().string(); } - } o7; - - struct c8 : public column_base - { - string heading() const { return string("<code>filename()</code>"); } - string cell_value( const path & p ) const { return p.filename().string(); } - } o8; - - const column_base * column[] = { &o2, &o0, &o1, &o3, &o4, &o5, &o6, &o7, &o8 }; - - // do_cell ---------------------------------------------------------------// - - void do_cell( const string & test_case, int i ) - { - string temp = column[i]->cell_value(path(test_case)); - string value; - outfile << "<td>"; - if (temp.empty()) - value = "<font size=\"-1\"><i>empty</i></font>"; - else - value = string("<code>") + temp + "</code>"; - - if (posix) - posix_outfile << value << '\n'; - else - { - std::getline(posix_infile, temp); - if (value != temp) // POSIX and Windows differ - { - value.insert(0, "<br>"); - value.insert(0, temp); - value.insert(0, "<span style=\"background-color: #CCFFCC\">"); - value += "</span>"; - } - outfile << value; - } - outfile << "</td>\n"; - } - -// do_row ------------------------------------------------------------------// - - void do_row( const string & test_case ) - { - outfile << "<tr>\n"; - - if (test_case.empty()) - outfile << "<td><font size=\"-1\"><i>empty</i></font></td>\n"; - else - outfile << "<td><code>" << test_case << "</code></td>\n"; - - for ( int i = 0; i < sizeof(column)/sizeof(column_base&); ++i ) - { - do_cell( test_case, i ); - } - - outfile << "</tr>\n"; - } - -// do_table ----------------------------------------------------------------// - - void do_table() - { - outfile << - "<h1>Path Decomposition Table</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_base&); ++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 ) ) - { - if (!test_case.empty() && *--test_case.end() == '\r') - test_case.erase(test_case.size()-1); - if (test_case.empty() || test_case[0] != '#') - 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 != 5 ) - { - std::cerr << - "Usage: path_table \"POSIX\"|\"Windows\" input-file posix-file output-file\n" - "Run on POSIX first, then on Windows\n" - " \"POSIX\" causes POSIX results to be saved in posix-file;\n" - " \"Windows\" causes POSIX results read from posix-file\n" - " input-file contains the paths to appear in the table.\n" - " posix-file will be used for POSIX results\n" - " output-file will contain the generated HTML.\n" - ; - return 1; - } - - infile.open( argv[2] ); - if ( !infile ) - { - std::cerr << "Could not open input file: " << argv[2] << std::endl; - return 1; - } - - if (string(argv[1]) == "POSIX") - { - posix = true; - posix_outfile.open( argv[3] ); - if ( !posix_outfile ) - { - std::cerr << "Could not open POSIX output file: " << argv[3] << std::endl; - return 1; - } - } - else - { - posix = false; - posix_infile.open( argv[3] ); - if ( !posix_infile ) - { - std::cerr << "Could not open POSIX input file: " << argv[3] << std::endl; - return 1; - } - } - - outfile.open( argv[4] ); - 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/src/third_party/boost/libs/filesystem/v3/doc/path_table.txt b/src/third_party/boost/libs/filesystem/v3/doc/path_table.txt deleted file mode 100644 index 40809c67743..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/doc/path_table.txt +++ /dev/null @@ -1,50 +0,0 @@ -# Paths for the reference.html Path Decomposition Table -# -# This is the input file for path_table, which generates the actual html -# -# Copyright Beman Dawes 2010 -# -# Distributed under the Boost Software License, Version 1.0. -# See www.boost.org/LICENSE_1_0.txt -# -# Note that an empty line is treated as input rather than as a comment - -. -.. -foo -/ -/foo -foo/ -/foo/ -foo/bar -/foo/bar -//net -//net/foo -///foo/// -///foo///bar -/. -./ -/.. -../ -foo/. -foo/.. -foo/./ -foo/./bar -foo/.. -foo/../ -foo/../bar -c: -c:/ -c:foo -c:/foo -c:foo/ -c:/foo/ -c:/foo/bar -prn: -c:\ -c:foo -c:\foo -c:foo\ -c:\foo\ -c:\foo/ -c:/foo\bar diff --git a/src/third_party/boost/libs/filesystem/v3/doc/portability_guide.htm b/src/third_party/boost/libs/filesystem/v3/doc/portability_guide.htm deleted file mode 100644 index 458e5dc81a9..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/doc/portability_guide.htm +++ /dev/null @@ -1,241 +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="300" height="86">Path -Name Portability -Guide</h1> - -<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> - <a href="release_history.html">Releases</a> - <a href="reference.html">Reference</a> - <a href="tutorial.html">Tutorial</a> - <a href="faq.htm">FAQ</a> - <a href="portability_guide.htm">Portability</a> - <a href="v3.html">V3 Intro</a> - <a href="v3_design.html">V3 Design</a> - <a href="deprecated.html">Deprecated</a> - </td> - </tr> -</table> - -<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. 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 "fighting chance" 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&<i> name</i>)</code></td> - <td><b>Returns:</b> <i>true</i> if <code>!name.empty() && 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&<i> name</i>)</code></td> - <td><b>Returns:</b> <i>true</i> if <code>!name.empty() && name</code> contains - only the characters specified by the Windows platform SDK as valid - regardless of the file system <code>&& (name</code> is <code>"."</code> or - <code>".."</code> or does not end with a trailing space or period<code>)</code>. - The allowed characters are anything except <code>0x0-0x1F</code>, <code>'<'</code>, - <code>'>'</code>, <code>':'</code>, <code>'"'</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&<i> name</i>)</code></td> - <td><b>Returns:</b> <code> windows_name(name) && portable_posix_name(name) - && (name</code> is <code>"."</code> or <code>".."</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&<i> name</i>)</code></td> - <td><b>Returns:</b> <code>portable_name(name) && (name</code> is <code>"."</code> - or <code>".."</code> 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&<i> name</i>)</code></td> - <td><b>Returns:</b> <code>portable_name(name) && </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 "file extension" - but limit its length.</td> - </tr> - <tr> - <td align="left" valign="top"><code><a name="native">native</a>(const - std::string&<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 "portable_" <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 "Foo" and "foo". </td> - <td valign="top">Some file systems are case insensitive. 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. For example, do not expect a file - created with the name of "Foo" to be opened successfully with the name of "foo".</td> - <td valign="top">Some file systems are case sensitive. 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. - 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. 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. Pick the specific limit according to - the operating systems and or file systems you wish portability to:<br> - Not a concern:: POSIX, Windows, MAC OS X.<br> - 31 characters: Classic Mac OS<br> - 8 characters + period + 3 characters: ISO 9660 level 1<br> - 32 characters: ISO 9660 level 2 and 3<br> - 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 -->20 February, 2011<!--webbot bot="Timestamp" endspan i-checksum="40524" --></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/src/third_party/boost/libs/filesystem/v3/doc/reference.html b/src/third_party/boost/libs/filesystem/v3/doc/reference.html deleted file mode 100644 index f7002750157..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/doc/reference.html +++ /dev/null @@ -1,3672 +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 V3 Reference -</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; - } -</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> - <a href="release_history.html">Releases</a> - <a href="reference.html">Reference</a> - <a href="tutorial.html">Tutorial</a> - <a href="faq.htm">FAQ</a> - <a href="portability_guide.htm">Portability</a> - <a href="v3.html">V3 Intro</a> - <a href="v3_design.html">V3 Design</a> - <a href="deprecated.html">Deprecated</a> - </td> - </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="33%" valign="top"><a href="#Introduction">Introduction</a><br> - <a href="#Definitions">Definitions</a><br> - <a href="#Conformance">Conformance</a><br> - <a href="#Header-filesystem-synopsis"> - Header <code><boost/filesystem.hpp></code> synopsis</a><br> - <a href="#Error-reporting">Error reporting</a><br> - <a href="#class-path">Class <code>path</code></a><br> - <a href="#path-Conversions"><code>path</code> conversions</a><br> - <a href="#path-Conversions-to-native-format"><code>path</code> - conversions to native format</a><br> - <a href="#path-Conversions-to-generic-format"><code>path</code> - conversions to generic format</a><br> - <a href="#path-Encoding-conversions"><code>path</code> - encoding conversions</a><br> - <a href="#path-Requirements"><code>path</code> requirements</a><br> - <a href="#path-constructors"><code>path</code> constructors</a><br> - <a href="#path-assignments"><code>path</code> assignments</a><br> - <a href="#path-appends"><code>path</code> appends</a><br> - <a href="#path-modifiers"><code>path</code> modifiers</a><br> - <a href="#path-native-format-observers"><code>path</code> native - format observers</a><br> - <a href="#path-generic-format-observers"><code>path</code> generic - format observers</a><br> - <a href="#path-decomposition"><code>path</code> decomposition</a><br> - <a href="#path-query"><code>path</code> query</a><br> - <a href="#path-iterators"><code>path</code> iterators</a><br> - <a href="#path-deprecated-functions"><code>path</code> deprecated functions</a><br> - <a href="#path-non-member-functions"><code>path</code> non-member functions</a><br> - <a href="#path-inserter-extractor"><code>path</code> inserters and extractors</a><br> - <a href="#Class-filesystem_error">Class <code>filesystem_error</code></a><br> - <a href="#filesystem_error-members"><code>filesystem_error</code> - constructors</a><br> - <code>f</code><a href="#filesystem_error-path1"><code>ilesystem_error</code> path1</a><br> - <a href="#filesystem_error-path2"><code>filesystem_error</code> path2</a><br> - <a href="#filesystem_error-what"><code>filesystem_error</code><code> - </code>what</a></td> - <td width="33%" valign="top"> - <a href="#Enum-file_type">Enum <code>file_type</code></a><br> - <a href="#Enum-perms">Enum <code>perms</code></a><br> - <a href="#file_status">Class - <code>file_status</code></a><br> - - <a href="#file_status"> - <code>file_status</code></a><a href="#file_status-constructors"> constructors</a><br> - <code><a href="#file_status-modifiers">file_status-modifiers</a></code><a href="#directory_entry-observers"> observers</a><br> - <code><a href="#file_status-observers">file_status-observers</a></code><a href="#directory_entry-modifiers"> modifiers</a><br> -<a href="#Class-directory_entry">Class <code>directory_entry</code></a><br> - -<a href="#directory_entry-constructors"><code>directory_entry</code> constructors</a><br> - <a href="#directory_entry-observers"><code>directory_entry</code> observers</a><br> - <a href="#directory_entry-modifiers"><code>directory_entry</code> modifiers</a><br> -<a href="#Class-directory_iterator">Class <code>directory_iterator</code></a><br> - <a href="#directory_iterator-members"><code>directory_iterator</code> - members</a><br> -<a href="#Class-recursive_directory_iterator">Class <code>recursive_directory_iterator</code></a><br> - <a href="#Operational-functions"> - Operational functions</a><br> - <code>   <a href="#absolute">absolute</a><br> - <a href="#canonical">canonical</a><br> - <a href="#copy">copy</a><br> - <a href="#copy_directory">copy_directory</a><br> - <a href="#copy_file">copy_file</a><br> - <a href="#copy_symlink">copy_symlink</a><br> -   <a href="#create_directories">create_directories</a><br> -   <a href="#create_directory">create_directory</a><br> -   <a href="#create_hard_link">create_hard_link</a><br> -   <a href="#create_symlink">create_symlink</a><br> -   <a href="#current_path">current_path</a><br> -   <a href="#exists">exists</a><br> -   <a href="#equivalent">equivalent</a><br> -   <a href="#file_size">file_size</a><br> - <a href="#hard_link_count">hard_link_count</a><br> - <a href="#initial_path">initial_path</a><br> -   i<a href="#is_directory">s_directory</a><br> -   <a href="#is_empty">is_empty</a></code></td> - <td width="34%" valign="top"> - <code>   <a href="#is_other">is_other</a><br> -   <a href="#is_regular_file">is_regular_file</a><br> -   <a href="#is_symlink">is_symlink</a><br> -   <a href="#last_write_time">last_write_time</a><br> - permissions<br> - <a href="#read_symlink">read_symlink</a><br> -   <a href="#remove">remove</a><br> -   <a href="#remove_all">remove_all</a><br> -   <a href="#rename">rename</a><br> - <a href="#resize_file">resize_file</a><br> -   <a href="#space">space</a><br> -   <a href="#status">status</a><br> -   <a href="#status_known">status_known</a><br> -   <a href="#symlink_status">symlink_status</a><br> -   <a href="#system_complete">system_complete</a><br> -   <a href="#temp_directory_path">temp_directory_path</a><br> - </code> <code> <a href="#unique_path">unique_path</a></code><br> - <a href="#File-streams">File streams</a><br> -<a href="#Path-decomposition-table">Path decomposition table</a><br> - <a href="#long-path-warning">Warning: Long paths on Windows and the - extended-length <b>\\?\ </b>prefix</a><br> -<a href="#Acknowledgements">Acknowledgements</a><br> -<a href="#References">References</a><br> - </td> - </tr> -</table> - -<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> -<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 -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> -and <code>..</code> 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>"</code>,<code> - *</code>,<code> :</code>,<code> <</code>,<code> ></code>,<code> ?</code>,<code> - \</code>,<code> /</code>, and<code> |</code> <i>--end note]</i></p> -</blockquote> -<p><b><i><a name="Path">Path</a>:</i></b> 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 -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. <i>--end - note]</i></p> -</blockquote> -<p><b><a name="Relative-path">Relative path</a>:</b> A path that 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 "." and ".." 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 -native pathname format.</p> -<p><b><i><a name="generic-pathname-format">Generic pathname format:</a></i></b></p> -<blockquote> -<p><i>pathname:<br> - root-name<sub>opt</sub> -root-directory<sub>opt</sub> relative-path<sub>opt</sub></i></p> -<p><i>root-name:<br> - -implementation-defined</i></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>":"</code> as a root-name identifying a disc drive. <i>--end note</i>]</p> - </blockquote> -</blockquote> -<p><i>root-directory:<br> - -directory-separator</i></p> -<p><i>relative-path:<br> - -filename<br> - relative-path -directory-separator<br> - relative-path -directory-separator filename</i></p> -<p><i>filename:<br> - name<br> - </i><code>"."</code><i><br> - </i><code> -".."</code></p> -<p><i>directory-separator:<br> - <code>"/"<br> - "/"</code> 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> -<code>"."</code> is considered to be a reference to the current directory. The -<i>filename</i> <code>".."</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> -</blockquote> -<p><b><i><a name="native-pathname-format">Native pathname format:</a></i></b> -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 -"dangling" 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>"."</code> -and <code>".."</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 "as if" 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 "POSIX-compliant operating systems".</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><boost/filesystem.hpp></code> synopsis</a></h2> -<pre> namespace boost - { - namespace filesystem - { - class <a href="#class-path">path</a>; - - void swap(path& lhs, path& 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& p); - - bool operator==(const path& lhs, const path& rhs); - bool operator!=(const path& lhs, const path& rhs); - bool operator< (const path& lhs, const path& rhs); - bool operator<=(const path& lhs, const path& rhs); - bool operator> (const path& lhs, const path& rhs); - bool operator>=(const path& lhs, const path& rhs); - - path operator/ (const path& lhs, const path& rhs); - - std::ostream& operator<<( std::ostream& os, const path& p ); - std::wostream& operator<<( std::wostream& os, const path& p ); - std::istream& operator>>( std::istream& is, path& p ); - std::wistream& operator>>( std::wistream& is, path& 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>; - - class <a href="#Class-recursive_directory_iterator">recursive_directory_iterator</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 - }; - - class <a href="#file_status">file_status</a>; - - 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 - }; - - BOOST_SCOPED_ENUM_START(<a name="copy_option">copy_option</a>) - { - none - fail_if_exists = none, - overwrite_if_exists - }; - BOOST_SCOPED_ENUM_END - - BOOST_SCOPED_ENUM_START(<a name="symlink_option">symlink_option</a>) - { - none - no_recurse = none, - recurse - }; - BOOST_SCOPED_ENUM_END - - // <a href="#Operational-functions">operational functions</a> - - path <a href="#absolute">absolute</a>(const path& p, const path& base=current_path()); - - path <a href="#canonical">canonical</a>(const path& p, const path& base = current_path()); - path <a href="#canonical">canonical</a>(const path& p, system::error_code& ec); - path <a href="#canonical">canonical</a>(const path& p, const path& base, system::error_code& ec); - - void <a href="#copy">copy</a>(const path& from, const path& to); - void <a href="#copy">copy</a>(const path& from, const path& to, system::error_code& ec); - - void <a href="#create_directory">copy_directory</a>(const path& from, const path& to); - void <a href="#create_directory">copy_directory</a>(const path& from, const path& to, system::error_code& ec); - - void <a href="#copy_file">copy_file</a>(const path& from, const path& to); - void <a href="#copy_file">copy_file</a>(const path& from, const path& to, system::error_code& ec); - void <a href="#copy_file">copy_file</a>(const path& from, const path& to, BOOST_SCOPED_ENUM(<a href="#copy_option">copy_option</a>) option); - void <a href="#copy_file">copy_file</a>(const path& from, const path& to, BOOST_SCOPED_ENUM(<a href="#copy_option">copy_option</a>) option, - system::error_code& ec); - - void <a href="#copy_symlink">copy_symlink</a>(const path& existing_symlink, const path& new_symlink); - void <a href="#copy_symlink">copy_symlink</a>(const path& existing_symlink, const path& new_symlink, system::error_code& ec); - - bool <a href="#create_directories">create_directories</a>(const path& p); - bool <a href="#create_directories">create_directories</a>(const path& p, system::error_code& ec); - - bool <a href="#create_directory">create_directory</a>(const path& p); - bool <a href="#create_directory">create_directory</a>(const path& p, system::error_code& ec); - - void <a href="#create_directory_symlink">create_directory_symlink</a>(const path& to, const path& new_symlink); - void <a href="#create_directory_symlink">create_directory_symlink</a>(const path& to, const path& new_symlink, system::error_code& ec); - - void <a href="#create_hard_link">create_hard_link</a>(const path& to, const path& new_hard_link); - void <a href="#create_hard_link">create_hard_link</a>(const path& to, const path& new_hard_link, system::error_code& ec); - - void <a href="#create_symlink">create_symlink</a>(const path& to, const path& new_symlink); - void <a href="#create_symlink">create_symlink</a>(const path& to, const path& new_symlink, system::error_code& ec); - - path <a href="#current_path">current_path</a>(); - path <a href="#current_path">current_path</a>(system::error_code& ec); - void <a href="#current_path">current_path</a>(const path& p); - void <a href="#current_path">current_path</a>(const path& p, system::error_code& ec); - - bool <a href="#exists">exists</a>(file_status s); - bool <a href="#exists">exists</a>(const path& p); - bool <a href="#exists">exists</a>(const path& p, system::error_code& ec); - - bool <a href="#equivalent">equivalent</a>(const path& p1, const path& p2); - bool <a href="#equivalent">equivalent</a>(const path& p1, const path& p2, system::error_code& ec); - - uintmax_t <a href="#file_size">file_size</a>(const path& p); - uintmax_t <a href="#file_size">file_size</a>(const path& p, system::error_code& ec); - uintmax_t <a href="#hard_link_count">hard_link_count</a>(const path& p); - uintmax_t <a href="#hard_link_count">hard_link_count</a>(const path& p, system::error_code& ec); - - const path& <a href="#initial_path">initial_path</a>(); - const path& <a href="#initial_path">initial_path</a>(<code>system::error_code& ec</code>); - - bool <a href="#is_directory">is_directory</a>(file_status s); - bool <a href="#is_directory2">is_directory</a>(const path& p); - bool <a href="#is_directory2">is_directory</a>(const path& p, system::error_code& ec); - - bool <a href="#is_empty">is_empty</a>(const path& p); - bool <a href="#is_empty">is_empty</a>(const path& p, system::error_code& ec); - - bool <a href="#is_other">is_other</a>(file_status s); - bool <a href="#is_other2">is_other</a>(const path& p,); - bool <a href="#is_other2">is_other</a>(const path& p, system::error_code& ec); - - 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& p); - bool i<a href="#is_regular_file2">s_regular_file</a>(const path& p, system::error_code& ec); - - bool <a href="#is_symlink">is_symlink</a>(file_status s); - bool <a href="#is_symlink2">is_symlink</a>(const path& p); - bool <a href="#is_symlink2">is_symlink</a>(const path& p, system::error_code& ec); - - std::time_t <a href="#last_write_time">last_write_time</a>(const path& p); - std::time_t <a href="#last_write_time">last_write_time</a>(const path& p, system::error_code& ec); - void <a href="#last_write_time2">last_write_time</a>(const path& p, const std::time_t new_time); - void <a href="#last_write_time2">last_write_time</a>(const path& p, const std::time_t new_time, system::error_code& ec); - - path <a href="#read_symlink">read_symlink</a>(const path& p); - path <a href="#read_symlink">read_symlink</a>(const path& p, system::error_code& ec); - - bool <a href="#remove">remove</a>(const path& p); - bool <a href="#remove">remove</a>(const path& p, system::error_code& ec); - - uintmax_t <a href="#remove_all">remove_all</a>(const path& p); - uintmax_t <a href="#remove_all">remove_all</a>(const path& p, system::error_code& ec); - - void <a href="#rename">rename</a>(const path& from, const path& to); - void <a href="#rename">rename</a>(const path& from, const path& to, system::error_code& ec); - - void <a href="#resize_file">resize_file</a>(const path& p, uintmax_t size); - void <a href="#resize_file2">resize_file</a>(const path& p, uintmax_t size, system::error_code& ec); - - <a href="#space_info">space_info</a> <a href="#space">space</a>(const path& p); - <a href="#space_info">space_info</a> <a href="#space">space</a>(const path& p, system::error_code& ec); - <a href="#file_status">file_status</a> <a href="#status">status</a>(const path& p); - <a href="#file_status">file_status</a> <a href="#status">status</a>(const path& p, system::error_code& ec); - - bool <a href="#status_known">status_known</a>(file_status s); - - <a href="#file_status">file_status</a> <a href="#symlink_status">symlink_status</a>(const path& p); - <a href="#file_status">file_status</a> <a href="#symlink_status">symlink_status</a>(const path& p, system::error_code& ec); - - path <a href="#system_complete">system_complete</a>(const path& p); - path <a href="#system_complete">system_complete</a>(const path& p, system::error_code& ec); - - path <a href="#temp_directory_path">temp_directory_path</a>(); - path <a href="#temp_directory_path">temp_directory_path</a>(system::error_code& ec); - - path <a href="#unique_path">unique_path</a>(const path& model="%%%%-%%%%-%%%%-%%%%"); - path <a href="#unique_path">unique_path</a>(const path& model, system::error_code& ec); - - } // 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> -<blockquote> -<p>[<i>Note:</i> This supports two common use cases:</p> -<ul> - <li>Uses where file system -errors are truly exceptional and indicate a serious failure. Throwing an - exception is the most appropriate response. This is the preferred default for - most everyday programming.<br> - </li> - <li>Uses where file system system errors are routine and do not necessarily represent - failure. Returning an error code is the most appropriate response. This allows - application specific error handling, including simply ignoring the error.</li> -</ul> - <p><i>--end note</i>]</p> -</blockquote> -<p>Functions <b>not</b> having an argument of type -<code>system::error_code&</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 - error that prevents the function from meeting its specifications, an exception - of type -<code>filesystem_error</code> is thrown.<br> - </li> - <li>Failure to allocate storage is reported by throwing an exception as described in the C++ standard, - 17.6.4.10 [res.on.exception.handling].<br> - </li> - <li>Destructors throw nothing.</li> - </ul> - <p>Functions having an argument of type -<code>system::error_code&</code> report errors as follows, unless otherwise - specified:</p> -<ul> - <li>If a call by the - implementation to an operating system or other underlying API results in an - error that prevents the function from meeting its specifications, the -<code>system::error_code&</code> argument is set as - appropriate appropriate for the specific error. Otherwise, <code>clear()</code> - is called on the -<code>system::error_code&</code> argument.<br> - </li> - <li>Failure to allocate storage is reported by - 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> -<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 - { - 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 std::basic_string<value_type> string_type; - typedef std::codecvt<wchar_t, char, std::mbstate_t> codecvt_type; - - // <a href="#path-constructors">constructors</a> and destructor - path(); - path(const path& p); - - template <class <a href="#Source">Source</a>> - path(Source const& source, const codecvt_type& cvt=codecvt()); - - template <class <a href="#InputIterator">InputIterator</a>> - path(InputIterator begin, InputIterator end, const codecvt_type& cvt=codecvt()); - - ~path(); - - // <a href="#path-assignments">assignments</a> - path& operator=(const path& p); - - template <class <a href="#Source">Source</a>> - path& operator=(Source const& source); - - template <class <a href="#Source">Source</a>> - path& assign(Source const& source, const codecvt_type& cvt) - - template <class <a href="#InputIterator">InputIterator</a>> - path& assign(InputIterator begin, InputIterator end, const codecvt_type& cvt=codecvt()); - - // <a href="#path-appends">appends</a> - path& operator/=(const path& p); - - template <class <a href="#Source">Source</a>> - path& operator/=(Source const& source); - - template <class <a href="#Source">Source</a>> - path& append(Source const& source, const codecvt_type& cvt); - - template <class <a href="#InputIterator">InputIterator</a>> - path& append(InputIterator begin, InputIterator end, const codecvt_type& cvt=codecvt()); - - // <a href="#path-modifiers">modifiers</a> - void <a href="#path-clear">clear</a>(); - path& <a href="#absolute">make_absolute</a>(const path& base); - path& <a href="#path-make_preferred">make_preferred</a>(); // POSIX: no effect. Windows: convert slashes to backslashes - path& <a href="#path-remove_filename">remove_filename</a>(); - path& <a href="#path-replace_extension">replace_extension</a>(const path& new_extension = path()); - void <a href="#path-swap">swap</a>(path& rhs); - - // <a href="#path-native-format-observers">native format observers</a> - const string_type& <a href="#native">native</a>() const; // native format, encoding - const value_type* <a href="#c_str">c_str</a>() const; // native().c_str() - - template <class String> - String <a href="#string-template">string</a>(const codecvt_type& cvt=codecvt()) const; // native format - - const string <a href="#string">string</a>(const codecvt_type& cvt=codecvt()) const; // native format - const wstring <a href="#wstring">wstring</a>(const codecvt_type& cvt=codecvt()) const; // ditto - const u16string <a href="#u16string">u16string</a>() const; // ditto - const u32string <a href="#u32wstring">u32string</a>() const; // ditto - - // <a href="#path-generic-format-observers">generic format observers</a> - template <class String> - String <a href="#generic_string-template">generic_string</a>() const; - - const string <a href="#generic_string">generic_string</a>(const codecvt_type& cvt=codecvt()) const; // generic format - const wstring <a href="#generic_wstring">generic_wstring</a>(const codecvt_type& 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-decomposition">decomposition</a> - path <a href="#path-root_name">root_name</a>() const; - path <a href="#path-root_directory">root_directory</a>() const; - path <a href="#path-root_path">root_path</a>() const; - path <a href="#path-relative_path">relative_path</a>() const; - path <a href="#path-parent_path">parent_path</a>() const; - path <a href="#path-filename">filename</a>() const; - path <a href="#path-stem">stem</a>() const; - path <a href="#path-extension">extension</a>() const; - - // <a href="#path-query">query</a> - bool <a href="#path-query">empty</a>() const; - bool <a href="#path-has_root_name">has_root_name</a>() const; - bool <a href="#path-has_root_directory">has_root_directory</a>() const; - bool <a href="#path-has_root_path">has_root_path</a>() const; - bool <a href="#path-has_relative_path">has_relative_path</a>() const; - bool <a href="#path-has_parent_path">has_parent_path</a>() const; - bool <a href="#path-has_filename">has_filename</a>() const; - bool <a href="#path-has_stem">has_stem</a>() const; - bool <a href="#path-has_extension">has_extension</a>() const; - bool <a href="#path-is_absolute">is_absolute</a>() const; - bool <a href="#path-is_relative">is_relative</a>() const; - - // <a href="#path-iterators">iterators</a> - class iterator; - typedef iterator const_iterator; - - 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& loc ); - static const codecvt_type & <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 -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&</code>, <code>const -wstring&</code>, <code>const u16string&</code>, or <code>const u32string&</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> -<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> -</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>"/cats/jane"</code> would considered a regular file -path, and have a native format of <code>"[CATS]JANE"</code>, while a -path constructed from <code>"/cats/jane/"</code> would be considered a -directory path, and have a native format of <code>"[CATS.JANE]"</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 -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> "All BSD system functions expect their string -parameters to be in UTF-8 encoding and nothing else." 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("")</code>. -[<i>Rationale:</i> ISO C specifies this as "the locale-specific native -environment", while POSIX says it "Specifies an implementation-defined native -environment." <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="Source">Source</a></code> are required to be one of:</p> -<ul> - <li>A container with a value type of <code>char</code>, <code> - wchar_t</code>, <code>char16_t</code>, or <code>char32_t</code>.</li> - <li>An iterator for a null terminated byte-string. 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 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> -</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> -<pre>template <class <a href="#Source">Source</a>> - path(Source const& source, const codecvt_type& cvt=codecvt());</pre> -<pre>template <class <a href="#InputIterator">InputIterator</a>> - path(InputIterator begin, InputIterator end, const codecvt_type& cvt=codecvt());</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 [<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-assignments"> <code> -<font size="4">path</font></code> assignments</a></h3> -<pre>template <class <a href="#Source">Source</a>> - path& operator=(Source const& source);</pre> -<pre>template <class <a href="#Source">Source</a>> - path& assign(Source const& source, const codecvt_type& cvt);</pre> -<pre>template <class <a href="#InputIterator">InputIterator</a>> - path& assign(InputIterator begin, InputIterator end, const codecvt_type& cvt=codecvt());</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> - <p> - <i>Returns: </i><code>*this</code></p> - <p> - <i>Remarks:</i> If the value type of [<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> -<pre>path& operator/=(const path& p);</pre> -<blockquote> - <p><i>Effects:</i></p> - <blockquote> - Appends the preferred directory separator to the contained pathname, 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> - </blockquote> - <p><i>Returns: </i><code>*this</code></p> -</blockquote> -<pre>template <class <a href="#Source">Source</a>> - path& operator/=(Source const & source);</pre> -<pre>template <class <a href="#Source">Source</a>> - path& append(Source const & source, const codecvt_type& cvt);</pre> -<pre>template <class <a href="#InputIterator">InputIterator</a>> - path& append(InputIterator begin, InputIterator end, const codecvt_type& cvt=codecvt());</pre> -<blockquote> - <p><i>Effects:</i></p> - <blockquote> - <p>Appends a native directory separator to the contained pathname, 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><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> - </blockquote> - <p><i>Remarks:</i> If the value type of [<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> -<blockquote> -<p><i>Postcondition:</i> <code>this->empty()</code> is true.</p> -</blockquote> -<pre>path& <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>Returns:</i> <code>*this</code></p> -</blockquote> - -<pre>path& <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 - implementation may be much more efficient than <code>*this = parent_path()</code> <i>-- end - note</i>]</p> -</blockquote> -<pre>path& <a name="path-replace_extension">replace_extension</a>(const path& 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>Returns:</i> <code>*this</code></p> -</blockquote> -<pre><code>void <a name="path-swap">swap</a>(path& rhs);</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> -</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& <a name="native">native</a>() const;</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> -<blockquote> -<p><i>Returns:</i> <code>pathname.c_str()</code>.</p> -<p><i>Throws:</i> nothing.</p> -</blockquote> -<pre>template <class String> -String <a name="string-template">string</a>(const codecvt_type& 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> -</blockquote> -<pre>const string <a name="string">string</a>(const codecvt_type& cvt=codecvt()) const; -const wstring <a name="wstring">wstring</a>(const codecvt_type& cvt=codecvt()) const; -const u16string <a name="u16string">u16string</a>() const; -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&</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> -<pre>template <class String> -String <a name="generic_string-template">generic_string</a>(const codecvt_type& 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> -</blockquote> -<pre>const string <a name="generic_string">generic_string</a>(const codecvt_type& cvt=codecvt()) const; -const wstring <a name="generic_wstring">generic_wstring</a>(const codecvt_type& cvt=codecvt()) const; -const u16string <a name="generic_u16string">generic_u16string</a>() const; -const u32wstring <a name="generic_u32wstring">generic_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 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&</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 -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> -</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>If <i>root-directory</i> is composed of <i>slash name</i>, <i>slash</i> is -excluded from the returned string.</p> -</blockquote> -<pre>path <a name="path-root_path">root_path</a>() const;</pre> -<blockquote> - <p><i>Returns:</i> <code>root_name() / root_directory()</code></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 -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> -</blockquote> -<pre>path <a name="path-filename">filename</a>() const;</pre> -<blockquote> - <p><i>Returns:</i> <code>empty() ? path() : *--end()</code></p> - <p>[<i>Example:</i></p> - <blockquote> - <pre><code>std::cout << path("/foo/bar.txt").filename();</code> // outputs "<code>bar.txt</code>"</pre> - </blockquote> - <p> <i>--end example</i>]</p> -</blockquote> -<pre>path <a name="path-stem">stem</a>(const path& p) const;</pre> -<blockquote> - <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> - <p>[<i>Example:</i></p> - <blockquote> - <pre><code>std::cout << path("/foo/bar.txt").stem();</code> // outputs "<code>bar</code>" -path p = "foo.bar.baz.tar"; -for (; !p.extension().empty(); p = p.stem()) - std::cout << p.extension() << '\n'; - // outputs: .tar - // .baz - // .bar</pre> - </blockquote> - <p> <i>--end example</i>]</p> -</blockquote> -<pre>path <a name="path-extension">extension</a>(const path& p) const;</pre> -<blockquote> - <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> - <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> - <p>[<i>Example:</i></p> - <blockquote> - <pre><code>std::cout << path("/foo/bar.txt").extension(); //</code> outputs "<code>.txt</code>"</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. <i>-- end note</i>]</p> -</blockquote> -<h3> <a name="path-query"> <code><font size="4">path</font></code> query</a></h3> -<pre>bool <a name="path-empty">empty</a>() const;</pre> -<blockquote> - <p><i>Returns:</i> <code>m_pathname.empty()</code>.</p> -</blockquote> -<pre>bool <a name="path-has_root_path">has_root_path</a>() const;</pre> -<blockquote> - <p><i>Returns:</i> <code>!<a href="#path-root_path">root_path</a>().empty()</code></p> -</blockquote> -<pre>bool <a name="path-has_root_name">has_root_name</a>() const;</pre> -<blockquote> - <p><i>Returns:</i> <code>!<a href="#path-root_name">root_name</a>().empty()</code></p> -</blockquote> -<pre>bool <a name="path-has_root_directory">has_root_directory</a>() const;</pre> -<blockquote> - <p><i>Returns:</i> <code>!<a href="#path-root_directory">root_directory</a>().empty()</code></p> -</blockquote> -<pre>bool <a name="path-has_relative_path">has_relative_path</a>() const;</pre> -<blockquote> - <p><i>Returns:</i> <code>!<a href="#path-has_relative_path">relative_path</a>().empty()</code></p> -</blockquote> -<pre>bool <a name="path-has_parent_path">has_parent_path</a>() const;</pre> -<blockquote> - <p><i>Returns:</i> <code>!<a href="#path-parent_path">parent_path</a>().empty()</code></p> -</blockquote> -<pre>bool <a name="path-has_filename">has_filename</a>() const;</pre> -<blockquote> - <p><i>Returns:</i> <code>!<a href="#path-filename">filename</a>().empty()</code></p> -</blockquote> -<pre>bool <a name="path-has_stem">has_stem</a>() const;</pre> -<blockquote> - <p><i>Returns:</i> <code>!<a href="#path-stem">stem</a>().empty()</code></p> -</blockquote> -<pre>bool <a name="path-has_extension">has_extension</a>() const;</pre> -<blockquote> - <p><i>Returns:</i> <code>!<a href="#path-has_extension">extension</a>().empty()</code></p> -</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("/foo").is_absolute()</code> returns <code>true</code>. On Windows, <code> - path("/foo").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> - <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> -<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> - <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>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> - <h3><a name="path_encoding"><code><font size="4"> path</font></code> encoding</a> conversion</h3> - <pre>static std::locale <a name="path-imbue">imbue</a>(const std::locale& 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> -</blockquote> -<pre>static const codecvt_type& <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> -</blockquote> -<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 -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> -<blockquote> - <pre>path& remove_leaf() { return remove_filename(); } -path leaf() const { return filename(); } -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> -<blockquote> - <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& lhs, path& 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> -<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 - 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> - <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 - other, then the shorter sequence is lexicographically less than the longer - 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 && first2 != last2 ; ++first1, ++first2) { - if (first1->native() < first2->native()) return true; - if (first2->native() < first1->native()) return false; - } - return first1 == last1 && 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> -</blockquote> -<pre>std::size_t <a name="hash_value">hash_value</a> (const path& 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> -</blockquote> -<pre>bool operator< (const path& lhs, const path& rhs);</pre> -<blockquote> - <p><i>Returns:</i> <code>return lexicographical_compare(lhs.begin(), lhs.end(), - rhs.begin(), rhs.end())</code>.</p> -</blockquote> -<pre>bool operator<=(const path& lhs, const path& rhs);</pre> -<blockquote> - <p><i>Returns:</i> <code>!(rhs < lhs)</code>.</p> -</blockquote> -<pre>bool operator> (const path& lhs, const path& rhs);</pre> -<blockquote> - <p><i>Returns:</i> <code>rhs < lhs</code>.</p> -</blockquote> -<pre>bool operator>=(const path& lhs, const path& rhs);</pre> -<blockquote> - <p><i>Returns:</i> <code>!(lhs < rhs)</code>.</p> -</blockquote> -<pre>bool operator==(const path& lhs, const path& rhs);</pre> -<blockquote> - <p><i>Returns:</i> <code>!(lhs < rhs) && !(rhs < 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("foo") == "bar"</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("foo", "bar")</code> will be <code>true</code> - when both paths resolve to the same file.</p> - <p>Programmers wishing to determine if two paths are "the same" must decide if - "the same" means "the same representation" or "resolve to the same actual - file", and choose the appropriate function accordingly. <i> - -- end note</i>]</p> -</blockquote> -<pre>bool operator!=(const path& lhs, const path& rhs);</pre> -<blockquote> - <p><i>Returns:</i> <code>!(lhs == rhs)</code>.</p> -</blockquote> -<pre>path operator/ (const path& lhs, const path& rhs);</pre> -<blockquote> - <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> -<p> The inserter and extractor delimit the string with double-quotes (<code>"</code>) -to ensure that paths with embedded spaces will round trip correctly. Ampersand (<code>&</code>) -is used as an escape character, so the path can itself contain double quotes.</p> -<pre>template <class Char, class Traits> -std::basic_ostream<Char, Traits>& operator<<(std::basic_ostream<Char, Traits>& os, - const path& p) -</pre> -<blockquote> - <p><i>Effects:</i> - <code>os << <a href="../../../io/doc/quoted_manip.html"> - boost::io::quoted</a>(p.string<std::basic_string<Char>>(), static_cast<Char>('&'));</code></p> - <p><i>Returns:</i> - <code>os</code></p> -</blockquote> -<pre>template <class Char, class Traits> -inline std::basic_istream<Char, Traits>& operator>>(std::basic_istream<Char, Traits>& is, - path& p) -</pre> -<blockquote> - <p><i>Effects: </i> - <code> std::basic_string<Char> str;<br> - is >> - <a href="../../../io/doc/quoted_manip.html">boost::io::quoted</a>(str, - static_cast<Char>('&'));<br> - p = str;</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 boost - { - namespace filesystem - { - class basic_filesystem_error : public system_error - { - public: - filesystem_error(); - filesystem_error(const filesystem_error&); - <a href="#filesystem_error-2-arg">filesystem_error</a>(const std::string& what_arg, - system::error_code ec); - <a href="#filesystem_error-3-arg">filesystem_error</a>(const std::string& what_arg, - const path& p1, system::error_code ec); - <a href="#filesystem_error-4-arg">filesystem_error</a>(const std::string& what_arg, - const path& p1, const path& p2, system::error_code ec); - - filesystem_error& filesystem_error(const filesystem_error&); - ~filesystem_error(); - - filesystem_error& operator=(const filesystem_error&); - - const path& <a href="#filesystem_error-path1">path1</a>() const; - const path& <a href="#filesystem_error-path2">path2</a>() const; - - 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 -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> -<pre><a name="filesystem_error-2-arg">filesystem_error</a>(const std::string& what_arg, error_code ec);</pre> -<blockquote> - <p><i>Postcondition:</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> - runtime_error::what()</code></td> - <td width="82%" bgcolor="#FFFFFF"> - <code><i>what_arg</i>.c_str()</code></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><a name="filesystem_error-3-arg">filesystem_error</a>(const std::string& what_arg, const path_type& p1, error_code ec);</pre> -<blockquote> - <p><i>Postcondition:</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> - runtime_error::what()</code></td> - <td width="82%"> - <code><i>what_arg</i>.c_str()</code></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%">Reference to stored copy of - <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><a name="filesystem_error-4-arg">filesystem_error</a>(const std::string& what_arg, const path_type& p1, const path_type& p2, error_code ec);</pre> -<blockquote> - <p><i>Postcondition:</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> - runtime_error::what()</code></td> - <td width="82%"> - <u> - <code><i>w</i></code></u><code><i>hat_arg</i>.c_str()</code></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%">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> - </tr> - </table> -</blockquote> -<pre>const path& <a name="filesystem_error-path1">path1</a>() 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& <a name="filesystem_error-path2">path2</a>() 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* <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 - 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> -<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> - <td><b>Constant Name</b></td> - <td><b>Meaning</b></td> - </tr> - <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> - </tr> - <tr> - <td><code>file_not_found</code></td> - <td>The file could not be found</td> - </tr> - <tr> - <td><code>regular_file</code></td> - <td>Regular file</td> - </tr> - <tr> - <td><code>directory_file</code></td> - <td>Directory file</td> - </tr> - <tr> - <td><code>symlink_file</code></td> - <td>Symbolic link file</td> - </tr> - <tr> - <td><code>block_file</code></td> - <td>Block special file</td> - </tr> - <tr> - <td><code>character_file</code></td> - <td>Character special file</td> - </tr> - <tr> - <td><code>fifo_file</code></td> - <td>FIFO or pipe file</td> - </tr> - <tr> - <td><code>socket_file</code></td> - <td>Socket file</td> - </tr> - <tr> - <td><code>type_unknown</code></td> - <td>The file exists, but it is of a system specific type not covered by any - 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 -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> -</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> - 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> -</tr> -<tr><td><code>owner_read</code></td><td><code>0400</code></td><td> <code>S_IRUSR</code></td> - <td> Read permission, owner</td> -</tr> -<tr><td><code>owner_write</code></td><td><code>0200</code></td><td> <code>S_IWUSR</code></td> - <td> Write permission, owner</td> -</tr> -<tr><td><code>owner_exe</code></td><td><code>0100</code></td><td> <code>S_IXUSR</code></td> - <td> Execute/search permission, owner</td> -</tr> -<tr><td><code>owner_all</code></td><td><code>0700</code></td><td> <code>S_IRWXU</code></td> - <td> Read, write, execute/search by owner; <code>owner_read | owner_write | owner_exe</code></td> -</tr> -<tr><td><code>group_read</code></td><td><code>040</code></td><td> <code>S_IRGRP</code></td> - <td> Read permission, group</td> -</tr> -<tr><td><code>group_write</code></td><td><code>020</code></td><td> <code>S_IWGRP</code></td> - <td> Write permission, group</td> -</tr> -<tr><td><code>group_exe</code></td><td><code>010</code></td><td> <code>S_IXGRP</code></td> - <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> -</tr> -<tr><td><code>others_read</code></td><td><code>04</code></td><td> <code>S_IROTH</code></td> - <td> Read permission, others</td> -</tr> -<tr><td><code>others_write</code></td><td><code>02</code></td><td> <code>S_IWOTH</code></td> - <td> Write permission, others</td> -</tr> -<tr><td><code>others_exe</code></td><td><code>01</code></td><td> <code>S_IXOTH</code></td> - <td> Execute/search permission, others</td> -</tr> -<tr><td><code>others_all</code></td><td><code>07</code></td><td> <code>S_IRWXO</code></td> - <td>Read, write, execute/search by others; <code>others_read | others_write | others_exe</code></td> -</tr> -<tr><td><code>all_all</code></td><td><code>0777</code></td><td> </td><td><code>owner_all | group_all | others_all</code></td> -</tr> -<tr><td><code>set_uid_on_exe</code></td><td><code>04000</code></td><td> <code>S_ISUID</code></td> - <td> Set-user-ID on execution</td> -</tr> -<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> -<tr><td><code>perms_mask</code></td><td><code>07777</code></td><td> </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> - The permissions are not known, such as when a <code>file_status</code> object - 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 - file's current bits</td> -</tr> -<tr><td><code>remove_perms</code></td><td><code>0x2000</code></td><td></td><td> - <code>permissions()</code> removes the argument permission bits from the - 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> -</tr> - -</table> -<h3><a name="file_status">Class file_status</a></h3> -<pre> namespace boost - { - namespace filesystem - { - class file_status - { - public: - - // <a href="#file_status-constructors">constructors</a> - file_status() noexcept; - explicit file_status(<a href="#file_type">file_type</a> ft, <a href="#Enum-perms">perms</a> prms = perms_not_known) noexcept; - - // compiler generated - file_status(const file_status&) noexcept; - file_status& operator=(const file_status&) noexcept; - ~file_status() noexcept; - - // <a href="#file_status-observers">observers</a> - <a href="#file_type">file_type</a> type() const noexcept; - <a href="#Enum-perms">perms</a> permissions() const noexcept; - - // <a href="#file_status-modifiers">modifiers</a> - 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> -<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> -<pre>explicit file_status() noexcept;</pre> -<blockquote> - <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> -</blockquote> - <h4 dir="ltr"><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> -</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> -</blockquote> -<h4 dir="ltr"><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> -</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> -</blockquote> -<h3><a name="Class-directory_entry">Class <code>directory_entry</code></a></h3> -<div dir="ltr"> -<pre> namespace boost - { - namespace filesystem - { - class directory_entry - { - public: - - // <a href="#directory_entry-constructors">constructors</a> and destructor - directory_entry(); - directory_entry(const directory_entry&); - explicit directory_entry(const path_type& p, file_status st=file_status(), - file_status symlink_st=file_status()); - ~directory_entry(); - - // <a href="#directory_entry-modifiers">modifiers</a> - directory_entry& operator=(const directory_entry&); - void assign(const path_type& p, file_status st=file_status(), - file_status symlink_st=file_status()); - void replace_filename(const path& p, file_status st=file_status(), - file_status symlink_st=file_status()); - - // <a href="#directory_entry-observers">observers</a> - const path& path() const; - file_status status() const; - file_status status(system::error_code& ec) const; - file_status symlink_status() const; - file_status symlink_status(system::error_code& ec) const; - - bool operator< (const directory_entry& rhs); - bool operator==(const directory_entry& rhs); - bool operator!=(const directory_entry& rhs); - bool operator< (const directory_entry& rhs); - bool operator<=(const directory_entry& rhs); - bool operator> (const directory_entry& rhs); - bool operator>=(const directory_entry& rhs); - private: - path_type m_path; // for exposition only - mutable file_status m_status; // for exposition only; stat()-like - mutable file_status m_symlink_status; // for exposition only; lstat()-like - }; - - } // 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> -<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 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> -<pre>directory_entry();</pre> -<blockquote> - <p><i>Postcondition:</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 directory_entry(const path_type& p, file_status st=file_status(), file_status symlink_st=file_status());</pre> -<blockquote> - <p><i>Postcondition:</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="directory_entry-modifiers"> <code>directory_entry </code>modifiers</a></h4> -<pre>void assign(const path_type& p, file_status st=file_status(), file_status symlink_st=file_status());</pre> -<blockquote> - <p><i>Postcondition:</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 path& p, file_status st=file_status(), file_status symlink_st=file_status());</pre> -<blockquote> - <p><i>Postcondition:</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="directory_entry-observers"> <code>directory_entry</code> observers</a></h4> -<pre>const path& path() const;</pre> -<blockquote> - <p><i>Returns:</i> <code>m_path</code></p> -</blockquote> -<pre>file_status status() const; -file_status status(system::error_code& ec) const;</pre> -<blockquote> -<p><i>Effects:</i> -As if,</p> - <blockquote> - <pre>if ( !status_known( m_status ) ) -{ - if ( status_known(m_symlink_status) && !is_symlink(m_symlink_status) ) - { m_status = m_symlink_status; } - else { m_status = status(m_path<i>[, ec]</i>); } -}</pre> - </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> - -</blockquote> -<pre>file_status symlink_status() const; -file_status symlink_status(system::error_code& ec) const;</pre> -<blockquote> -<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>Throws:</i> As specified in - <a href="#Error-reporting"> - Error reporting</a>.</p> - -</blockquote> -<pre>bool operator==(const directory_entry& rhs);</pre> -<blockquote> - <p><i>Returns:</i> <code>m_path == - rhs.m_path</code>.</p> -</blockquote> -<pre>bool operator!=(const directory_entry& rhs);</pre> -<blockquote> - <p><i>Returns:</i> <code>m_path != - rhs.m_path</code>.</p> -</blockquote> -<pre>bool operator< (const directory_entry& rhs);</pre> -<blockquote> - <p><i>Returns:</i> <code>m_path < - rhs.m_path</code>.</p> -</blockquote> -<pre>bool operator<=(const directory_entry& rhs);</pre> -<blockquote> - <p><i>Returns:</i> <code>m_path <= - rhs.m_path</code>.</p> -</blockquote> -<pre>bool operator> (const directory_entry& rhs);</pre> -<blockquote> - <p><i>Returns:</i> <code>m_path > - rhs.m_path</code>.</p> -</blockquote> -<pre>bool operator>=(const directory_entry& rhs);</pre> -<blockquote> - <p><i>Returns:</i> <code>m_path >= - 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 boost - { - namespace filesystem - { - class directory_iterator - : public boost::iterator_facade< directory_iterator, - <a href="#Class-directory_entry">directory_entry</a>, - boost::single_pass_traversal_tag > - { - public: - // <a href="#directory_iterator-members">member functions</a> - - directory_iterator(); // creates the "end" iterator - directory_iterator(const directory_iterator&); - explicit directory_iterator(const path& p); - directory_iterator(const path& p, system::error_code& ec); - ~directory_iterator(); - - directory_iterator& operator=(const directory_iterator&); - - directory_iterator& operator++(); - directory_iterator& increment(system::error_code& ec); - - // other members as required by - // C++ Std, 24.1.1 Input iterators [input.iterators] - }; - - } // 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> -<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&</code> is returned. The result of -<code>operator-></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> -<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>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>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>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="directory_iterator-members"><code>directory_iterator</code> members</a></h4> - -<p><code><a name="directory_iterator-default-ctor">directory_iterator</a>();</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& p<code>); -directory_iterator(</code>const path& p, system::error_code& ec<code>);</code></pre> -<blockquote> - -<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>Note:</i> To iterate over the current directory, use <code> -directory_iterator(".")</code> rather than <code>directory_iterator("")</code>. -<i>-- end note</i>]</p> -</blockquote> -<pre>directory_iterator& <a name="directory_iterator-increment">operator++</a>(); -directory_iterator& increment(system::error_code& ec);</pre> -<blockquote> - -<p><i>Effects:</i> As specified by the C++ Standard, 24.1.1 Input iterators [input.iterators]</p> - -<p><i>Returns:</i> <code>*this</code>.</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 boost - { - namespace filesystem - { - class recursive_directory_iterator : - public iterator<input_iterator_tag, directory_entry> - { - public: - - // constructors and destructor - recursive_directory_iterator(); - recursive_directory_iterator(const recursive_directory_iterator&); - explicit recursive_directory_iterator(const path& p, - BOOST_SCOPED_ENUM(<a href="#symlink_option">symlink_option</a>) opt = symlink_option::none); - recursive_directory_iterator(const path& p, - BOOST_SCOPED_ENUM(<a href="#symlink_option">symlink_option</a>) opt, system::error_code& ec); - recursive_directory_iterator(const path& p, system::error_code& ec); - ~recursive_directory_iterator(); - - // observers - int level() const; - bool no_push<code>_pending</code>() const; - - // modifiers - recursive_directory_iterator& operator=(const recursive_directory_iterator&); - - recursive_directory_iterator& operator++(); - recursive_directory_iterator& increment(system::error_code& ec); - - void pop(); - void no_push(bool value=true); - - // other members as required by - // C++ Std, 24.1.2 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> - }; - - } // 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> -<ul> - <li>Incrementing a <code>recursive_directory_iterator</code> pointing to a - directory causes that directory itself to be iterated ovee, as specified by - the <code>operator++</code> and <code>increment</code> functions.<br> - </li> - <li>When a <code>recursive_directory_iterator</code> 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 of the parent directory continues.</li> -</ul> -<pre>recursive_directory_iterator();</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& p, BOOST_SCOPED_ENUM(<a href="#symlink_option">symlink_option</a>) opt = symlink_option::none); -recursive_directory_iterator(const path& p, BOOST_SCOPED_ENUM(<a href="#symlink_option">symlink_option</a>) opt, system::error_code& ec); -recursive_<code>directory_iterator(</code>const path& p, system::error_code& ec<code>);</code></pre> -<blockquote> - -<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 dir="ltr"><i>Postcondition: </i>Unless the end iterator was constructed,<i> </i> -<code>level() == 0 && no_push_pending() == false && 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>Note:</i> To iterate over the current directory, use <code>recursive_directory_iterator(".")</code> rather than -<code>recursive_directory_iterator("")</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> -</blockquote> -<pre>int level() const;</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> -<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>& <a name="recursive_directory_iterator-increment">operator++</a>(); -recursive_directory_iterator& increment(system::error_code& ec);</pre> -<blockquote> - -<p><i>Effects:</i> As specified by the C++ Standard, 24.1.1 Input iterators [input.iterators], -except:</p> - -<ul> - <li dir="ltr"> - -<p dir="ltr">if <code>!no_push_pending() && is_directory(this->status()) -&& (!is_symlink(this->symlink_status()) || (m_options -& symlink_option::recurse) != 0)</code> then <code>m_level</code> -is incremented and directory <code>(*this)->path()</code> is recursively iterated into.<br> - </p> - - </li> - <li>if there are no more directory entries at this level then <code>m_level</code> -is decremented and iteration of the parent directory resumes.</li> -</ul> - -<p><i>Postcondition:</i> <code>no_push_pending() == false</code>.</p> - -<p><i>Returns:</i> <code>*this</code>.</p> - -<p><i>Throws:</i> As specified in - <a href="#Error-reporting"> - Error reporting</a>.</p> - -</blockquote> -<pre>void pop();</pre> -<blockquote> - <p><i>Requires:</i> <code>*this != recursive_directory_iterator()</code>.</p> - <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> -<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 -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 -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. 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& p, const path& base=current_path());</pre> - <blockquote> - <p><i>Returns:</i> A <a href="#Absolute-path">absolute path</a> composed according to the - following table</p> - <table border="1" cellpadding="5" cellspacing="0" bordercolor="#111111" style="border-collapse: collapse"> - <tr> - <td align="center"> </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>return p</code></td> - <td align="center"><code>return p.root_name() / - absolute(base).root_directory()<br> - / absolute(base).relative_path() / p.relative_path()</code></td> - </tr> - <tr> - <td align="center"><b><code>!p.has_root_name()</code></b></td> - <td align="center"><code>return absolute(base).root_name()<br> - / p</code></td> - <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>Throws:</i> If <code>base.is_absolute()</code> is true, throws only if - memory allocation fails.</p> -</blockquote> -<pre>path <a name="canonical">canonical</a>(const path& p, const path& base = current_path()); -path canonical(const path& p, system::error_code& ec); -path canonical(const path& p, const path& base, system::error_code& ec);</pre> -<blockquote> -<p><i>Overview:</i> Converts <code>p</code>, which must exist, to an absolute -path that has no symbolic link, <a href="#Dot">dot</a>, -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> As specified in - <a href="#Error-reporting"> - Error reporting</a>.</p> - - <p><i>Remarks:</i> <code>!exists(p)</code> is an error.</p> - - <p>[<i>Note:</i> Canonical pathnames allow security checking of a path (eg. - does this path live in /home/goodguy or /home/badguy?) -- end note]</p> - -</blockquote> -<pre>void <a name="copy">copy</a>(const path& from, const path& to); -void copy(const path& from, const path& to, system::error_code& ec);</pre> -<blockquote> - <p><i>Effects:</i> As if</p> - - <blockquote> - <pre>file_status s(symlink_status(from<i>[</i><code>, ec</code><i>]</i>)); -if(is_symlink(s)) - copy_symlink(from, to<i>[</i><code>, ec</code><i>]</i>); -else if(is_directory(s)) - copy_directory(from, to<i>[</i><code>, ec</code><i>]</i>); -else if(is_regular_file(s)) - copy_file(from, to, copy_option::fail_if_exists<i>[</i><code>, ec</code><i>]</i>); -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> - -</blockquote> -<pre>void <a name="copy_directory">copy_directory</a>(const path& from, const path& to); -void copy_directory(const path& from, const path& to, system::error_code& ec);</pre> -<blockquote> - <p><i>Effects: </i></p> - - <p><i>Throws:</i> As specified in - <a href="#Error-reporting"> - Error reporting</a>.</p> - -</blockquote> -<pre>void copy_file(const path& from, const path& to); -void copy_file(const path& from, const path& to, system::error_code& 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>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& from, const path& to, BOOST_SCOPED_ENUM(<a href="#copy_option">copy_option</a>) option); -void <a name="copy_file2">copy_file</a>(const path& from, const path& to, BOOST_SCOPED_ENUM(<a href="#copy_option">copy_option</a>) option, system::error_code& ec);</pre> -<blockquote> - <p><i>Effects:</i> If <code>option == copy_option::</code><code>fail_if_exists - && 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& existing_symlink, const path& new_symlink); -void copy_symlink(const path& existing_symlink, const path& new_symlink, system::error_code& 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>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& p); -bool <a name="create_directories2">create_directories</a>(const path& p, system::error_code& 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>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> -</blockquote> -<pre>bool <a name="create_directory">create_directory</a>(const path& p); -bool <a name="create_directory2">create_directory</a>(const path& p, system::error_code& 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>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> -</blockquote> -<pre>void <a name="create_directory_symlink">create_directory_symlink</a>(const path& to, const path& new_symlink); -void create_directory_symlink(const path& to, const path& new_symlink, system::error_code& 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> - 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 - 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> - </blockquote> -<pre>void <a name="create_hard_link">create_hard_link</a>(const path& to, const path& new_hard_link); -void <a name="create_hard_link2">create_hard_link</a>(const path& to, const path& new_hard_link, system::error_code& 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>Postcondition:</i></p> - <ul> - <li> <code>exists(to) && - exists(</code><code>new_hard_link</code><code>) && equivalent(to, - - </code><code>new_hard_link</code><code>)</code></li> - <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> - </blockquote> -<pre>void <a name="create_symlink">create_symlink</a>(const path& to, const path& new_symlink); -void <a name="create_symlink2">create_symlink</a>(const path& to, const path& new_symlink, system::error_code& 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> - 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 - 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> - </blockquote> -<pre>path <a name="current_path">current_path</a>(); -path <a name="current_path2">current_path</a>(system::error_code& 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 - 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 - library functions, or by another thread. <i>-- end note</i>]</p> -</blockquote> -<pre>void current_path(const path& p); -void current_path(const path& p, system::error_code& 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>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>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. <i>-- end note</i>]</p> -</blockquote> -<pre>bool <a name="exists">exists</a>(file_status s);</pre> -<blockquote> - <p><i>Returns:</i> - <code>status_known(s) && s.type() != file_not_found</code></p> - <p><i>Throws:</i> Nothing.</p> -</blockquote> -<pre>bool <a name="exists2">exists</a>(const path& p); -bool <a name="exists3">exists</a>(const path& p, system::error_code& ec);</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&</code> throws -nothing.</p> -</blockquote> -<pre><code>bool <a name="equivalent">equivalent</a>(const path& p1, const path& p2); -bool <a name="equivalent2">equivalent</a>(const path& p1, const path& p2, system::error_code& 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 <code>status(p2)</code>, - respectively.</p> - <p style="font-size: 10pt"><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 - 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 style="font-size: 10pt">[<i>Note:</i> <i>POSIX</i> requires that <i>"st_dev</i> - must be unique within a Local Area Network". 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 "same" 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) && !exists(s2)) || (is_other(s1) && is_other(s2))</code>, - otherwise as specified in - <a href="#Error-reporting"> - Error reporting</a>.</p> -</blockquote> -<div dir="ltr"> -<pre>uintmax_t <a name="file_size">file_size</a>(const path& p); -uintmax_t <a name="file_size2">file_size</a>(const path& p, system::error_code& ec);</pre> -</div> -<blockquote> - <p> - <span style="background-color: #FFFF00">Remarks: </span> - </p> - <p><i>Returns:</i> If <code>exists(p) && 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>. - Otherwise, <code>static_cast<uintmax_t>(-1)</code>.</p> - <p style="font-size: 10pt"><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& p); -uintmax_t hard_link_count(const path& p, system::error_code& 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> - -</blockquote> - -<pre>const path& <a name="initial_path">initial_path</a>(); -const path& <a name="initial_path">initial_path</a>(<code>system::error_code& 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 - 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(). <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> -</blockquote> -<pre>bool <code><a name="is_directory">is_directory</a></code>(file_status s);</pre> -<blockquote> - <p><i>Returns:</i> - <code>s.type() == directory_file</code></p> - <p><i>Throws:</i> Nothing.</p> -</blockquote> -<pre><code>bool <a name="is_directory2">is_directory</a>(const path& p); -bool <a name="is_directory3">is_directory</a>(const path& p, system::error_code& ec);</code></pre> -<blockquote> - <p dir="ltr"><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&</code> throws -nothing.</p> -</blockquote> -<pre><code>bool <a name="is_empty">is_empty</a>(const path& p); -bool <a name="is_empty2">is_empty</a></a>(const path& p, system::error_code& 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>Returns:</i> <code>is_directory(s)<br> - ? - directory_iterator(p) == directory_iterator()<br> - : file_size(p) == 0;</code></p> -</blockquote> -<pre>bool <code><a name="is_regular_file">is_regular_file</a></code>(file_status s);</pre> -<blockquote> - <p><i>Returns:</i> - <code>s.type() == regular_file</code></p> - <p><i>Throws:</i> Nothing.</p> -</blockquote> -<pre><code>bool <a name="is_regular_file2">is_regular_file</a>(const path& 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> - </blockquote> -<pre><code>bool <a name="is_regular_file3">is_regular_file</a>(const path& p, system::error_code& 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 - 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> -<blockquote> - <p><i>Returns:</i> - <code>return exists(s) && !is_regular_file(s) && !is_directory(s) && !is_symlink(s)</code></p> - <p><i>Throws:</i> Nothing.</p> -</blockquote> -<pre><code>bool <a name="is_other2">is_other</a>(const path& p); -bool <a name="is_other3">is_other</a>(const path& p, system::error_code& ec);</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&</code> throws - nothing.</p> -</blockquote> -<pre>bool <a name="is_symlink">is_symlink</a>(file_status s);</pre> -<blockquote> - <p><i>Returns:</i> - <code>s.type() == symlink_file</code></p> - <p><i>Throws:</i> Nothing.</p> -</blockquote> -<pre><code>bool <a name="is_symlink2">is_symlink</a>(const path& p); -bool <a name="is_symlink3">is_symlink</a>(const path& p, system::error_code& ec);</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> - <p><i>Throws:</i> <code>filesystem_error</code>; overload with <code>error_code&</code> throws - nothing.</p> -</blockquote> -<pre>std::time_t <a name="last_write_time">last_write_time</a>(const path& p); -std::time_t <a name="last_write_time2">last_write_time</a>(const path& p<code>, system::error_code& 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> 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>void <a name="last_write_time3">last_write_time</a>(const path& p, const std::time_t new_time); -void <a name="last_write_time4">last_write_time</a>(const path& p, const std::time_t new_time<code>, system::error_code& 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 - with coarse time granularity. <i>-- end note</i>]</p> -</blockquote> -<pre>void permissions(const path& p, <a href="#symlink_perms">perms</a> prms); -void permissions(const path& p, <a href="#symlink_perms">perms</a> prms, system::error_code& 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 & add_perms) && (prms & 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 - specified by the following table. </p> - <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111"> - <tr> - <td><b>bits present in <code>prms</code></b></td> - <td><b>Effective bits applied</b></td> - </tr> - <tr> - <td>Neither <code>add_perms</code> nor <code>remove_perms</code></td> - <td><code>prms & perms_mask</code></td> - </tr> - <tr> - <td><code>add_perms</code></td> - <td> - <p dir="ltr">current_status.permissions() | (<code>prms & perms_mask</code>) - </td> - </tr> - <tr> - <td><code>remove_perms</code></td> - <td>current_status.permissions() & ~(<code>prms & perms_mask</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> -</blockquote> -<pre>path <a name="read_symlink">read_symlink</a>(const path& p); -path read_symlink(const path& p, system::error_code& ec);</pre> -<blockquote> - <p dir="ltr"><i>Returns:</i> 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 - resolve to a symbolic link. <i>-- end note</i>]</p> -</blockquote> -<pre>bool <a name="remove">remove</a>(const path& p); -bool <a name="remove2">remove</a>(const path& p, system::error_code& ec);</pre> -<blockquote> - <p><i>Effects:</i> 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> - <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(symlink_status(p))</code>.</p> - <p><i>Returns:</i> <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> -</blockquote> -<pre>uintmax_t <a name="remove_all">remove_all</a>(const path& p); -uintmax_t <a name="remove_all2">remove_all</a>(const path& p, system::error_code& ec);</pre> -<blockquote> - <p><i>Effects:</i> 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> - <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> -</blockquote> -<pre>void <a name="rename">rename</a>(const path& old_p, const path& new_p); -void <a name="rename2">rename</a>(const path& old_p, const path& new_p, system::error_code& 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> - <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 - 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> -</blockquote> -<pre>void <a name="resize_file">resize_file</a>(const path& p, uintmax_t new_size); -void <a name="resize_file2">resize_file</a>(const path& p, uintmax_t new_size, system::error_code& 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> -</blockquote> -<pre>space_info <a name="space">space</a>(const path& p); -space_info <a name="space2">space</a>(const path& p, system::error_code& 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>, - 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> -</blockquote> -<pre><a href="#file_status">file_status</a> <a name="status">status</a>(const path& p);</pre> -<blockquote> - <p><i>Effects: </i>As if:</p> - <blockquote> - <pre>system::error_code ec; -file_status result = status(p, ec); -if (result == status_error) - throw filesystem_error(<i>implementation-supplied-message</i>, p, ec); -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 - 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& p, system::error_code& ec);</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> - 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>. <i>--end note</i>]</p> - </blockquote> - </blockquote> - <p><i>Returns:</i></p> - <blockquote> - <p>If <code>ec != error_code()</code>:</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 - 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>-- - end note</i>]<br> - </li> - <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 - note</i>]<br> - </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 - distinctions are important to some use cases. <i>--end note</i>]</p> - </blockquote> - <p>Otherwise,</p> - <ul> - <li>If the attributes indicate a regular file, as if by <i>POSIX</i> <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><fstream></code> operations - would succeed, assuming no hardware, permission, access, or race condition - errors. Lack of -<code>regular_file</code> does not necessarily imply <code><fstream></code> operations would -fail on a directory. -<i>-- end note</i>]<br> - </li> - <li>Otherwise, if the attributes indicate a directory, as if by <i>POSIX</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> - </li> - <li>Otherwise, if the attributes indicate a block special file, as if by <i>POSIX</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> - </li> - <li>Otherwise, if the attributes indicate a character special file, as if by <i>POSIX</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> - </li> - <li>Otherwise, if the attributes indicate a fifo or pipe file, as if by <i>POSIX</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> - </li> - <li>Otherwise, if the attributes indicate a socket, as if by <i>POSIX</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> - </li> - <li>Otherwise, return <code> - 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> -<blockquote> - <p><i>Returns:</i> - <code>s.type() != status_error</code></p> - <p><i>Throws:</i> Nothing.</p> -</blockquote> -<pre>file_status <a name="symlink_status">symlink_status</a>(const path& p); -file_status <a name="symlink_status2">symlink_status</a>(const path& p, system::error_code& ec);</pre> -<blockquote> - <p><i>Effects:</i> 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> -</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> - <p><i>Remarks:</i> Pathname resolution terminates if <code>p</code> names a symbolic link.</p> -</blockquote> -<pre>path <a name="system_complete">system_complete</a>(const path& p); -path <a name="system_complete2">system_complete</a>(const path& p, system::error_code& ec);</pre> -<blockquote> - <p><i>Effects:</i> Composes an absolute 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_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><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 - 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> -<pre>path <a name="temp_directory_path">temp_directory_path</a>(); -path temp_directory_path(system::error_code& ec);</pre> -<blockquote> - <p><i>Returns:</i> A directory path suitable for temporary files under the - 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 - list TMPDIR, TMP, TEMP, TEMPDIR. If none of these are found, <code>"/tmp"</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>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. <i>-- end note</i>]</p> -</blockquote> -<pre>path <a name="unique_path">unique_path</a>(const path& model="%%%%-%%%%-%%%%-%%%%"); -path unique_path(const path& model, system::error_code& ec);</pre> -<blockquote> - <p>The <code>unique_path</code> function generates a path name suitable for - creating temporary files, including directories. The name is based - on a model that uses the percent sign character to specify replacement by a - random hexadecimal digit. [<i>Note:</i> The more bits of randomness in the - generated path name, the less likelihood of prior existence or being guessed. - Each replacement hexadecimal digit in the model adds four bits of randomness. - The default model thus provides 64 bits of randomness. This is sufficient for - most applications. <i>--end note</i>]</p> - <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>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 - 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"><boost/filesystem/fstream.hpp></a></h3> -<p>Replacements are provided for the file stream classes from the C++ standard -library's <code><fstream></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&</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 < class charT, class traits = std::char_traits<charT> > - class basic_filebuf : public std::basic_filebuf<charT,traits> - { - public: - basic_filebuf<charT,traits>* - open(const path& p, std::ios_base::openmode mode); - }; - - template < class charT, class traits = std::char_traits<charT> > - class basic_ifstream : public std::basic_ifstream<charT,traits> - { - public: - explicit basic_ifstream(const path& p, std::ios_base::openmode mode=std::ios_base::in) - void open(const path& p, std::ios_base::openmode mode=std::ios_base::in); - }; - - template < class charT, class traits = std::char_traits<charT> > - class basic_ofstream : public std::basic_ofstream<charT,traits> - { - public: - explicit basic_ofstream(const path& p, std::ios_base::openmode mode=std::ios_base::out); - void open(const path& p, std::ios_base::openmode mode=std::ios_base::out); - }; - - template < class charT, class traits = std::char_traits<charT> > - class basic_fstream : public std::basic_fstream<charT,traits> - { - public: - explicit basic_fstream(const path& p, - std::ios_base::openmode mode=std::ios_base::in | std::ios_base::out); - void open(const path& p, - std::ios_base::openmode mode=std::ios_base::in | std::ios_base::out); - }; - - typedef basic_filebuf<char> filebuf; - typedef basic_ifstream<char> ifstream; - typedef basic_ofstream<char> ofstream; - typedef basic_fstream<char> fstream; - - typedef basic_filebuf<wchar_t> wfilebuf; - typedef basic_ifstream<wchar_t> wifstream; - typedef basic_fstream<wchar_t> wfstream; - typedef basic_ofstream<wchar_t> 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> -<table border="1" cellspacing="0" cellpadding="5"> -<p> -<tr><td><b>Constructor<br>argument</b></td> -<td><b>Iteration<br>over<br>Elements</b></td> -<td><b><code>string()</code></b></td> -<td><b><code>generic_<br>string()</code></b></td> -<td><b><code>root_<br>path()</code></b></td> -<td><b><code>root_<br>name()</code></b></td> -<td><b><code>root_<br>directory()</code></b></td> -<td><b><code>relative_<br>path()</code></b></td> -<td><b><code>parent_<br>path()</code></b></td> -<td><b><code>filename()</code></b></td> -</tr> -<tr> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -</tr> -<tr> -<td><code>.</code></td> -<td><code>.</code></td> -<td><code>.</code></td> -<td><code>.</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>.</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>.</code></td> -</tr> -<tr> -<td><code>..</code></td> -<td><code>..</code></td> -<td><code>..</code></td> -<td><code>..</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>..</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>..</code></td> -</tr> -<tr> -<td><code>foo</code></td> -<td><code>foo</code></td> -<td><code>foo</code></td> -<td><code>foo</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>foo</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>foo</code></td> -</tr> -<tr> -<td><code>/</code></td> -<td><code>/</code></td> -<td><code>/</code></td> -<td><code>/</code></td> -<td><code>/</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>/</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>/</code></td> -</tr> -<tr> -<td><code>/foo</code></td> -<td><code>/,foo</code></td> -<td><code>/foo</code></td> -<td><code>/foo</code></td> -<td><code>/</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>/</code></td> -<td><code>foo</code></td> -<td><code>/</code></td> -<td><code>foo</code></td> -</tr> -<tr> -<td><code>foo/</code></td> -<td><code>foo,.</code></td> -<td><code>foo/</code></td> -<td><code>foo/</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>foo/</code></td> -<td><code>foo</code></td> -<td><code>.</code></td> -</tr> -<tr> -<td><code>/foo/</code></td> -<td><code>/,foo,.</code></td> -<td><code>/foo/</code></td> -<td><code>/foo/</code></td> -<td><code>/</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>/</code></td> -<td><code>foo/</code></td> -<td><code>/foo</code></td> -<td><code>.</code></td> -</tr> -<tr> -<td><code>foo/bar</code></td> -<td><code>foo,bar</code></td> -<td><code>foo/bar</code></td> -<td><code>foo/bar</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>foo/bar</code></td> -<td><code>foo</code></td> -<td><code>bar</code></td> -</tr> -<tr> -<td><code>/foo/bar</code></td> -<td><code>/,foo,bar</code></td> -<td><code>/foo/bar</code></td> -<td><code>/foo/bar</code></td> -<td><code>/</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>/</code></td> -<td><code>foo/bar</code></td> -<td><code>/foo</code></td> -<td><code>bar</code></td> -</tr> -<tr> -<td><code>//net</code></td> -<td><code>//net</code></td> -<td><code>//net</code></td> -<td><code>//net</code></td> -<td><code>//net</code></td> -<td><code>//net</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>//net</code></td> -</tr> -<tr> -<td><code>//net/foo</code></td> -<td><code>//net,/,foo</code></td> -<td><code>//net/foo</code></td> -<td><code>//net/foo</code></td> -<td><code>//net/</code></td> -<td><code>//net</code></td> -<td><code>/</code></td> -<td><code>foo</code></td> -<td><code>//net/</code></td> -<td><code>foo</code></td> -</tr> -<tr> -<td><code>///foo///</code></td> -<td><code>/,foo,.</code></td> -<td><code>///foo///</code></td> -<td><code>///foo///</code></td> -<td><code>/</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>/</code></td> -<td><code>foo///</code></td> -<td><code>///foo</code></td> -<td><code>.</code></td> -</tr> -<tr> -<td><code>///foo///bar</code></td> -<td><code>/,foo,bar</code></td> -<td><code>///foo///bar</code></td> -<td><code>///foo///bar</code></td> -<td><code>/</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>/</code></td> -<td><code>foo///bar</code></td> -<td><code>///foo</code></td> -<td><code>bar</code></td> -</tr> -<tr> -<td><code>/.</code></td> -<td><code>/,.</code></td> -<td><code>/.</code></td> -<td><code>/.</code></td> -<td><code>/</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>/</code></td> -<td><code>.</code></td> -<td><code>/</code></td> -<td><code>.</code></td> -</tr> -<tr> -<td><code>./</code></td> -<td><code>.,.</code></td> -<td><code>./</code></td> -<td><code>./</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>./</code></td> -<td><code>.</code></td> -<td><code>.</code></td> -</tr> -<tr> -<td><code>/..</code></td> -<td><code>/,..</code></td> -<td><code>/..</code></td> -<td><code>/..</code></td> -<td><code>/</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>/</code></td> -<td><code>..</code></td> -<td><code>/</code></td> -<td><code>..</code></td> -</tr> -<tr> -<td><code>../</code></td> -<td><code>..,.</code></td> -<td><code>../</code></td> -<td><code>../</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>../</code></td> -<td><code>..</code></td> -<td><code>.</code></td> -</tr> -<tr> -<td><code>foo/.</code></td> -<td><code>foo,.</code></td> -<td><code>foo/.</code></td> -<td><code>foo/.</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>foo/.</code></td> -<td><code>foo</code></td> -<td><code>.</code></td> -</tr> -<tr> -<td><code>foo/..</code></td> -<td><code>foo,..</code></td> -<td><code>foo/..</code></td> -<td><code>foo/..</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>foo/..</code></td> -<td><code>foo</code></td> -<td><code>..</code></td> -</tr> -<tr> -<td><code>foo/./</code></td> -<td><code>foo,.,.</code></td> -<td><code>foo/./</code></td> -<td><code>foo/./</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>foo/./</code></td> -<td><code>foo/.</code></td> -<td><code>.</code></td> -</tr> -<tr> -<td><code>foo/./bar</code></td> -<td><code>foo,.,bar</code></td> -<td><code>foo/./bar</code></td> -<td><code>foo/./bar</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>foo/./bar</code></td> -<td><code>foo/.</code></td> -<td><code>bar</code></td> -</tr> -<tr> -<td><code>foo/..</code></td> -<td><code>foo,..</code></td> -<td><code>foo/..</code></td> -<td><code>foo/..</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>foo/..</code></td> -<td><code>foo</code></td> -<td><code>..</code></td> -</tr> -<tr> -<td><code>foo/../</code></td> -<td><code>foo,..,.</code></td> -<td><code>foo/../</code></td> -<td><code>foo/../</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>foo/../</code></td> -<td><code>foo/..</code></td> -<td><code>.</code></td> -</tr> -<tr> -<td><code>foo/../bar</code></td> -<td><code>foo,..,bar</code></td> -<td><code>foo/../bar</code></td> -<td><code>foo/../bar</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>foo/../bar</code></td> -<td><code>foo/..</code></td> -<td><code>bar</code></td> -</tr> -<tr> -<td><code>c:</code></td> -<td><code>c:</code></td> -<td><code>c:</code></td> -<td><code>c:</code></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><font size="-1"><i>empty</i></font></td> -<td><span style="background-color: #CCFFCC"><code>c:</code><br><font size="-1"><i>empty</i></font></span></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>c:</code></td> -</tr> -<tr> -<td><code>c:/</code></td> -<td><span style="background-color: #CCFFCC"><code>c:,.</code><br><code>c:,/</code></span></td> -<td><code>c:/</code></td> -<td><code>c:/</code></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:/</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>/</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:/</code><br><font size="-1"><i>empty</i></font></span></td> -<td><code>c:</code></td> -<td><span style="background-color: #CCFFCC"><code>.</code><br><code>/</code></span></td> -</tr> -<tr> -<td><code>c:foo</code></td> -<td><span style="background-color: #CCFFCC"><code>c:foo</code><br><code>c:,foo</code></span></td> -<td><code>c:foo</code></td> -<td><code>c:foo</code></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><font size="-1"><i>empty</i></font></td> -<td><span style="background-color: #CCFFCC"><code>c:foo</code><br><code>foo</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:foo</code><br><code>foo</code></span></td> -</tr> -<tr> -<td><code>c:/foo</code></td> -<td><span style="background-color: #CCFFCC"><code>c:,foo</code><br><code>c:,/,foo</code></span></td> -<td><code>c:/foo</code></td> -<td><code>c:/foo</code></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:/</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>/</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:/foo</code><br><code>foo</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:</code><br><code>c:/</code></span></td> -<td><code>foo</code></td> -</tr> -<tr> -<td><code>c:foo/</code></td> -<td><span style="background-color: #CCFFCC"><code>c:foo,.</code><br><code>c:,foo,.</code></span></td> -<td><code>c:foo/</code></td> -<td><code>c:foo/</code></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><font size="-1"><i>empty</i></font></td> -<td><span style="background-color: #CCFFCC"><code>c:foo/</code><br><code>foo/</code></span></td> -<td><code>c:foo</code></td> -<td><code>.</code></td> -</tr> -<tr> -<td><code>c:/foo/</code></td> -<td><span style="background-color: #CCFFCC"><code>c:,foo,.</code><br><code>c:,/,foo,.</code></span></td> -<td><code>c:/foo/</code></td> -<td><code>c:/foo/</code></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:/</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>/</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:/foo/</code><br><code>foo/</code></span></td> -<td><code>c:/foo</code></td> -<td><code>.</code></td> -</tr> -<tr> -<td><code>c:/foo/bar</code></td> -<td><span style="background-color: #CCFFCC"><code>c:,foo,bar</code><br><code>c:,/,foo,bar</code></span></td> -<td><code>c:/foo/bar</code></td> -<td><code>c:/foo/bar</code></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:/</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>/</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:/foo/bar</code><br><code>foo/bar</code></span></td> -<td><code>c:/foo</code></td> -<td><code>bar</code></td> -</tr> -<tr> -<td><code>prn:</code></td> -<td><code>prn:</code></td> -<td><code>prn:</code></td> -<td><code>prn:</code></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>prn:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>prn:</code></span></td> -<td><font size="-1"><i>empty</i></font></td> -<td><span style="background-color: #CCFFCC"><code>prn:</code><br><font size="-1"><i>empty</i></font></span></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>prn:</code></td> -</tr> -<tr> -<td><code>c:\</code></td> -<td><span style="background-color: #CCFFCC"><code>c:\</code><br><code>c:,/</code></span></td> -<td><code>c:\</code></td> -<td><span style="background-color: #CCFFCC"><code>c:\</code><br><code>c:/</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:\</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>\</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:\</code><br><font size="-1"><i>empty</i></font></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:\</code><br><code>\</code></span></td> -</tr> -<tr> -<td><code>c:foo</code></td> -<td><span style="background-color: #CCFFCC"><code>c:foo</code><br><code>c:,foo</code></span></td> -<td><code>c:foo</code></td> -<td><code>c:foo</code></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><font size="-1"><i>empty</i></font></td> -<td><span style="background-color: #CCFFCC"><code>c:foo</code><br><code>foo</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:foo</code><br><code>foo</code></span></td> -</tr> -<tr> -<td><code>c:\foo</code></td> -<td><span style="background-color: #CCFFCC"><code>c:\foo</code><br><code>c:,/,foo</code></span></td> -<td><code>c:\foo</code></td> -<td><span style="background-color: #CCFFCC"><code>c:\foo</code><br><code>c:/foo</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:\</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>\</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:\foo</code><br><code>foo</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:\</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:\foo</code><br><code>foo</code></span></td> -</tr> -<tr> -<td><code>c:foo\</code></td> -<td><span style="background-color: #CCFFCC"><code>c:foo\</code><br><code>c:,foo,.</code></span></td> -<td><code>c:foo\</code></td> -<td><span style="background-color: #CCFFCC"><code>c:foo\</code><br><code>c:foo/</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><font size="-1"><i>empty</i></font></td> -<td><span style="background-color: #CCFFCC"><code>c:foo\</code><br><code>foo\</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:foo</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:foo\</code><br><code>.</code></span></td> -</tr> -<tr> -<td><code>c:\foo\</code></td> -<td><span style="background-color: #CCFFCC"><code>c:\foo\</code><br><code>c:,/,foo,.</code></span></td> -<td><code>c:\foo\</code></td> -<td><span style="background-color: #CCFFCC"><code>c:\foo\</code><br><code>c:/foo/</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:\</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>\</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:\foo\</code><br><code>foo\</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:\foo</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:\foo\</code><br><code>.</code></span></td> -</tr> -<tr> -<td><code>c:\foo/</code></td> -<td><span style="background-color: #CCFFCC"><code>c:\foo,.</code><br><code>c:,/,foo,.</code></span></td> -<td><code>c:\foo/</code></td> -<td><span style="background-color: #CCFFCC"><code>c:\foo/</code><br><code>c:/foo/</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:\</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>\</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:\foo/</code><br><code>foo/</code></span></td> -<td><code>c:\foo</code></td> -<td><code>.</code></td> -</tr> -<tr> -<td><code>c:/foo\bar</code></td> -<td><span style="background-color: #CCFFCC"><code>c:,foo\bar</code><br><code>c:,/,foo,bar</code></span></td> -<td><code>c:/foo\bar</code></td> -<td><span style="background-color: #CCFFCC"><code>c:/foo\bar</code><br><code>c:/foo/bar</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:/</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>/</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:/foo\bar</code><br><code>foo\bar</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:</code><br><code>c:/foo</code></span></td> -<td><span style="background-color: #CCFFCC"><code>foo\bar</code><br><code>bar</code></span></td> -</tr> -</table> -<h2><a name="long-path-warning"></a>Warning: Long paths on Windows and the -extended-length <b>\\?\ </b>prefix</h2> -<p>The Microsoft Windows "Maximum Path Length Limitation" specifies:</p> -<blockquote> -<p>In the Windows API (with some exceptions ...), the maximum length for a path -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>"\\?\" prefix</b>. For -example, "\\?\D:\<em>very long path</em>". -<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 -prefixes. But some won't work, because to the limitations imposed by Windows. -Read the following cautions carefully!</p> -<h3>Cautions for paths with extended-length prefixes</h3> -<ul> - <li>Individual components of a path are still are limited to whatever is - supported for the particular filesystem, commonly 255 characters.</li> - <li>Only backslashes only are acceptable as directory separators. Slashes are - not treated as separators.</li> - <li>All paths must be absolute - relative paths are not allowed.</li> - <li>Once an absolute path grows beyond 260 characters, it is essentially - poisoned and all operations must use extended-length prefixes. So even a - simple operation like <code>create_directory("a")</code> will fail if the - absolute path of the resulting directory would exceed 260 characters.</li> - <li>Certain Boost.Filesystem functions that decompose their argument path and - then work on individual relative directories or files will not work properly - with extended-length prefix paths.</li> -</ul> -<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. The temp_directory_path function was -contributed by Jeff Flinn. David Svoboda suggested the canonical function and -provided psuedo-code.</p> -<p>Howard Hinnant and John Maddock reviewed a draft of the version 2 proposal, and -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> </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 Std 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><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 diff --git a/src/third_party/boost/libs/filesystem/v3/doc/release_history.html b/src/third_party/boost/libs/filesystem/v3/doc/release_history.html deleted file mode 100644 index daff2203b88..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/doc/release_history.html +++ /dev/null @@ -1,125 +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 Release History</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"> - <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 Release History</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> - <a href="index.htm">Library Home</a> <a href="reference.html">Reference</a> - <a href="tutorial.html">Tutorial</a> - <a href="faq.htm">FAQ</a> - <a href="portability_guide.htm">Portability</a> - <a href="v3.html">V3 Intro</a> - <a href="v3_design.html">V3 Design</a> - <a href="deprecated.html">Deprecated</a> - </td> - </tr> -</table> - -<h2>1.49.0</h2> -<ul> - <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/3714">#3714</a>, - Added test cases and fixes for class path errors when assignment or append - used self or portion of self as source. </li> - <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/4889">#4889</a>, - <a href="https://svn.boost.org/trac/boost/ticket/6320">#6320</a>, Locale codecvt_facet not thread safe on Windows. Move - Windows, Mac OS X, locale and codecvt facet back to namespace scope. POSIX - except OS X uses local static initialization (IE lazy) to ensure exceptions - are catchable if environmental variables are misconfigured and to avoid use of - locale("") if not actually used.</li> - <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5652">#5652</a>, - recursive_directory_iterator fails on cyclic symbolic links. Thanks to Daniel - Aarno for the patch.</li> - <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5653">#5653</a>, - recursive_directory_iterator(error_code) can still throw filesystem_error.</li> - <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5900">#5900</a>, directory_iterator - access violation on Windows if error is thrown. Thanks to Andreas Eckleder for the patch.</li> - <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5900#comment:2">#5900 - comment 2</a>, a bug in director_iterator construction with error_code argument that - caused increment to be called without the ec argument being passed.</li> - <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5900">#5989</a> by cleaning up test suite path_test.cpp code even - though the ticket itself was not a defect, and clarifying docs; iteration over a path yields - generic format.</li> - <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5592">#5592</a>, Change Windows codecvt processing from CP_THREAD_ACP to CP_ACP.</li> - <li>Operations function fixes for PGI compiler, thanks to Noel Belcourt.</li> - <li>Relax permissions test to reflect reality, particularly on the Sandia test - platforms.</li> -</ul> - -<h2>1.48.0</h2> -<ul> - <li>Added operational function <a href="reference.html#canonical">canonical()</a>, - suggested by David Svoboda, who also provided pseudo-code.</li> - <li>Added <a href="reference.html#hash_value">hash_value()</a> function for - paths. (Daniel James)</li> - <li>Fix path inserter problem (<a href="https://svn.boost.org/trac/boost/ticket/5764">#5764</a>) - reported for QNX6.3.2 host (gcc-3.3.5)</li> - <li>Fix problem of locale("") exception being thrown before main() starts on - poorly configured (e.g. LANG="bad name") POSIX systems. Resolves the most - serious aspect of tickets - <a href="https://svn.boost.org/trac/boost/ticket/4688">#4688</a>, - <a href="https://svn.boost.org/trac/boost/ticket/5100">#5100</a>, - <a href="https://svn.boost.org/trac/boost/ticket/5289">#5289</a>.</li> -</ul> - -<h2>1.47.0</h2> -<ul> - <li>Program file_status.cpp added (V3). See boost-root/libs/filesystem/v3/example. - Useful both as an example and to explore how Boost.Filesystem treats various - status errors. Run "bjam" (NOT "bjam install") in the example directory - to install in example/bin.</li> -</ul> - -<h2>1.46.1</h2> - -<ul> - <li>Fix fstream problem for STLPort masquerading as Dinkumware (<a href="https://svn.boost.org/trac/boost/ticket/5217">#5217</a>).</li> -</ul> - -<h2>1.46.0</h2> -<ul> - <li>Version 3 of the library is now the default.</li> - <li>IBM vacpp: Workaround for compiler bug affecting iterator_facade. (<a href="https://svn.boost.org/trac/boost/ticket/4912">#4912</a>)</li> - <li>Verify, clarify, document that <boost/config/user.hpp> can be used to - specify BOOST_FILESYSTEM_VERSION. (<a href="https://svn.boost.org/trac/boost/ticket/4891">#4891</a>)</li> - <li>Replaced C-style assert with BOOST_ASSERT.</li> - <li>Undeprecated unique_path(). Instead, add a note mentioning the workaround - for lack of thread safety and possible change to cwd. unique_path() is just - too convenient to deprecate!</li> - <li>Cleared several GCC warnings.</li> - <li>Changed V2 code to use BOOST_THROW_EXCEPTION.</li> - <li>Windows: Fix status() to report non-symlink reparse point correctly.</li> - <li>Add <code>symlink_option</code> to <code>recursive_directory_iterator</code>, - allowing control over recursion into directory symlinks. Note that the default - is changed to not recurse into directory symlinks.</li> - <li><a href="reference.html">Reference</a> documentation cleanup, including - fixing missing and broken links, and adding missing functions.</li> - <li>Miscellaneous implementation code cleanup. </li> -</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> -<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"> -www.boost.org/LICENSE_1_0.txt</a></p>
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/doc/src/README b/src/third_party/boost/libs/filesystem/v3/doc/src/README deleted file mode 100644 index 7b2433e0e95..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/doc/src/README +++ /dev/null @@ -1,14 +0,0 @@ -This directory contains the source files used to generate the Filesystem library -reference documentation and the TR2 filesystem proposal. The generated HTML files -contain much common material that would be difficult to keep in sync if maintained -as separate files. - -Generation is performed by the Minimal Macro Processor, available from -https://github.com/Beman/mmp - ------------- - -Copyright Beman Dawes 2012 - -Distributed under the Boost Software Licence Version 1.0. -See http://www.boost.org/LICENSE_1_0.txt diff --git a/src/third_party/boost/libs/filesystem/v3/doc/src/boost_snippets.html b/src/third_party/boost/libs/filesystem/v3/doc/src/boost_snippets.html deleted file mode 100644 index 16851aaee3d..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/doc/src/boost_snippets.html +++ /dev/null @@ -1,124 +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="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> - <a href="release_history.html">Releases</a> - <a href="reference.html">Reference</a> - <a href="tutorial.html">Tutorial</a> - <a href="faq.htm">FAQ</a> - <a href="portability_guide.htm">Portability</a> - <a href="v3.html">V3 Intro</a> - <a href="v3_design.html">V3 Design</a> - <a href="deprecated.html">Deprecated</a> - </td> - </td> - </tr> -</table> - -<h1>Reference Documentation</h1> - -$endid - -$id wording_prefix= -<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> -$endid - -$id wording_suffix= -<h3><a name="File-streams">File streams</a> - -<a href="../../../../boost/filesystem/fstream.hpp"><boost/filesystem/fstream.hpp></a></h3> -<p>Replacements are provided for the file stream classes from the C++ standard -library's <code><fstream></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&</code> arguments -instead of <code> -const char*</code> arguments. There are no other differences in syntax or -semantics.</p> -<pre>$NAMESPACE_BEGIN; - template < class charT, class traits = std::char_traits<charT> > - class basic_filebuf : public std::basic_filebuf<charT,traits> - { - public: - basic_filebuf<charT,traits>* - open(const path& p, std::ios_base::openmode mode); - }; - - template < class charT, class traits = std::char_traits<charT> > - class basic_ifstream : public std::basic_ifstream<charT,traits> - { - public: - explicit basic_ifstream(const path& p, std::ios_base::openmode mode=std::ios_base::in) - void open(const path& p, std::ios_base::openmode mode=std::ios_base::in); - }; - - template < class charT, class traits = std::char_traits<charT> > - class basic_ofstream : public std::basic_ofstream<charT,traits> - { - public: - explicit basic_ofstream(const path& p, std::ios_base::openmode mode=std::ios_base::out); - void open(const path& p, std::ios_base::openmode mode=std::ios_base::out); - }; - - template < class charT, class traits = std::char_traits<charT> > - class basic_fstream : public std::basic_fstream<charT,traits> - { - public: - explicit basic_fstream(const path& p, - std::ios_base::openmode mode=std::ios_base::in | std::ios_base::out); - void open(const path& p, - std::ios_base::openmode mode=std::ios_base::in | std::ios_base::out); - }; - - typedef basic_filebuf<char> filebuf; - typedef basic_ifstream<char> ifstream; - typedef basic_ofstream<char> ofstream; - typedef basic_fstream<char> fstream; - - typedef basic_filebuf<wchar_t> wfilebuf; - typedef basic_ifstream<wchar_t> wifstream; - typedef basic_fstream<wchar_t> wfstream; - typedef basic_ofstream<wchar_t> wofstream; - -$NAMESPACE_END;</pre> - -$endid - -$id backmatter=> -<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 -->13 January 2012<!--webbot bot="Timestamp" endspan i-checksum="32267" --></font></p> - -$endid - -</body> - -</html>
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/doc/src/build.bat b/src/third_party/boost/libs/filesystem/v3/doc/src/build.bat deleted file mode 100644 index c787591e8e0..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v3/doc/src/source.html b/src/third_party/boost/libs/filesystem/v3/doc/src/source.html deleted file mode 100644 index 9f8dd782631..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/doc/src/source.html +++ /dev/null @@ -1,3562 +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> -$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> -<style type="text/css"> -$include "../../../../../doc/src/minimal.css" -</style> -</head> - -<body> -$snippet frontmatter "$SNIPPET_FILE;" - -<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="33%" valign="top"><a href="#Introduction">Introduction</a><br> - <a href="#Definitions">Definitions</a><br> - <a href="#Conformance">Conformance</a><br> - <a href="#Header-filesystem-synopsis"> - Header <code><$HEADER;></code> synopsis</a><br> - <a href="#Error-reporting">Error reporting</a><br> - <a href="#class-path">Class <code>path</code></a><br> - <a href="#path-Conversions"><code>path</code> conversions</a><br> - <a href="#path-Conversions-to-native-format"><code>path</code> - conversions to native format</a><br> - <a href="#path-Conversions-to-generic-format"><code>path</code> - conversions to generic format</a><br> - <a href="#path-Encoding-conversions"><code>path</code> - encoding conversions</a><br> - <a href="#path-Requirements"><code>path</code> requirements</a><br> - <a href="#path-constructors"><code>path</code> constructors</a><br> - <a href="#path-assignments"><code>path</code> assignments</a><br> - <a href="#path-appends"><code>path</code> appends</a><br> - <a href="#path-modifiers"><code>path</code> modifiers</a><br> - <a href="#path-native-format-observers"><code>path</code> native - format observers</a><br> - <a href="#path-generic-format-observers"><code>path</code> generic - format observers</a><br> - <a href="#path-decomposition"><code>path</code> decomposition</a><br> - <a href="#path-query"><code>path</code> query</a><br> - <a href="#path-iterators"><code>path</code> iterators</a><br> - <a href="#path-deprecated-functions"><code>path</code> deprecated functions</a><br> - <a href="#path-non-member-functions"><code>path</code> non-member functions</a><br> - <a href="#path-inserter-extractor"><code>path</code> inserters and extractors</a><br> - <a href="#Class-filesystem_error">Class <code>filesystem_error</code></a><br> - <a href="#filesystem_error-members"><code>filesystem_error</code> - constructors</a><br> - <code>f</code><a href="#filesystem_error-path1"><code>ilesystem_error</code> path1</a><br> - <a href="#filesystem_error-path2"><code>filesystem_error</code> path2</a><br> - <a href="#filesystem_error-what"><code>filesystem_error</code><code> - </code>what</a></td> - <td width="33%" valign="top"> - <a href="#Enum-file_type">Enum <code>file_type</code></a><br> - <a href="#Enum-perms">Enum <code>perms</code></a><br> - <a href="#file_status">Class - <code>file_status</code></a><br> - - <a href="#file_status"> - <code>file_status</code></a><a href="#file_status-constructors"> constructors</a><br> - <code><a href="#file_status-modifiers">file_status-modifiers</a></code><a href="#directory_entry-observers"> observers</a><br> - <code><a href="#file_status-observers">file_status-observers</a></code><a href="#directory_entry-modifiers"> modifiers</a><br> -<a href="#Class-directory_entry">Class <code>directory_entry</code></a><br> - -<a href="#directory_entry-constructors"><code>directory_entry</code> constructors</a><br> - <a href="#directory_entry-observers"><code>directory_entry</code> observers</a><br> - <a href="#directory_entry-modifiers"><code>directory_entry</code> modifiers</a><br> -<a href="#Class-directory_iterator">Class <code>directory_iterator</code></a><br> - <a href="#directory_iterator-members"><code>directory_iterator</code> - members</a><br> -<a href="#Class-recursive_directory_iterator">Class <code>recursive_directory_iterator</code></a><br> - <a href="#Operational-functions"> - Operational functions</a><br> - <code>   <a href="#absolute">absolute</a><br> - <a href="#canonical">canonical</a><br> - <a href="#copy">copy</a><br> - <a href="#copy_directory">copy_directory</a><br> - <a href="#copy_file">copy_file</a><br> - <a href="#copy_symlink">copy_symlink</a><br> -   <a href="#create_directories">create_directories</a><br> -   <a href="#create_directory">create_directory</a><br> -   <a href="#create_hard_link">create_hard_link</a><br> -   <a href="#create_symlink">create_symlink</a><br> -   <a href="#current_path">current_path</a><br> -   <a href="#exists">exists</a><br> -   <a href="#equivalent">equivalent</a><br> -   <a href="#file_size">file_size</a><br> - <a href="#hard_link_count">hard_link_count</a><br> - <a href="#initial_path">initial_path</a><br> -   i<a href="#is_directory">s_directory</a><br> -   <a href="#is_empty">is_empty</a></code></td> - <td width="34%" valign="top"> - <code>   <a href="#is_other">is_other</a><br> -   <a href="#is_regular_file">is_regular_file</a><br> -   <a href="#is_symlink">is_symlink</a><br> -   <a href="#last_write_time">last_write_time</a><br> - <a href="#permissions">permissions</a><br> - <a href="#read_symlink">read_symlink</a><br> -   <a href="#remove">remove</a><br> -   <a href="#remove_all">remove_all</a><br> -   <a href="#rename">rename</a><br> - <a href="#resize_file">resize_file</a><br> -   <a href="#space">space</a><br> -   <a href="#status">status</a><br> -   <a href="#status_known">status_known</a><br> -   <a href="#symlink_status">symlink_status</a><br> -   <a href="#system_complete">system_complete</a><br> -   <a href="#temp_directory_path">temp_directory_path</a><br> - </code> <code> <a href="#unique_path">unique_path</a></code><br> - <a href="#File-streams">File streams</a><br> -<a href="#Path-decomposition-table">Path decomposition table</a><br> - <a href="#long-path-warning">Warning: Long paths on Windows and the - extended-length <b>\\?\ </b>prefix</a><br> -<a href="#Acknowledgements">Acknowledgements</a><br> -<a href="#References">References</a><br> - </td> - </tr> -</table> - -$snippet wording_prefix "$SNIPPET_FILE;" - -<p>This $WHAT; 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> -<blockquote> -<p>[<i>Note:</i> This constitutes an "as if" 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>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 "POSIX-compliant operating systems".</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> -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="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. 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> -and <code>..</code> 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>"</code>,<code> - *</code>,<code> :</code>,<code> <</code>,<code> ></code>,<code> ?</code>,<code> - \</code>,<code> /</code>, and<code> |</code> <i>--end note]</i></p> -</blockquote> -<p><b><i><a name="Path">Path</a>:</i></b> 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 -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. <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 -a starting location. The format is implementation defined. [<i>Note:</i> -Paths "." and ".." 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 -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 an implementation defined -native pathname format.</p> -<p><b><i><a name="generic-pathname-format">Generic pathname format:</a></i></b></p> -<blockquote> -<p><i>pathname:<br> - root-name<sub>opt</sub> -root-directory<sub>opt</sub> relative-path<sub>opt</sub></i></p> -<p><i>root-name:<br> - -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>":"</code> as a root-name identifying a disc drive. <i>--end note</i>]</p> - </blockquote> -</blockquote> -<p><i>root-directory:<br> - -directory-separator</i></p> -<p><i>relative-path:<br> - -filename<br> - relative-path -directory-separator<br> - relative-path -directory-separator filename</i></p> -<p><i>filename:<br> - name<br> - </i><code>"."</code><i><br> - </i><code> -".."</code></p> -<p><i>directory-separator:<br> - <code>"/"<br> - "/"</code> 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> -<code>"."</code> is considered to be a reference to the current directory. The -<i>filename</i> <code>".."</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> -</blockquote> -<p><b><i><a name="native-pathname-format">Native pathname format:</a></i></b> -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 -"dangling" symbolic link.<i> -- end note</i>]<i> </i></p> -</blockquote> -<p><b><i><a name="Race-condition">File system race</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>"."</code> -and <code>".."</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><$HEADER;></code> synopsis</a></h2> -<pre>$NAMESPACE_BEGIN; - class <a href="#class-path">path</a>; - - void swap(path& lhs, path& 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& p); - - bool operator==(const path& lhs, const path& rhs); - bool operator!=(const path& lhs, const path& rhs); - bool operator< (const path& lhs, const path& rhs); - bool operator<=(const path& lhs, const path& rhs); - bool operator> (const path& lhs, const path& rhs); - bool operator>=(const path& lhs, const path& rhs); - - path operator/ (const path& lhs, const path& rhs); - - std::ostream& operator<<( std::ostream& os, const path& p ); - std::wostream& operator<<( std::wostream& os, const path& p ); - std::istream& operator>>( std::istream& is, path& p ); - std::wistream& operator>>( std::wistream& is, path& 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>; - - class <a href="#Class-recursive_directory_iterator">recursive_directory_iterator</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 - }; - - class <a href="#file_status">file_status</a>; - - 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="copy_option">copy_option</a> - { - none - fail_if_exists = none, - overwrite_if_exists - }; - - enum class <a name="symlink_option">symlink_option</a> - { - none - no_recurse = none, - recurse - }; - - // <a href="#Operational-functions">operational functions</a> - - path <a href="#absolute">absolute</a>(const path& p, const path& base=current_path()); - - path <a href="#canonical">canonical</a>(const path& p, const path& base = current_path()); - path <a href="#canonical">canonical</a>(const path& p, system::error_code& ec); - path <a href="#canonical">canonical</a>(const path& p, const path& base, system::error_code& ec); - - void <a href="#copy">copy</a>(const path& from, const path& to); - void <a href="#copy">copy</a>(const path& from, const path& to, system::error_code& ec); - - void <a href="#create_directory">copy_directory</a>(const path& from, const path& to); - void <a href="#create_directory">copy_directory</a>(const path& from, const path& to, system::error_code& ec); - - void <a href="#copy_file">copy_file</a>(const path& from, const path& to); - void <a href="#copy_file">copy_file</a>(const path& from, const path& to, system::error_code& ec); - void <a href="#copy_file">copy_file</a>(const path& from, const path& to, <a href="#copy_option">copy_option</a> option); - void <a href="#copy_file">copy_file</a>(const path& from, const path& to, <a href="#copy_option">copy_option</a> option, - system::error_code& ec); - - void <a href="#copy_symlink">copy_symlink</a>(const path& existing_symlink, const path& new_symlink); - void <a href="#copy_symlink">copy_symlink</a>(const path& existing_symlink, const path& new_symlink, system::error_code& ec); - - bool <a href="#create_directories">create_directories</a>(const path& p); - bool <a href="#create_directories">create_directories</a>(const path& p, system::error_code& ec); - - bool <a href="#create_directory">create_directory</a>(const path& p); - bool <a href="#create_directory">create_directory</a>(const path& p, system::error_code& ec); - - void <a href="#create_directory_symlink">create_directory_symlink</a>(const path& to, const path& new_symlink); - void <a href="#create_directory_symlink">create_directory_symlink</a>(const path& to, const path& new_symlink, system::error_code& ec); - - void <a href="#create_hard_link">create_hard_link</a>(const path& to, const path& new_hard_link); - void <a href="#create_hard_link">create_hard_link</a>(const path& to, const path& new_hard_link, system::error_code& ec); - - void <a href="#create_symlink">create_symlink</a>(const path& to, const path& new_symlink); - void <a href="#create_symlink">create_symlink</a>(const path& to, const path& new_symlink, system::error_code& ec); - - path <a href="#current_path">current_path</a>(); - path <a href="#current_path">current_path</a>(system::error_code& ec); - void <a href="#current_path">current_path</a>(const path& p); - void <a href="#current_path">current_path</a>(const path& p, system::error_code& ec); - - bool <a href="#exists">exists</a>(file_status s) noexcept; - bool <a href="#exists">exists</a>(const path& p); - bool <a href="#exists">exists</a>(const path& p, system::error_code& ec) noexcept; - - bool <a href="#equivalent">equivalent</a>(const path& p1, const path& p2); - bool <a href="#equivalent">equivalent</a>(const path& p1, const path& p2, system::error_code& ec); - - uintmax_t <a href="#file_size">file_size</a>(const path& p); - uintmax_t <a href="#file_size">file_size</a>(const path& p, system::error_code& ec); - - uintmax_t <a href="#hard_link_count">hard_link_count</a>(const path& p); - uintmax_t <a href="#hard_link_count">hard_link_count</a>(const path& p, system::error_code& ec); - - const path& <a href="#initial_path">initial_path</a>(); - const path& <a href="#initial_path">initial_path</a>(<code>system::error_code& ec</code>); - - bool <a href="#is_directory">is_directory</a>(file_status s) noexcept; - bool <a href="#is_directory2">is_directory</a>(const path& p); - bool <a href="#is_directory2">is_directory</a>(const path& p, system::error_code& ec) noexcept; - - bool <a href="#is_empty">is_empty</a>(const path& p); - bool <a href="#is_empty">is_empty</a>(const path& p, system::error_code& ec); - - bool <a href="#is_other">is_other</a>(file_status s) noexcept; - bool <a href="#is_other2">is_other</a>(const path& p,); - bool <a href="#is_other2">is_other</a>(const path& p, system::error_code& ec) noexcept; - - 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& p); - bool i<a href="#is_regular_file2">s_regular_file</a>(const path& p, system::error_code& ec) noexcept; - - bool <a href="#is_symlink">is_symlink</a>(file_status s noexcept); - bool <a href="#is_symlink2">is_symlink</a>(const path& p); - bool <a href="#is_symlink2">is_symlink</a>(const path& p, system::error_code& ec) noexcept; - - std::time_t <a href="#last_write_time">last_write_time</a>(const path& p); - std::time_t <a href="#last_write_time">last_write_time</a>(const path& p, system::error_code& ec); - void <a href="#last_write_time2">last_write_time</a>(const path& p, const std::time_t new_time); - void <a href="#last_write_time2">last_write_time</a>(const path& p, const std::time_t new_time, system::error_code& ec); - - path <a href="#read_symlink">read_symlink</a>(const path& p); - path <a href="#read_symlink">read_symlink</a>(const path& p, system::error_code& ec); - - bool <a href="#remove">remove</a>(const path& p); - bool <a href="#remove">remove</a>(const path& p, system::error_code& ec); - - uintmax_t <a href="#remove_all">remove_all</a>(const path& p); - uintmax_t <a href="#remove_all">remove_all</a>(const path& p, system::error_code& ec); - - void <a href="#rename">rename</a>(const path& from, const path& to); - void <a href="#rename">rename</a>(const path& from, const path& to, system::error_code& ec); - - void <a href="#resize_file">resize_file</a>(const path& p, uintmax_t size); - void <a href="#resize_file2">resize_file</a>(const path& p, uintmax_t size, system::error_code& ec); - - <a href="#space_info">space_info</a> <a href="#space">space</a>(const path& p); - <a href="#space_info">space_info</a> <a href="#space">space</a>(const path& p, system::error_code& ec); - - <a href="#file_status">file_status</a> <a href="#status">status</a>(const path& p); - <a href="#file_status">file_status</a> <a href="#status">status</a>(const path& p, system::error_code& ec) noexcept; - - 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& p); - <a href="#file_status">file_status</a> <a href="#symlink_status">symlink_status</a>(const path& p, system::error_code& ec) noexcept; - - path <a href="#system_complete">system_complete</a>(const path& p); - path <a href="#system_complete">system_complete</a>(const path& p, system::error_code& ec); - - path <a href="#temp_directory_path">temp_directory_path</a>(); - path <a href="#temp_directory_path">temp_directory_path</a>(system::error_code& ec); - - path <a href="#unique_path">unique_path</a>(const path& model="%%%%-%%%%-%%%%-%%%%"); - path <a href="#unique_path">unique_path</a>(const path& model, system::error_code& ec); - -$NAMESPACE_END;</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> -<blockquote> -<p>[<i>Note:</i> This supports two common use cases:</p> -<ul> - <li>Uses where file system -errors are truly exceptional and indicate a serious failure. Throwing an - exception is the most appropriate response. This is the preferred default for - most everyday programming.<br> - </li> - <li>Uses where file system system errors are routine and do not necessarily represent - failure. Returning an error code is the most appropriate response. This allows - application specific error handling, including simply ignoring the error.</li> -</ul> - <p><i>--end note</i>]</p> -</blockquote> -<p>Functions <b>not</b> having an argument of type -<code>system::error_code&</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 - error that prevents the function from meeting its specifications, an exception - of type -<code>filesystem_error</code> is thrown.<br> - </li> - <li>Failure to allocate storage is reported by throwing an exception as described in the C++ standard, - 17.6.4.10 [res.on.exception.handling].<br> - </li> - <li>Destructors throw nothing.</li> - </ul> - <p>Functions having an argument of type -<code>system::error_code&</code> report errors as follows, unless otherwise - specified:</p> -<ul> - <li>If a call by the - implementation to an operating system or other underlying API results in an - error that prevents the function from meeting its specifications, the -<code>system::error_code&</code> argument is set as - appropriate appropriate for the specific error. Otherwise, <code>clear()</code> - is called on the -<code>system::error_code&</code> argument.<br> - </li> - <li>Failure to allocate storage is reported by - 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> -<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_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 std::basic_string<value_type> string_type; - typedef std::codecvt<wchar_t, char, std::mbstate_t> codecvt_type; - - // <a href="#path-constructors">constructors</a> and destructor - path(); - path(const path& p); - path(path&& p) noexcept; - - template <class <a href="#Source">Source</a>> - path(Source const& source, const codecvt_type& cvt=codecvt()); - - template <class <a href="#InputIterator">InputIterator</a>> - path(InputIterator begin, InputIterator end, const codecvt_type& cvt=codecvt()); - - ~path(); - - // <a href="#path-assignments">assignments</a> - path& operator=(const path& p); - path& operator=(path&& p) noexcept; - - template <class <a href="#Source">Source</a>> - path& operator=(Source const& source); - - template <class <a href="#Source">Source</a>> - path& assign(Source const& source, const codecvt_type& cvt) - - template <class <a href="#InputIterator">InputIterator</a>> - path& assign(InputIterator begin, InputIterator end, const codecvt_type& cvt=codecvt()); - - // <a href="#path-appends">appends</a> - path& operator/=(const path& p); - - template <class <a href="#Source">Source</a>> - path& operator/=(Source const& source); - - template <class <a href="#Source">Source</a>> - path& append(Source const& source, const codecvt_type& cvt); - - template <class <a href="#InputIterator">InputIterator</a>> - path& append(InputIterator begin, InputIterator end, const codecvt_type& cvt=codecvt()); - - // <a href="#path-modifiers">modifiers</a> - void <a href="#path-clear">clear</a>(); - path& <a href="#absolute">make_absolute</a>(const path& base); - path& <a href="#path-make_preferred">make_preferred</a>(); // POSIX: no effect. Windows: convert slashes to backslashes - path& <a href="#path-remove_filename">remove_filename</a>(); - path& <a href="#path-replace_extension">replace_extension</a>(const path& new_extension = path()); - void <a href="#path-swap">swap</a>(path& rhs); - - // <a href="#path-native-format-observers">native format observers</a> - const string_type& <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 <class String> - String <a href="#string-template">string</a>(const codecvt_type& cvt=codecvt()) const; // native format - - const string <a href="#string">string</a>(const codecvt_type& cvt=codecvt()) const; // native format - const wstring <a href="#wstring">wstring</a>(const codecvt_type& cvt=codecvt()) const; // ditto - const u16string <a href="#u16string">u16string</a>() const; // ditto - const u32string <a href="#u32wstring">u32string</a>() const; // ditto - - // <a href="#path-generic-format-observers">generic format observers</a> - template <class String> - String <a href="#generic_string-template">generic_string</a>() const; - - const string <a href="#generic_string">generic_string</a>(const codecvt_type& cvt=codecvt()) const; // generic format - const wstring <a href="#generic_wstring">generic_wstring</a>(const codecvt_type& 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-decomposition">decomposition</a> - path <a href="#path-root_name">root_name</a>() const; - path <a href="#path-root_directory">root_directory</a>() const; - path <a href="#path-root_path">root_path</a>() const; - path <a href="#path-relative_path">relative_path</a>() const; - path <a href="#path-parent_path">parent_path</a>() const; - path <a href="#path-filename">filename</a>() const; - path <a href="#path-stem">stem</a>() const; - path <a href="#path-extension">extension</a>() const; - - // <a href="#path-query">query</a> - bool <a href="#path-query">empty</a>() const; - bool <a href="#path-has_root_name">has_root_name</a>() const; - bool <a href="#path-has_root_directory">has_root_directory</a>() const; - bool <a href="#path-has_root_path">has_root_path</a>() const; - bool <a href="#path-has_relative_path">has_relative_path</a>() const; - bool <a href="#path-has_parent_path">has_parent_path</a>() const; - bool <a href="#path-has_filename">has_filename</a>() const; - bool <a href="#path-has_stem">has_stem</a>() const; - bool <a href="#path-has_extension">has_extension</a>() const; - bool <a href="#path-is_absolute">is_absolute</a>() const; - bool <a href="#path-is_relative">is_relative</a>() const; - - // <a href="#path-iterators">iterators</a> - class iterator; - typedef iterator const_iterator; - - 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& loc ); - static const codecvt_type & <a href="#path-codecvt">codecvt</a>(); - - private: - 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 -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&</code>, <code>const -wstring&</code>, <code>const u16string&</code>, or <code>const u32string&</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> -<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> - 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> -</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>"/cats/jane"</code> would considered a regular file -path, and have a native format of <code>"[CATS]JANE"</code>, while a -path constructed from <code>"/cats/jane/"</code> would be considered a -directory path, and have a native format of <code>"[CATS.JANE]"</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 -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> "All BSD system functions expect their string -parameters to be in UTF-8 encoding and nothing else." 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("")</code>. -[<i>Rationale:</i> ISO C specifies this as "the locale-specific native -environment", while POSIX says it "Specifies an implementation-defined native -environment." <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="Source">Source</a></code> are required to be one of:</p> -<ul> - <li>A container with a value type of <code>char</code>, <code> - wchar_t</code>, <code>char16_t</code>, or <code>char32_t</code>.</li> - <li>An iterator for a null terminated byte-string. 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 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> -</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> -<pre>template <class <a href="#Source">Source</a>> - path(Source const& source, const codecvt_type& cvt=codecvt());</pre> -<pre>template <class <a href="#InputIterator">InputIterator</a>> - path(InputIterator begin, InputIterator end, const codecvt_type& cvt=codecvt());</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 [<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-assignments"> <code> -<font size="4">path</font></code> assignments</a></h3> -<pre>template <class <a href="#Source">Source</a>> - path& operator=(Source const& source);</pre> -<pre>template <class <a href="#Source">Source</a>> - path& assign(Source const& source, const codecvt_type& cvt);</pre> -<pre>template <class <a href="#InputIterator">InputIterator</a>> - path& assign(InputIterator begin, InputIterator end, const codecvt_type& cvt=codecvt());</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> - <p> - <i>Returns: </i><code>*this</code></p> - <p> - <i>Remarks:</i> If the value type of [<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> -<pre>path& operator/=(const path& p);</pre> -<blockquote> - <p><i>Effects:</i></p> - <blockquote> - Appends the preferred directory separator to the contained pathname, 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> - </blockquote> - <p><i>Returns: </i><code>*this</code></p> -</blockquote> -<pre>template <class <a href="#Source">Source</a>> - path& operator/=(Source const & source);</pre> -<pre>template <class <a href="#Source">Source</a>> - path& append(Source const & source, const codecvt_type& cvt);</pre> -<pre>template <class <a href="#InputIterator">InputIterator</a>> - path& append(InputIterator begin, InputIterator end, const codecvt_type& cvt=codecvt());</pre> -<blockquote> - <p><i>Effects:</i></p> - <blockquote> - <p>Appends a native directory separator to the contained pathname, 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><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> - </blockquote> - <p><i>Remarks:</i> If the value type of [<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> -<blockquote> -<p><i>Postcondition:</i> <code>this->empty()</code> is true.</p> -</blockquote> -<pre>path& <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>Returns:</i> <code>*this</code></p> -</blockquote> - -<pre>path& <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 - implementation may be much more efficient than <code>*this = parent_path()</code> <i>-- end - note</i>]</p> -</blockquote> -<pre>path& <a name="path-replace_extension">replace_extension</a>(const path& 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>Returns:</i> <code>*this</code></p> -</blockquote> -<pre><code>void <a name="path-swap">swap</a>(path& rhs) noexcept;</code></pre> -<blockquote> - <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& <a name="native">native</a>() const noexcept;</pre> -<blockquote> -<p><i>Returns:</i> <code>pathname</code>.</p> -</blockquote> -<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> -</blockquote> -<pre>template <class String> -String <a name="string-template">string</a>(const codecvt_type& 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> -</blockquote> -<pre>const string <a name="string">string</a>(const codecvt_type& cvt=codecvt()) const; -const wstring <a name="wstring">wstring</a>(const codecvt_type& cvt=codecvt()) const; -const u16string <a name="u16string">u16string</a>() const; -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&</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> -<pre>template <class String> -String <a name="generic_string-template">generic_string</a>(const codecvt_type& 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> -</blockquote> -<pre>const string <a name="generic_string">generic_string</a>(const codecvt_type& cvt=codecvt()) const; -const wstring <a name="generic_wstring">generic_wstring</a>(const codecvt_type& cvt=codecvt()) const; -const u16string <a name="generic_u16string">generic_u16string</a>() const; -const u32wstring <a name="generic_u32wstring">generic_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 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&</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 -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> -</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>If <i>root-directory</i> is composed of <i>slash name</i>, <i>slash</i> is -excluded from the returned string.</p> -</blockquote> -<pre>path <a name="path-root_path">root_path</a>() const;</pre> -<blockquote> - <p><i>Returns:</i> <code>root_name() / root_directory()</code></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 -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> -</blockquote> -<pre>path <a name="path-filename">filename</a>() const;</pre> -<blockquote> - <p><i>Returns:</i> <code>empty() ? path() : *--end()</code></p> - <p>[<i>Example:</i></p> - <blockquote> - <pre><code>std::cout << path("/foo/bar.txt").filename();</code> // outputs "<code>bar.txt</code>"</pre> - </blockquote> - <p> <i>--end example</i>]</p> -</blockquote> -<pre>path <a name="path-stem">stem</a>(const path& p) const;</pre> -<blockquote> - <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> - <p>[<i>Example:</i></p> - <blockquote> - <pre><code>std::cout << path("/foo/bar.txt").stem();</code> // outputs "<code>bar</code>" -path p = "foo.bar.baz.tar"; -for (; !p.extension().empty(); p = p.stem()) - std::cout << p.extension() << '\n'; - // outputs: .tar - // .baz - // .bar</pre> - </blockquote> - <p> <i>--end example</i>]</p> -</blockquote> -<pre>path <a name="path-extension">extension</a>(const path& p) const;</pre> -<blockquote> - <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> - <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> - <p>[<i>Example:</i></p> - <blockquote> - <pre><code>std::cout << path("/foo/bar.txt").extension(); //</code> outputs "<code>.txt</code>"</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. <i>-- end note</i>]</p> -</blockquote> -<h3> <a name="path-query"> <code><font size="4">path</font></code> query</a></h3> -<pre>bool <a name="path-empty">empty</a>() const;</pre> -<blockquote> - <p><i>Returns:</i> <code>m_pathname.empty()</code>.</p> -</blockquote> -<pre>bool <a name="path-has_root_path">has_root_path</a>() const;</pre> -<blockquote> - <p><i>Returns:</i> <code>!<a href="#path-root_path">root_path</a>().empty()</code></p> -</blockquote> -<pre>bool <a name="path-has_root_name">has_root_name</a>() const;</pre> -<blockquote> - <p><i>Returns:</i> <code>!<a href="#path-root_name">root_name</a>().empty()</code></p> -</blockquote> -<pre>bool <a name="path-has_root_directory">has_root_directory</a>() const;</pre> -<blockquote> - <p><i>Returns:</i> <code>!<a href="#path-root_directory">root_directory</a>().empty()</code></p> -</blockquote> -<pre>bool <a name="path-has_relative_path">has_relative_path</a>() const;</pre> -<blockquote> - <p><i>Returns:</i> <code>!<a href="#path-has_relative_path">relative_path</a>().empty()</code></p> -</blockquote> -<pre>bool <a name="path-has_parent_path">has_parent_path</a>() const;</pre> -<blockquote> - <p><i>Returns:</i> <code>!<a href="#path-parent_path">parent_path</a>().empty()</code></p> -</blockquote> -<pre>bool <a name="path-has_filename">has_filename</a>() const;</pre> -<blockquote> - <p><i>Returns:</i> <code>!<a href="#path-filename">filename</a>().empty()</code></p> -</blockquote> -<pre>bool <a name="path-has_stem">has_stem</a>() const;</pre> -<blockquote> - <p><i>Returns:</i> <code>!<a href="#path-stem">stem</a>().empty()</code></p> -</blockquote> -<pre>bool <a name="path-has_extension">has_extension</a>() const;</pre> -<blockquote> - <p><i>Returns:</i> <code>!<a href="#path-has_extension">extension</a>().empty()</code></p> -</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("/foo").is_absolute()</code> returns <code>true</code>. On Windows, <code> - path("/foo").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> - <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> -<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> - <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>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> - <h3><a name="path_encoding"><code><font size="4"> path</font></code> encoding</a> conversion</h3> - <pre>static std::locale <a name="path-imbue">imbue</a>(const std::locale& 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> -</blockquote> -<pre>static const codecvt_type& <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> -</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 -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> -<blockquote> - <pre>path& remove_leaf() { return remove_filename(); } -path leaf() const { return filename(); } -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> -<blockquote> - <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> - -$endif - -<h3> <a name="path-non-member-functions"> <code><font size="4">path</font></code> -non-member functions</a></h3> -<pre>void swap( path& lhs, path& 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> -<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 - 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> - <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 - other, then the shorter sequence is lexicographically less than the longer - 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 && first2 != last2 ; ++first1, ++first2) { - if (first1->native() < first2->native()) return true; - if (first2->native() < first1->native()) return false; - } - return first1 == last1 && 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> -</blockquote> -<pre>std::size_t <a name="hash_value">hash_value</a> (const path& 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> -</blockquote> -<pre>bool operator< (const path& lhs, const path& rhs);</pre> -<blockquote> - <p><i>Returns:</i> <code>return lexicographical_compare(lhs.begin(), lhs.end(), - rhs.begin(), rhs.end())</code>.</p> -</blockquote> -<pre>bool operator<=(const path& lhs, const path& rhs);</pre> -<blockquote> - <p><i>Returns:</i> <code>!(rhs < lhs)</code>.</p> -</blockquote> -<pre>bool operator> (const path& lhs, const path& rhs);</pre> -<blockquote> - <p><i>Returns:</i> <code>rhs < lhs</code>.</p> -</blockquote> -<pre>bool operator>=(const path& lhs, const path& rhs);</pre> -<blockquote> - <p><i>Returns:</i> <code>!(lhs < rhs)</code>.</p> -</blockquote> -<pre>bool operator==(const path& lhs, const path& rhs);</pre> -<blockquote> - <p><i>Returns:</i> <code>!(lhs < rhs) && !(rhs < 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("foo") == "bar"</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("foo", "bar")</code> will be <code>true</code> - when both paths resolve to the same file.</p> - <p>Programmers wishing to determine if two paths are "the same" must decide if - "the same" means "the same representation" or "resolve to the same actual - file", and choose the appropriate function accordingly. <i> - -- end note</i>]</p> -</blockquote> -<pre>bool operator!=(const path& lhs, const path& rhs);</pre> -<blockquote> - <p><i>Returns:</i> <code>!(lhs == rhs)</code>.</p> -</blockquote> -<pre>path operator/ (const path& lhs, const path& rhs);</pre> -<blockquote> - <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> -<p> The inserter and extractor delimit the string with double-quotes (<code>"</code>) -to ensure that paths with embedded spaces will round trip correctly. Ampersand (<code>&</code>) -is used as an escape character, so the path can itself contain double quotes.</p> -<pre>template <class Char, class Traits> -std::basic_ostream<Char, Traits>& operator<<(std::basic_ostream<Char, Traits>& os, - const path& p) -</pre> -<blockquote> - <p><i>Effects:</i> - <code>os << <a href="../../../io/doc/quoted_manip.html"> - boost::io::quoted</a>(p.string<std::basic_string<Char>>(), static_cast<Char>('&'));</code></p> - <p><i>Returns:</i> - <code>os</code></p> -</blockquote> -<pre>template <class Char, class Traits> -inline std::basic_istream<Char, Traits>& operator>>(std::basic_istream<Char, Traits>& is, - path& p) -</pre> -<blockquote> - <p><i>Effects: </i> - <code> std::basic_string<Char> str;<br> - is >> - <a href="../../../io/doc/quoted_manip.html">boost::io::quoted</a>(str, - static_cast<Char>('&'));<br> - p = str;</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 - { - public: - filesystem_error(); - filesystem_error(const filesystem_error&); - <a href="#filesystem_error-2-arg">filesystem_error</a>(const std::string& what_arg, - system::error_code ec); - <a href="#filesystem_error-3-arg">filesystem_error</a>(const std::string& what_arg, - const path& p1, system::error_code ec); - <a href="#filesystem_error-4-arg">filesystem_error</a>(const std::string& what_arg, - const path& p1, const path& p2, system::error_code ec); - - filesystem_error& filesystem_error(const filesystem_error&); - ~filesystem_error(); - - filesystem_error& operator=(const filesystem_error&); - - const path& <a href="#filesystem_error-path1">path1</a>() const; - const path& <a href="#filesystem_error-path2">path2</a>() const; - - 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 -objects thrown as exceptions to report file system errors from functions described in this -$WHAT;.</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& what_arg, error_code ec);</pre> -<blockquote> - <p><i>Postcondition:</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> - runtime_error::what()</code></td> - <td width="82%" bgcolor="#FFFFFF"> - <code><i>what_arg</i>.c_str()</code></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><a name="filesystem_error-3-arg">filesystem_error</a>(const std::string& what_arg, const path_type& p1, error_code ec);</pre> -<blockquote> - <p><i>Postcondition:</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> - runtime_error::what()</code></td> - <td width="82%"> - <code><i>what_arg</i>.c_str()</code></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%">Reference to stored copy of - <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><a name="filesystem_error-4-arg">filesystem_error</a>(const std::string& what_arg, const path_type& p1, const path_type& p2, error_code ec);</pre> -<blockquote> - <p><i>Postcondition:</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> - runtime_error::what()</code></td> - <td width="82%"> - <u> - <code><i>w</i></code></u><code><i>hat_arg</i>.c_str()</code></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%">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> - </tr> - </table> -</blockquote> -<pre>const path& <a name="filesystem_error-path1">path1</a>() 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& <a name="filesystem_error-path2">path2</a>() 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* <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 - 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> -<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> - <td><b>Constant Name</b></td> - <td><b>Meaning</b></td> - </tr> - <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> - </tr> - <tr> - <td><code>file_not_found</code></td> - <td>The file could not be found</td> - </tr> - <tr> - <td><code>regular_file</code></td> - <td>Regular file</td> - </tr> - <tr> - <td><code>directory_file</code></td> - <td>Directory file</td> - </tr> - <tr> - <td><code>symlink_file</code></td> - <td>Symbolic link file</td> - </tr> - <tr> - <td><code>block_file</code></td> - <td>Block special file</td> - </tr> - <tr> - <td><code>character_file</code></td> - <td>Character special file</td> - </tr> - <tr> - <td><code>fifo_file</code></td> - <td>FIFO or pipe file</td> - </tr> - <tr> - <td><code>socket_file</code></td> - <td>Socket file</td> - </tr> - <tr> - <td><code>type_unknown</code></td> - <td>The file exists, but it is of a system specific type not covered by any - 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 -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> -</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> - 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> -</tr> -<tr><td><code>owner_read</code></td><td><code>0400</code></td><td> <code>S_IRUSR</code></td> - <td> Read permission, owner</td> -</tr> -<tr><td><code>owner_write</code></td><td><code>0200</code></td><td> <code>S_IWUSR</code></td> - <td> Write permission, owner</td> -</tr> -<tr><td><code>owner_exe</code></td><td><code>0100</code></td><td> <code>S_IXUSR</code></td> - <td> Execute/search permission, owner</td> -</tr> -<tr><td><code>owner_all</code></td><td><code>0700</code></td><td> <code>S_IRWXU</code></td> - <td> Read, write, execute/search by owner; <code>owner_read | owner_write | owner_exe</code></td> -</tr> -<tr><td><code>group_read</code></td><td><code>040</code></td><td> <code>S_IRGRP</code></td> - <td> Read permission, group</td> -</tr> -<tr><td><code>group_write</code></td><td><code>020</code></td><td> <code>S_IWGRP</code></td> - <td> Write permission, group</td> -</tr> -<tr><td><code>group_exe</code></td><td><code>010</code></td><td> <code>S_IXGRP</code></td> - <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> -</tr> -<tr><td><code>others_read</code></td><td><code>04</code></td><td> <code>S_IROTH</code></td> - <td> Read permission, others</td> -</tr> -<tr><td><code>others_write</code></td><td><code>02</code></td><td> <code>S_IWOTH</code></td> - <td> Write permission, others</td> -</tr> -<tr><td><code>others_exe</code></td><td><code>01</code></td><td> <code>S_IXOTH</code></td> - <td> Execute/search permission, others</td> -</tr> -<tr><td><code>others_all</code></td><td><code>07</code></td><td> <code>S_IRWXO</code></td> - <td>Read, write, execute/search by others; <code>others_read | others_write | others_exe</code></td> -</tr> -<tr><td><code>all_all</code></td><td><code>0777</code></td><td> </td><td><code>owner_all | group_all | others_all</code></td> -</tr> -<tr><td><code>set_uid_on_exe</code></td><td><code>04000</code></td><td> <code>S_ISUID</code></td> - <td> Set-user-ID on execution</td> -</tr> -<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> -<tr><td><code><a name="perms_mask">perms_mask</a></code></td><td><code>07777</code></td><td> </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> - The permissions are not known, such as when a <code>file_status</code> object - 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 - file's current bits</td> -</tr> -<tr><td><code>remove_perms</code></td><td><code>0x2000</code></td><td></td><td> - <code>permissions()</code> removes the argument permission bits from the - 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> -</tr> - -</table> -<h3><a name="file_status">Class file_status</a></h3> -<pre>$NAMESPACE_BEGIN; - class file_status - { - public: - - // <a href="#file_status-constructors">constructors</a> - file_status() noexcept; - explicit file_status(<a href="#file_type">file_type</a> ft, <a href="#Enum-perms">perms</a> prms = perms_not_known) noexcept; - - // compiler generated - file_status(const file_status&) noexcept; - file_status& operator=(const file_status&) noexcept; - ~file_status() noexcept; - - // <a href="#file_status-observers">observers</a> - <a href="#file_type">file_type</a> type() const noexcept; - <a href="#Enum-perms">perms</a> permissions() const noexcept; - - // <a href="#file_status-modifiers">modifiers</a> - void type(<a href="#file_type">file_type</a> ft) noexcept; - void permissions(<a href="#Enum-perms">perms</a> prms) noexcept; - }; -$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> -<pre>explicit file_status() noexcept;</pre> -<blockquote> - <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> -</blockquote> - <h4 dir="ltr"><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> -</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> -</blockquote> -<h4 dir="ltr"><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> -</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> -</blockquote> -<h3><a name="Class-directory_entry">Class <code>directory_entry</code></a></h3> -<div dir="ltr"> -<pre>$NAMESPACE_BEGIN; - class directory_entry - { - public: - - // <a href="#directory_entry-constructors">constructors</a> and destructor - directory_entry(); - directory_entry(const directory_entry&); - explicit directory_entry(const path_type& p, file_status st=file_status(), - file_status symlink_st=file_status()); - ~directory_entry(); - - // <a href="#directory_entry-modifiers">modifiers</a> - directory_entry& operator=(const directory_entry&); - void assign(const path_type& p, file_status st=file_status(), - file_status symlink_st=file_status()); - void replace_filename(const path& p, file_status st=file_status(), - file_status symlink_st=file_status()); - - // <a href="#directory_entry-observers">observers</a> - const path& path() const; - file_status status() const; - file_status status(system::error_code& ec) const; - file_status symlink_status() const; - file_status symlink_status(system::error_code& ec) const; - - bool operator< (const directory_entry& rhs); - bool operator==(const directory_entry& rhs); - bool operator!=(const directory_entry& rhs); - bool operator< (const directory_entry& rhs); - bool operator<=(const directory_entry& rhs); - bool operator> (const directory_entry& rhs); - bool operator>=(const directory_entry& rhs); - private: - path_type m_path; // for exposition only - mutable file_status m_status; // for exposition only; stat()-like - mutable file_status m_symlink_status; // for exposition only; lstat()-like - }; - -$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> -<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 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> -<pre>directory_entry();</pre> -<blockquote> - <p><i>Postcondition:</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 directory_entry(const path_type& p, file_status st=file_status(), file_status symlink_st=file_status());</pre> -<blockquote> - <p><i>Postcondition:</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="directory_entry-modifiers"> <code>directory_entry </code>modifiers</a></h4> -<pre>void assign(const path_type& p, file_status st=file_status(), file_status symlink_st=file_status());</pre> -<blockquote> - <p><i>Postcondition:</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 path& p, file_status st=file_status(), file_status symlink_st=file_status());</pre> -<blockquote> - <p><i>Postcondition:</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="directory_entry-observers"> <code>directory_entry</code> observers</a></h4> -<pre>const path& path() const;</pre> -<blockquote> - <p><i>Returns:</i> <code>m_path</code></p> -</blockquote> -<pre>file_status status() const; -file_status status(system::error_code& ec) const;</pre> -<blockquote> -<p><i>Effects:</i> -As if,</p> - <blockquote> - <pre>if ( !status_known( m_status ) ) -{ - if ( status_known(m_symlink_status) && !is_symlink(m_symlink_status) ) - { m_status = m_symlink_status; } - else { m_status = status(m_path<i>[, ec]</i>); } -}</pre> - </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> - -</blockquote> -<pre>file_status symlink_status() const; -file_status symlink_status(system::error_code& ec) const;</pre> -<blockquote> -<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>Throws:</i> As specified in - <a href="#Error-reporting"> - Error reporting</a>.</p> - -</blockquote> -<pre>bool operator==(const directory_entry& rhs);</pre> -<blockquote> - <p><i>Returns:</i> <code>m_path == - rhs.m_path</code>.</p> -</blockquote> -<pre>bool operator!=(const directory_entry& rhs);</pre> -<blockquote> - <p><i>Returns:</i> <code>m_path != - rhs.m_path</code>.</p> -</blockquote> -<pre>bool operator< (const directory_entry& rhs);</pre> -<blockquote> - <p><i>Returns:</i> <code>m_path < - rhs.m_path</code>.</p> -</blockquote> -<pre>bool operator<=(const directory_entry& rhs);</pre> -<blockquote> - <p><i>Returns:</i> <code>m_path <= - rhs.m_path</code>.</p> -</blockquote> -<pre>bool operator> (const directory_entry& rhs);</pre> -<blockquote> - <p><i>Returns:</i> <code>m_path > - rhs.m_path</code>.</p> -</blockquote> -<pre>bool operator>=(const directory_entry& rhs);</pre> -<blockquote> - <p><i>Returns:</i> <code>m_path >= - 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; - class directory_iterator - { - public: - // <a href="#directory_iterator-members">member functions</a> - - directory_iterator() noexcept; // creates the "end" iterator - directory_iterator(const directory_iterator&); - explicit directory_iterator(const path& p); - directory_iterator(const path& p, system::error_code& ec); - ~directory_iterator(); - - directory_iterator& operator=(const directory_iterator&); - - directory_iterator& operator++(); - directory_iterator& increment(system::error_code& ec); - - // other members as required by - // C++ Std, 24.1.1 Input iterators [input.iterators] - }; - -$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> -<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&</code> is returned. The result of -<code>operator-></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> -<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>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>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>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="directory_iterator-members"><code>directory_iterator</code> members</a></h4> - -<p><code><a name="directory_iterator-default-ctor">directory_iterator</a>() -noexcept;</code></p> - -<blockquote> - -<p><i>Effects:</i> Constructs the end iterator.</p> - -</blockquote> - -<pre><code>explicit <a name="directory_iterator-ctor-path">directory_iterator</a>(</code>const path& p<code>); -directory_iterator(</code>const path& p, system::error_code& ec<code>);</code></pre> -<blockquote> - -<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>Note:</i> To iterate over the current directory, use <code> -directory_iterator(".")</code> rather than <code>directory_iterator("")</code>. -<i>-- end note</i>]</p> -</blockquote> -<pre>directory_iterator& <a name="directory_iterator-increment">operator++</a>(); -directory_iterator& increment(system::error_code& ec);</pre> -<blockquote> - -<p><i>Effects:</i> As specified by the C++ Standard, 24.1.1 Input iterators [input.iterators]</p> - -<p><i>Returns:</i> <code>*this</code>.</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; - class recursive_directory_iterator : - public iterator<input_iterator_tag, directory_entry> - { - public: - - // constructors and destructor - recursive_directory_iterator() noexcept; - recursive_directory_iterator(const recursive_directory_iterator&); - explicit recursive_directory_iterator(const path& p, - <a href="#symlink_option">symlink_option</a> opt = symlink_option::none); - recursive_directory_iterator(const path& p, - <a href="#symlink_option">symlink_option</a> opt, system::error_code& ec); - recursive_directory_iterator(const path& p, system::error_code& ec); - ~recursive_directory_iterator(); - - // observers - int level() const noexcept; - bool no_push<code>_pending</code>() const noexcept; - - // modifiers - recursive_directory_iterator& operator=(const recursive_directory_iterator&); - - recursive_directory_iterator& operator++(); - recursive_directory_iterator& increment(system::error_code& ec); - - void pop(); - void no_push(bool value=true); - - // other members as required by - // C++ Std, Input iterators [input.iterators] - - private: -<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_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> -<ul> - <li>Incrementing a <code>recursive_directory_iterator</code> pointing to a - directory causes that directory itself to be iterated ovee, as specified by - the <code>operator++</code> and <code>increment</code> functions.<br> - </li> - <li>When a <code>recursive_directory_iterator</code> 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 of the parent directory continues.</li> -</ul> -<pre>recursive_directory_iterator() noexcept;</pre> -<blockquote> - -<p><i>Effects:</i> Constructs the end iterator.</p> - -</blockquote> - -<pre>explicit recursive_directory_iterator(const path& p, <a href="#symlink_option">symlink_option</a> opt = symlink_option::none); -recursive_directory_iterator(const path& p, <a href="#symlink_option">symlink_option</a> opt, system::error_code& ec); -recursive_<code>directory_iterator(</code>const path& p, system::error_code& ec<code>);</code></pre> -<blockquote> - -<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 dir="ltr"><i>Postcondition: </i>Unless the end iterator was constructed,<i> </i> -<code>level() == 0 && no_push_pending() == false && 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>Note:</i> To iterate over the current directory, use <code>recursive_directory_iterator(".")</code> rather than -<code>recursive_directory_iterator("")</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> -</blockquote> -<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> -</blockquote> -<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> -</blockquote> -<pre><code>recursive_directory_iterator</code>& <a name="recursive_directory_iterator-increment">operator++</a>(); -recursive_directory_iterator& increment(system::error_code& ec);</pre> -<blockquote> - -<p><i>Effects:</i> As specified by the C++ Standard, 24.1.1 Input iterators [input.iterators], -except:</p> - -<ul> - <li dir="ltr"> - -<p dir="ltr">if <code>!no_push_pending() && is_directory(this->status()) -&& (!is_symlink(this->symlink_status()) || (m_options -& symlink_option::recurse) != 0)</code> then <code>m_level</code> -is incremented and directory <code>(*this)->path()</code> is recursively iterated into.<br> - </p> - - </li> - <li>if there are no more directory entries at this level then <code>m_level</code> -is decremented and iteration of the parent directory resumes.</li> -</ul> - -<p><i>Postcondition:</i> <code>no_push_pending() == false</code>.</p> - -<p><i>Returns:</i> <code>*this</code>.</p> - -<p><i>Throws:</i> As specified in - <a href="#Error-reporting"> - Error reporting</a>.</p> - -</blockquote> -<pre>void pop();</pre> -<blockquote> - <p><i>Requires:</i> <code>*this != recursive_directory_iterator()</code>.</p> - <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> -</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>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> -<p>Operational functions query or modify files, including directories, in external -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 -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. 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& p, const path& base=current_path());</pre> - <blockquote> - <p><i>Returns:</i> A <a href="#Absolute-path">absolute path</a> composed according to the - following table</p> - <table border="1" cellpadding="5" cellspacing="0" bordercolor="#111111" style="border-collapse: collapse"> - <tr> - <td align="center"> </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>return p</code></td> - <td align="center"><code>return p.root_name() / - absolute(base).root_directory()<br> - / absolute(base).relative_path() / p.relative_path()</code></td> - </tr> - <tr> - <td align="center"><b><code>!p.has_root_name()</code></b></td> - <td align="center"><code>return absolute(base).root_name()<br> - / p</code></td> - <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>Throws:</i> If <code>base.is_absolute()</code> is true, throws only if - memory allocation fails.</p> -</blockquote> -<pre>path <a name="canonical">canonical</a>(const path& p, const path& base = current_path()); -path canonical(const path& p, system::error_code& ec); -path canonical(const path& p, const path& base, system::error_code& ec);</pre> -<blockquote> -<p><i>Overview:</i> Converts <code>p</code>, which must exist, to an absolute -path that has no symbolic link, <a href="#Dot">dot</a>, -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> As specified in - <a href="#Error-reporting"> - Error reporting</a>.</p> - - <p><i>Remarks:</i> <code>!exists(p)</code> is an error.</p> - - <p>[<i>Note:</i> Canonical pathnames allow security checking of a path (eg. - does this path live in /home/goodguy or /home/badguy?) -- end note]</p> - -</blockquote> -<pre>void <a name="copy">copy</a>(const path& from, const path& to); -void copy(const path& from, const path& to, system::error_code& ec);</pre> -<blockquote> - <p><i>Effects:</i> As if</p> - - <blockquote> - <pre>file_status s(symlink_status(from<i>[</i><code>, ec</code><i>]</i>)); -if(is_symlink(s)) - copy_symlink(from, to<i>[</i><code>, ec</code><i>]</i>); -else if(is_directory(s)) - copy_directory(from, to<i>[</i><code>, ec</code><i>]</i>); -else if(is_regular_file(s)) - copy_file(from, to, copy_option::fail_if_exists<i>[</i><code>, ec</code><i>]</i>); -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> - -</blockquote> -<pre>void <a name="copy_directory">copy_directory</a>(const path& from, const path& to); -void copy_directory(const path& from, const path& to, system::error_code& ec);</pre> -<blockquote> - <p><i>Effects: </i></p> - - <p><i>Throws:</i> As specified in - <a href="#Error-reporting"> - Error reporting</a>.</p> - -</blockquote> -<pre>void copy_file(const path& from, const path& to); -void copy_file(const path& from, const path& to, system::error_code& 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>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& from, const path& to, <a href="#copy_option">copy_option</a> option); -void <a name="copy_file2">copy_file</a>(const path& from, const path& to, <a href="#copy_option">copy_option</a> option, system::error_code& ec);</pre> -<blockquote> - <p><i>Effects:</i> If <code>option == copy_option::</code><code>fail_if_exists - && 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& existing_symlink, const path& new_symlink); -void copy_symlink(const path& existing_symlink, const path& new_symlink, system::error_code& 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>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& p); -bool <a name="create_directories2">create_directories</a>(const path& p, system::error_code& 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>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> -</blockquote> -<pre>bool <a name="create_directory">create_directory</a>(const path& p); -bool <a name="create_directory2">create_directory</a>(const path& p, system::error_code& 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>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> -</blockquote> -<pre>void <a name="create_directory_symlink">create_directory_symlink</a>(const path& to, const path& new_symlink); -void create_directory_symlink(const path& to, const path& new_symlink, system::error_code& 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> - 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 - 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> - </blockquote> -<pre>void <a name="create_hard_link">create_hard_link</a>(const path& to, const path& new_hard_link); -void <a name="create_hard_link2">create_hard_link</a>(const path& to, const path& new_hard_link, system::error_code& 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>Postcondition:</i></p> - <ul> - <li> <code>exists(to) && - exists(</code><code>new_hard_link</code><code>) && equivalent(to, - - </code><code>new_hard_link</code><code>)</code></li> - <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 - 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& to, const path& new_symlink); -void <a name="create_symlink2">create_symlink</a>(const path& to, const path& new_symlink, system::error_code& 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> - 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 - 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> - </blockquote> -<pre>path <a name="current_path">current_path</a>(); -path <a name="current_path2">current_path</a>(system::error_code& 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 - 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 - library functions, or by another thread. <i>-- end note</i>]</p> -</blockquote> -<pre>void current_path(const path& p); -void current_path(const path& p, system::error_code& 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>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>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. <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) && s.type() != file_not_found</code></p> -</blockquote> -<pre>bool <a name="exists2">exists</a>(const path& p); -bool <a name="exists3">exists</a>(const path& p, system::error_code& 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&</code> throws -nothing.</p> -</blockquote> -<pre><code>bool <a name="equivalent">equivalent</a>(const path& p1, const path& p2); -bool <a name="equivalent2">equivalent</a>(const path& p1, const path& p2, system::error_code& 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 <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 - system entity, else <code>false</code>.</p> - <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 - and equal <code>st_ino</code> values.</p> - <p>[<i>Note:</i> <i>POSIX</i> requires that <i>"st_dev</i> - must be unique within a Local Area Network". 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 "same" 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) && !exists(s2)) || (is_other(s1) && is_other(s2))</code>, - otherwise as specified in - <a href="#Error-reporting"> - Error reporting</a>.</p> -</blockquote> -<div dir="ltr"> -<pre>uintmax_t <a name="file_size">file_size</a>(const path& p); -uintmax_t <a name="file_size2">file_size</a>(const path& p, system::error_code& ec);</pre> -</div> -<blockquote> - <p><i>Returns:</i> If <code>exists(p) && 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>. - Otherwise, <code>static_cast<uintmax_t>(-1)</code>.</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& p); -uintmax_t hard_link_count(const path& p, system::error_code& 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> - -</blockquote> - -<pre>const path& <a name="initial_path">initial_path</a>(); -const path& <a name="initial_path">initial_path</a>(<code>system::error_code& 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 - 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(). <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> -</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> -</blockquote> -<pre><code>bool <a name="is_directory2">is_directory</a>(const path& p); -bool <a name="is_directory3">is_directory</a>(const path& p, system::error_code& 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>, - respectively.</p> -<p><i>Throws:</i> <code>filesystem_error</code>; overload with <code>error_code&</code> throws -nothing.</p> -</blockquote> -<pre><code>bool <a name="is_empty">is_empty</a>(const path& p); -bool <a name="is_empty2">is_empty</a></a>(const path& p, system::error_code& 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>Returns:</i> <code>is_directory(s)<br> - ? - directory_iterator(p) == directory_iterator()<br> - : 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> -</blockquote> -<pre><code>bool <a name="is_regular_file2">is_regular_file</a>(const path& 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> - </blockquote> -<pre><code>bool <a name="is_regular_file3">is_regular_file</a>(const path& p, system::error_code& 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> -</blockquote> -<pre>bool <a name="is_other">is_other</a>(file_status s) noexcept;</pre> -<blockquote> - <p><i>Returns:</i> - <code>return exists(s) && !is_regular_file(s) && !is_directory(s) && !is_symlink(s)</code></p> -</blockquote> -<pre><code>bool <a name="is_other2">is_other</a>(const path& p); -bool <a name="is_other3">is_other</a>(const path& p, system::error_code& 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&</code> throws - nothing.</p> -</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> -</blockquote> -<pre><code>bool <a name="is_symlink2">is_symlink</a>(const path& p); -bool <a name="is_symlink3">is_symlink</a>(const path& p, system::error_code& 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> - <p><i>Throws:</i> <code>filesystem_error</code>; overload with <code>error_code&</code> throws - nothing.</p> -</blockquote> -<pre>std::time_t <a name="last_write_time">last_write_time</a>(const path& p); -std::time_t <a name="last_write_time2">last_write_time</a>(const path& p<code>, system::error_code& 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> 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> -</blockquote> -<pre>void <a name="last_write_time3">last_write_time</a>(const path& p, const std::time_t new_time); -void <a name="last_write_time4">last_write_time</a>(const path& p, const std::time_t new_time<code>, system::error_code& 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 - with coarse time granularity. <i>-- end note</i>]</p> -</blockquote> -<pre>void <a name="permissions">permissions</a>(const path& p, <a href="#symlink_perms">perms</a> prms); -void permissions(const path& p, <a href="#symlink_perms">perms</a> prms, system::error_code& ec);</pre> -<blockquote> - <p dir="ltr"> - <i>Requires:</i> <code>!((prms & add_perms) && (prms & 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 - specified by the following table. </p> - <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111"> - <tr> - <td><b>bits present in <code>prms</code></b></td> - <td><b>Effective bits applied</b></td> - </tr> - <tr> - <td>Neither <code>add_perms</code> nor <code>remove_perms</code></td> - <td><code>prms & perms_mask</code></td> - </tr> - <tr> - <td><code>add_perms</code></td> - <td> - <p dir="ltr"><code>status(p).permissions() | (prms & - <a href="#perms_mask">perms_mask</a>)</code> - </td> - </tr> - <tr> - <td><code>remove_perms</code></td> - <td><code>status(p)</code><code>.permissions() & ~(prms & - <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> -</blockquote> -<pre>path <a name="read_symlink">read_symlink</a>(const path& p); -path read_symlink(const path& p, system::error_code& ec);</pre> -<blockquote> - <p dir="ltr"><i>Returns:</i> 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 - resolve to a symbolic link. <i>-- end note</i>]</p> -</blockquote> -<pre>bool <a name="remove">remove</a>(const path& p); -bool <a name="remove2">remove</a>(const path& p, system::error_code& ec);</pre> -<blockquote> - <p><i>Effects:</i> 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> - <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(symlink_status(p))</code>.</p> - <p><i>Returns:</i> <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> -</blockquote> -<pre>uintmax_t <a name="remove_all">remove_all</a>(const path& p); -uintmax_t <a name="remove_all2">remove_all</a>(const path& p, system::error_code& ec);</pre> -<blockquote> - <p><i>Effects:</i> 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> - <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> -</blockquote> -<pre>void <a name="rename">rename</a>(const path& old_p, const path& new_p); -void <a name="rename2">rename</a>(const path& old_p, const path& new_p, system::error_code& 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> - <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 - 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> -</blockquote> -<pre>void <a name="resize_file">resize_file</a>(const path& p, uintmax_t new_size); -void <a name="resize_file2">resize_file</a>(const path& p, uintmax_t new_size, system::error_code& 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> -</blockquote> -<pre>space_info <a name="space">space</a>(const path& p); -space_info <a name="space2">space</a>(const path& p, system::error_code& 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>, - 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> -</blockquote> -<pre><a href="#file_status">file_status</a> <a name="status">status</a>(const path& p);</pre> -<blockquote> - <p><i>Effects: </i>As if:</p> - <blockquote> - <pre>system::error_code ec; -file_status result = status(p, ec); -if (result == status_error) - throw filesystem_error(<i>implementation-supplied-message</i>, p, ec); -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 - 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& p, system::error_code& 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> - 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>. <i>--end note</i>]</p> - </blockquote> - </blockquote> - <p><i>Returns:</i></p> - <blockquote> - <p>If <code>ec != error_code()</code>:</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 - 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>-- - end note</i>]<br> - </li> - <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 - note</i>]<br> - </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 - distinctions are important to some use cases. <i>--end note</i>]</p> - </blockquote> - <p>Otherwise,</p> - <ul> - <li>If the attributes indicate a regular file, as if by <i>POSIX</i> <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><fstream></code> operations - would succeed, assuming no hardware, permission, access, or file system - race - errors. Lack of -<code>regular_file</code> does not necessarily imply <code><fstream></code> operations would -fail on a directory. -<i>-- end note</i>]<br> - </li> - <li>Otherwise, if the attributes indicate a directory, as if by <i>POSIX</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> - </li> - <li>Otherwise, if the attributes indicate a block special file, as if by <i>POSIX</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> - </li> - <li>Otherwise, if the attributes indicate a character special file, as if by <i>POSIX</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> - </li> - <li>Otherwise, if the attributes indicate a fifo or pipe file, as if by <i>POSIX</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> - </li> - <li>Otherwise, if the attributes indicate a socket, as if by <i>POSIX</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> - </li> - <li>Otherwise, return <code> - file_status(type_unknown)</code>.</li> - </ul> - </blockquote> - <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) noexcept;</pre> -<blockquote> - <p><i>Returns:</i> - <code>s.type() != status_error</code></p> -</blockquote> -<pre>file_status <a name="symlink_status">symlink_status</a>(const path& p); -file_status <a name="symlink_status2">symlink_status</a>(const path& p, system::error_code& ec) noexcept;</pre> -<blockquote> - <p><i>Effects:</i> 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> -</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>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&</code> throws - nothing.</p> -</blockquote> -<pre>path <a name="system_complete">system_complete</a>(const path& p); -path <a name="system_complete2">system_complete</a>(const path& p, system::error_code& ec);</pre> -<blockquote> - <p><i>Effects:</i> Composes an absolute 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_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><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 - 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> -<pre>path <a name="temp_directory_path">temp_directory_path</a>(); -path temp_directory_path(system::error_code& ec);</pre> -<blockquote> - <p><i>Returns:</i> A directory path suitable for temporary files under the - 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 - list TMPDIR, TMP, TEMP, TEMPDIR. If none of these are found, <code>"/tmp"</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>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. <i>-- end note</i>]</p> -</blockquote> -<pre>path <a name="unique_path">unique_path</a>(const path& model="%%%%-%%%%-%%%%-%%%%"); -path unique_path(const path& model, system::error_code& ec);</pre> -<blockquote> - <p>The <code>unique_path</code> function generates a path name suitable for - creating temporary files, including directories. The name is based - on a model that uses the percent sign character to specify replacement by a - random hexadecimal digit. [<i>Note:</i> The more bits of randomness in the - generated path name, the less likelihood of prior existence or being guessed. - Each replacement hexadecimal digit in the model adds four bits of randomness. - The default model thus provides 64 bits of randomness. This is sufficient for - most applications. <i>--end note</i>]</p> - <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>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 - 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;" - -<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> -<table border="1" cellspacing="0" cellpadding="5"> -<p> -<tr><td><b>Constructor<br>argument</b></td> -<td><b>Iteration<br>over<br>Elements</b></td> -<td><b><code>string()</code></b></td> -<td><b><code>generic_<br>string()</code></b></td> -<td><b><code>root_<br>path()</code></b></td> -<td><b><code>root_<br>name()</code></b></td> -<td><b><code>root_<br>directory()</code></b></td> -<td><b><code>relative_<br>path()</code></b></td> -<td><b><code>parent_<br>path()</code></b></td> -<td><b><code>filename()</code></b></td> -</tr> -<tr> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -</tr> -<tr> -<td><code>.</code></td> -<td><code>.</code></td> -<td><code>.</code></td> -<td><code>.</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>.</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>.</code></td> -</tr> -<tr> -<td><code>..</code></td> -<td><code>..</code></td> -<td><code>..</code></td> -<td><code>..</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>..</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>..</code></td> -</tr> -<tr> -<td><code>foo</code></td> -<td><code>foo</code></td> -<td><code>foo</code></td> -<td><code>foo</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>foo</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>foo</code></td> -</tr> -<tr> -<td><code>/</code></td> -<td><code>/</code></td> -<td><code>/</code></td> -<td><code>/</code></td> -<td><code>/</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>/</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>/</code></td> -</tr> -<tr> -<td><code>/foo</code></td> -<td><code>/,foo</code></td> -<td><code>/foo</code></td> -<td><code>/foo</code></td> -<td><code>/</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>/</code></td> -<td><code>foo</code></td> -<td><code>/</code></td> -<td><code>foo</code></td> -</tr> -<tr> -<td><code>foo/</code></td> -<td><code>foo,.</code></td> -<td><code>foo/</code></td> -<td><code>foo/</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>foo/</code></td> -<td><code>foo</code></td> -<td><code>.</code></td> -</tr> -<tr> -<td><code>/foo/</code></td> -<td><code>/,foo,.</code></td> -<td><code>/foo/</code></td> -<td><code>/foo/</code></td> -<td><code>/</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>/</code></td> -<td><code>foo/</code></td> -<td><code>/foo</code></td> -<td><code>.</code></td> -</tr> -<tr> -<td><code>foo/bar</code></td> -<td><code>foo,bar</code></td> -<td><code>foo/bar</code></td> -<td><code>foo/bar</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>foo/bar</code></td> -<td><code>foo</code></td> -<td><code>bar</code></td> -</tr> -<tr> -<td><code>/foo/bar</code></td> -<td><code>/,foo,bar</code></td> -<td><code>/foo/bar</code></td> -<td><code>/foo/bar</code></td> -<td><code>/</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>/</code></td> -<td><code>foo/bar</code></td> -<td><code>/foo</code></td> -<td><code>bar</code></td> -</tr> -<tr> -<td><code>//net</code></td> -<td><code>//net</code></td> -<td><code>//net</code></td> -<td><code>//net</code></td> -<td><code>//net</code></td> -<td><code>//net</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>//net</code></td> -</tr> -<tr> -<td><code>//net/foo</code></td> -<td><code>//net,/,foo</code></td> -<td><code>//net/foo</code></td> -<td><code>//net/foo</code></td> -<td><code>//net/</code></td> -<td><code>//net</code></td> -<td><code>/</code></td> -<td><code>foo</code></td> -<td><code>//net/</code></td> -<td><code>foo</code></td> -</tr> -<tr> -<td><code>///foo///</code></td> -<td><code>/,foo,.</code></td> -<td><code>///foo///</code></td> -<td><code>///foo///</code></td> -<td><code>/</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>/</code></td> -<td><code>foo///</code></td> -<td><code>///foo</code></td> -<td><code>.</code></td> -</tr> -<tr> -<td><code>///foo///bar</code></td> -<td><code>/,foo,bar</code></td> -<td><code>///foo///bar</code></td> -<td><code>///foo///bar</code></td> -<td><code>/</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>/</code></td> -<td><code>foo///bar</code></td> -<td><code>///foo</code></td> -<td><code>bar</code></td> -</tr> -<tr> -<td><code>/.</code></td> -<td><code>/,.</code></td> -<td><code>/.</code></td> -<td><code>/.</code></td> -<td><code>/</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>/</code></td> -<td><code>.</code></td> -<td><code>/</code></td> -<td><code>.</code></td> -</tr> -<tr> -<td><code>./</code></td> -<td><code>.,.</code></td> -<td><code>./</code></td> -<td><code>./</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>./</code></td> -<td><code>.</code></td> -<td><code>.</code></td> -</tr> -<tr> -<td><code>/..</code></td> -<td><code>/,..</code></td> -<td><code>/..</code></td> -<td><code>/..</code></td> -<td><code>/</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>/</code></td> -<td><code>..</code></td> -<td><code>/</code></td> -<td><code>..</code></td> -</tr> -<tr> -<td><code>../</code></td> -<td><code>..,.</code></td> -<td><code>../</code></td> -<td><code>../</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>../</code></td> -<td><code>..</code></td> -<td><code>.</code></td> -</tr> -<tr> -<td><code>foo/.</code></td> -<td><code>foo,.</code></td> -<td><code>foo/.</code></td> -<td><code>foo/.</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>foo/.</code></td> -<td><code>foo</code></td> -<td><code>.</code></td> -</tr> -<tr> -<td><code>foo/..</code></td> -<td><code>foo,..</code></td> -<td><code>foo/..</code></td> -<td><code>foo/..</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>foo/..</code></td> -<td><code>foo</code></td> -<td><code>..</code></td> -</tr> -<tr> -<td><code>foo/./</code></td> -<td><code>foo,.,.</code></td> -<td><code>foo/./</code></td> -<td><code>foo/./</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>foo/./</code></td> -<td><code>foo/.</code></td> -<td><code>.</code></td> -</tr> -<tr> -<td><code>foo/./bar</code></td> -<td><code>foo,.,bar</code></td> -<td><code>foo/./bar</code></td> -<td><code>foo/./bar</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>foo/./bar</code></td> -<td><code>foo/.</code></td> -<td><code>bar</code></td> -</tr> -<tr> -<td><code>foo/..</code></td> -<td><code>foo,..</code></td> -<td><code>foo/..</code></td> -<td><code>foo/..</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>foo/..</code></td> -<td><code>foo</code></td> -<td><code>..</code></td> -</tr> -<tr> -<td><code>foo/../</code></td> -<td><code>foo,..,.</code></td> -<td><code>foo/../</code></td> -<td><code>foo/../</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>foo/../</code></td> -<td><code>foo/..</code></td> -<td><code>.</code></td> -</tr> -<tr> -<td><code>foo/../bar</code></td> -<td><code>foo,..,bar</code></td> -<td><code>foo/../bar</code></td> -<td><code>foo/../bar</code></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>foo/../bar</code></td> -<td><code>foo/..</code></td> -<td><code>bar</code></td> -</tr> -<tr> -<td><code>c:</code></td> -<td><code>c:</code></td> -<td><code>c:</code></td> -<td><code>c:</code></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><font size="-1"><i>empty</i></font></td> -<td><span style="background-color: #CCFFCC"><code>c:</code><br><font size="-1"><i>empty</i></font></span></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>c:</code></td> -</tr> -<tr> -<td><code>c:/</code></td> -<td><span style="background-color: #CCFFCC"><code>c:,.</code><br><code>c:,/</code></span></td> -<td><code>c:/</code></td> -<td><code>c:/</code></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:/</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>/</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:/</code><br><font size="-1"><i>empty</i></font></span></td> -<td><code>c:</code></td> -<td><span style="background-color: #CCFFCC"><code>.</code><br><code>/</code></span></td> -</tr> -<tr> -<td><code>c:foo</code></td> -<td><span style="background-color: #CCFFCC"><code>c:foo</code><br><code>c:,foo</code></span></td> -<td><code>c:foo</code></td> -<td><code>c:foo</code></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><font size="-1"><i>empty</i></font></td> -<td><span style="background-color: #CCFFCC"><code>c:foo</code><br><code>foo</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:foo</code><br><code>foo</code></span></td> -</tr> -<tr> -<td><code>c:/foo</code></td> -<td><span style="background-color: #CCFFCC"><code>c:,foo</code><br><code>c:,/,foo</code></span></td> -<td><code>c:/foo</code></td> -<td><code>c:/foo</code></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:/</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>/</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:/foo</code><br><code>foo</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:</code><br><code>c:/</code></span></td> -<td><code>foo</code></td> -</tr> -<tr> -<td><code>c:foo/</code></td> -<td><span style="background-color: #CCFFCC"><code>c:foo,.</code><br><code>c:,foo,.</code></span></td> -<td><code>c:foo/</code></td> -<td><code>c:foo/</code></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><font size="-1"><i>empty</i></font></td> -<td><span style="background-color: #CCFFCC"><code>c:foo/</code><br><code>foo/</code></span></td> -<td><code>c:foo</code></td> -<td><code>.</code></td> -</tr> -<tr> -<td><code>c:/foo/</code></td> -<td><span style="background-color: #CCFFCC"><code>c:,foo,.</code><br><code>c:,/,foo,.</code></span></td> -<td><code>c:/foo/</code></td> -<td><code>c:/foo/</code></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:/</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>/</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:/foo/</code><br><code>foo/</code></span></td> -<td><code>c:/foo</code></td> -<td><code>.</code></td> -</tr> -<tr> -<td><code>c:/foo/bar</code></td> -<td><span style="background-color: #CCFFCC"><code>c:,foo,bar</code><br><code>c:,/,foo,bar</code></span></td> -<td><code>c:/foo/bar</code></td> -<td><code>c:/foo/bar</code></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:/</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>/</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:/foo/bar</code><br><code>foo/bar</code></span></td> -<td><code>c:/foo</code></td> -<td><code>bar</code></td> -</tr> -<tr> -<td><code>prn:</code></td> -<td><code>prn:</code></td> -<td><code>prn:</code></td> -<td><code>prn:</code></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>prn:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>prn:</code></span></td> -<td><font size="-1"><i>empty</i></font></td> -<td><span style="background-color: #CCFFCC"><code>prn:</code><br><font size="-1"><i>empty</i></font></span></td> -<td><font size="-1"><i>empty</i></font></td> -<td><code>prn:</code></td> -</tr> -<tr> -<td><code>c:\</code></td> -<td><span style="background-color: #CCFFCC"><code>c:\</code><br><code>c:,/</code></span></td> -<td><code>c:\</code></td> -<td><span style="background-color: #CCFFCC"><code>c:\</code><br><code>c:/</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:\</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>\</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:\</code><br><font size="-1"><i>empty</i></font></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:\</code><br><code>\</code></span></td> -</tr> -<tr> -<td><code>c:foo</code></td> -<td><span style="background-color: #CCFFCC"><code>c:foo</code><br><code>c:,foo</code></span></td> -<td><code>c:foo</code></td> -<td><code>c:foo</code></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><font size="-1"><i>empty</i></font></td> -<td><span style="background-color: #CCFFCC"><code>c:foo</code><br><code>foo</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:foo</code><br><code>foo</code></span></td> -</tr> -<tr> -<td><code>c:\foo</code></td> -<td><span style="background-color: #CCFFCC"><code>c:\foo</code><br><code>c:,/,foo</code></span></td> -<td><code>c:\foo</code></td> -<td><span style="background-color: #CCFFCC"><code>c:\foo</code><br><code>c:/foo</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:\</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>\</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:\foo</code><br><code>foo</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:\</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:\foo</code><br><code>foo</code></span></td> -</tr> -<tr> -<td><code>c:foo\</code></td> -<td><span style="background-color: #CCFFCC"><code>c:foo\</code><br><code>c:,foo,.</code></span></td> -<td><code>c:foo\</code></td> -<td><span style="background-color: #CCFFCC"><code>c:foo\</code><br><code>c:foo/</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><font size="-1"><i>empty</i></font></td> -<td><span style="background-color: #CCFFCC"><code>c:foo\</code><br><code>foo\</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:foo</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:foo\</code><br><code>.</code></span></td> -</tr> -<tr> -<td><code>c:\foo\</code></td> -<td><span style="background-color: #CCFFCC"><code>c:\foo\</code><br><code>c:,/,foo,.</code></span></td> -<td><code>c:\foo\</code></td> -<td><span style="background-color: #CCFFCC"><code>c:\foo\</code><br><code>c:/foo/</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:\</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>\</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:\foo\</code><br><code>foo\</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:\foo</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:\foo\</code><br><code>.</code></span></td> -</tr> -<tr> -<td><code>c:\foo/</code></td> -<td><span style="background-color: #CCFFCC"><code>c:\foo,.</code><br><code>c:,/,foo,.</code></span></td> -<td><code>c:\foo/</code></td> -<td><span style="background-color: #CCFFCC"><code>c:\foo/</code><br><code>c:/foo/</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:\</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>\</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:\foo/</code><br><code>foo/</code></span></td> -<td><code>c:\foo</code></td> -<td><code>.</code></td> -</tr> -<tr> -<td><code>c:/foo\bar</code></td> -<td><span style="background-color: #CCFFCC"><code>c:,foo\bar</code><br><code>c:,/,foo,bar</code></span></td> -<td><code>c:/foo\bar</code></td> -<td><span style="background-color: #CCFFCC"><code>c:/foo\bar</code><br><code>c:/foo/bar</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:/</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td> -<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>/</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:/foo\bar</code><br><code>foo\bar</code></span></td> -<td><span style="background-color: #CCFFCC"><code>c:</code><br><code>c:/foo</code></span></td> -<td><span style="background-color: #CCFFCC"><code>foo\bar</code><br><code>bar</code></span></td> -</tr> -</table> -<h2><a name="long-path-warning"></a>Warning: Long paths on Windows and the -extended-length <b>\\?\ </b>prefix</h2> -<p>The Microsoft Windows "Maximum Path Length Limitation" specifies:</p> -<blockquote> -<p>In the Windows API (with some exceptions ...), the maximum length for a path -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>"\\?\" prefix</b>. For -example, "\\?\D:\<em>very long path</em>". -<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 -prefixes. But some won't work, because to the limitations imposed by Windows. -Read the following cautions carefully!</p> -<h3>Cautions for paths with extended-length prefixes</h3> -<ul> - <li>Individual components of a path are still are limited to whatever is - supported for the particular filesystem, commonly 255 characters.</li> - <li>Only backslashes only are acceptable as directory separators. Slashes are - not treated as separators.</li> - <li>All paths must be absolute - relative paths are not allowed.</li> - <li>Once an absolute path grows beyond 260 characters, it is essentially - poisoned and all operations must use extended-length prefixes. So even a - simple operation like <code>create_directory("a")</code> will fail if the - absolute path of the resulting directory would exceed 260 characters.</li> - <li>Certain Boost.Filesystem functions that decompose their argument path and - then work on individual relative directories or files will not work properly - with extended-length prefix paths.</li> -</ul> -<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. The temp_directory_path function was -contributed by Jeff Flinn. David Svoboda suggested the canonical function and -provided psuedo-code.</p> -<p>Howard Hinnant and John Maddock reviewed a draft of the version 2 proposal, and -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> -<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 Std 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> -$snippet backmatter "$SNIPPET_FILE;" -</body> - -</html>
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/doc/src/tr2_snippets.html b/src/third_party/boost/libs/filesystem/v3/doc/src/tr2_snippets.html deleted file mode 100644 index d01df92b2bb..00000000000 --- a/src/third_party/boost/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 <bdawes at acm dot org></td> - </tr> - </table> - - -<h1>Filesystem Library for C++11/TR2 (Revision 1)</h1> - - -<p>This paper proposes that the 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 <fstream>. 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 <fstream>. 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 Std 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<charT,traits>* open(const path& 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& p, std::ios_base::openmode mode=std::ios_base::in)</pre> - -<pre>void open(const path& 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& p, std::ios_base::openmode mode=std::ios_base::out);</pre> - <pre>void open(const path& 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& p, - std::ios_base::openmode mode=std::ios_base::in | std::ios_base::out);</pre> - <pre>void open(const path& 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&</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&</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&</code> -arguments.</p> -<p>Add an additional non-member function:</p> -<blockquote> - <pre>unspecified-iterator-type convert(<code>const path& p, const codecvt_type& 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 "implicit cast to native type"?</h3> -<h4>Discussion</h4> -<p>In Bloomington there was discussion of "implicit cast to implicit cast to -native OS type to inter operate with existing iostream library and native -functions instead of modifying fstream".</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 <fstream> rather than -suggested <fstream> 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/src/third_party/boost/libs/filesystem/v3/doc/tutorial.html b/src/third_party/boost/libs/filesystem/v3/doc/tutorial.html deleted file mode 100644 index f275cb60e60..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/doc/tutorial.html +++ /dev/null @@ -1,1128 +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 Tutorial</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"> - <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 Tutorial</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> - <a href="release_history.html">Releases</a> - <a href="reference.html">Reference</a> - <a href="tutorial.html">Tutorial</a> - <a href="faq.htm">FAQ</a> - <a href="portability_guide.htm">Portability</a> - <a href="v3.html">V3 Intro</a> - <a href="v3_design.html">V3 Design</a> - <a href="deprecated.html">Deprecated</a> - </td> - </tr> -</table> -<p> - <a href="#Introduction">Introduction</a><br> - <a href="#Preliminaries">Preliminaries</a><br> - <a href="#Reporting-size">Reporting the size of a file - (tut1.cpp)</a><br> - <a href="#Using-status-queries">Using status queries to determine file existence and type - (tut2.cpp)</a><br> - <a href="#Directory-iteration">Directory iteration plus catching - exceptions - (tut3.cpp)</a><br> - <a href="#Using-path-decomposition">Using path decomposition, plus sorting results - (tut4.cpp)</a><br> - <a href="#Class-path-Constructors">Class path: Constructors, including - Unicode - (tut5.cpp)</a><br> - <a href="#Class-path-formats">Class path: Generic format vs. Native format</a><br> - <a href="#Class path-iterators-etc">Class path: Iterators, observers, composition, decomposition, and query - (path_info.cpp)</a><br> - <a href="#Error-reporting">Error reporting</a><br> -</p> -<h2><a name="Introduction">Introduction</a></h2> - -<p>This tutorial develops a little command line program to list information -about files and directories - essentially a much simplified version of the POSIX <code>ls</code> or Windows <code>dir</code> -commands. We'll start with the simplest possible version and progress to more -complex functionality. Along the way we'll digress to cover topics you'll need -to know about to understand Boost.Filesystem.</p> - -<p>Source code for each of the tutorial programs is available, and you -are encouraged to compile, test, and experiment with it. To conserve space, we won't -always show boilerplate code here, but the provided source is complete and -ready to build.</p> - -<h2><a name="Preliminaries">Preliminaries</a></h2> - -<p>Install the Boost distribution if you haven't already done so. See the -<a href="http://www.boost.org/more/getting_started/index.html">Boost Getting -Started</a> docs.</p> - -<p>This tutorial assumes you are going to compile and test the examples using -the provided scripts. That's highly recommended.</p> - -<blockquote> - -<p><b>If you are planning to compile and test the examples but not use the -scripts, make sure your build setup knows where to -locate or build the Boost library binaries.</b></p> - -</blockquote> -<p>Fire up your command line interpreter, and type the following commands:</p> - - <table align="center" border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%"> - <tr> - <td align="center" width="50%" style="font-size: 10pt"><i><b>Ubuntu Linux </b></i></td> - <td align="center" style="font-size: 10pt"><i><b>Microsoft Windows</b></i></td> - </tr> - <tr> - <td width="50%" style="font-size: 10pt"> - <pre>$ cd <i><b>boost-root</b></i>/libs/filesystem/example/test -$ ./setup -$ ./bld -$ ./tut1 -Usage: tut1 path</pre> - </td> - <td style="font-size: 10pt"> - <pre>>cd <i><b>boost-root</b></i>\libs\filesystem\example\test ->setup ->bld ->tut1 -Usage: tut1 path</pre> - </td> - </tr> - </table> - -<p>If the <code>tut1</code> command outputs "<code>Usage: tut1 path</code>", all -is well. A set of tutorial programs has been copied (by <code>setup</code>) to -<i><b><code>boost-root</code></b></i><code>/libs/filesystem/example/test</code> -and then built. You are encouraged to modify and experiment with them as the -tutorial progresses. Just invoke the <code>bld</code> script again to rebuild.</p> - -<p>If something didn't work right, here are troubleshooting suggestions:</p> - - <ul> - <li>The <code>bjam</code> program executable isn't being found. - Check your path environmental variable if it should have been found, - otherwise see - <a href="http://www.boost.org/more/getting_started/windows.html">Boost - Getting Started</a>.<br> - </li> - <li>Look at <code>bjam.log</code> to try to spot an indication of the - problem.</li> - </ul> - -<h2><a name="Reporting-size">Reporting the size of a file</a> - (<a href="../example/tut1.cpp">tut1.cpp</a>)</h2> - -<p>Let's get started. One of the simplest things we can do is report the size of -a file.</p> - -<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"> - <pre><a href="../example/tut1.cpp">tut1.cpp</a></pre> - <blockquote style="font-size: 10pt"> - <pre>#include <iostream> -#include <boost/filesystem.hpp> -using namespace boost::filesystem; - -int main(int argc, char* argv[]) -{ - if (argc < 2) - { - std::cout << "Usage: tut1 path\n"; - return 1; - } - std::cout << argv[1] << " " << file_size(argv[1]) << '\n'; - return 0; -}</pre> - </blockquote> - </td> - </tr> -</table> - -<p>The Boost.Filesystem <code><a href="reference.html#file_size">file_size</a></code> -function returns a <code>uintmax_t</code> -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& 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 -find out more, skip ahead to the <a href="#Class-path-Constructors">class path</a> section of -the tutorial.)</p> -<p>Please take a minute to try out <code>tut1</code> on your system, using a -file that is known to exist, such as <code>tut1.cpp</code>. Here is what the -results look like on two different operating systems:</p> - - <table align="center" border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%"> - <tr> - <td align="center" width="50%" style="font-size: 10pt"><i><b>Ubuntu Linux </b></i></td> - <td align="center" style="font-size: 10pt"><i><b>Microsoft Windows</b></i></td> - </tr> - <tr> - <td width="50%" style="font-size: 10pt" valign="top"> - <pre>$ ./tut1 tut1.cpp -tut1.cpp 569</pre> - <pre>$ ls -l tut1.cpp --rwxrwxrwx 1 root root 569 2010-02-01 07:31 tut1.cpp</pre> - </td> - <td style="font-size: 10pt" valign="top"> - <pre>>tut1 tut1.cpp -tut1.cpp 592 ->dir tut1.cpp -... -01/30/2010 10:47 AM 592 tut1.cpp -...</pre> - </td> - </tr> - </table> - -<p>So far, so good. The reported Linux and Windows sizes are different because -the Linux tests used <code>"\n"</code> line endings, while the Windows tests -used <code>"\r\n"</code> line endings.</p> - <p>Now try again, but give a path that doesn't exist:</p> - - <table align="center" border="1" cellpadding="5" cellspacing="0" - style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%"> - <tr> - <td align="center" width="50%" style="font-size: 10pt"><i><b>Ubuntu Linux </b></i></td> - <td align="center" style="font-size: 10pt"><i><b>Microsoft Windows</b></i></td> - </tr> - <tr> - <td width="50%" style="font-size: 10pt" valign="top"> - <pre>$ ./tut1 foo -terminate called after throwing an instance of 'boost::exception_detail:: -clone_impl<boost::exception_detail::error_info_injector<boost:: -filesystem::filesystem_error> >' - what(): boost::filesystem::file_size: No such file or directory: "foo" -Aborted</pre> - </td> - <td style="font-size: 10pt" valign="top"> - <pre>>tut1 foo</pre> - <p><b><i>An exception is thrown; the exact form of the response depends on - Windows system options.</i></b></td> - </tr> - </table> - - <p>What happens? - There's no file named <code>foo</code> in the current directory, so an -exception is thrown.</p> - <p>Try this:</p> - - <table align="center" border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%"> - <tr> - <td align="center" width="50%" style="font-size: 10pt"><i><b>Ubuntu Linux </b></i></td> - <td align="center" style="font-size: 10pt"><i><b>Microsoft Windows</b></i></td> - </tr> - <tr> - <td width="50%" style="font-size: 10pt"> - <pre>$ ./tut1 . -terminate called after throwing an instance of 'boost::exception_detail:: -clone_impl<boost::exception_detail::error_info_injector<boost:: -filesystem::filesystem_error> >' - what(): boost::filesystem::file_size: Operation not permitted "." -Aborted</pre> - </td> - <td style="font-size: 10pt" valign="top"> - <pre>>tut1 .</pre> - <p><b><i>An exception is thrown; the exact form of the response depends on - Windows system options.</i></b></td> - </tr> - </table> - - <p>The current directory exists, but <code>file_size()</code> works on regular - files, not directories, so again, an exception is thrown.</p> - - <p>We'll deal with those situations in <code>tut2.cpp</code>.</p> - -<h2><a name="Using-status-queries">Using status queries to determine file existence and type</a> - (<a href="../example/tut2.cpp">tut2.cpp</a>)</h2> - -<p>Boost.Filesystem includes status query functions such as <code> -<a href="reference.html#exists-path">exists</a></code>, -<code><a href="reference.html#is_directory-path">is_directory</a></code>, and <code> -<a href="reference.html#is_regular_file-path">is_regular_file</a></code>. These return -<code>bool</code>'s, and will return <code>true</code> if the condition -described by their name is met. Otherwise they return <code>false</code>, -including when any element -of the path argument can't be found.</p> - -<p>tut2.cpp uses several of the status query functions to cope with non-existent -files and with different kinds of files:</p> - -<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"> - <pre><a href="../example/tut2.cpp">tut2.cpp</a></pre> - <blockquote style="font-size: 10pt"> - <pre>int main(int argc, char* argv[]) -{ - <a href="reference.html#class-path">path</a> p (argv[1]); // p reads clearer than argv[1] in the following code - - if (<a href="reference.html#exists-path">exists</a>(p)) // does p actually exist? - { - if (<a href="reference.html#is_regular_file-path">is_regular_file</a>(p)) // is p a regular file? - cout << p << " size is " << <a href="reference.html#file_size">file_size</a>(p) << '\n'; - - else if (<a href="reference.html#is_directory-path">is_directory</a>(p)) // is p a directory? - cout << p << "is a directory\n"; - - else - cout << p << "exists, but is neither a regular file nor a directory\n"; - } - else - cout << p << "does not exist\n"; - - return 0; -}</pre> - </blockquote> - </td> - </tr> -</table> - -<p>Give it a try:</p> - - <table align="center" border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%"> - <tr> - <td align="center" width="50%" style="font-size: 10pt"><i><b>Ubuntu Linux </b></i></td> - <td align="center" style="font-size: 10pt"><i><b>Microsoft Windows</b></i></td> - </tr> - <tr> - <td width="50%" style="font-size: 10pt" valign="top"> - <pre>$ ./tut2 tut2.cpp -tut2 size is cpp 1037 -$ ./tut2 foo -foo does not exist -$ ./tut2 . -. is a directory</pre> - </td> - <td style="font-size: 10pt" valign="top"> - <pre>>tut2 tut2.cpp -tut2.cpp size is 1079 - ->tut2 foo -foo does not exist - ->tut2 . -. is a directory</pre> - </td> - </tr> - </table> - -<p>Although tut2 works OK in these tests, the output is less than satisfactory -for a directory. We'd typically like to see a list of the directory's contents. In <code>tut3.cpp</code> -we will see how to iterate over directories.</p> - -<p>But first, let's try one more test:</p> - - <table align="center" border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%"> - <tr> - <td align="center" width="50%" style="font-size: 10pt"><i><b>Ubuntu Linux </b></i></td> - <td align="center" style="font-size: 10pt"><i><b>Microsoft Windows</b></i></td> - </tr> - <tr> - <td width="50%" style="font-size: 10pt" valign="top"> - <pre>$ ls /home/jane/foo -ls: cannot access /home/jane/foo: Permission denied -$ ./tut2 /home/jane/foo -terminate called after throwing an instance of 'boost::exception_detail:: -clone_impl<boost::exception_detail::error_info_injector<boost:: -filesystem::filesystem_error> >' - what(): boost::filesystem::status: Permission denied: - "/home/jane/foo" -Aborted</pre> - </td> - <td style="font-size: 10pt" valign="top"> - <pre>>dir e:\ -The device is not ready. ->tut2 e:\</pre> - <p><b><i>An exception is thrown; the exact form of the response depends on - Windows system options.</i></b></td> - </tr> - </table> - -<p>On the Linux system, the test was being run from an account that did not have -permission to access <code>/home/jane/foo</code>. On the Windows system, <code> -e:</code> was a Compact Disc reader/writer that was not ready. End users -shouldn't have to interpret cryptic exceptions reports, so as we move on to <code>tut3.cpp</code> -we will increase the robustness of the code, too.</p> - -<h2><a name="Directory-iteration">Directory iteration</a> plus catching -exceptions - (<a href="../example/tut3.cpp">tut3.cpp</a>)</h2> - -<p>Boost.Filesystem's <code><a href="reference.html#directory_iterator"> -directory_iterator</a></code> class is just what we need here. It follows the -general pattern of the standard library's <code>istream_iterator</code>. Constructed from -a path, it iterates over the contents of the directory. A default constructed <code>directory_iterator</code> -acts as the end iterator.</p> - -<p>The value type of <code>directory_iterator</code> is <code> -<a href="reference.html#directory_entry">directory_entry</a></code>. A <code> -directory_entry</code> object contains a <code>path</code> and <code><a href="reference.html#file_status">file_status</a></code> -information. A <code> -directory_entry</code> object -can be used directly, but can also be passed to <code>path</code> arguments in function calls.</p> - -<p>The other need is increased robustness in the face of the many kinds of -errors that can affect file system operations. We could do that at the level of -each call to a Boost.Filesystem function (see <a href="#Error-reporting">Error -reporting</a>), but it is easier to supply an overall try/catch block.</p> - -<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"> - <pre><a href="../example/tut3.cpp">tut3.cpp</a></pre> - <blockquote> - <pre>int main(int argc, char* argv[]) -{ - <a href="reference.html#class-path">path</a> p (argv[1]); // p reads clearer than argv[1] in the following code - - try - { - if (<a href="reference.html#exists-path">exists</a>(p)) // does p actually exist? - { - if (<a href="reference.html#is_regular_file-path">is_regular_file</a>(p)) // is p a regular file? - cout << p << " size is " << <a href="reference.html#file_size">file_size</a>(p) << '\n'; - - else if (<a href="reference.html#is_directory-path">is_directory</a>(p)) // is p a directory? - { - cout << p << " is a directory containing:\n"; - - copy(directory_iterator(p), directory_iterator(), // directory_iterator::value_type - ostream_iterator<directory_entry>(cout, "\n")); // is directory_entry, which is - // converted to a path by the - // path stream inserter - } - - else - cout << p << " exists, but is neither a regular file nor a directory\n"; - } - else - cout << p << " does not exist\n"; - } - - catch (const filesystem_error& ex) - { - cout << ex.what() << '\n'; - } - - return 0; -}</pre> - </blockquote> - </td> - </tr> -</table> - -<p>Give <code>tut3</code> a try, passing it a path to a directory as a command line argument. -Here is a run on a checkout of the Boost Subversion trunk, followed by a repeat -of the test cases that caused exceptions on Linux and Windows:</p> - - <table align="center" border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%"> - <tr> - <td align="center" width="50%" style="font-size: 10pt"><i><b>Ubuntu Linux </b></i></td> - <td align="center" style="font-size: 10pt"><i><b>Microsoft Windows</b></i></td> - </tr> - <tr> - <td width="50%" style="font-size: 10pt" valign="top"> - <pre>$ ./tut3 ~/boost/trunk -/home/beman/boost/trunk is a directory containing: - /home/beman/boost/trunk/tools - /home/beman/boost/trunk/boost-build.jam - /home/beman/boost/trunk/dist - /home/beman/boost/trunk/doc - /home/beman/boost/trunk/bootstrap.sh - /home/beman/boost/trunk/index.html - /home/beman/boost/trunk/bootstrap.bat - /home/beman/boost/trunk/boost.css - /home/beman/boost/trunk/INSTALL - /home/beman/boost/trunk/rst.css - /home/beman/boost/trunk/boost - /home/beman/boost/trunk/people - /home/beman/boost/trunk/wiki - /home/beman/boost/trunk/boost.png - /home/beman/boost/trunk/LICENSE_1_0.txt - /home/beman/boost/trunk/more - /home/beman/boost/trunk/Jamroot - /home/beman/boost/trunk/.svn - /home/beman/boost/trunk/libs - /home/beman/boost/trunk/index.htm - /home/beman/boost/trunk/status - /home/beman/boost/trunk/CMakeLists.txt</pre> - </td> - <td style="font-size: 10pt" valign="top"> - <pre>>tut3 c:\boost\trunk -c:\boost\trunk is a directory containing: - c:\boost\trunk\.svn - c:\boost\trunk\boost - c:\boost\trunk\boost-build.jam - c:\boost\trunk\boost.css - c:\boost\trunk\boost.png - c:\boost\trunk\bootstrap.bat - c:\boost\trunk\bootstrap.sh - c:\boost\trunk\CMakeLists.txt - c:\boost\trunk\dist - c:\boost\trunk\doc - c:\boost\trunk\index.htm - c:\boost\trunk\index.html - c:\boost\trunk\INSTALL - c:\boost\trunk\Jamroot - c:\boost\trunk\libs - c:\boost\trunk\LICENSE_1_0.txt - c:\boost\trunk\more - c:\boost\trunk\people - c:\boost\trunk\rst.css - c:\boost\trunk\status - c:\boost\trunk\tools - c:\boost\trunk\wiki - ->tut3 e:\ -boost::filesystem::status: The device is not ready: "e:\"</pre> - </td> - </tr> - </table> - -<p>Not bad, but we can make further improvements:</p> - - <ul> - <li>The listing would be much easier to read if only the filename was - displayed, rather than the full path.<br> - </li> - <li>The Linux listing isn't sorted. That's because the ordering of - directory iteration is unspecified. Ordering depends on the underlying - operating system API and file system specifics. So we need to sort the - results ourselves. </li> - </ul> - -<p>Move on to <code>tut4.cpp</code> to see how those changes play out!</p> - -<h2><a name="Using-path-decomposition">Using path decomposition, plus sorting results</a> - (<a href="../example/tut4.cpp">tut4.cpp</a>)</h2> - -<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"> - <pre><a href="../example/tut4.cpp">tut4.cpp</a></pre> - <blockquote style="font-size: 10pt"> - <pre>int main(int argc, char* argv[]) -{ - <a href="reference.html#class-path">path</a> p (argv[1]); // p reads clearer than argv[1] in the following code - - try - { - if (<a href="reference.html#exists-path">exists</a>(p)) // does p actually exist? - { - if (<a href="reference.html#is_regular_file-path">is_regular_file</a>(p)) // is p a regular file? - cout << p << " size is " << <a href="reference.html#file_size">file_size</a>(p) << '\n'; - - else if (<a href="reference.html#is_directory-path">is_directory</a>(p)) // is p a directory? - { - cout << p << " is a directory containing:\n"; - - typedef vector<path> vec; // store paths, - vec v; // so we can sort them later - - copy(directory_iterator(p), directory_iterator(), back_inserter(v)); - - sort(v.begin(), v.end()); // sort, since directory iteration - // is not ordered on some file systems - - for (vec::const_iterator it (v.begin()); it != v.end(); ++it) - { - cout << " " << *it << '\n'; - } - } - - else - cout << p << " exists, but is neither a regular file nor a directory\n"; - } - else - cout << p << " does not exist\n"; - } - - catch (const filesystem_error& ex) - { - cout << ex.what() << '\n'; - } - - return 0; -}</pre> - </blockquote> - </td> - </tr> -</table> - - <p>The key difference between <code>tut3.cpp</code> and <code>tut4.cpp</code> is - what happens in the directory iteration loop. We changed:</p> - <blockquote> - <pre>cout << " " << *it << '\n'; // *it returns a <a href="reference.html#Class-directory_entry">directory_entry</a>,</pre> - </blockquote> - <p>to:</p> - <blockquote> - <pre>path fn = it->path().filename(); // extract the filename from the path -v.push_back(fn); // push into vector for later sorting</pre> - </blockquote> - <p><code><a href="reference.html#directory_entry-observers">path()</a></code> - is a <code>directory_entry</code> observer function. <code> - <a href="reference.html#path-filename">filename()</a></code> is one of - several path decomposition functions. It extracts the filename portion (<code>"index.html"</code>) - from a path (<code>"/home/beman/boost/trunk/index.html"</code>). These decomposition functions are - more fully explored in the <a href="#Class path-iterators-etc">Path iterators, observers, - composition, decomposition and query</a> portion of this tutorial.</p> - <p>The above was written as two lines of code for clarity. It could have - been written more concisely as:</p> - <blockquote> - <pre>v.push_back(it->path().filename()); // we only care about the filename</pre> - </blockquote> - <p>Here is the output from a test of <code><a href="../example/tut4.cpp">tut4.cpp</a></code>:</p> - - <table align="center" border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%"> - <tr> - <td align="center" width="50%" style="font-size: 10pt"><i><b>Ubuntu Linux </b></i></td> - <td align="center" style="font-size: 10pt"><i><b>Microsoft Windows</b></i></td> - </tr> - <tr> - <td width="50%" style="font-size: 10pt"> - <pre>$ ./tut4 ~/boost/trunk -/home/beman/boost/trunk is a directory containing: - .svn - CMakeLists.txt - INSTALL - Jamroot - LICENSE_1_0.txt - boost - boost-build.jam - boost.css - boost.png - bootstrap.bat - bootstrap.sh - doc - index.htm - index.html - libs - more - people - rst.css - status - tools - wiki</pre> - </td> - <td style="font-size: 10pt"> - <pre>C:\v3d>tut4 c:\boost\trunk -c:\boost\trunk is a directory containing: - .svn - CMakeLists.txt - INSTALL - Jamroot - LICENSE_1_0.txt - boost - boost-build.jam - boost.css - boost.png - bootstrap.bat - bootstrap.sh - doc - index.htm - index.html - libs - more - people - rst.css - status - tools - wiki</pre> - </td> - </tr> - </table> - - <p>That completes the main portion of this tutorial. If you haven't already - worked through the <a href="#Class-path-Constructors">Class path</a> sections of this tutorial, dig into them now. - The <a href="#Error-reporting">Error reporting</a> section may also be of - interest, although it can be skipped unless you are deeply concerned about - error handling issues.</p> - -<hr> - -<h2> <a name="Class-path-Constructors">Class path: Constructors</a>, -including Unicode - (<a href="../example/tut5.cpp">tut5.cpp</a>)</h2> - -<p>Traditional C interfaces pass paths as <code>const char*</code> arguments. -C++ interfaces may add <code>const std::string&</code> overloads, but adding -overloads becomes untenable if wide characters, containers, and iterator ranges -need to be supported.</p> -<p>Passing paths as <code>const path&</code> arguments is far simpler, yet far -more flexible because class <code>path</code> itself is far more flexible:</p> -<ol> - <li>Class <code>path</code> supports multiple character types and encodings, including Unicode, to - ease internationalization.</li> - <li>Class <code>path</code> supports multiple source types, such as iterators for null terminated - sequences, iterator ranges, containers (including <code>std::basic_string</code>), - and <code><a href="reference.html#Class-directory_entry">directory_entry</a></code>'s, - so functions taking paths don't need to provide several overloads.</li> - <li>Class <code>path</code> supports both native and generic pathname formats, so programs can be - portable between operating systems yet use native formats where desirable.</li> - <li>Class <code>path</code> supplies a full set of iterators, observers, composition, - decomposition, and query functions, making pathname manipulations easy, - convenient, reliable, and portable.</li> -</ol> -<p>Here is how (1) and (2) work. Class path constructors, -assignments, and appends have member templates for sources. For example, here -are the constructors that take sources:</p> - -<blockquote style="font-size: 10pt"> - <pre>template <class <a href="reference.html#Source">Source</a>> - path(Source const& source);</pre> - <pre>template <class InputIterator> - path(InputIterator begin, InputIterator end);</pre> -</blockquote> -<p>Let's look at a little program that shows how comfortable class <code>path</code> is with -both narrow and wide characters in C-style strings, C++ strings, and via C++ -iterators:</p> - -<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"> - <pre><a href="../example/tut4.cpp">tut5.cpp</a></pre> - <blockquote> - <pre>#include <boost/filesystem.hpp> -#include <string> -#include <list> -namespace fs = boost::filesystem; - -int main() -{ - // \u263A is "Unicode WHITE SMILING FACE = have a nice day!" - std::string narrow_string ("smile2"); - std::wstring wide_string (L"smile2\u263A"); - std::list<char> narrow_list; - narrow_list.push_back('s'); - narrow_list.push_back('m'); - narrow_list.push_back('i'); - narrow_list.push_back('l'); - narrow_list.push_back('e'); - narrow_list.push_back('3'); - std::list<wchar_t> wide_list; - wide_list.push_back(L's'); - wide_list.push_back(L'm'); - wide_list.push_back(L'i'); - wide_list.push_back(L'l'); - wide_list.push_back(L'e'); - wide_list.push_back(L'3'); - wide_list.push_back(L'\u263A'); - - { fs::ofstream f("smile"); } - { fs::ofstream f(L"smile\u263A"); } - { fs::ofstream f(narrow_string); } - { fs::ofstream f(wide_string); } - { fs::ofstream f(narrow_list); } - { fs::ofstream f(wide_list); } - narrow_list.pop_back(); - narrow_list.push_back('4'); - wide_list.pop_back(); - wide_list.pop_back(); - wide_list.push_back(L'4'); - wide_list.push_back(L'\u263A'); - { fs::ofstream f(fs::path(narrow_list.begin(), narrow_list.end())); } - { fs::ofstream f(fs::path(wide_list.begin(), wide_list.end())); } - - return 0; -}</pre> - </blockquote> - </td> - </tr> -</table> - -<p>Testing <code>tut5</code>:</p> - - <table align="center" border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%"> - <tr> - <td align="center" width="50%" style="font-size: 10pt"><i><b>Ubuntu Linux </b></i></td> - <td align="center" style="font-size: 10pt"><i><b>Microsoft Windows</b></i></td> - </tr> - <tr> - <td width="50%" style="font-size: 10pt" valign="top"> - <pre>$ ./tut5 -$ ls smile* -smile smile☺ smile2 smile2☺ smile3 smile3☺ smile4 smile4☺</pre> - </td> - <td style="font-size: 10pt" valign="top"> - <pre>>tut5 ->dir /b smile* -smile -smile2 -smile2☺ -smile3 -smile3☺ -smile4 -smile4☺ -smile☺</pre> - </td> - </tr> - </table> - -<p>Note that the exact appearance of the smiling face will depend on the font, -font size, and other settings for your command line window. The above tests were -run with out-of-the-box Ubuntu 9.10 and Windows 7, US Edition. If you don't get -the above results, take a look at the <code><i>boost-root</i>/libs/filesystem/example/test</code> -directory with your system's GUI file browser, such as Linux Nautilus, Mac OS X -Finder, or Windows Explorer. These tend to be more comfortable with -international character sets than command line interpreters.</p> - - <p>Class <code>path</code> takes care of whatever character type or encoding - conversions are required by the particular operating system. Thus as <code> - tut5</code> demonstrates, it's no problem to pass a wide character string to a - Boost.Filesystem operational function even if the underlying operating system - uses narrow characters, and visa versa. And the same applies to user supplied - functions that take <code>const path&</code> arguments.</p> - - <p>Class <code>path</code> also provides path syntax that is portable across operating systems, - element iterators, and observer, composition, decomposition, and query - functions to manipulate the elements of a path. The next section of this - tutorial deals with path syntax.</p> - - <hr> - -<h2><a name="Class-path-formats">Class path: Generic format vs. Native format</a></h2> - -<p dir="ltr">Class <code>path</code> deals with two different pathname -formats - generic format and native format. For POSIX-like -file systems, these formats are the same. But for users of Windows and -other non-POSIX file systems, the distinction is important. Even -programmers writing for POSIX-like systems need to understand the distinction if -they want their code to be portable to non-POSIX systems.</p> - -<p dir="ltr">The <b>generic format</b> is the familiar <code>/my_directory/my_file.txt</code> format used by POSIX-like -operating systems such as the Unix variants, Linux, and Mac OS X. Windows also -recognizes the generic format, and it is the basis for the familiar Internet URL -format. The directory -separator character is always one or more slash characters.</p> - -<p dir="ltr">The <b>native format</b> is the format as defined by the particular -operating system. For Windows, either the slash or the backslash can be used as -the directory separator character, so <code>/my_directory\my_file.txt</code> -would work fine. Of course, if you write that in a C++ string literal, it -becomes <code>"/my_directory\\my_file.txt"</code>.</p> - -<p dir="ltr">If a drive specifier or a backslash appears -in a pathname on a Windows system, it is always treated as the native format.</p> - -<p dir="ltr">Class <code>path</code> has observer functions that allow you to -obtain the string representation of a path object in either the native format -or the generic format. See the <a href="#Class path-iterators-etc">next section</a> -for how that plays out.</p> - - <p>The distinction between generic format and native format is important when - communicating with native C-style API's and with users. Both tend to expect - paths in the native format and may be confused by the generic format. The generic - format is great, however, for writing portable programs that work regardless - of operating system.</p> - - <p>The next section covers class <code>path</code> observers, composition, - decomposition, query, and iteration over the elements of a path.</p> - - <hr> - -<h2><a name="Class path-iterators-etc">Class path: Iterators, observers, composition, decomposition, and query</a> -- (<a href="../example/path_info.cpp">path_info.cpp</a>)</h2> - -<p>The <code><a href="../example/path_info.cpp">path_info.cpp</a></code> program is handy for learning how class <code>path</code> -iterators, -observers, composition, decomposition, and query functions work on your system. -If it hasn't already already been built on your system, please build it now. Run -the examples below on your system, and try some different path arguments as we -go along.</p> - -<p> <code>path_info</code> produces several dozen output lines every time it's -invoked. We will only show the output lines we are interested in at each step.</p> - -<p>First we'll look at iteration over the elements of a path, and then use -iteration to illustrate the difference between generic and native format paths.</p> - - <table align="center" border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%"> - <tr> - <td align="center" width="50%" style="font-size: 10pt"><i><b>Ubuntu Linux </b></i></td> - <td align="center" style="font-size: 10pt"><i><b>Microsoft Windows</b></i></td> - </tr> - <tr> - <td width="50%" style="font-size: 10pt"> - <pre>$ ./path_info /foo/bar/baa.txt -... -elements: - / - foo - bar - baa.txt</pre> - </td> - <td style="font-size: 10pt"> - <pre>>path_info /foo/bar/baa.txt -... -elements: - / - foo - bar - baa.txt</pre> - </td> - </tr> - </table> - -<p>Thus on both POSIX and Windows based systems the path <code>"/foo/bar/baa.txt"</code> -is seen as having four elements.</p> - -<p>Here is the code that produced the above listing:</p> - -<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"> - <blockquote style="font-size: 10pt"> - <pre>cout << "\nelements:\n"; - -for (path::iterator it = p.begin(); it != p.end(); ++it) - cout << " " << *it << '\n';</pre> - </blockquote> - </td> - </tr> -</table> -<p><code>path::iterator::value_type</code> is <code>path::string_type</code>, -and iteration treats <code>path</code> as a container of filenames.</p> - -<p dir="ltr">Let's look at some of the output from a slightly different -example:</p> - - <table align="center" border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%"> - <tr> - <td align="center" width="50%" style="font-size: 10pt"><i><b>Ubuntu Linux </b></i></td> - <td align="center" style="font-size: 10pt"><i><b>Microsoft Windows</b></i></td> - </tr> - <tr> - <td width="50%" style="font-size: 10pt"> - <pre>$ ./path_info /foo/bar/baa.txt - -composed path: - cout << -------------: /foo/bar/baa.txt - preferred()----------: /foo/bar/baa.txt -... -observers, native format: - native()-------------: /foo/bar/baa.txt - c_str()--------------: /foo/bar/baa.txt - string()-------------: /foo/bar/baa.txt - wstring()------------: /foo/bar/baa.txt - -observers, generic format: - generic_string()-----: /foo/bar/baa.txt - generic_wstring()----: /foo/bar/baa.txt</pre> - </td> - <td style="font-size: 10pt"> - <pre>>path_info /foo/bar\baa.txt - -composed path: - cout << -------------: /foo/bar/baa.txt - preferred()----------: \foo\bar\baa.txt -... -observers, native format: - native()-------------: /foo/bar\baa.txt - c_str()--------------: /foo/bar\baa.txt - string()-------------: /foo/bar\baa.txt - wstring()------------: /foo/bar\baa.txt - -observers, generic format: - generic_string()-----: /foo/bar/baa.txt - generic_wstring()----: /foo/bar/baa.txt</pre> - </td> - </tr> - </table> - -<p dir="ltr">Native format observers should be used when interacting with the -operating system or with users; that's what they expect.</p> - -<p dir="ltr">Generic format observers should be used when the results need to be -portable and uniform regardless of the operating system.</p> - -<p dir="ltr"><code>path</code> objects always hold pathnames in the native -format, but otherwise leave them unchanged from their source. The -<a href="reference.html#preferred">preferred()</a> function will convert to the -preferred form, if the native format has several forms. Thus on Windows, it will -convert slashes to backslashes.</p> - -<p dir="ltr">Let's move on to decomposition and query functions:</p> - - <table align="center" border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%"> - <tr> - <td align="center" width="50%" style="font-size: 10pt"><i><b>Ubuntu Linux </b></i></td> - <td align="center" style="font-size: 10pt"><i><b>Microsoft Windows</b></i></td> - </tr> - <tr> - <td width="50%" style="font-size: 10pt"> - <pre>$ ./path_info /foo/bar/baa.txt -... -decomposition: - root_name()----------: - root_directory()-----: / - root_path()----------: / - relative_path()------: foo/bar/baa.txt - parent_path()--------: /foo/bar - filename()-----------: baa.txt - stem()---------------: baa - extension()----------: .txt - -query: - empty()--------------: false - <span style="background-color: #FFFF00">is_absolute</span><span style="background-color: #FFFF00">()--------: true</span> - has_root_name()------: false - has_root_directory()-: true - has_root_path()------: true - has_relative_path()--: true - has_parent_path()----: true - has_filename()-------: true - has_stem()-----------: true - has_extension()------: true</pre> - </td> - <td style="font-size: 10pt"> - <pre>>path_info /foo/bar/baa.txt -... -decomposition: - root_name()----------: - root_directory()-----: / - root_path()----------: / - relative_path()------: foo/bar/baa.txt - parent_path()--------: /foo/bar - filename()-----------: baa.txt - stem()---------------: baa - extension()----------: .txt - -query: - empty()--------------: false - <span style="background-color: #FFFF00">is_absolute</span><span style="background-color: #FFFF00">()--------: false</span> - has_root_name()------: false - has_root_directory()-: true - has_root_path()------: true - has_relative_path()--: true - has_parent_path()----: true - has_filename()-------: true - has_stem()-----------: true - has_extension()------: true</pre> - </td> - </tr> - </table> - -<p dir="ltr">These are pretty self-evident, but do note the difference in the -result of <code>is_absolute()</code> between Linux and Windows. Because there is -no root name (i.e. drive specifier or network name), a lone slash (or backslash) -is a relative path on Windows. </p> - -<p dir="ltr">On to composition!</p> - -<p>Class <code>path</code> uses <code>/</code> and <code>/=</code> operators to -append elements. That's a reminder -that these operations append the operating system's preferred directory -separator if needed. The preferred -directory separator is a slash on POSIX-like systems, and a backslash on -Windows-like systems.</p> - -<p><a href="../example/path_info.cpp"><code>path_info.cpp</code></a> -composes a path by appending each of the command line elements to an initially -empty path:</p> - -<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"> - <blockquote> - <pre>path p; // compose a path from the command line arguments - -for (; argc > 1; --argc, ++argv) - p /= argv[1]; - -cout << "\ncomposed path:\n"; -cout << " cout << -------------: " << p << "\n"; -cout << " preferred()----------: " << p.preferred() << "\n";</pre> - </blockquote> - </td> - </tr> -</table> - -<p>Let's give this code a try: </p> - - <table align="center" border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="90%"> - <tr> - <td align="center" width="50%" style="font-size: 10pt"><i><b>Ubuntu Linux </b></i></td> - <td align="center" style="font-size: 10pt"><i><b>Microsoft Windows</b></i></td> - </tr> - <tr> - <td width="50%" style="font-size: 10pt"> - <pre>$ ./path_info / foo/bar baa.txt - -composed path: - cout << -------------: /foo/bar/baa.txt - preferred()----------: /foo/bar/baa.txt</pre> - </td> - <td style="font-size: 10pt"> - <pre>>path_info / foo/bar baa.txt - -composed path: - cout << -------------: /foo/bar\baa.txt - preferred()----------: \foo\bar\baa.txt</pre> - </td> - </tr> - </table> - - <p> </p> - - <hr> - - <h2><a name="Error-reporting">Error reporting</a></h2> - - <p>The Boost.Filesystem <code>file_size</code> function has two overloads:</p> - - <blockquote> - <pre><span style="background-color: #FFFFFF; ">uintmax_t</span> <a name="file_size">file_size</a>(const path& p); -<span style="background-color: #FFFFFF; ">uintmax_t</span> <a name="file_size2">file_size</a>(const path& p, system::error_code& ec);</pre> -</blockquote> -<p>The only significant difference between the two is how they report errors.</p> -<p>The - first signature will throw exceptions to report errors. A <code> -<a href="reference.html#Class-filesystem_error">filesystem_error</a></code> exception will be thrown -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 - of the error. It also has member functions to obtain the path or paths that caused - the error.</p> - - <blockquote> - - <p><b>Motivation for the second signature:</b> Throwing exceptions on errors was the entire error reporting story for the earliest versions of - Boost.Filesystem, and indeed throwing exceptions on errors works very well for - many applications. But user reports trickled in that some code became so - littered with try and catch blocks as to be unreadable and unmaintainable. In - some applications I/O errors aren't exceptional, and that's the use case for - the second signature.</p> - - </blockquote> - - <p>Functions with a <code>system::error_code&</code> argument set that - argument to report operational error status, and so do not throw exceptions when I/O - related errors occur. For a full explanation, see - <a href="reference.html#Error-reporting">Error reporting</a> in the reference - documentation. </p> - -<hr> -<p>© Copyright Beman Dawes 2010</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> - -</body> - -</html>
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/doc/v3.html b/src/third_party/boost/libs/filesystem/v3/doc/v3.html deleted file mode 100644 index 83dafbfab57..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/doc/v3.html +++ /dev/null @@ -1,151 +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>Filesystem V3 Intro</title> -<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> - <td align="middle"> - <font size="7">Filesystem - Version 3<br> - Introduction</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> - <a href="release_history.html">Releases</a> - <a href="reference.html">Reference</a> - <a href="tutorial.html">Tutorial</a> - <a href="faq.htm">FAQ</a> - <a href="portability_guide.htm">Portability</a> - <a href="v3.html">V3 Intro</a> - <a href="v3_design.html">V3 Design</a> - <a href="deprecated.html">Deprecated</a> - </td> - </tr> -</table> - -<h1>Boost Filesystem Version 3</h1> - -<p>Version 3 is a major revision of the Boost Filesystem library. Important -changes include:</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.<br> - </li> - <li>New <code>class path</code> members include:<br> - <ul> - <li><code><a href="reference.html#path-has_stem">has_stem</a>()</code></li> - <li><code><a href="reference.html#path-has_extension">has_extension</a>()</code></li> - <li><code><a href="reference.html#path-is_absolute">is_absolute</a>()</code>. This renames <code>is_complete()</code>, which - is now deprecated.</li> - <li><code><a href="reference.html#path-is_relative">is_relative</a>()</code></li> - <li><code><a href="reference.html#path-make_preferred">make_preferred</a>()<br> - </code></li> -</ul> - - </li> - <li>New or improved operations functions include:<br> - <ul> - <li><code><a href="reference.html#absolute">absolute</a>()</code>. This replaces the operations function <code> - complete()</code>, which is now deprecated. Semantics are now provided for a - Windows corner case where the <code>base</code> argument was not an absolute - path. Previously this resulted in an exception being thrown.</li> - <li><code><a href="reference.html#create_symlink">create_symlink</a>()</code> now supported on both POSIX and Windows.</li> - <li><code><a href="reference.html#read_symlink">read_symlink</a>()</code> function added. Supported on both POSIX and - Windows. Used to read the contents of a symlink itself.</li> - <li><code><a href="reference.html#resize_file">resize_file</a>()</code> function added. Supported on both POSIX and - Windows. Used to shrink or grow a regular file.</li> - <li><code><a href="reference.html#unique_path">unique_path</a>()</code> function added. Supported on both POSIX and - Windows. Used to generate a secure temporary pathname.<br> - </li> - </ul> - </li> - <li>Support for error reporting via <code>error_code</code> is now uniform - throughout the operations functions.<br> - </li> - <li>Documentation has been reworked, including re-writes of major portions.<br> - </li> - <li>A new <a href="tutorial.html">Tutorial</a> provides a hopefully much - gentler and more complete introduction for new users. Current users might want - to review the <a href="tutorial.html">three sections related to class path</a>.</li> -</ul> - -<h2>Deprecated names and other features</h2> - -<p>See the <a href="deprecated.html">Deprecated Features page</a> for transition -aids that allow much existing code to compile without change using Version 3.</p> - -<h2>Breaking changes</h2> - -<p>To ease the transition, Versions 2 and 3 will both be included in the next -several Boost releases. Version 2 will be the default version for one release -cycle, and then Version 3 will become the default version.</p> -<h3>Class <code>path</code></h3> -<ul> - <li>Class template <code>basic_path</code> and its specializations are - replaced by a single <code>class path</code>. Thus any code, such as - overloaded functions, that depends on <code>path</code> and <code>wpath</code> - being two distinct types will fail to compile and must be restructured. - Restructuring may be as simple as removing one of the overloads, but also - might require more complex redesign.<br> - </li> - <li>Certain functions now return <code>path</code> objects rather than <code> - string or wstring</code> objects:<ul> - <li><code>root_name()</code></li> - <li><code>root_directory()</code></li> - <li><code>filename()</code></li> - <li><code>stem()</code></li> - <li><code>extension()</code></li> - </ul> - <p>Not all uses will fail; if the function is being called in a context that - accepts a <code>path</code>, all is well. If the result is being used in a - context requiring a <code>std::string</code> or <code>std::wstring</code>, - then <code>.string()</code> or <code>.wstring()</code> respectively must be - appended to the function call.<br> - </li> - <li> <code>path::iterator::value_type</code> and <code> - path::const_iterator::value_type</code> is <code>path</code> rather than <code> - basic_string</code>.</li> -</ul> -<h3>Compiler support</h3> -<ul> - <li>Compilers and standard libraries that do not fully support wide characters - and wide character strings (<code>std::wstring</code>) are no longer - supported.<br> - </li> - <li>Cygwin versions prior to 1.7 are no longer supported because they lack - wide string support. Cygwin now compiles only for the Windows API and path - syntax.<br> - </li> - <li>MinGW versions not supporting wide strings are no longer supported.<br> - </li> - <li>Microsoft VC++ 7.1 and earlier are no longer supported.</li> -</ul> - -<hr> -<p>© Copyright Beman Dawes, 2009</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> - -</body> - -</html>
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/doc/v3_design.html b/src/third_party/boost/libs/filesystem/v3/doc/v3_design.html deleted file mode 100644 index c5204fff854..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/doc/v3_design.html +++ /dev/null @@ -1,192 +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 V3 Design</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"> - <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> - <td align="middle"> - <font size="7">Filesystem Version 3<br> - Design</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> - <a href="release_history.html">Releases</a> - <a href="reference.html">Reference</a> - <a href="tutorial.html">Tutorial</a> - <a href="faq.htm">FAQ</a> - <a href="portability_guide.htm">Portability</a> - <a href="v3.html">V3 Intro</a> - <a href="v3_design.html">V3 Design</a> - <a href="deprecated.html">Deprecated</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="#Problem">Problem</a><br> - <a href="#Solution">Solution</a><br> - <a href="#Details">Details</a><br> - <a href="#Other-changes">Other changes</a><br> - <a href="#Acknowledgements">Acknowledgements</a></td> - </tr> - </table> - -<p><b>Caution:</b> This page documents thinking early in the V3 development -process, and is intended to serve historical purposes. It is not updated to -reflect the current state of the library.</p> - -<h2><a name="Introduction">Introduction</a></h2> - -<p>During the review of Boost.Filesystem.V2 (Internationalization), Peter Dimov -suggested that the<code> basic_path</code> class template was unwieldy, and that a single -path type that accommodated multiple character types and encodings would be more -flexible. Although I wasn't willing to stop development at that time to -explore how this idea might be implemented, or to break from the pattern for -Internationalization used the C++ standard library, I've often thought about -Peter's suggestion. With the advent of C++0x <code>char16_t</code> and <code>char32_t</code> character -types, the <code>basic_path</code> class template approach becomes even more unwieldy, so it -is time to revisit the problem in light of Peter's suggestion.</p> - -<h2><b><a name="Problem">Problem</a></b></h2> - -<p>With Filesystem.V2, a path argument to a user defined function that is to -accommodate multiple character types and encodings must be written as a -template. Do-the-right-thing overloads or template metaprogramming must be -employed to allow arguments to be written as string literals. Here's what it -looks like:</p> - -<blockquote> - <pre>template<class Path> -void foo( const Path & p );</pre> - <pre>inline void foo( const path & p ) -{ - return foo<path>( p ); -} -inline void foo( const wpath & p ) -{ - return foo<wpath>( p ); -}</pre> -</blockquote> -<p>That's really ugly for such a simple need, and there would be a combinatorial -explosion if the function took multiple Path arguments and each could be either -narrow or wide. It gets even worse if the C++0x <code>char16_t</code> and <code> -char32_t</code> types are to be supported.</p> - -<h2><a name="Solution">Solution</a></h2> - -<p>Overview:</p> - -<ul> - <li>A single, non-template, <code>class path</code>.</li> - <li>Each member function is a template accommodating the various - applicable character types, including user-defined character types.</li> - <li>Hold the path internally in a string of the type used by the operating - system API; <code>std::string</code> for POSIX, <code>std::wstring</code> for Windows.</li> -</ul> - -<p>The signatures presented in <a href="#Problem">Problem</a> collapse to -simply:</p> -<blockquote> - <pre>void foo( const path & p );</pre> -</blockquote> - -<p>That's a signification reduction in code complexity. Specification becomes -simpler, too. I believe it will be far easier to teach, and result in much more -flexible user code.</p> - -<p>Other benefits:</p> -<ul> - <li>All the polymorphism still occurs at compile time.</li> - <li>Efficiency is increased, in that conversions of the encoding, if required, - only occur once at the time of creation, not each time the path is used.</li> - <li>The size of the implementation code drops approximately in half and - becomes much more readable.</li> -</ul> - <p>Possible problems:</p> -<ul> - <li>The combination of member function templates and implicit constructors can - result in unclear error messages when the user makes simple commonplace coding - errors. This should be much less of a problem with C++ concepts, but in the - meantime work continues to restrict over aggressive templates via enable_if/disable_if.</li> -</ul> - <h2><a name="Details">Details</a></h2> - -<table border="1" cellpadding="4" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%"> - <tr> - <td width="33%" colspan="3"> - <p align="center"><b><i>Encoding </i></b><i><b>Conversions</b></i></td> - </tr> - <tr> - <td width="33%"> - <p align="center"><i><b>Host system</b></i></td> - <td width="33%"> - <p align="center"><i><b>char string path arguments</b></i></td> - <td width="34%"> - <p align="center"><i><b>wide string path arguments</b></i></td> - </tr> - <tr> - <td width="33%">Systems with <code>char</code> as the native API path character type (i.e. - POSIX-like systems)</td> - <td width="33%">No conversion.</td> - <td width="34%">Conversion occurs, performed by the current path locale's - <code>codecvt</code> facet.</td> - </tr> - <tr> - <td width="33%">Systems with <code>wchar_t</code> as the native API path character type - (i.e. Windows-like systems).</td> - <td width="33%">Conversion occurs, performed by the current path locale's - <code>codecvt</code> facet.</td> - <td width="34%">No conversion.</td> - </tr> -</table> - -<p>When a class path function argument type matches the the operating system's -API argument type for paths, no conversion is performed rather than conversion -to a specified encoding such as one of the Unicode encodings. This avoids -unintended consequences, etc.</p> - -<h2><a name="Other-changes">Other changes</a></h2> - -<p><b>Uniform hybrid error handling: </b>The hybrid error handling idiom has -been consistently applied to all applicable functions.</p> - -<h2><a name="Acknowledgements">Acknowledgements</a></h2> - -<p>Peter Dimov suggested the idea of a single path class that could cope with -multiple character types and encodings. Walter Landry contributed both the design and implementation of the copy_any, -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> - -<p>© Copyright Beman Dawes, 2008</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/src/third_party/boost/libs/filesystem/v3/example/Jamfile.v2 b/src/third_party/boost/libs/filesystem/v3/example/Jamfile.v2 deleted file mode 100644 index 2d2ea27fcd8..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/example/Jamfile.v2 +++ /dev/null @@ -1,27 +0,0 @@ -# Boost Filesystem Library Example Jamfile - -# (C) Copyright Vladimir Prus 2003 - -# Distributed under the Boost Software License, Version 1.0. -# See www.boost.org/LICENSE_1_0.txt - -# Library home page: http://www.boost.org/libs/filesystem - -project - : requirements - <library>/boost/filesystem//boost_filesystem - <library>/boost/system//boost_system - <toolset>msvc:<asynch-exceptions>on - <link>static - ; - -exe tut0 : tut0.cpp ; -exe tut1 : tut1.cpp ; -exe tut2 : tut2.cpp ; -exe tut3 : tut3.cpp ; -exe tut4 : tut4.cpp ; -exe tut5 : tut5.cpp ; -exe path_info : path_info.cpp ; -exe file_status : file_status.cpp ; - -install bin : file_status ; #invoke via "bjam", not "bjam install" diff --git a/src/third_party/boost/libs/filesystem/v3/example/error_demo.cpp b/src/third_party/boost/libs/filesystem/v3/example/error_demo.cpp deleted file mode 100644 index ce16b3bc47c..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/example/error_demo.cpp +++ /dev/null @@ -1,185 +0,0 @@ -// error_demo.cpp --------------------------------------------------------------------// - -// Copyright Beman Dawes 2009 - -// 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 - -//--------------------------------------------------------------------------------------// -// // -// The purpose of this program is to demonstrate how error reporting works. // -// // -//--------------------------------------------------------------------------------------// - -#include <boost/filesystem.hpp> -#include <boost/system/system_error.hpp> -#include <iostream> - -using std::cout; -using boost::filesystem::path; -using boost::filesystem::filesystem_error; -using boost::system::error_code; -using boost::system::system_error; -namespace fs = boost::filesystem; - -namespace -{ - void report_system_error(const system_error& ex) - { - cout << " threw system_error:\n" - << " ex.code().value() is " << ex.code().value() << '\n' - << " ex.code().category().name() is " << ex.code().category().name() << '\n' - << " ex.what() is " << ex.what() << '\n' - ; - } - - void report_filesystem_error(const system_error& ex) - { - cout << " threw filesystem_error exception:\n" - << " ex.code().value() is " << ex.code().value() << '\n' - << " ex.code().category().name() is " << ex.code().category().name() << '\n' - << " ex.what() is " << ex.what() << '\n' - ; - } - - void report_status(fs::file_status s) - { - cout << " file_status::type() is "; - switch (s.type()) - { - case fs::status_error: - cout << "status_error\n"; break; - case fs::file_not_found: - cout << "file_not_found\n"; break; - case fs::regular_file: - cout << "regular_file\n"; break; - case fs::directory_file: - cout << "directory_file\n"; break; - case fs::symlink_file: - cout << "symlink_file\n"; break; - case fs::block_file: - cout << "block_file\n"; break; - case fs::character_file: - cout << "character_file\n"; break; - case fs::fifo_file: - cout << "fifo_file\n"; break; - case fs::socket_file: - cout << "socket_file\n"; break; - case fs::type_unknown: - cout << "type_unknown\n"; break; - default: - cout << "not a valid enumeration constant\n"; - } - } - - void report_error_code(const error_code& ec) - { - cout << " ec:\n" - << " value() is " << ec.value() << '\n' - << " category().name() is " << ec.category().name() << '\n' - << " message() is " << ec.message() << '\n' - ; - } - - bool threw_exception; - -} - -int main(int argc, char* argv[]) -{ - if (argc < 2) - { - cout << "Usage: error_demo path\n"; - return 1; - } - - error_code ec; - - //// construct path - no error_code - - //try { path p1(argv[1]); } - //catch (const system_error& ex) - //{ - // cout << "construct path without error_code"; - // report_system_error(ex); - //} - - //// construct path - with error_code - - path p (argv[1]); - - fs::file_status s; - bool b (false); - fs::directory_iterator di; - - // get status - no error_code - - cout << "\nstatus(\"" << p.string() << "\");\n"; - threw_exception = false; - - try { s = fs::status(p); } - catch (const system_error& ex) - { - report_filesystem_error(ex); - threw_exception = true; - } - if (!threw_exception) - cout << " Did not throw exception\n"; - report_status(s); - - // get status - with error_code - - cout << "\nstatus(\"" << p.string() << "\", ec);\n"; - s = fs::status(p, ec); - report_status(s); - report_error_code(ec); - - // query existence - no error_code - - cout << "\nexists(\"" << p.string() << "\");\n"; - threw_exception = false; - - try { b = fs::exists(p); } - catch (const system_error& ex) - { - report_filesystem_error(ex); - threw_exception = true; - } - if (!threw_exception) - { - cout << " Did not throw exception\n" - << " Returns: " << (b ? "true" : "false") << '\n'; - } - - // query existence - with error_code - - // directory_iterator - no error_code - - cout << "\ndirectory_iterator(\"" << p.string() << "\");\n"; - threw_exception = false; - - try { di = fs::directory_iterator(p); } - catch (const system_error& ex) - { - report_filesystem_error(ex); - threw_exception = true; - } - if (!threw_exception) - { - cout << " Did not throw exception\n" - << (di == fs::directory_iterator() ? " Equal" : " Not equal") - << " to the end iterator\n"; - } - - // directory_iterator - with error_code - - cout << "\ndirectory_iterator(\"" << p.string() << "\", ec);\n"; - di = fs::directory_iterator(p, ec); - cout << (di == fs::directory_iterator() ? " Equal" : " Not equal") - << " to the end iterator\n"; - report_error_code(ec); - - return 0; -} diff --git a/src/third_party/boost/libs/filesystem/v3/example/file_size.cpp b/src/third_party/boost/libs/filesystem/v3/example/file_size.cpp deleted file mode 100644 index 3fbfa4ea535..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/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] ); - - 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/src/third_party/boost/libs/filesystem/v3/example/file_status.cpp b/src/third_party/boost/libs/filesystem/v3/example/file_status.cpp deleted file mode 100644 index 5d3774fdde4..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/example/file_status.cpp +++ /dev/null @@ -1,117 +0,0 @@ -// status.cpp ------------------------------------------------------------------------// - -// Copyright Beman Dawes 2011 - -// 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 <boost/config.hpp> -#include <boost/version.hpp> -#include <boost/filesystem.hpp> -#include <boost/detail/lightweight_main.hpp> - -using std::cout; using std::endl; -using namespace boost::filesystem; - -namespace -{ - path p; - - void print_boost_macros() - { - std::cout << "Boost " - << BOOST_VERSION / 100000 << '.' - << BOOST_VERSION / 100 % 1000 << '.' - << BOOST_VERSION % 100 << ", " -# ifndef _WIN64 - << BOOST_COMPILER << ", " -# else - << BOOST_COMPILER << " with _WIN64 defined, " -# endif - << BOOST_STDLIB << ", " - << BOOST_PLATFORM - << std::endl; - } - - const char* file_type_tab[] = - { "status_error", "file_not_found", "regular_file", "directory_file", - "symlink_file", "block_file", "character_file", "fifo_file", "socket_file", - "type_unknown" - }; - - const char* file_type_c_str(enum file_type t) - { - return file_type_tab[t]; - } - - void show_status(file_status s, boost::system::error_code ec) - { - boost::system::error_condition econd; - - if (ec) - { - econd = ec.default_error_condition(); - cout << "sets ec to indicate an error:\n" - << " ec.value() is " << ec.value() << '\n' - << " ec.message() is \"" << ec.message() << "\"\n" - << " ec.default_error_condition().value() is " << econd.value() << '\n' - << " ec.default_error_condition().message() is \"" << econd.message() << "\"\n"; - } - else - cout << "clears ec.\n"; - - cout << "s.type() is " << s.type() - << ", which is defined as \"" << file_type_c_str(s.type()) << "\"\n"; - - cout << "exists(s) is " << (exists(s) ? "true" : "false") << "\n"; - cout << "status_known(s) is " << (status_known(s) ? "true" : "false") << "\n"; - cout << "is_regular_file(s) is " << (is_regular_file(s) ? "true" : "false") << "\n"; - cout << "is_directory(s) is " << (is_directory(s) ? "true" : "false") << "\n"; - cout << "is_other(s) is " << (is_other(s) ? "true" : "false") << "\n"; - cout << "is_symlink(s) is " << (is_symlink(s) ? "true" : "false") << "\n"; - } - - void try_exists() - { - cout << "\nexists(" << p << ") "; - try - { - bool result = exists(p); - cout << "is " << (result ? "true" : "false") << "\n"; - } - catch (const filesystem_error& ex) - { - cout << "throws a filesystem_error exception: " << ex.what() << "\n"; - } - } - -} - -int cpp_main(int argc, char* argv[]) -{ - print_boost_macros(); - - if (argc < 2) - { - std::cout << "Usage: file_status <path>\n"; - p = argv[0]; - } - else - p = argv[1]; - - boost::system::error_code ec; - file_status s = status(p, ec); - cout << "\nfile_status s = status(" << p << ", ec) "; - show_status(s, ec); - - s = symlink_status(p, ec); - cout << "\nfile_status s = symlink_status(" << p << ", ec) "; - show_status(s, ec); - - try_exists(); - - return 0; -} diff --git a/src/third_party/boost/libs/filesystem/v3/example/mbcopy.cpp b/src/third_party/boost/libs/filesystem/v3/example/mbcopy.cpp deleted file mode 100644 index 2b1f6038233..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/example/mbcopy.cpp +++ /dev/null @@ -1,90 +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 - -// See deprecated_test for tests of deprecated features -#define BOOST_FILESYSTEM_NO_DEPRECATED - -#include <boost/filesystem/config.hpp> -# ifdef BOOST_FILESYSTEM_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 "../src/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/src/third_party/boost/libs/filesystem/v3/example/mbpath.cpp b/src/third_party/boost/libs/filesystem/v3/example/mbpath.cpp deleted file mode 100644 index 43590010f34..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/example/mbpath.cpp +++ /dev/null @@ -1,80 +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 - -#include <boost/filesystem/config.hpp> -# ifdef BOOST_FILESYSTEM_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/src/third_party/boost/libs/filesystem/v3/example/mbpath.hpp b/src/third_party/boost/libs/filesystem/v3/example/mbpath.hpp deleted file mode 100644 index f752b3fd0d5..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/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 filesystem - { - template<> struct is_basic_path<user::mbpath> - { static const bool value = true; }; - } -} diff --git a/src/third_party/boost/libs/filesystem/v3/example/path_info.cpp b/src/third_party/boost/libs/filesystem/v3/example/path_info.cpp deleted file mode 100644 index 5c32b205a0d..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/example/path_info.cpp +++ /dev/null @@ -1,83 +0,0 @@ -// path_info.cpp ---------------------------------------------------------------------// - -// Copyright Beman Dawes 2009 - -// 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 <boost/filesystem.hpp> -using namespace std; -using namespace boost::filesystem; - -const char * say_what(bool b) { return b ? "true" : "false"; } - -int main(int argc, char* argv[]) -{ - if (argc < 2) - { - cout << "Usage: path_info path-portion...\n" - "Example: path_info foo/bar baz\n" -# ifdef BOOST_POSIX_API - " would report info about the composed path foo/bar/baz\n"; -# else // BOOST_WINDOWS_API - " would report info about the composed path foo/bar\\baz\n"; -# endif - return 1; - } - - path p; // compose a path from the command line arguments - - for (; argc > 1; --argc, ++argv) - p /= argv[1]; - - cout << "\ncomposed path:\n"; - cout << " cout << -------------: " << p << "\n"; - cout << " make_preferred()----------: " << path(p).make_preferred() << "\n"; - - cout << "\nelements:\n"; - - for (path::iterator it(p.begin()), it_end(p.end()); it != it_end; ++it) - cout << " " << *it << '\n'; - - cout << "\nobservers, native format:" << endl; -# ifdef BOOST_POSIX_API - cout << " native()-------------: " << p.native() << endl; - cout << " c_str()--------------: " << p.c_str() << endl; -# else // BOOST_WINDOWS_API - wcout << L" native()-------------: " << p.native() << endl; - wcout << L" c_str()--------------: " << p.c_str() << endl; -# endif - cout << " string()-------------: " << p.string() << endl; - wcout << L" wstring()------------: " << p.wstring() << endl; - - cout << "\nobservers, generic format:\n"; - cout << " generic_string()-----: " << p.generic_string() << endl; - wcout << L" generic_wstring()----: " << p.generic_wstring() << endl; - - cout << "\ndecomposition:\n"; - cout << " root_name()----------: " << p.root_name() << '\n'; - cout << " root_directory()-----: " << p.root_directory() << '\n'; - cout << " root_path()----------: " << p.root_path() << '\n'; - cout << " relative_path()------: " << p.relative_path() << '\n'; - cout << " parent_path()--------: " << p.parent_path() << '\n'; - cout << " filename()-----------: " << p.filename() << '\n'; - cout << " stem()---------------: " << p.stem() << '\n'; - cout << " extension()----------: " << p.extension() << '\n'; - - cout << "\nquery:\n"; - cout << " empty()--------------: " << say_what(p.empty()) << '\n'; - cout << " is_absolute()--------: " << say_what(p.is_absolute()) << '\n'; - cout << " has_root_name()------: " << say_what(p.has_root_name()) << '\n'; - cout << " has_root_directory()-: " << say_what(p.has_root_directory()) << '\n'; - cout << " has_root_path()------: " << say_what(p.has_root_path()) << '\n'; - cout << " has_relative_path()--: " << say_what(p.has_relative_path()) << '\n'; - cout << " has_parent_path()----: " << say_what(p.has_parent_path()) << '\n'; - cout << " has_filename()-------: " << say_what(p.has_filename()) << '\n'; - cout << " has_stem()-----------: " << say_what(p.has_stem()) << '\n'; - cout << " has_extension()------: " << say_what(p.has_extension()) << '\n'; - - return 0; -} diff --git a/src/third_party/boost/libs/filesystem/v3/example/simple_ls.cpp b/src/third_party/boost/libs/filesystem/v3/example/simple_ls.cpp deleted file mode 100644 index 9c4b6380529..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/example/simple_ls.cpp +++ /dev/null @@ -1,91 +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 3 - -// As an example program, we don't want to use any 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/path.hpp" -#include "boost/progress.hpp" -#include <iostream> - -namespace fs = boost::filesystem; - -int main(int argc, char* argv[]) -{ - fs::path p(fs::current_path()); - - if (argc > 1) - p = fs::system_complete(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(p)) - { - std::cout << "\nNot found: " << p << std::endl; - return 1; - } - - if (fs::is_directory(p)) - { - std::cout << "\nIn directory: " << p << "\n\n"; - fs::directory_iterator end_iter; - for (fs::directory_iterator dir_itr(p); - 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: " << p << "\n"; - } - return 0; -} diff --git a/src/third_party/boost/libs/filesystem/v3/example/stems.cpp b/src/third_party/boost/libs/filesystem/v3/example/stems.cpp deleted file mode 100644 index 3699fa81f36..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/example/stems.cpp +++ /dev/null @@ -1,31 +0,0 @@ -// filesystem example stems.cpp ------------------------------------------------------// - -// Copyright Beman Dawes 2011 - -// 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 <boost/filesystem.hpp> -#include <iostream> - -int main(int argc, char* argv[]) -{ - if (argc < 2) - { - std::cout << "Usage: stems <path>\n"; - return 1; - } - - boost::filesystem::path p(argv[1]), name(p.filename()); - - for(;;) - { - std::cout << "filename " << name << " has stem " << name.stem() - << " and extension " << name.extension() << "\n"; - if (name.stem().empty() || name.extension().empty()) - return 0; - name = name.stem(); - } -} diff --git a/src/third_party/boost/libs/filesystem/v3/example/tchar.cpp b/src/third_party/boost/libs/filesystem/v3/example/tchar.cpp deleted file mode 100644 index 5f33d69e061..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/example/tchar.cpp +++ /dev/null @@ -1,39 +0,0 @@ -// Example use of Microsoft TCHAR ----------------------------------------------------// - -// Copyright Beman Dawes 2008 - -// Distributed under the Boost Software License, Version 1.0. -// See http://www.boost.org/LICENSE_1_0.txt - -#include <boost/filesystem/path.hpp> -#include <boost/filesystem/operations.hpp> -#include <string> -#include <cassert> -#include <windows.h> -#include <winnt.h> - -namespace fs = boost::filesystem; - -typedef std::basic_string<TCHAR> tstring; - -void func( const fs::path & p ) -{ - assert( fs::exists( p ) ); -} - -int main() -{ - // get a path that is known to exist - fs::path cp = fs::current_path(); - - // demo: get tstring from the path - tstring cp_as_tstring = cp.string<tstring>(); - - // demo: pass tstring to filesystem function taking path - assert( fs::exists( cp_as_tstring ) ); - - // demo: pass tstring to user function taking path - func( cp_as_tstring ); - - return 0; -} diff --git a/src/third_party/boost/libs/filesystem/v3/example/test/Jamfile.v2 b/src/third_party/boost/libs/filesystem/v3/example/test/Jamfile.v2 deleted file mode 100644 index 3b3dde5f45a..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/example/test/Jamfile.v2 +++ /dev/null @@ -1,31 +0,0 @@ -# Boost Filesystem Library Tutorial Jamfile - -# (C) Copyright Beman Dawes 2010 -# (C) Copyright Vladimir Prus 2003 - -# Distributed under the Boost Software License, Version 1.0. -# See www.boost.org/LICENSE_1_0.txt - -# Library home page: http://www.boost.org/libs/filesystem - -project - : requirements - <library>/boost/filesystem//boost_filesystem - <library>/boost/system//boost_system - <toolset>msvc:<asynch-exceptions>on - ; - -exe tut1 : tut1.cpp ; -exe tut2 : tut2.cpp ; -exe tut3 : tut3.cpp ; -exe tut4 : tut4.cpp ; -exe tut5 : tut5.cpp ; -exe path_info : path_info.cpp ; - -install tut1-copy : tut1 : <location>. ; -install tut2-copy : tut2 : <location>. ; -install tut3-copy : tut3 : <location>. ; -install tut4-copy : tut4 : <location>. ; -install tut5-copy : tut5 : <location>. ; -install path_info-copy : path_info : <location>. ; - diff --git a/src/third_party/boost/libs/filesystem/v3/example/test/bld.bat b/src/third_party/boost/libs/filesystem/v3/example/test/bld.bat deleted file mode 100644 index 97686006d2c..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/example/test/bld.bat +++ /dev/null @@ -1,7 +0,0 @@ -@echo off -rem Copyright Beman Dawes, 2010 -rem Distributed under the Boost Software License, Version 1.0. -rem See www.boost.org/LICENSE_1_0.txt - -bjam %* >bjam.log -find "error" <bjam.log diff --git a/src/third_party/boost/libs/filesystem/v3/example/test/bld.sh b/src/third_party/boost/libs/filesystem/v3/example/test/bld.sh deleted file mode 100755 index 0754fc9d6f9..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/example/test/bld.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# Copyright Beman Dawes, 2010 -# Distributed under the Boost Software License, Version 1.0. -# See www.boost.org/LICENSE_1_0.txt - -bjam $* >bjam.log -grep "error" <bjam.log diff --git a/src/third_party/boost/libs/filesystem/v3/example/test/setup.bat b/src/third_party/boost/libs/filesystem/v3/example/test/setup.bat deleted file mode 100644 index 23a73f4693e..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/example/test/setup.bat +++ /dev/null @@ -1,13 +0,0 @@ -@echo off -rem Copyright Beman Dawes, 2010 -rem Distributed under the Boost Software License, Version 1.0. -rem See www.boost.org/LICENSE_1_0.txt - -copy /y ..\tut1.cpp >nul -copy /y ..\tut2.cpp >nul -copy /y ..\tut3.cpp >nul -copy /y ..\tut4.cpp >nul -copy /y ..\tut5.cpp >nul -copy /y ..\path_info.cpp >nul -del *.exe 2>nul -del *.pdb 2>nul diff --git a/src/third_party/boost/libs/filesystem/v3/example/test/setup.sh b/src/third_party/boost/libs/filesystem/v3/example/test/setup.sh deleted file mode 100755 index c2f3c798155..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/example/test/setup.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash - -# Copyright Beman Dawes, 2010 -# Distributed under the Boost Software License, Version 1.0. -# See www.boost.org/LICENSE_1_0.txt - -cp ../tut1.cpp . -cp ../tut2.cpp . -cp ../tut3.cpp . -cp ../tut4.cpp . -cp ../tut5.cpp . -cp ../path_info.cpp . -rm tut1 2>~/junk -rm tut2 2>~/junk -rm tut3 2>~/junk -rm tut4 2>~/junk -rm tut5 2>~/junk -rm path_info 2>~/junk - diff --git a/src/third_party/boost/libs/filesystem/v3/example/tut0.cpp b/src/third_party/boost/libs/filesystem/v3/example/tut0.cpp deleted file mode 100644 index 40551009967..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/example/tut0.cpp +++ /dev/null @@ -1,25 +0,0 @@ -// filesystem tut0.cpp ---------------------------------------------------------------// - -// Copyright Beman Dawes 2009 - -// 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 <boost/filesystem.hpp> -namespace fs = boost::filesystem; - -int main(int argc, char* argv[]) -{ - if (argc < 2) - { - std::cout << "Usage: tut0 path\n"; - return 1; - } - - std::cout << argv[1] << '\n'; - - return 0; -} diff --git a/src/third_party/boost/libs/filesystem/v3/example/tut1.cpp b/src/third_party/boost/libs/filesystem/v3/example/tut1.cpp deleted file mode 100644 index 3ac85b9035c..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/example/tut1.cpp +++ /dev/null @@ -1,23 +0,0 @@ -// filesystem tut1.cpp ---------------------------------------------------------------// - -// Copyright Beman Dawes 2009 - -// 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 <boost/filesystem.hpp> -using namespace boost::filesystem; - -int main(int argc, char* argv[]) -{ - if (argc < 2) - { - std::cout << "Usage: tut1 path\n"; - return 1; - } - std::cout << argv[1] << " " << file_size(argv[1]) << '\n'; - return 0; -} diff --git a/src/third_party/boost/libs/filesystem/v3/example/tut2.cpp b/src/third_party/boost/libs/filesystem/v3/example/tut2.cpp deleted file mode 100644 index 2ca8562d2bf..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/example/tut2.cpp +++ /dev/null @@ -1,40 +0,0 @@ -// filesystem tut2.cpp ---------------------------------------------------------------// - -// Copyright Beman Dawes 2009 - -// 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 <boost/filesystem.hpp> -using namespace std; -using namespace boost::filesystem; - -int main(int argc, char* argv[]) -{ - if (argc < 2) - { - cout << "Usage: tut2 path\n"; - return 1; - } - - path p (argv[1]); // p reads clearer than argv[1] in the following code - - if (exists(p)) // does p actually exist? - { - if (is_regular_file(p)) // is p a regular file? - cout << p << " size is " << file_size(p) << '\n'; - - else if (is_directory(p)) // is p a directory? - cout << p << " is a directory\n"; - - else - cout << p << " exists, but is neither a regular file nor a directory\n"; - } - else - cout << p << " does not exist\n"; - - return 0; -} diff --git a/src/third_party/boost/libs/filesystem/v3/example/tut3.cpp b/src/third_party/boost/libs/filesystem/v3/example/tut3.cpp deleted file mode 100644 index bb4494eaf04..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/example/tut3.cpp +++ /dev/null @@ -1,56 +0,0 @@ -// filesystem tut3.cpp ---------------------------------------------------------------// - -// Copyright Beman Dawes 2009 - -// 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 <iterator> -#include <algorithm> -#include <boost/filesystem.hpp> -using namespace std; -using namespace boost::filesystem; - -int main(int argc, char* argv[]) -{ - if (argc < 2) - { - cout << "Usage: tut3 path\n"; - return 1; - } - - path p (argv[1]); // p reads clearer than argv[1] in the following code - - try - { - if (exists(p)) // does p actually exist? - { - if (is_regular_file(p)) // is p a regular file? - cout << p << " size is " << file_size(p) << '\n'; - - else if (is_directory(p)) // is p a directory? - { - cout << p << " is a directory containing:\n"; - - copy(directory_iterator(p), directory_iterator(), // directory_iterator::value_type - ostream_iterator<directory_entry>(cout, "\n")); // is directory_entry, which is - // converted to a path by the - // path stream inserter - } - else - cout << p << " exists, but is neither a regular file nor a directory\n"; - } - else - cout << p << " does not exist\n"; - } - - catch (const filesystem_error& ex) - { - cout << ex.what() << '\n'; - } - - return 0; -} diff --git a/src/third_party/boost/libs/filesystem/v3/example/tut4.cpp b/src/third_party/boost/libs/filesystem/v3/example/tut4.cpp deleted file mode 100644 index 5888c3acbf3..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/example/tut4.cpp +++ /dev/null @@ -1,65 +0,0 @@ -// filesystem tut4.cpp ---------------------------------------------------------------// - -// Copyright Beman Dawes 2009 - -// 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 <iterator> -#include <vector> -#include <algorithm> -#include <boost/filesystem.hpp> -using namespace std; -using namespace boost::filesystem; - -int main(int argc, char* argv[]) -{ - if (argc < 2) - { - cout << "Usage: tut4 path\n"; - return 1; - } - - path p (argv[1]); // p reads clearer than argv[1] in the following code - - try - { - if (exists(p)) // does p actually exist? - { - if (is_regular_file(p)) // is p a regular file? - cout << p << " size is " << file_size(p) << '\n'; - - else if (is_directory(p)) // is p a directory? - { - cout << p << " is a directory containing:\n"; - - typedef vector<path> vec; // store paths, - vec v; // so we can sort them later - - copy(directory_iterator(p), directory_iterator(), back_inserter(v)); - - sort(v.begin(), v.end()); // sort, since directory iteration - // is not ordered on some file systems - - for (vec::const_iterator it(v.begin()), it_end(v.end()); it != it_end; ++it) - { - cout << " " << *it << '\n'; - } - } - else - cout << p << " exists, but is neither a regular file nor a directory\n"; - } - else - cout << p << " does not exist\n"; - } - - catch (const filesystem_error& ex) - { - cout << ex.what() << '\n'; - } - - return 0; -} diff --git a/src/third_party/boost/libs/filesystem/v3/example/tut5.cpp b/src/third_party/boost/libs/filesystem/v3/example/tut5.cpp deleted file mode 100644 index d665b0db05c..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/example/tut5.cpp +++ /dev/null @@ -1,52 +0,0 @@ -// filesystem tut5.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 <boost/filesystem/fstream.hpp> -#include <string> -#include <list> -namespace fs = boost::filesystem; - -int main() -{ - // \u263A is "Unicode WHITE SMILING FACE = have a nice day!" - std::string narrow_string ("smile2"); - std::wstring wide_string (L"smile2\u263A"); - std::list<char> narrow_list; - narrow_list.push_back('s'); - narrow_list.push_back('m'); - narrow_list.push_back('i'); - narrow_list.push_back('l'); - narrow_list.push_back('e'); - narrow_list.push_back('3'); - std::list<wchar_t> wide_list; - wide_list.push_back(L's'); - wide_list.push_back(L'm'); - wide_list.push_back(L'i'); - wide_list.push_back(L'l'); - wide_list.push_back(L'e'); - wide_list.push_back(L'3'); - wide_list.push_back(L'\u263A'); - - { fs::ofstream f("smile"); } - { fs::ofstream f(L"smile\u263A"); } - { fs::ofstream f(narrow_string); } - { fs::ofstream f(wide_string); } - { fs::ofstream f(narrow_list); } - { fs::ofstream f(wide_list); } - narrow_list.pop_back(); - narrow_list.push_back('4'); - wide_list.pop_back(); - wide_list.pop_back(); - wide_list.push_back(L'4'); - wide_list.push_back(L'\u263A'); - { fs::ofstream f(fs::path(narrow_list.begin(), narrow_list.end())); } - { fs::ofstream f(fs::path(wide_list.begin(), wide_list.end())); } - - return 0; -} diff --git a/src/third_party/boost/libs/filesystem/v3/index.html b/src/third_party/boost/libs/filesystem/v3/index.html deleted file mode 100644 index bbd0918eca1..00000000000 --- a/src/third_party/boost/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>© 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/src/third_party/boost/libs/filesystem/v3/src/codecvt_error_category.cpp b/src/third_party/boost/libs/filesystem/v3/src/codecvt_error_category.cpp deleted file mode 100644 index b35b4a9ae76..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/src/codecvt_error_category.cpp +++ /dev/null @@ -1,93 +0,0 @@ -// codecvt_error_category implementation file ----------------------------------------// - -// Copyright Beman Dawes 2009 - -// Distributed under the Boost Software License, Version 1.0. -// See http://www.boost.org/LICENSE_1_0.txt) - -// Library home page at http://www.boost.org/libs/filesystem - -//--------------------------------------------------------------------------------------// - -#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 -// 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/v3/config.hpp> -#include <boost/filesystem/v3/path_traits.hpp> -#include <boost/system/error_code.hpp> -#include <locale> -#include <vector> -#include <cstdlib> -#include <cassert> - -//--------------------------------------------------------------------------------------// - -namespace -{ - class codecvt_error_cat : public boost::system::error_category - { - public: - codecvt_error_cat(){} - const char* name() const; - std::string message(int ev) const; - }; - - const char* codecvt_error_cat::name() const - { - return "codecvt"; - } - - std::string codecvt_error_cat::message(int ev) const - { - std::string str; - switch (ev) - { - case std::codecvt_base::ok: - str = "ok"; - break; - case std::codecvt_base::partial: - str = "partial"; - break; - case std::codecvt_base::error: - str = "error"; - break; - case std::codecvt_base::noconv: - str = "noconv"; - break; - default: - str = "unknown error"; - } - return str; - } - -} // unnamed namespace - -namespace boost -{ - namespace filesystem3 - { - - BOOST_FILESYSTEM_DECL const boost::system::error_category& codecvt_error_category() - { - static const codecvt_error_cat codecvt_error_cat_const; - return codecvt_error_cat_const; - } - - } // namespace filesystem3 -} // namespace boost - -#endif // no wide character support diff --git a/src/third_party/boost/libs/filesystem/v3/src/operations.cpp b/src/third_party/boost/libs/filesystem/v3/src/operations.cpp deleted file mode 100644 index 87e75d7f6f5..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/src/operations.cpp +++ /dev/null @@ -1,2202 +0,0 @@ -// operations.cpp --------------------------------------------------------------------// - -// Copyright 2002-2009 Beman Dawes -// Copyright 2001 Dietmar Kuehl - -// Distributed under the Boost Software License, Version 1.0. -// See http://www.boost.org/LICENSE_1_0.txt - -// See library home page at http://www.boost.org/libs/filesystem - -//--------------------------------------------------------------------------------------// - -// define 64-bit offset macros BEFORE including boost/config.hpp (see ticket #5355) -#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. -#else -#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 -# define BOOST_SYSTEM_NO_DEPRECATED -#endif - -#ifndef _POSIX_PTHREAD_SEMANTICS -# define _POSIX_PTHREAD_SEMANTICS // Sun readdir_r()needs this -#endif - -#include <boost/filesystem/v3/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 -# include <stdio.h> -#endif -#include <cerrno> - -#ifdef BOOST_FILEYSTEM_INCLUDE_IOSTREAM -# include <iostream> -#endif - -namespace fs = boost::filesystem3; -using boost::filesystem3::path; -using boost::filesystem3::filesystem_error; -using boost::filesystem3::perms; -using boost::system::error_code; -using boost::system::error_category; -using boost::system::system_category; -using std::string; -using std::wstring; - -# ifdef BOOST_POSIX_API - - const fs::path dot_path("."); - const fs::path dot_dot_path(".."); -# 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" - -# else // BOOST_WINDOW_API - - const fs::path dot_path(L"."); - const fs::path dot_dot_path(L".."); -# if (defined(__MINGW32__) || defined(__CYGWIN__)) && !defined(WINVER) - // Versions of MinGW or Cygwin that support Filesystem V3 support at least WINVER 0x501. - // See MinGW's windef.h -# define WINVER 0x501 -# endif -# include <io.h> -# include <windows.h> -# include <winnt.h> -# if !defined(_WIN32_WINNT) -# define _WIN32_WINNT 0x0500 -# endif -# if defined(__BORLANDC__) || defined(__MWERKS__) -# if defined(__BORLANDC__) - using std::time_t; -# endif -# include <utime.h> -# else -# include <sys/utime.h> -# endif - -// REPARSE_DATA_BUFFER related definitions are found in ntifs.h, which is part of the -// Windows Device Driver Kit. Since that's inconvenient, the definitions are provided -// here. See http://msdn.microsoft.com/en-us/library/ms791514.aspx - -#if !defined(REPARSE_DATA_BUFFER_HEADER_SIZE) // mingw winnt.h does provide the defs - -#define SYMLINK_FLAG_RELATIVE 1 - -typedef struct _REPARSE_DATA_BUFFER { - ULONG ReparseTag; - USHORT ReparseDataLength; - USHORT Reserved; - union { - struct { - USHORT SubstituteNameOffset; - USHORT SubstituteNameLength; - USHORT PrintNameOffset; - USHORT PrintNameLength; - ULONG Flags; - WCHAR PathBuffer[1]; - /* Example of distinction between substitute and print names: - mklink /d ldrive c:\ - SubstituteName: c:\\??\ - PrintName: c:\ - */ - } SymbolicLinkReparseBuffer; - struct { - USHORT SubstituteNameOffset; - USHORT SubstituteNameLength; - USHORT PrintNameOffset; - USHORT PrintNameLength; - WCHAR PathBuffer[1]; - } MountPointReparseBuffer; - struct { - UCHAR DataBuffer[1]; - } GenericReparseBuffer; - }; -} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER; - -#define REPARSE_DATA_BUFFER_HEADER_SIZE \ - FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer) - -#endif - -#ifndef MAXIMUM_REPARSE_DATA_BUFFER_SIZE -#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE ( 16 * 1024 ) -#endif - -# ifndef FSCTL_GET_REPARSE_POINT -# define FSCTL_GET_REPARSE_POINT 0x900a8 -# endif - -# ifndef IO_REPARSE_TAG_SYMLINK -# define IO_REPARSE_TAG_SYMLINK (0xA000000CL) -# endif - -# endif // BOOST_WINDOWS_API - -// 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 -# define BOOST_FILESYSTEM_STATUS_CACHE -# endif - -// POSIX/Windows macros ----------------------------------------------------// - -// Portions of the POSIX and Windows API's are very similar, except for name, -// order of arguments, and meaning of zero/non-zero returns. The macros below -// abstract away those differences. They follow Windows naming and order of -// arguments, and return true to indicate no error occurred. [POSIX naming, -// order of arguments, and meaning of return were followed initially, but -// found to be less clear and cause more coding errors.] - -# if defined(BOOST_POSIX_API) - -// POSIX uses a 0 return to indicate success -# define BOOST_ERRNO errno -# define BOOST_SET_CURRENT_DIRECTORY(P)(::chdir(P)== 0) -# define BOOST_CREATE_DIRECTORY(P)(::mkdir(P, S_IRWXU|S_IRWXG|S_IRWXO)== 0) -# define BOOST_CREATE_HARD_LINK(F,T)(::link(T, F)== 0) -# define BOOST_CREATE_SYMBOLIC_LINK(F,T,Flag)(::symlink(T, F)== 0) -# define BOOST_REMOVE_DIRECTORY(P)(::rmdir(P)== 0) -# define BOOST_DELETE_FILE(P)(::unlink(P)== 0) -# define BOOST_COPY_DIRECTORY(F,T)(!(::stat(from.c_str(), &from_stat)!= 0\ - || ::mkdir(to.c_str(),from_stat.st_mode)!= 0)) -# define BOOST_COPY_FILE(F,T,FailIfExistsBool)copy_file_api(F, T, FailIfExistsBool) -# define BOOST_MOVE_FILE(OLD,NEW)(::rename(OLD, NEW)== 0) -# define BOOST_RESIZE_FILE(P,SZ)(::truncate(P, SZ)== 0) - -# define BOOST_ERROR_NOT_SUPPORTED ENOSYS -# define BOOST_ERROR_ALREADY_EXISTS EEXIST - -# else // BOOST_WINDOWS_API - -// Windows uses a non-0 return to indicate success -# define BOOST_ERRNO ::GetLastError() -# define BOOST_SET_CURRENT_DIRECTORY(P)(::SetCurrentDirectoryW(P)!= 0) -# define BOOST_CREATE_DIRECTORY(P)(::CreateDirectoryW(P, 0)!= 0) -# define BOOST_CREATE_HARD_LINK(F,T)(create_hard_link_api(F, T, 0)!= 0) -# define BOOST_CREATE_SYMBOLIC_LINK(F,T,Flag)(create_symbolic_link_api(F, T, Flag)!= 0) -# define BOOST_REMOVE_DIRECTORY(P)(::RemoveDirectoryW(P)!= 0) -# 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_RESIZE_FILE(P,SZ)(resize_file_api(P, SZ)!= 0) -# define BOOST_READ_SYMLINK(P,T) - -# define BOOST_ERROR_ALREADY_EXISTS ERROR_ALREADY_EXISTS -# define BOOST_ERROR_NOT_SUPPORTED ERROR_NOT_SUPPORTED - -# endif - -//--------------------------------------------------------------------------------------// -// // -// helpers (all operating systems) // -// // -//--------------------------------------------------------------------------------------// - -namespace -{ - - fs::file_type query_file_type(const path& p, error_code* ec); - - boost::filesystem3::directory_iterator end_dir_itr; - - const std::size_t buf_size(128); - const error_code ok; - - bool error(bool was_error, error_code* ec, const string& message) - { - if (!was_error) - { - if (ec != 0) ec->clear(); - } - else - { // error - if (ec == 0) - BOOST_FILESYSTEM_THROW(filesystem_error(message, - error_code(BOOST_ERRNO, system_category()))); - else - ec->assign(BOOST_ERRNO, system_category()); - } - return was_error; - } - - bool error(bool was_error, const path& p, error_code* ec, const string& message) - { - if (!was_error) - { - if (ec != 0) ec->clear(); - } - else - { // error - if (ec == 0) - BOOST_FILESYSTEM_THROW(filesystem_error(message, - p, error_code(BOOST_ERRNO, system_category()))); - else - ec->assign(BOOST_ERRNO, system_category()); - } - return was_error; - } - - bool error(bool was_error, const path& p1, const path& p2, error_code* ec, - const string& message) - { - if (!was_error) - { - if (ec != 0) ec->clear(); - } - else - { // error - if (ec == 0) - BOOST_FILESYSTEM_THROW(filesystem_error(message, - p1, p2, error_code(BOOST_ERRNO, system_category()))); - else - ec->assign(BOOST_ERRNO, system_category()); - } - return was_error; - } - - bool error(bool was_error, const error_code& result, - const path& p, error_code* ec, const string& message) - // Overwrites ec if there has already been an error - { - if (!was_error) - { - if (ec != 0) ec->clear(); - } - else - { // error - if (ec == 0) - BOOST_FILESYSTEM_THROW(filesystem_error(message, p, result)); - else - *ec = result; - } - return was_error; - } - - bool error(bool was_error, const error_code& result, - const path& p1, const path& p2, error_code* ec, const string& message) - // Overwrites ec if there has already been an error - { - if (!was_error) - { - if (ec != 0) ec->clear(); - } - else - { // error - if (ec == 0) - BOOST_FILESYSTEM_THROW(filesystem_error(message, p1, p2, result)); - else - *ec = result; - } - return was_error; - } - - bool is_empty_directory(const path& p) - { - return fs::directory_iterator(p)== end_dir_itr; - } - - bool remove_directory(const path& p) // true if succeeds - { return BOOST_REMOVE_DIRECTORY(p.c_str()); } - - bool remove_file(const path& p) // true if succeeds - { return BOOST_DELETE_FILE(p.c_str()); } - - // called by remove and remove_all_aux - bool remove_file_or_directory(const path& p, fs::file_type type, error_code* ec) - // return true if file removed, false if not removed - { - if (type == fs::file_not_found) - { - if (ec != 0) ec->clear(); - return false; - } - - if (type == fs::directory_file -# ifdef BOOST_WINDOWS_API - || type == fs::_detail_directory_symlink -# endif - ) - { - if (error(!remove_directory(p), p, ec, "boost::filesystem::remove")) - return false; - } - else - { - if (error(!remove_file(p), p, ec, "boost::filesystem::remove")) - return false; - } - return true; - } - - boost::uintmax_t remove_all_aux(const path& p, fs::file_type type, - error_code* ec) - { - boost::uintmax_t count = 1; - - if (type == fs::directory_file) // but not a directory symlink - { - for (fs::directory_iterator itr(p); - itr != end_dir_itr; ++itr) - { - fs::file_type tmp_type = query_file_type(itr->path(), ec); - if (ec != 0 && *ec) - return count; - count += remove_all_aux(itr->path(), tmp_type, ec); - } - } - remove_file_or_directory(p, type, ec); - return count; - } - -#ifdef BOOST_POSIX_API - -//--------------------------------------------------------------------------------------// -// // -// POSIX-specific helpers // -// // -//--------------------------------------------------------------------------------------// - - const char dot = '.'; - - bool not_found_error(int errval) - { - return errno == ENOENT || errno == ENOTDIR; - } - - bool // true if ok - copy_file_api(const std::string& from_p, - const std::string& to_p, 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_p.c_str(), O_RDONLY))< 0) - { return false; } - - struct stat from_stat; - if (::stat(from_p.c_str(), &from_stat)!= 0) - { - ::close(infile); - return false; - } - - int oflag = O_CREAT | O_WRONLY | O_TRUNC; - if (fail_if_exists) - oflag |= O_EXCL; - if ((outfile = ::open(to_p.c_str(), oflag, from_stat.st_mode))< 0) - { - int open_errno = errno; - BOOST_ASSERT(infile >= 0); - ::close(infile); - errno = open_errno; - return false; - } - - 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 sz_read >= 0; - } - - inline fs::file_type query_file_type(const path& p, error_code* ec) - { - return fs::detail::symlink_status(p, ec).type(); - } - -# else - -//--------------------------------------------------------------------------------------// -// // -// Windows-specific helpers // -// // -//--------------------------------------------------------------------------------------// - - const wchar_t dot = L'.'; - - bool not_found_error(int errval) - { - return errval == ERROR_FILE_NOT_FOUND - || errval == ERROR_PATH_NOT_FOUND - || errval == ERROR_INVALID_NAME // "tools/jam/src/:sys:stat.h", "//foo" - || errval == ERROR_INVALID_DRIVE // USB card reader with no card inserted - || errval == ERROR_NOT_READY // CD/DVD drive with no disc inserted - || errval == ERROR_INVALID_PARAMETER // ":sys:stat.h" - || errval == ERROR_BAD_PATHNAME // "//nosuch" on Win64 - || errval == ERROR_BAD_NETPATH; // "//nosuch" on Win32 - } - -// some distributions of mingw as early as GLIBCXX__ 20110325 have _stricmp, but the -// offical 4.6.2 release with __GLIBCXX__ 20111026 doesn't. Play it safe for now, and -// only use _stricmp if _MSC_VER is defined -#if defined(_MSC_VER) // || (defined(__GLIBCXX__) && __GLIBCXX__ >= 20110325) -# define BOOST_FILESYSTEM_STRICMP _stricmp -#else -# define BOOST_FILESYSTEM_STRICMP strcmp -#endif - - perms make_permissions(const path& p, DWORD attr) - { - perms prms = fs::owner_read | fs::group_read | fs::others_read; - if ((attr & FILE_ATTRIBUTE_READONLY) == 0) - prms |= fs::owner_write | fs::group_write | fs::others_write; - if (BOOST_FILESYSTEM_STRICMP(p.extension().string().c_str(), ".exe") == 0 - || BOOST_FILESYSTEM_STRICMP(p.extension().string().c_str(), ".com") == 0 - || BOOST_FILESYSTEM_STRICMP(p.extension().string().c_str(), ".bat") == 0 - || BOOST_FILESYSTEM_STRICMP(p.extension().string().c_str(), ".cmd") == 0) - prms |= fs::owner_exe | fs::group_exe | fs::others_exe; - return prms; - } - - // 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); - } - - // 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); - } - }; - - HANDLE create_file_handle(const path& p, DWORD dwDesiredAccess, - DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, - DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, - HANDLE hTemplateFile) - { - return ::CreateFileW(p.c_str(), dwDesiredAccess, dwShareMode, - lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, - hTemplateFile); - } - - bool is_reparse_point_a_symlink(const path& p) - { - handle_wrapper h(create_file_handle(p, FILE_READ_EA, - FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, - FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT, NULL)); - if (h.handle == INVALID_HANDLE_VALUE) - return false; - - boost::scoped_array<char> buf(new char [MAXIMUM_REPARSE_DATA_BUFFER_SIZE]); - - // Query the reparse data - DWORD dwRetLen; - BOOL result = ::DeviceIoControl(h.handle, FSCTL_GET_REPARSE_POINT, NULL, 0, buf.get(), - MAXIMUM_REPARSE_DATA_BUFFER_SIZE, &dwRetLen, NULL); - if (!result) return false; - - return reinterpret_cast<const REPARSE_DATA_BUFFER*>(buf.get()) - ->ReparseTag == IO_REPARSE_TAG_SYMLINK; - } - - inline std::size_t get_full_path_name( - const path& src, std::size_t len, wchar_t* buf, wchar_t** p) - { - return static_cast<std::size_t>( - ::GetFullPathNameW(src.c_str(), static_cast<DWORD>(len), buf, p)); - } - - fs::file_status process_status_failure(const path& p, error_code* ec) - { - int errval(::GetLastError()); - if (ec != 0) // always report errval, even though some - ec->assign(errval, system_category()); // errval values are not status_errors - - if (not_found_error(errval)) - { - return fs::file_status(fs::file_not_found, fs::no_perms); - } - else if ((errval == ERROR_SHARING_VIOLATION)) - { - return fs::file_status(fs::type_unknown); - } - if (ec == 0) - BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::status", - p, error_code(errval, system_category()))); - return fs::file_status(fs::status_error); - } - - // differs from symlink_status() in that directory symlinks are reported as - // _detail_directory_symlink, as required on Windows by remove() and its helpers. - fs::file_type query_file_type(const path& p, error_code* ec) - { - DWORD attr(::GetFileAttributesW(p.c_str())); - if (attr == 0xFFFFFFFF) - { - return process_status_failure(p, ec).type(); - } - - if (ec != 0) ec->clear(); - - if (attr & FILE_ATTRIBUTE_REPARSE_POINT) - { - if (is_reparse_point_a_symlink(p)) - return (attr & FILE_ATTRIBUTE_DIRECTORY) - ? fs::_detail_directory_symlink - : fs::symlink_file; - return fs::reparse_file; - } - - return (attr & FILE_ATTRIBUTE_DIRECTORY) - ? fs::directory_file - : fs::regular_file; - } - - BOOL resize_file_api(const wchar_t* p, boost::uintmax_t size) - { - HANDLE handle = CreateFileW(p, GENERIC_WRITE, 0, 0, OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, 0); - LARGE_INTEGER sz; - sz.QuadPart = size; - return handle != INVALID_HANDLE_VALUE - && ::SetFilePointerEx(handle, sz, 0, FILE_BEGIN) - && ::SetEndOfFile(handle) - && ::CloseHandle(handle); - } - - // Windows kernel32.dll functions that may or may not be present - // must be accessed through pointers - - typedef BOOL (WINAPI *PtrCreateHardLinkW)( - /*__in*/ LPCWSTR lpFileName, - /*__in*/ LPCWSTR lpExistingFileName, - /*__reserved*/ LPSECURITY_ATTRIBUTES lpSecurityAttributes - ); - - PtrCreateHardLinkW create_hard_link_api = PtrCreateHardLinkW( - ::GetProcAddress( - ::GetModuleHandle(TEXT("kernel32.dll")), "CreateHardLinkW")); - - typedef BOOLEAN (WINAPI *PtrCreateSymbolicLinkW)( - /*__in*/ LPCWSTR lpSymlinkFileName, - /*__in*/ LPCWSTR lpTargetFileName, - /*__in*/ DWORD dwFlags - ); - - PtrCreateSymbolicLinkW create_symbolic_link_api = PtrCreateSymbolicLinkW( - ::GetProcAddress( - ::GetModuleHandle(TEXT("kernel32.dll")), "CreateSymbolicLinkW")); - -#endif - -//#ifdef BOOST_WINDOWS_API -// -// -// 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; } -// -//#endif - -} // unnamed namespace - -//--------------------------------------------------------------------------------------// -// // -// operations functions declared in operations.hpp // -// in alphabetic order // -// // -//--------------------------------------------------------------------------------------// - -namespace boost -{ -namespace filesystem3 -{ - - BOOST_FILESYSTEM_DECL - path absolute(const path& p, const path& base) - { -// if ( p.empty() || p.is_absolute() ) -// return p; -// // recursively calling absolute is sub-optimal, but is simple -// path abs_base(base.is_absolute() ? base : absolute(base)); -//# ifdef BOOST_WINDOWS_API -// if (p.has_root_directory()) -// return abs_base.root_name() / p; -// // !p.has_root_directory -// if (p.has_root_name()) -// return p.root_name() -// / abs_base.root_directory() / abs_base.relative_path() / p.relative_path(); -// // !p.has_root_name() -//# endif -// return abs_base / p; - - // recursively calling absolute is sub-optimal, but is sure and simple - path abs_base(base.is_absolute() ? base : absolute(base)); - - // store expensive to compute values that are needed multiple times - path p_root_name (p.root_name()); - path base_root_name (abs_base.root_name()); - path p_root_directory (p.root_directory()); - - if (p.empty()) - return abs_base; - - if (!p_root_name.empty()) // p.has_root_name() - { - if (p_root_directory.empty()) // !p.has_root_directory() - return p_root_name / abs_base.root_directory() - / abs_base.relative_path() / p.relative_path(); - // p is absolute, so fall through to return p at end of block - } - - else if (!p_root_directory.empty()) // p.has_root_directory() - { -# ifdef BOOST_POSIX_API - // POSIX can have root name it it is a network path - if (base_root_name.empty()) // !abs_base.has_root_name() - return p; -# endif - return base_root_name / p; - } - - else - { - return abs_base / p; - } - - return p; // p.is_absolute() is true - } - -namespace detail -{ - 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 - } - - BOOST_FILESYSTEM_DECL - path canonical(const path& p, const path& base, system::error_code* ec) - { - path source (p.is_absolute() ? p : absolute(p, base)); - path result; - - system::error_code local_ec; - file_status stat (status(source, local_ec)); - - if (stat.type() == fs::file_not_found) - { - if (ec == 0) - BOOST_FILESYSTEM_THROW(filesystem_error( - "boost::filesystem::canonical", source, - error_code(system::errc::no_such_file_or_directory, system::generic_category()))); - ec->assign(system::errc::no_such_file_or_directory, system::generic_category()); - return result; - } - else if (local_ec) - { - if (ec == 0) - BOOST_FILESYSTEM_THROW(filesystem_error( - "boost::filesystem::canonical", source, local_ec)); - *ec = local_ec; - return result; - } - - bool scan (true); - while (scan) - { - scan = false; - result.clear(); - for (path::iterator itr = source.begin(); itr != source.end(); ++itr) - { - if (*itr == dot_path) - continue; - if (*itr == dot_dot_path) - { - result.remove_filename(); - continue; - } - - result /= *itr; - - bool is_sym (is_symlink(detail::symlink_status(result, ec))); - if (ec && *ec) - return path(); - - if (is_sym) - { - path link(detail::read_symlink(result, ec)); - if (ec && *ec) - return path(); - result.remove_filename(); - - if (link.is_absolute()) - { - for (++itr; itr != source.end(); ++itr) - link /= *itr; - source = link; - } - else // link is relative - { - path new_source(result); - new_source /= link; - for (++itr; itr != source.end(); ++itr) - new_source /= *itr; - source = new_source; - } - scan = true; // symlink causes scan to be restarted - break; - } - } - } - if (ec != 0) - ec->clear(); - BOOST_ASSERT_MSG(result.is_absolute(), "canonical() implementation error; please report"); - return result; - } - - BOOST_FILESYSTEM_DECL - void copy(const path& from, const path& to, system::error_code* ec) - { - file_status s(symlink_status(from, *ec)); - if (ec != 0 && *ec) return; - - if(is_symlink(s)) - { - copy_symlink(from, to, *ec); - } - else if(is_directory(s)) - { - copy_directory(from, to, *ec); - } - else if(is_regular_file(s)) - { - copy_file(from, to, copy_option::fail_if_exists, *ec); - } - else - { - if (ec == 0) - BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::copy", - from, to, error_code(BOOST_ERROR_NOT_SUPPORTED, system_category()))); - ec->assign(BOOST_ERROR_NOT_SUPPORTED, system_category()); - } - } - - BOOST_FILESYSTEM_DECL - void copy_directory(const path& from, const path& to, system::error_code* ec) - { -# ifdef BOOST_POSIX_API - struct stat from_stat; -# endif - error(!BOOST_COPY_DIRECTORY(from.c_str(), to.c_str()), - from, to, ec, "boost::filesystem::copy_directory"); - } - - BOOST_FILESYSTEM_DECL - void copy_file(const path& from, const path& to, - BOOST_SCOPED_ENUM(copy_option)option, - error_code* ec) - { - error(!BOOST_COPY_FILE(from.c_str(), to.c_str(), - option == copy_option::fail_if_exists), - from, to, ec, "boost::filesystem::copy_file"); - } - - BOOST_FILESYSTEM_DECL - void copy_symlink(const path& existing_symlink, const path& new_symlink, - system::error_code* ec) - { -# if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0600 - error(true, error_code(BOOST_ERROR_NOT_SUPPORTED, system_category()), - new_symlink, existing_symlink, ec, - "boost::filesystem::copy_symlink"); - -# else // modern Windows or BOOST_POSIX_API - path p(read_symlink(existing_symlink, ec)); - if (ec != 0 && *ec) return; - create_symlink(p, new_symlink, ec); - -# endif - } - - BOOST_FILESYSTEM_DECL - bool create_directories(const path& p, system::error_code* ec) - { - if (p.empty() || exists(p)) - { - if (!p.empty() && !is_directory(p)) - { - 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()); - } - 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; - } - - BOOST_FILESYSTEM_DECL - bool create_directory(const path& p, error_code* ec) - { - if (BOOST_CREATE_DIRECTORY(p.c_str())) - { - if (ec != 0) ec->clear(); - return true; - } - - // attempt to create directory failed - int errval(BOOST_ERRNO); // save reason for failure - error_code dummy; - if (errval == BOOST_ERROR_ALREADY_EXISTS && is_directory(p, dummy)) - { - if (ec != 0) ec->clear(); - return false; - } - - // attempt to create directory failed && it doesn't already exist - if (ec == 0) - BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::create_directory", - p, error_code(errval, system_category()))); - else - ec->assign(errval, system_category()); - return false; - } - - BOOST_FILESYSTEM_DECL - void create_directory_symlink(const path& to, const path& from, - system::error_code* ec) - { -# if defined(BOOST_WINDOWS_API) && _WIN32_WINNT < 0x0600 // SDK earlier than Vista and Server 2008 - - error(true, error_code(BOOST_ERROR_NOT_SUPPORTED, system_category()), to, from, ec, - "boost::filesystem::create_directory_symlink"); -# else - -# if defined(BOOST_WINDOWS_API) && _WIN32_WINNT >= 0x0600 - // see if actually supported by Windows runtime dll - if (error(!create_symbolic_link_api, - error_code(BOOST_ERROR_NOT_SUPPORTED, system_category()), - to, from, ec, - "boost::filesystem::create_directory_symlink")) - return; -# endif - - error(!BOOST_CREATE_SYMBOLIC_LINK(from.c_str(), to.c_str(), SYMBOLIC_LINK_FLAG_DIRECTORY), - to, from, ec, "boost::filesystem::create_directory_symlink"); -# endif - } - - BOOST_FILESYSTEM_DECL - void create_hard_link(const path& to, const path& from, error_code* ec) - { - -# if defined(BOOST_WINDOWS_API) && _WIN32_WINNT < 0x0500 // SDK earlier than Win 2K - - error(true, error_code(BOOST_ERROR_NOT_SUPPORTED, system_category()), to, from, ec, - "boost::filesystem::create_hard_link"); -# else - -# if defined(BOOST_WINDOWS_API) && _WIN32_WINNT >= 0x0500 - // see if actually supported by Windows runtime dll - if (error(!create_hard_link_api, - error_code(BOOST_ERROR_NOT_SUPPORTED, system_category()), - to, from, ec, - "boost::filesystem::create_hard_link")) - return; -# endif - - error(!BOOST_CREATE_HARD_LINK(from.c_str(), to.c_str()), to, from, ec, - "boost::filesystem::create_hard_link"); -# endif - } - - BOOST_FILESYSTEM_DECL - void create_symlink(const path& to, const path& from, error_code* ec) - { -# if defined(BOOST_WINDOWS_API) && _WIN32_WINNT < 0x0600 // SDK earlier than Vista and Server 2008 - error(true, error_code(BOOST_ERROR_NOT_SUPPORTED, system_category()), to, from, ec, - "boost::filesystem::create_directory_symlink"); -# else - -# if defined(BOOST_WINDOWS_API) && _WIN32_WINNT >= 0x0600 - // see if actually supported by Windows runtime dll - if (error(!create_symbolic_link_api, - error_code(BOOST_ERROR_NOT_SUPPORTED, system_category()), - to, from, ec, - "boost::filesystem::create_symlink")) - return; -# endif - - error(!BOOST_CREATE_SYMBOLIC_LINK(from.c_str(), to.c_str(), 0), - to, from, ec, "boost::filesystem::create_symlink"); -# endif - } - - BOOST_FILESYSTEM_DECL - path current_path(error_code* ec) - { -# ifdef BOOST_POSIX_API - path cur; - for (long path_max = 128;; 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 (error(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 - , ec, "boost::filesystem::current_path")) - { - break; - } - } - else - { - cur = buf.get(); - if (ec != 0) ec->clear(); - break; - } - } - return cur; - -# else - DWORD sz; - if ((sz = ::GetCurrentDirectoryW(0, NULL))== 0)sz = 1; - boost::scoped_array<path::value_type> buf(new path::value_type[sz]); - error(::GetCurrentDirectoryW(sz, buf.get())== 0, ec, - "boost::filesystem::current_path"); - return path(buf.get()); -# endif - } - - - BOOST_FILESYSTEM_DECL - void current_path(const path& p, system::error_code* ec) - { - error(!BOOST_SET_CURRENT_DIRECTORY(p.c_str()), - p, ec, "boost::filesystem::current_path"); - } - - BOOST_FILESYSTEM_DECL - bool equivalent(const path& p1, const path& p2, system::error_code* ec) - { -# ifdef BOOST_POSIX_API - struct stat s2; - int e2(::stat(p2.c_str(), &s2)); - struct stat s1; - int e1(::stat(p1.c_str(), &s1)); - - if (e1 != 0 || e2 != 0) - { - // if one is invalid and the other isn't then they aren't equivalent, - // but if both are invalid then it is an error - error (e1 != 0 && e2 != 0, p1, p2, ec, "boost::filesystem::equivalent"); - return false; - } - - // both stats now known to be valid - return 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; - -# else // Windows - - // 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. - - // p2 is done first, so any error reported is for p1 - handle_wrapper h2( - create_file_handle( - p2.c_str(), - 0, - FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, - 0, - OPEN_EXISTING, - FILE_FLAG_BACKUP_SEMANTICS, - 0)); - - handle_wrapper h1( - create_file_handle( - p1.c_str(), - 0, - FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, - 0, - OPEN_EXISTING, - FILE_FLAG_BACKUP_SEMANTICS, - 0)); - - if (h1.handle == INVALID_HANDLE_VALUE - || h2.handle == INVALID_HANDLE_VALUE) - { - // if one is invalid and the other isn't, then they aren't equivalent, - // but if both are invalid then it is an error - error(h1.handle == INVALID_HANDLE_VALUE - && h2.handle == INVALID_HANDLE_VALUE, p1, p2, ec, - "boost::filesystem::equivalent"); - return false; - } - - // at this point, both handles are known to be valid - - BY_HANDLE_FILE_INFORMATION info1, info2; - - if (error(!::GetFileInformationByHandle(h1.handle, &info1), - p1, p2, ec, "boost::filesystem::equivalent")) - return false; - - if (error(!::GetFileInformationByHandle(h2.handle, &info2), - p1, p2, ec, "boost::filesystem::equivalent")) - return 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 - 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; - -# endif - } - - BOOST_FILESYSTEM_DECL - boost::uintmax_t file_size(const path& p, error_code* ec) - { -# ifdef BOOST_POSIX_API - - struct stat path_stat; - if (error(::stat(p.c_str(), &path_stat)!= 0, - p, ec, "boost::filesystem::file_size")) - return static_cast<boost::uintmax_t>(-1); - if (error(!S_ISREG(path_stat.st_mode), - error_code(EPERM, system_category()), - p, ec, "boost::filesystem::file_size")) - return static_cast<boost::uintmax_t>(-1); - - return static_cast<boost::uintmax_t>(path_stat.st_size); - -# else // Windows - - // assume uintmax_t is 64-bits on all Windows compilers - - WIN32_FILE_ATTRIBUTE_DATA fad; - - if (error(::GetFileAttributesExW(p.c_str(), ::GetFileExInfoStandard, &fad)== 0, - p, ec, "boost::filesystem::file_size")) - return static_cast<boost::uintmax_t>(-1); - - if (error((fad.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)!= 0, - error_code(ERROR_NOT_SUPPORTED, system_category()), - p, ec, "boost::filesystem::file_size")) - return static_cast<boost::uintmax_t>(-1); - - return (static_cast<boost::uintmax_t>(fad.nFileSizeHigh) - << (sizeof(fad.nFileSizeLow)*8)) + fad.nFileSizeLow; -# endif - } - - BOOST_FILESYSTEM_DECL - boost::uintmax_t hard_link_count(const path& p, system::error_code* ec) - { -# ifdef BOOST_POSIX_API - - struct stat path_stat; - return error(::stat(p.c_str(), &path_stat)!= 0, - p, ec, "boost::filesystem::hard_link_count") - ? 0 - : static_cast<boost::uintmax_t>(path_stat.st_nlink); - -# else // Windows - - // Link count info is only available through GetFileInformationByHandle - BY_HANDLE_FILE_INFORMATION info; - handle_wrapper h( - create_file_handle(p.c_str(), 0, - FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 0, - OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0)); - return - !error(h.handle == INVALID_HANDLE_VALUE, - p, ec, "boost::filesystem::hard_link_count") - && !error(::GetFileInformationByHandle(h.handle, &info)== 0, - p, ec, "boost::filesystem::hard_link_count") - ? info.nNumberOfLinks - : 0; -# endif - } - - BOOST_FILESYSTEM_DECL - path initial_path(error_code* ec) - { - static path init_path; - if (init_path.empty()) - init_path = current_path(ec); - else if (ec != 0) ec->clear(); - return init_path; - } - - BOOST_FILESYSTEM_DECL - bool is_empty(const path& p, system::error_code* ec) - { -# ifdef BOOST_POSIX_API - - struct stat path_stat; - if (error(::stat(p.c_str(), &path_stat)!= 0, - p, ec, "boost::filesystem::is_empty")) - return false; - return S_ISDIR(path_stat.st_mode) - ? is_empty_directory(p) - : path_stat.st_size == 0; -# else - - WIN32_FILE_ATTRIBUTE_DATA fad; - if (error(::GetFileAttributesExW(p.c_str(), ::GetFileExInfoStandard, &fad)== 0, - p, ec, "boost::filesystem::is_empty")) - return false; - - if (ec != 0) ec->clear(); - return - (fad.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - ? is_empty_directory(p) - : (!fad.nFileSizeHigh && !fad.nFileSizeLow); -# endif - } - - BOOST_FILESYSTEM_DECL - std::time_t last_write_time(const path& p, system::error_code* ec) - { -# ifdef BOOST_POSIX_API - - struct stat path_stat; - if (error(::stat(p.c_str(), &path_stat)!= 0, - p, ec, "boost::filesystem::last_write_time")) - return std::time_t(-1); - return path_stat.st_mtime; - -# else - - handle_wrapper hw( - create_file_handle(p.c_str(), 0, - FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 0, - OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0)); - - if (error(hw.handle == INVALID_HANDLE_VALUE, - p, ec, "boost::filesystem::last_write_time")) - return std::time_t(-1); - - FILETIME lwt; - - if (error(::GetFileTime(hw.handle, 0, 0, &lwt)== 0, - p, ec, "boost::filesystem::last_write_time")) - return std::time_t(-1); - - return to_time_t(lwt); -# endif - } - - BOOST_FILESYSTEM_DECL - void last_write_time(const path& p, const std::time_t new_time, - system::error_code* ec) - { -# ifdef BOOST_POSIX_API - - struct stat path_stat; - if (error(::stat(p.c_str(), &path_stat)!= 0, - p, ec, "boost::filesystem::last_write_time")) - return; - ::utimbuf buf; - buf.actime = path_stat.st_atime; // utime()updates access time too:-( - buf.modtime = new_time; - error(::utime(p.c_str(), &buf)!= 0, - p, ec, "boost::filesystem::last_write_time"); - -# else - - handle_wrapper hw( - create_file_handle(p.c_str(), FILE_WRITE_ATTRIBUTES, - FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 0, - OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0)); - - if (error(hw.handle == INVALID_HANDLE_VALUE, - p, ec, "boost::filesystem::last_write_time")) - return; - - FILETIME lwt; - to_FILETIME(new_time, lwt); - - error(::SetFileTime(hw.handle, 0, 0, &lwt)== 0, - p, ec, "boost::filesystem::last_write_time"); -# endif - } - -# ifdef BOOST_POSIX_API - const perms active_bits(all_all | set_uid_on_exe | set_gid_on_exe | sticky_bit); - inline mode_t mode_cast(perms prms) { return prms & active_bits; } -# endif - - BOOST_FILESYSTEM_DECL - void permissions(const path& p, perms prms, system::error_code* ec) - { - BOOST_ASSERT_MSG(!((prms & add_perms) && (prms & remove_perms)), - "add_perms and remove_perms are mutually exclusive"); - - if ((prms & add_perms) && (prms & remove_perms)) // precondition failed - return; - -# ifdef BOOST_POSIX_API - error_code local_ec; - file_status current_status((prms & symlink_perms) - ? fs::symlink_status(p, local_ec) - : fs::status(p, local_ec)); - if (local_ec) - { - if (ec == 0) - BOOST_FILESYSTEM_THROW(filesystem_error( - "boost::filesystem::permissions", p, local_ec)); - else - *ec = local_ec; - return; - } - - if (prms & add_perms) - prms |= current_status.permissions(); - else if (prms & remove_perms) - prms = current_status.permissions() & ~prms; - - if (::chmod(p.c_str(), mode_cast(prms))) - { - if (ec == 0) - BOOST_FILESYSTEM_THROW(filesystem_error( - "boost::filesystem::permissions", p, - error_code(errno, system::generic_category()))); - else - ec->assign(errno, system::generic_category()); - } - -# else // Windows - - // if not going to alter FILE_ATTRIBUTE_READONLY, just return - if (!(!((prms & (add_perms | remove_perms))) - || (prms & (owner_write|group_write|others_write)))) - return; - - DWORD attr = ::GetFileAttributesW(p.c_str()); - - if (error(attr == 0, p, ec, "boost::filesystem::permissions")) - return; - - if (prms & add_perms) - attr &= ~FILE_ATTRIBUTE_READONLY; - else if (prms & remove_perms) - attr |= FILE_ATTRIBUTE_READONLY; - else if (prms & (owner_write|group_write|others_write)) - attr &= ~FILE_ATTRIBUTE_READONLY; - else - attr |= FILE_ATTRIBUTE_READONLY; - - error(::SetFileAttributesW(p.c_str(), attr) == 0, - p, ec, "boost::filesystem::permissions"); -# endif - } - - BOOST_FILESYSTEM_DECL - path read_symlink(const path& p, system::error_code* ec) - { - path symlink_path; - -# ifdef BOOST_POSIX_API - - for (std::size_t path_max = 64;; path_max *= 2)// loop 'til buffer large enough - { - boost::scoped_array<char> buf(new char[path_max]); - ssize_t result; - if ((result=::readlink(p.c_str(), buf.get(), path_max))== -1) - { - if (ec == 0) - BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::read_symlink", - p, error_code(errno, system_category()))); - else ec->assign(errno, system_category()); - break; - } - else - { - if(result != static_cast<ssize_t>(path_max)) - { - symlink_path.assign(buf.get(), buf.get() + result); - if (ec != 0) ec->clear(); - break; - } - } - } - -# elif _WIN32_WINNT < 0x0600 // SDK earlier than Vista and Server 2008 - error(true, error_code(BOOST_ERROR_NOT_SUPPORTED, system_category()), p, ec, - "boost::filesystem::read_symlink"); -# else // Vista and Server 2008 SDK, or later - - union info_t - { - char buf[REPARSE_DATA_BUFFER_HEADER_SIZE+MAXIMUM_REPARSE_DATA_BUFFER_SIZE]; - REPARSE_DATA_BUFFER rdb; - } info; - - handle_wrapper h( - create_file_handle(p.c_str(), GENERIC_READ, 0, 0, OPEN_EXISTING, - FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT, 0)); - - if (error(h.handle == INVALID_HANDLE_VALUE, p, ec, "boost::filesystem::read_symlink")) - return symlink_path; - - DWORD sz; - - if (!error(::DeviceIoControl(h.handle, FSCTL_GET_REPARSE_POINT, - 0, 0, info.buf, sizeof(info), &sz, 0) == 0, p, ec, - "boost::filesystem::read_symlink" )) - symlink_path.assign( - static_cast<wchar_t*>(info.rdb.SymbolicLinkReparseBuffer.PathBuffer) - + info.rdb.SymbolicLinkReparseBuffer.PrintNameOffset/sizeof(wchar_t), - static_cast<wchar_t*>(info.rdb.SymbolicLinkReparseBuffer.PathBuffer) - + info.rdb.SymbolicLinkReparseBuffer.PrintNameOffset/sizeof(wchar_t) - + info.rdb.SymbolicLinkReparseBuffer.PrintNameLength/sizeof(wchar_t)); -# endif - return symlink_path; - } - - BOOST_FILESYSTEM_DECL - bool remove(const path& p, error_code* ec) - { - error_code tmp_ec; - file_type type = query_file_type(p, &tmp_ec); - if (error(type == status_error, tmp_ec, p, ec, - "boost::filesystem::remove")) - return false; - - // Since POSIX remove() is specified to work with either files or directories, in a - // perfect world it could just be called. But some important real-world operating - // systems (Windows, Mac OS X, for example) don't implement the POSIX spec. So - // remove_file_or_directory() is always called to kep it simple. - return remove_file_or_directory(p, type, ec); - } - - BOOST_FILESYSTEM_DECL - boost::uintmax_t remove_all(const path& p, error_code* ec) - { - error_code tmp_ec; - file_type type = query_file_type(p, &tmp_ec); - if (error(type == status_error, tmp_ec, p, ec, - "boost::filesystem::remove_all")) - return 0; - - return (type != status_error && type != file_not_found) // exists - ? remove_all_aux(p, type, ec) - : 0; - } - - BOOST_FILESYSTEM_DECL - void rename(const path& old_p, const path& new_p, error_code* ec) - { - error(!BOOST_MOVE_FILE(old_p.c_str(), new_p.c_str()), old_p, new_p, ec, - "boost::filesystem::rename"); - } - - BOOST_FILESYSTEM_DECL - void resize_file(const path& p, uintmax_t size, system::error_code* ec) - { - error(!BOOST_RESIZE_FILE(p.c_str(), size), p, ec, "boost::filesystem::resize_file"); - } - - BOOST_FILESYSTEM_DECL - space_info space(const path& p, error_code* ec) - { -# ifdef BOOST_POSIX_API - struct BOOST_STATVFS vfs; - space_info info; - if (!error(::BOOST_STATVFS(p.c_str(), &vfs)!= 0, - p, ec, "boost::filesystem::space")) - { - info.capacity - = static_cast<boost::uintmax_t>(vfs.f_blocks)* BOOST_STATVFS_F_FRSIZE; - info.free - = static_cast<boost::uintmax_t>(vfs.f_bfree)* BOOST_STATVFS_F_FRSIZE; - info.available - = static_cast<boost::uintmax_t>(vfs.f_bavail)* BOOST_STATVFS_F_FRSIZE; - } - -# else - ULARGE_INTEGER avail, total, free; - space_info info; - - if (!error(::GetDiskFreeSpaceExW(p.c_str(), &avail, &total, &free)== 0, - p, ec, "boost::filesystem::space")) - { - info.capacity - = (static_cast<boost::uintmax_t>(total.HighPart)<< 32) - + total.LowPart; - info.free - = (static_cast<boost::uintmax_t>(free.HighPart)<< 32) - + free.LowPart; - info.available - = (static_cast<boost::uintmax_t>(avail.HighPart)<< 32) - + avail.LowPart; - } - -# endif - - else - { - info.capacity = info.free = info.available = 0; - } - return info; - } - - BOOST_FILESYSTEM_DECL - file_status status(const path& p, error_code* ec) - { -# ifdef BOOST_POSIX_API - - struct stat path_stat; - if (::stat(p.c_str(), &path_stat)!= 0) - { - if (ec != 0) // always report errno, even though some - ec->assign(errno, system_category()); // errno values are not status_errors - - if (not_found_error(errno)) - { - return fs::file_status(fs::file_not_found, fs::no_perms); - } - if (ec == 0) - BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::status", - p, error_code(errno, system_category()))); - return fs::file_status(fs::status_error); - } - if (ec != 0) ec->clear();; - if (S_ISDIR(path_stat.st_mode)) - return fs::file_status(fs::directory_file, - static_cast<perms>(path_stat.st_mode) & fs::perms_mask); - if (S_ISREG(path_stat.st_mode)) - return fs::file_status(fs::regular_file, - static_cast<perms>(path_stat.st_mode) & fs::perms_mask); - if (S_ISBLK(path_stat.st_mode)) - return fs::file_status(fs::block_file, - static_cast<perms>(path_stat.st_mode) & fs::perms_mask); - if (S_ISCHR(path_stat.st_mode)) - return fs::file_status(fs::character_file, - static_cast<perms>(path_stat.st_mode) & fs::perms_mask); - if (S_ISFIFO(path_stat.st_mode)) - return fs::file_status(fs::fifo_file, - static_cast<perms>(path_stat.st_mode) & fs::perms_mask); - if (S_ISSOCK(path_stat.st_mode)) - return fs::file_status(fs::socket_file, - static_cast<perms>(path_stat.st_mode) & fs::perms_mask); - return fs::file_status(fs::type_unknown); - -# else // Windows - - DWORD attr(::GetFileAttributesW(p.c_str())); - if (attr == 0xFFFFFFFF) - { - return process_status_failure(p, ec); - } - - // reparse point handling; - // since GetFileAttributesW does not resolve symlinks, try to open a file - // handle to discover if the file exists - if (attr & FILE_ATTRIBUTE_REPARSE_POINT) - { - handle_wrapper h( - create_file_handle( - p.c_str(), - 0, // dwDesiredAccess; attributes only - FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, - 0, // lpSecurityAttributes - OPEN_EXISTING, - FILE_FLAG_BACKUP_SEMANTICS, - 0)); // hTemplateFile - if (h.handle == INVALID_HANDLE_VALUE) - { - return process_status_failure(p, ec); - } - - if (!is_reparse_point_a_symlink(p)) - return file_status(reparse_file, make_permissions(p, attr)); - } - - if (ec != 0) ec->clear(); - return (attr & FILE_ATTRIBUTE_DIRECTORY) - ? file_status(directory_file, make_permissions(p, attr)) - : file_status(regular_file, make_permissions(p, attr)); - -# endif - } - - BOOST_FILESYSTEM_DECL - file_status symlink_status(const path& p, error_code* ec) - { -# ifdef BOOST_POSIX_API - - struct stat path_stat; - if (::lstat(p.c_str(), &path_stat)!= 0) - { - if (ec != 0) // always report errno, even though some - ec->assign(errno, system_category()); // errno values are not status_errors - - if (errno == ENOENT || errno == ENOTDIR) // these are not errors - { - return fs::file_status(fs::file_not_found, fs::no_perms); - } - if (ec == 0) - BOOST_FILESYSTEM_THROW(filesystem_error("boost::filesystem::status", - p, error_code(errno, system_category()))); - return fs::file_status(fs::status_error); - } - if (ec != 0) ec->clear(); - if (S_ISREG(path_stat.st_mode)) - return fs::file_status(fs::regular_file, - static_cast<perms>(path_stat.st_mode) & fs::perms_mask); - if (S_ISDIR(path_stat.st_mode)) - return fs::file_status(fs::directory_file, - static_cast<perms>(path_stat.st_mode) & fs::perms_mask); - if (S_ISLNK(path_stat.st_mode)) - return fs::file_status(fs::symlink_file, - static_cast<perms>(path_stat.st_mode) & fs::perms_mask); - if (S_ISBLK(path_stat.st_mode)) - return fs::file_status(fs::block_file, - static_cast<perms>(path_stat.st_mode) & fs::perms_mask); - if (S_ISCHR(path_stat.st_mode)) - return fs::file_status(fs::character_file, - static_cast<perms>(path_stat.st_mode) & fs::perms_mask); - if (S_ISFIFO(path_stat.st_mode)) - return fs::file_status(fs::fifo_file, - static_cast<perms>(path_stat.st_mode) & fs::perms_mask); - if (S_ISSOCK(path_stat.st_mode)) - return fs::file_status(fs::socket_file, - static_cast<perms>(path_stat.st_mode) & fs::perms_mask); - return fs::file_status(fs::type_unknown); - -# else // Windows - - DWORD attr(::GetFileAttributesW(p.c_str())); - if (attr == 0xFFFFFFFF) - { - return process_status_failure(p, ec); - } - - if (ec != 0) ec->clear(); - - if (attr & FILE_ATTRIBUTE_REPARSE_POINT) - return is_reparse_point_a_symlink(p) - ? file_status(symlink_file, make_permissions(p, attr)) - : file_status(reparse_file, make_permissions(p, attr)); - - return (attr & FILE_ATTRIBUTE_DIRECTORY) - ? file_status(directory_file, make_permissions(p, attr)) - : file_status(regular_file, make_permissions(p, attr)); - -# endif - } - - // contributed by Jeff Flinn - BOOST_FILESYSTEM_DECL - path temp_directory_path(system::error_code* ec) - { -# ifdef BOOST_POSIX_API - const char* val = 0; - - (val = std::getenv("TMPDIR" )) || - (val = std::getenv("TMP" )) || - (val = std::getenv("TEMP" )) || - (val = std::getenv("TEMPDIR")); - - path p((val!=0) ? val : "/tmp"); - - if (p.empty() || (ec&&!is_directory(p, *ec))||(!ec&&!is_directory(p))) - { - errno = ENOTDIR; - error(true, p, ec, "boost::filesystem::temp_directory_path"); - return p; - } - - return p; - -# else // Windows - - std::vector<path::value_type> buf(GetTempPathW(0, NULL)); - - if (buf.empty() || GetTempPathW(buf.size(), &buf[0])==0) - { - if(!buf.empty()) ::SetLastError(ENOTDIR); - error(true, ec, "boost::filesystem::temp_directory_path"); - return path(); - } - - buf.pop_back(); - - path p(buf.begin(), buf.end()); - - if ((ec&&!is_directory(p, *ec))||(!ec&&!is_directory(p))) - { - ::SetLastError(ENOTDIR); - error(true, p, ec, "boost::filesystem::temp_directory_path"); - return path(); - } - - return p; -# endif - } - - BOOST_FILESYSTEM_DECL - path system_complete(const path& p, system::error_code* ec) - { -# ifdef BOOST_POSIX_API - return (p.empty() || p.is_absolute()) - ? p : current_path()/ p; - -# else - if (p.empty()) - { - if (ec != 0) ec->clear(); - return p; - } - wchar_t buf[buf_size]; - wchar_t* pfn; - std::size_t len = get_full_path_name(p, buf_size, buf, &pfn); - - if (error(len == 0, p, ec, "boost::filesystem::system_complete")) - return path(); - - if (len < buf_size)// len does not include null termination character - return path(&buf[0]); - - boost::scoped_array<wchar_t> big_buf(new wchar_t[len]); - - return error(get_full_path_name(p, len , big_buf.get(), &pfn)== 0, - p, ec, "boost::filesystem::system_complete") - ? path() - : path(big_buf.get()); -# endif - } - -} // namespace detail - -//--------------------------------------------------------------------------------------// -// // -// directory_entry // -// // -//--------------------------------------------------------------------------------------// - - file_status - directory_entry::m_get_status(system::error_code* ec) const - { - if (!status_known(m_status)) - { - // optimization: if the symlink status is known, and it isn't a symlink, - // then status and symlink_status are identical so just copy the - // symlink status to the regular status. - if (status_known(m_symlink_status) - && !is_symlink(m_symlink_status)) - { - m_status = m_symlink_status; - if (ec != 0) ec->clear(); - } - else m_status = detail::status(m_path, ec); - } - else if (ec != 0) ec->clear(); - return m_status; - } - - file_status - directory_entry::m_get_symlink_status(system::error_code* ec) const - { - if (!status_known(m_symlink_status)) - m_symlink_status = detail::symlink_status(m_path, ec); - else if (ec != 0) ec->clear(); - return m_symlink_status; - } - -// dispatch directory_entry supplied here rather than in -// <boost/filesystem/path_traits.hpp>, thus avoiding header circularity. -// test cases are in operations_unit_test.cpp - -namespace path_traits -{ - void dispatch(const directory_entry & de, -# ifdef BOOST_WINDOWS_API - std::wstring& to, -# else - std::string& to, -# endif - const codecvt_type &) - { - to = de.path().native(); - } - -} // namespace path_traits -} // namespace filesystem3 -} // namespace boost - -//--------------------------------------------------------------------------------------// -// // -// directory_iterator // -// // -//--------------------------------------------------------------------------------------// - -namespace -{ -# ifdef BOOST_POSIX_API - - error_code path_max(std::size_t & result) - // this code is based on Stevens and Rago, Advanced Programming in the - // UNIX envirnment, 2nd Ed., ISBN 0-201-43307-9, page 49 - { -# 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; - } - -#if defined(__PGI) && defined(__USE_FILE_OFFSET64) -#define dirent dirent64 -#endif - - error_code dir_itr_first(void *& handle, void *& buffer, - const char* dir, string& target, - fs::file_status &, fs::file_status &) - { - if ((handle = ::opendir(dir))== 0) - return error_code(errno, system_category()); - target = 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 (ticket #3509) - 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; - } - - // 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; - } - - error_code dir_itr_increment(void *& handle, void *& buffer, - string& target, fs::file_status & sf, fs::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 fs::detail::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_error); - } - 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_error); - symlink_sf = fs::file_status(fs::symlink_file); - } - else sf = symlink_sf = fs::file_status(fs::status_error); - } -# else - sf = symlink_sf = fs::file_status(fs::status_error); -# endif - return ok; - } - -# else // BOOST_WINDOWS_API - - error_code dir_itr_first(void *& handle, const fs::path& dir, - wstring& target, fs::file_status & sf, fs::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 - wstring dirpath(dir.wstring()); - dirpath += (dirpath.empty() - || (dirpath[dirpath.size()-1] != L'\\' - && dirpath[dirpath.size()-1] != L'/' - && dirpath[dirpath.size()-1] != L':'))? L"\\*" : L"*"; - - WIN32_FIND_DATAW data; - if ((handle = ::FindFirstFileW(dirpath.c_str(), &data)) - == INVALID_HANDLE_VALUE) - { - handle = 0; // signal eof - 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_REPARSE_POINT) - // reparse points are complex, so don't try to handle them here; instead just mark - // them as status_error which causes directory_entry caching to call status() - // and symlink_status() which do handle reparse points fully - { - sf.type(fs::status_error); - symlink_sf.type(fs::status_error); - } - else - { - if (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - { - sf.type(fs::directory_file); - symlink_sf.type(fs::directory_file); - } - else - { - sf.type(fs::regular_file); - symlink_sf.type(fs::regular_file); - } - sf.permissions(make_permissions(data.cFileName, data.dwFileAttributes)); - symlink_sf.permissions(sf.permissions()); - } - return error_code(); - } - - error_code dir_itr_increment(void *& handle, wstring& target, - fs::file_status & sf, fs::file_status & symlink_sf) - { - WIN32_FIND_DATAW data; - if (::FindNextFileW(handle, &data)== 0)// fails - { - int error = ::GetLastError(); - fs::detail::dir_itr_close(handle); - return error_code(error == ERROR_NO_MORE_FILES ? 0 : error, system_category()); - } - target = data.cFileName; - if (data.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) - // reparse points are complex, so don't try to handle them here; instead just mark - // them as status_error which causes directory_entry caching to call status() - // and symlink_status() which do handle reparse points fully - { - sf.type(fs::status_error); - symlink_sf.type(fs::status_error); - } - else - { - if (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - { - sf.type(fs::directory_file); - symlink_sf.type(fs::directory_file); - } - else - { - sf.type(fs::regular_file); - symlink_sf.type(fs::regular_file); - } - sf.permissions(make_permissions(data.cFileName, data.dwFileAttributes)); - symlink_sf.permissions(sf.permissions()); - } - return error_code(); - } -#endif - - const error_code not_found_error_code ( -# ifdef BOOST_WINDOWS_API - ERROR_PATH_NOT_FOUND -# else - ENOENT -# endif - , system_category()); - -} // unnamed namespace - -namespace boost -{ -namespace filesystem3 -{ - -namespace detail -{ - // dir_itr_close is called both from the ~dir_itr_imp()destructor - // and dir_itr_increment() - BOOST_FILESYSTEM_DECL - system::error_code dir_itr_close( // never throws - void *& handle -# if defined(BOOST_POSIX_API) - , void *& buffer -# endif - ) - { -# ifdef BOOST_POSIX_API - 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()); - -# else - if (handle != 0) - { - ::FindClose(handle); - handle = 0; - } - return ok; - -# endif - } - - void directory_iterator_construct(directory_iterator& it, - const path& p, system::error_code* ec) - { - if (error(p.empty(), not_found_error_code, p, ec, - "boost::filesystem::directory_iterator::construct")) - return; - - path::string_type filename; - file_status file_stat, symlink_file_stat; - error_code result = dir_itr_first(it.m_imp->handle, -# if defined(BOOST_POSIX_API) - it.m_imp->buffer, -# endif - p.c_str(), filename, file_stat, symlink_file_stat); - - if (result) - { - it.m_imp.reset(); - error(true, result, p, - ec, "boost::filesystem::directory_iterator::construct"); - return; - } - - if (it.m_imp->handle == 0) - it.m_imp.reset(); // eof, so make end iterator - else // not eof - { - it.m_imp->dir_entry.assign(p / filename, file_stat, symlink_file_stat); - if (filename[0] == dot // dot or dot-dot - && (filename.size()== 1 - || (filename[1] == dot - && filename.size()== 2))) - { it.increment(*ec); } - } - } - - void directory_iterator_increment(directory_iterator& it, - system::error_code* ec) - { - BOOST_ASSERT_MSG(it.m_imp.get(), "attempt to increment end iterator"); - BOOST_ASSERT_MSG(it.m_imp->handle != 0, "internal program error"); - - path::string_type filename; - file_status file_stat, symlink_file_stat; - system::error_code temp_ec; - - for (;;) - { - temp_ec = dir_itr_increment(it.m_imp->handle, -# if defined(BOOST_POSIX_API) - it.m_imp->buffer, -# endif - filename, file_stat, symlink_file_stat); - - if (temp_ec) // happens if filesystem is corrupt, such as on a damaged optical disc - { - path error_path(it.m_imp->dir_entry.path().parent_path()); // fix ticket #5900 - it.m_imp.reset(); - if (ec == 0) - BOOST_FILESYSTEM_THROW( - filesystem_error("boost::filesystem::directory_iterator::operator++", - error_path, - error_code(BOOST_ERRNO, system_category()))); - ec->assign(BOOST_ERRNO, system_category()); - return; - } - else if (ec != 0) ec->clear(); - - if (it.m_imp->handle == 0) // eof, make end - { - it.m_imp.reset(); - return; - } - - if (!(filename[0] == dot // !(dot or dot-dot) - && (filename.size()== 1 - || (filename[1] == dot - && filename.size()== 2)))) - { - it.m_imp->dir_entry.replace_filename( - filename, file_stat, symlink_file_stat); - return; - } - } - } -} // namespace detail -} // namespace filesystem3 -} // namespace boost - -#endif // no wide character support diff --git a/src/third_party/boost/libs/filesystem/v3/src/path.cpp b/src/third_party/boost/libs/filesystem/v3/src/path.cpp deleted file mode 100644 index c64cad2b3b7..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/src/path.cpp +++ /dev/null @@ -1,847 +0,0 @@ -// filesystem path.cpp ------------------------------------------------------------- // - -// Copyright Beman Dawes 2008 - -// 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 <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 - -#ifndef BOOST_SYSTEM_NO_DEPRECATED -# define BOOST_SYSTEM_NO_DEPRECATED -#endif - -#include <boost/filesystem/v3/config.hpp> -#include <boost/filesystem/v3/path.hpp> -#include <boost/scoped_array.hpp> -#include <boost/system/error_code.hpp> -#include <boost/assert.hpp> -#include <algorithm> -#include <cstddef> -#include <cstring> -#include <cassert> - -#ifdef BOOST_WINDOWS_API -# include "windows_file_codecvt.hpp" -# include <windows.h> -#elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) -# include <boost/filesystem/detail/utf8_codecvt_facet.hpp> -#endif - -#ifdef BOOST_FILESYSTEM_DEBUG -# include <iostream> -# include <iomanip> -#endif - -namespace fs = boost::filesystem3; - -using boost::filesystem3::path; - -using std::string; -using std::wstring; - -using boost::system::error_code; - -#ifndef BOOST_FILESYSTEM_CODECVT_BUF_SIZE -# define BOOST_FILESYSTEM_CODECVT_BUF_SIZE 256 -#endif - -//--------------------------------------------------------------------------------------// -// // -// class path helpers // -// // -//--------------------------------------------------------------------------------------// - -namespace -{ - //------------------------------------------------------------------------------------// - // miscellaneous class path helpers // - //------------------------------------------------------------------------------------// - - typedef path::value_type value_type; - typedef path::string_type string_type; - typedef string_type::size_type size_type; - - const std::size_t default_codecvt_buf_size = BOOST_FILESYSTEM_CODECVT_BUF_SIZE; - -# 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"\\"; - const wchar_t colon = L':'; - const wchar_t dot = L'.'; - const wchar_t questionmark = L'?'; - const fs::path dot_path(L"."); - const fs::path dot_dot_path(L".."); - -# else - - const char separator = '/'; - const char preferred_separator = '/'; - const char* const separators = "/"; - const char* separator_string = "/"; - const char* preferred_separator_string = "/"; - const char colon = ':'; - const char dot = '.'; - const fs::path dot_path("."); - const fs::path dot_dot_path(".."); - -# endif - - inline bool is_separator(fs::path::value_type c) - { - return c == separator -# ifdef BOOST_WINDOWS_API - || c == preferred_separator -# endif - ; - } - - bool is_non_root_separator(const string_type& str, size_type pos); - // pos is position of the separator - - size_type filename_pos(const string_type& str, - size_type end_pos); // end_pos is past-the-end position - // Returns: 0 if str itself is filename (or empty) - - size_type root_directory_start(const string_type& path, size_type size); - // Returns: npos if no root_directory found - - void first_element( - const string_type& src, - size_type& element_pos, - size_type& element_size, -# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1310) // VC++ 7.1 - size_type size = string_type::npos -# else - size_type size = -1 -# endif - ); - -} // unnamed namespace - -//--------------------------------------------------------------------------------------// -// // -// class path implementation // -// // -//--------------------------------------------------------------------------------------// - -namespace boost -{ -namespace filesystem3 -{ - - path& path::operator/=(const path& p) - { - if (p.empty()) - return *this; - if (this == &p) // self-append - { - path rhs(p); - if (!is_separator(rhs.m_pathname[0])) - m_append_separator_if_needed(); - m_pathname += rhs.m_pathname; - } - else - { - if (!is_separator(*p.m_pathname.begin())) - m_append_separator_if_needed(); - m_pathname += p.m_pathname; - } - return *this; - } - - path& path::operator/=(const value_type* ptr) - { - if (!*ptr) - return *this; - if (ptr >= m_pathname.data() - && ptr < m_pathname.data() + m_pathname.size()) // overlapping source - { - path rhs(ptr); - if (!is_separator(rhs.m_pathname[0])) - m_append_separator_if_needed(); - m_pathname += rhs.m_pathname; - } - else - { - if (!is_separator(*ptr)) - m_append_separator_if_needed(); - m_pathname += ptr; - } - return *this; - } - -# ifdef BOOST_WINDOWS_API - - const std::string path::generic_string(const codecvt_type& cvt) const - { - path tmp(*this); - std::replace(tmp.m_pathname.begin(), tmp.m_pathname.end(), L'\\', L'/'); - return tmp.string(cvt); - } - - const std::wstring path::generic_wstring() const - { - path tmp(*this); - std::replace(tmp.m_pathname.begin(), tmp.m_pathname.end(), L'\\', L'/'); - return tmp.wstring(); - } - -# endif // BOOST_WINDOWS_API - - // m_append_separator_if_needed ----------------------------------------------------// - - path::string_type::size_type path::m_append_separator_if_needed() - { - if (!m_pathname.empty() && -# ifdef BOOST_WINDOWS_API - *(m_pathname.end()-1) != colon && -# endif - !is_separator(*(m_pathname.end()-1))) - { - string_type::size_type tmp(m_pathname.size()); - m_pathname += preferred_separator; - return tmp; - } - return 0; - } - - // m_erase_redundant_separator -----------------------------------------------------// - - void path::m_erase_redundant_separator(string_type::size_type sep_pos) - { - if (sep_pos // a separator was added - && sep_pos < m_pathname.size() // and something was appended - && (m_pathname[sep_pos+1] == separator // and it was also separator -# ifdef BOOST_WINDOWS_API - || m_pathname[sep_pos+1] == preferred_separator // or preferred_separator -# endif -)) { m_pathname.erase(sep_pos, 1); } // erase the added separator - } - - // modifiers -----------------------------------------------------------------------// - -# ifdef BOOST_WINDOWS_API - path & path::make_preferred() - { - std::replace(m_pathname.begin(), m_pathname.end(), L'/', L'\\'); - return *this; - } -# endif - - path& path::remove_filename() - { - m_pathname.erase(m_parent_path_end()); - return *this; - } - - path & path::replace_extension(const path & source) - { - // 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); - - // append source extension if any - pos = source.m_pathname.rfind(dot); - if (pos != string_type::npos) - m_pathname += source.c_str() + pos; - - return *this; - } - - // decomposition -------------------------------------------------------------------// - - path path::root_path() const - { - path temp(root_name()); - if (!root_directory().empty()) temp.m_pathname += root_directory().c_str(); - return temp; - } - - path path::root_name() const - { - iterator itr(begin()); - - return (itr.m_pos != m_pathname.size() - && ( - (itr.m_element.m_pathname.size() > 1 - && is_separator(itr.m_element.m_pathname[0]) - && is_separator(itr.m_element.m_pathname[1]) - ) -# ifdef BOOST_WINDOWS_API - || itr.m_element.m_pathname[itr.m_element.m_pathname.size()-1] == colon -# endif - )) - ? itr.m_element - : path(); - } - - path path::root_directory() const - { - size_type pos(root_directory_start(m_pathname, m_pathname.size())); - - return pos == string_type::npos - ? path() - : path(m_pathname.c_str() + pos, m_pathname.c_str() + pos + 1); - } - - path path::relative_path() const - { - iterator itr(begin()); - - for (; itr.m_pos != m_pathname.size() - && (is_separator(itr.m_element.m_pathname[0]) -# ifdef BOOST_WINDOWS_API - || itr.m_element.m_pathname[itr.m_element.m_pathname.size()-1] == colon -# endif - ); ++itr) {} - - return path(m_pathname.c_str() + itr.m_pos); - } - - string_type::size_type path::m_parent_path_end() const - { - size_type end_pos(filename_pos(m_pathname, m_pathname.size())); - - bool filename_was_separator(m_pathname.size() - && is_separator(m_pathname[end_pos])); - - // skip separators unless root directory - size_type root_dir_pos(root_directory_start(m_pathname, end_pos)); - for (; - end_pos > 0 - && (end_pos-1) != root_dir_pos - && is_separator(m_pathname[end_pos-1]) - ; - --end_pos) {} - - return (end_pos == 1 && root_dir_pos == 0 && filename_was_separator) - ? string_type::npos - : end_pos; - } - - path path::parent_path() const - { - size_type end_pos(m_parent_path_end()); - return end_pos == string_type::npos - ? path() - : path(m_pathname.c_str(), m_pathname.c_str() + end_pos); - } - - path path::filename() const - { - size_type pos(filename_pos(m_pathname, m_pathname.size())); - return (m_pathname.size() - && pos - && is_separator(m_pathname[pos]) - && is_non_root_separator(m_pathname, pos)) - ? dot_path - : path(m_pathname.c_str() + pos); - } - - path path::stem() const - { - path name(filename()); - if (name == dot_path || name == dot_dot_path) return name; - size_type pos(name.m_pathname.rfind(dot)); - return pos == string_type::npos - ? name - : path(name.m_pathname.c_str(), name.m_pathname.c_str() + pos); - } - - path path::extension() const - { - path name(filename()); - if (name == dot_path || name == dot_dot_path) return path(); - size_type pos(name.m_pathname.rfind(dot)); - return pos == string_type::npos - ? path() - : path(name.m_pathname.c_str() + pos); - } - - // m_normalize ----------------------------------------------------------------------// - - path& path::m_normalize() - { - if (m_pathname.empty()) return *this; - - path temp; - iterator start(begin()); - iterator last(end()); - iterator stop(last--); - for (iterator itr(start); itr != stop; ++itr) - { - // ignore "." except at start and last - if (itr->native().size() == 1 - && (itr->native())[0] == dot - && itr != start - && itr != last) continue; - - // ignore a name and following ".." - if (!temp.empty() - && itr->native().size() == 2 - && (itr->native())[0] == dot - && (itr->native())[1] == dot) // dot dot - { - string_type lf(temp.filename().native()); - if (lf.size() > 0 - && (lf.size() != 1 - || (lf[0] != dot - && lf[0] != separator)) - && (lf.size() != 2 - || (lf[0] != dot - && lf[1] != dot -# ifdef BOOST_WINDOWS_API - && lf[1] != colon -# endif - ) - ) - ) - { - temp.remove_filename(); - // if not root directory, must also remove "/" if any - if (temp.m_pathname.size() > 0 - && temp.m_pathname[temp.m_pathname.size()-1] - == separator) - { - string_type::size_type rds( - root_directory_start(temp.m_pathname, temp.m_pathname.size())); - if (rds == string_type::npos - || rds != temp.m_pathname.size()-1) - { temp.m_pathname.erase(temp.m_pathname.size()-1); } - } - - iterator next(itr); - if (temp.empty() && ++next != stop - && next == last && *last == dot_path) temp /= dot_path; - continue; - } - } - - temp /= *itr; - }; - - if (temp.empty()) temp /= dot_path; - m_pathname = temp.m_pathname; - return *this; - } - -} // namespace filesystem3 -} // namespace boost - -//--------------------------------------------------------------------------------------// -// // -// class path helpers implementation // -// // -//--------------------------------------------------------------------------------------// - -namespace -{ - - // is_non_root_separator -------------------------------------------------// - - bool is_non_root_separator(const string_type & str, size_type pos) - // pos is position of the separator - { - BOOST_ASSERT_MSG(!str.empty() && is_separator(str[pos]), - "precondition violation"); - - // subsequent logic expects pos to be for leftmost slash of a set - 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 - ; - } - - // filename_pos --------------------------------------------------------------------// - - size_type filename_pos(const string_type & str, - size_type end_pos) // end_pos is past-the-end position - // return 0 if str itself is filename (or empty) - { - // case: "//" - if (end_pos == 2 - && is_separator(str[0]) - && is_separator(str[1])) return 0; - - // case: ends in "/" - if (end_pos && is_separator(str[end_pos-1])) - return end_pos-1; - - // set pos to start of last element - size_type pos(str.find_last_of(separators, end_pos-1)); - -# ifdef BOOST_WINDOWS_API - if (pos == string_type::npos) - pos = str.find_last_of(colon, end_pos-2); -# endif - - return (pos == string_type::npos // path itself must be a filename (or empty) - || (pos == 1 && is_separator(str[0]))) // or net - ? 0 // so filename is entire string - : pos + 1; // or starts after delimiter - } - - // root_directory_start ------------------------------------------------------------// - - size_type root_directory_start(const string_type & path, size_type size) - // return npos if no root_directory found - { - -# ifdef BOOST_WINDOWS_API - // case "c:/" - if (size > 2 - && path[1] == colon - && is_separator(path[2])) return 2; -# endif - - // case "//" - if (size == 2 - && is_separator(path[0]) - && 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)); - return pos < size ? pos : string_type::npos; - } -# endif - - // case "//net {/}" - if (size > 3 - && is_separator(path[0]) - && is_separator(path[1]) - && !is_separator(path[2])) - { - string_type::size_type pos(path.find_first_of(separators, 2)); - return pos < size ? pos : string_type::npos; - } - - // case "/" - if (size > 0 && is_separator(path[0])) return 0; - - return string_type::npos; - } - - // first_element --------------------------------------------------------------------// - // sets pos and len of first element, excluding extra separators - // if src.empty(), sets pos,len, to 0,0. - - void first_element( - const string_type & src, - size_type & element_pos, - size_type & element_size, - size_type size -) - { - if (size == string_type::npos) size = src.size(); - element_pos = 0; - element_size = 0; - if (src.empty()) return; - - string_type::size_type cur(0); - - // deal with // [network] - if (size >= 2 && is_separator(src[0]) - && is_separator(src[1]) - && (size == 2 - || !is_separator(src[2]))) - { - cur += 2; - element_size += 2; - } - - // leading (not non-network) separator - else if (is_separator(src[0])) - { - ++element_size; - // bypass extra leading separators - while (cur+1 < size - && is_separator(src[cur+1])) - { - ++cur; - ++element_pos; - } - return; - } - - // at this point, we have either a plain name, a network name, - // or (on Windows only) a device name - - // find the end - while (cur < size -# ifdef BOOST_WINDOWS_API - && src[cur] != colon -# endif - && !is_separator(src[cur])) - { - ++cur; - ++element_size; - } - -# ifdef BOOST_WINDOWS_API - if (cur == size) return; - // include device delimiter - if (src[cur] == colon) - { ++element_size; } -# endif - - return; - } - -} // unnammed namespace - -//--------------------------------------------------------------------------------------// -// // -// class path::iterator implementation // -// // -//--------------------------------------------------------------------------------------// - -namespace boost -{ -namespace filesystem3 -{ - - path::iterator path::begin() const - { - iterator itr; - itr.m_path_ptr = this; - size_type element_size; - first_element(m_pathname, itr.m_pos, element_size); - itr.m_element = m_pathname.substr(itr.m_pos, element_size); - if (itr.m_element.m_pathname == preferred_separator_string) - itr.m_element.m_pathname = separator_string; // needed for Windows, harmless on POSIX - return itr; - } - - path::iterator path::end() const - { - iterator itr; - itr.m_path_ptr = this; - itr.m_pos = m_pathname.size(); - return itr; - } - - void path::m_path_iterator_increment(path::iterator & it) - { - 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 - it.m_pos += it.m_element.m_pathname.size(); - - // if end reached, create end basic_iterator - if (it.m_pos == it.m_path_ptr->m_pathname.size()) - { - it.m_element.clear(); - return; - } - - // both POSIX and Windows treat paths that begin with exactly two separators specially - bool was_net(it.m_element.m_pathname.size() > 2 - && is_separator(it.m_element.m_pathname[0]) - && is_separator(it.m_element.m_pathname[1]) - && !is_separator(it.m_element.m_pathname[2])); - - // process separator (Windows drive spec is only case not a separator) - if (is_separator(it.m_path_ptr->m_pathname[it.m_pos])) - { - // detect root directory - if (was_net -# ifdef BOOST_WINDOWS_API - // case "c:/" - || it.m_element.m_pathname[it.m_element.m_pathname.size()-1] == colon -# endif - ) - { - it.m_element.m_pathname = separator; - return; - } - - // bypass separators - 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)) - { - --it.m_pos; - it.m_element = dot_path; - return; - } - } - - // get next 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(); - it.m_element = it.m_path_ptr->m_pathname.substr(it.m_pos, end_pos - it.m_pos); - } - - void path::m_path_iterator_decrement(path::iterator & it) - { - BOOST_ASSERT_MSG(it.m_pos, "path::iterator decrement past begin()"); - - size_type end_pos(it.m_pos); - - // if at end and there was a trailing non-root '/', return "." - 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) - ) - { - --it.m_pos; - it.m_element = dot_path; - return; - } - - size_type root_dir_pos(root_directory_start(it.m_path_ptr->m_pathname, end_pos)); - - // skip separators unless root directory - for ( - ; - end_pos > 0 - && (end_pos-1) != root_dir_pos - && is_separator(it.m_path_ptr->m_pathname[end_pos-1]) - ; - --end_pos) {} - - 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 - } - -} // namespace filesystem3 -} // namespace boost - -//--------------------------------------------------------------------------------------// -// // -// detail helpers // -// // -//--------------------------------------------------------------------------------------// - -namespace -{ - - //------------------------------------------------------------------------------------// - // locale helpers // - //------------------------------------------------------------------------------------// - -#ifdef BOOST_WINDOWS_API - - 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> > - (path_locale)); - -#elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) - - // "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 - // - // "The kernel will reject any filename that is not a valid UTF-8 string, and it will - // even be normalized (to Unicode NFD) before stored on disk, at least when using HFS. - // The right way to deal with it would be to always convert the filename to UTF-8 - // before trying to open/create a file." See - // http://lists.apple.com/archives/unix-porting/2007/Sep/msg00023.html - // - // "How a file name looks at the API level depends on the API. Current Carbon APIs - // handle file names as an array of UTF-16 characters; POSIX ones handle them as an - // array of UTF-8, which is why UTF-8 works well in Terminal. How it's stored on disk - // depends on the disk format; HFS+ uses UTF-16, but that's not important in most - // cases." See - // http://lists.apple.com/archives/applescript-users/2002/Sep/msg00319.html - // - // Many thanks to Peter Dimov for digging out the above references! - - std::locale path_locale(std::locale(), - 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> > - (path_locale)); - -#else // Other POSIX - - // ISO C calls std::locale("") "the locale-specific native environment", and this - // locale is the default for many POSIX-based operating systems such as Linux. - - // std::locale("") construction can throw (if environmental variables LC_MESSAGES or - // 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 - -# endif - -} // unnamed namespace - -//--------------------------------------------------------------------------------------// -// path::imbue implementation // -//--------------------------------------------------------------------------------------// - -namespace boost -{ -namespace filesystem3 -{ - - const path::codecvt_type*& path::wchar_t_codecvt_facet() - { -# if defined(BOOST_POSIX_API) && \ - !(defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)) - // A local static initialized by calling path::imbue ensures that std::locale(""), - // which may throw, is called only if path_locale and condecvt_facet will actually - // be used. Thus misconfigured environmental variables will only cause an - // exception if a valid std::locale("") is actually needed. - static std::locale posix_lazy_initialization(path::imbue(std::locale(""))); -# endif - return codecvt_facet; - } - - std::locale path::imbue(const std::locale& loc) - { - std::locale temp(path_locale); - path_locale = loc; - codecvt_facet = - &std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t> >(path_locale); - return temp; - } - -} // namespace filesystem3 -} // namespace boost - -#endif // has wide character support diff --git a/src/third_party/boost/libs/filesystem/v3/src/path_traits.cpp b/src/third_party/boost/libs/filesystem/v3/src/path_traits.cpp deleted file mode 100644 index 66064370bc2..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/src/path_traits.cpp +++ /dev/null @@ -1,209 +0,0 @@ -// filesystem path_traits.cpp --------------------------------------------------------// - -// Copyright Beman Dawes 2008, 2009 - -// 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 <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 - -#ifndef BOOST_SYSTEM_NO_DEPRECATED -# define BOOST_SYSTEM_NO_DEPRECATED -#endif - -#include <boost/filesystem/v3/config.hpp> -#include <boost/filesystem/v3/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 bs = boost::system; - -//--------------------------------------------------------------------------------------// -// configuration // -//--------------------------------------------------------------------------------------// - -#ifndef BOOST_FILESYSTEM_CODECVT_BUF_SIZE -# define BOOST_FILESYSTEM_CODECVT_BUF_SIZE 256 -#endif - -namespace { - - const std::size_t default_codecvt_buf_size = BOOST_FILESYSTEM_CODECVT_BUF_SIZE; - - -//--------------------------------------------------------------------------------------// -// // -// The public convert() functions do buffer management, and then forward to the // -// convert_aux() functions for the actual call to the codecvt facet. // -// // -//--------------------------------------------------------------------------------------// - -//--------------------------------------------------------------------------------------// -// convert_aux const char* to wstring // -//--------------------------------------------------------------------------------------// - - void convert_aux( - const char* from, - const char* from_end, - wchar_t* to, wchar_t* to_end, - std::wstring & target, - const pt::codecvt_type & cvt) - { - //std::cout << std::hex - // << " from=" << std::size_t(from) - // << " from_end=" << std::size_t(from_end) - // << " to=" << std::size_t(to) - // << " to_end=" << std::size_t(to_end) - // << std::endl; - - std::mbstate_t state = std::mbstate_t(); // perhaps unneeded, but cuts bug reports - const char* from_next; - wchar_t* to_next; - - std::codecvt_base::result res; - - if ((res=cvt.in(state, from, from_end, from_next, - to, to_end, to_next)) != std::codecvt_base::ok) - { - //std::cout << " result is " << static_cast<int>(res) << std::endl; - BOOST_FILESYSTEM_THROW(bs::system_error(res, fs::codecvt_error_category(), - "boost::filesystem::path codecvt to wstring")); - } - target.append(to, to_next); - } - -//--------------------------------------------------------------------------------------// -// convert_aux const wchar_t* to string // -//--------------------------------------------------------------------------------------// - - void convert_aux( - const wchar_t* from, - const wchar_t* from_end, - char* to, char* to_end, - std::string & target, - const pt::codecvt_type & cvt) - { - //std::cout << std::hex - // << " from=" << std::size_t(from) - // << " from_end=" << std::size_t(from_end) - // << " to=" << std::size_t(to) - // << " to_end=" << std::size_t(to_end) - // << std::endl; - - std::mbstate_t state = std::mbstate_t(); // perhaps unneeded, but cuts bug reports - const wchar_t* from_next; - char* to_next; - - std::codecvt_base::result res; - - if ((res=cvt.out(state, from, from_end, from_next, - to, to_end, to_next)) != std::codecvt_base::ok) - { - //std::cout << " result is " << static_cast<int>(res) << std::endl; - BOOST_FILESYSTEM_THROW(bs::system_error(res, fs::codecvt_error_category(), - "boost::filesystem::path codecvt to string")); - } - target.append(to, to_next); - } - -} // unnamed namespace - -//--------------------------------------------------------------------------------------// -// path_traits // -//--------------------------------------------------------------------------------------// - -namespace boost { namespace filesystem3 { namespace path_traits { - -//--------------------------------------------------------------------------------------// -// convert const char* to wstring // -//--------------------------------------------------------------------------------------// - - BOOST_FILESYSTEM_DECL - void convert(const char* from, - const char* from_end, // 0 for null terminated MBCS - std::wstring & to, - const codecvt_type & cvt) - { - BOOST_ASSERT(from); - - if (!from_end) // null terminated - { - from_end = from + std::strlen(from); - } - - if (from == from_end) return; - - std::size_t buf_size = (from_end - from) * 3; // perhaps too large, but that's OK - - // dynamically allocate a buffer only if source is unusually large - if (buf_size > default_codecvt_buf_size) - { - boost::scoped_array< wchar_t > buf(new wchar_t [buf_size]); - convert_aux(from, from_end, buf.get(), buf.get()+buf_size, to, cvt); - } - else - { - wchar_t buf[default_codecvt_buf_size]; - convert_aux(from, from_end, buf, buf+default_codecvt_buf_size, to, cvt); - } - } - -//--------------------------------------------------------------------------------------// -// convert const wchar_t* to string // -//--------------------------------------------------------------------------------------// - - BOOST_FILESYSTEM_DECL - void convert(const wchar_t* from, - const wchar_t* from_end, // 0 for null terminated MBCS - std::string & to, - const codecvt_type & cvt) - { - BOOST_ASSERT(from); - - if (!from_end) // null terminated - { - from_end = from + std::wcslen(from); - } - - if (from == from_end) return; - - // The codecvt length functions may not be implemented, and I don't really - // understand them either. Thus this code is just a guess; if it turns - // out the buffer is too small then an error will be reported and the code - // will have to be fixed. - std::size_t buf_size = (from_end - from) * 4; // perhaps too large, but that's OK - buf_size += 4; // encodings like shift-JIS need some prefix space - - // dynamically allocate a buffer only if source is unusually large - if (buf_size > default_codecvt_buf_size) - { - boost::scoped_array< char > buf(new char [buf_size]); - convert_aux(from, from_end, buf.get(), buf.get()+buf_size, to, cvt); - } - else - { - char buf[default_codecvt_buf_size]; - convert_aux(from, from_end, buf, buf+default_codecvt_buf_size, to, cvt); - } - } -}}} // namespace boost::filesystem3::path_traits - -#endif // no wide character support diff --git a/src/third_party/boost/libs/filesystem/v3/src/portability.cpp b/src/third_party/boost/libs/filesystem/v3/src/portability.cpp deleted file mode 100644 index 31e01762715..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/src/portability.cpp +++ /dev/null @@ -1,128 +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 - -//--------------------------------------------------------------------------------------// - -#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 -# define BOOST_SYSTEM_NO_DEPRECATED -#endif - -#include <boost/filesystem/v3/config.hpp> -#include <boost/filesystem/v3/path.hpp> - -namespace fs = boost::filesystem3; - -#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 filesystem3 - { - - // 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 filesystem3 -} // namespace boost - -#endif // no wide character support diff --git a/src/third_party/boost/libs/filesystem/v3/src/unique_path.cpp b/src/third_party/boost/libs/filesystem/v3/src/unique_path.cpp deleted file mode 100644 index 1569b32e915..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/src/unique_path.cpp +++ /dev/null @@ -1,151 +0,0 @@ -// filesystem system_crypt_random.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 <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 -# define BOOST_SYSTEM_NO_DEPRECATED -#endif - -#include <boost/filesystem/v3/operations.hpp> - -# ifdef BOOST_POSIX_API -# include <fcntl.h> -# else // BOOST_WINDOWS_API -# include <windows.h> -# include <wincrypt.h> -# pragma comment(lib, "Advapi32.lib") -# endif - -namespace { - -void fail(int err, boost::system::error_code* ec) -{ - if (ec == 0) - BOOST_FILESYSTEM_THROW( boost::system::system_error(err, - boost::system::system_category(), - "boost::filesystem::unique_path")); - - ec->assign(err, boost::system::system_category()); - return; -} - -void system_crypt_random(void* buf, std::size_t len, boost::system::error_code* ec) -{ -# ifdef BOOST_POSIX_API - - int file = open("/dev/urandom", O_RDONLY); - if (file == -1) - { - file = open("/dev/random", O_RDONLY); - if (file == -1) - { - fail(errno, ec); - return; - } - } - - size_t bytes_read = 0; - while (bytes_read < len) - { - ssize_t n = read(file, buf, len - bytes_read); - if (n == -1) - { - close(file); - fail(errno, ec); - return; - } - bytes_read += n; - buf = static_cast<char*>(buf) + n; - } - - close(file); - -# else // BOOST_WINDOWS_API - - HCRYPTPROV handle; - int errval = 0; - - if (!::CryptAcquireContextW(&handle, 0, 0, PROV_RSA_FULL, 0)) - { - errval = ::GetLastError(); - if (errval == NTE_BAD_KEYSET) - { - if (!::CryptAcquireContextW(&handle, 0, 0, PROV_RSA_FULL, CRYPT_NEWKEYSET)) - { - errval = ::GetLastError(); - } - else errval = 0; - } - } - - if (!errval) - { - BOOL gen_ok = ::CryptGenRandom(handle, len, static_cast<unsigned char*>(buf)); - if (!gen_ok) - errval = ::GetLastError(); - ::CryptReleaseContext(handle, 0); - } - - if (!errval) return; - - fail(errval, ec); -# endif -} - -} // unnamed namespace - -namespace boost { namespace filesystem3 { namespace detail { - -BOOST_FILESYSTEM_DECL -path unique_path(const path& model, system::error_code* ec) -{ - std::wstring s (model.wstring()); // std::string ng for MBCS encoded POSIX - const wchar_t hex[] = L"0123456789abcdef"; - const int n_ran = 16; - const int max_nibbles = 2 * n_ran; // 4-bits per nibble - char ran[n_ran]; - - int nibbles_used = max_nibbles; - for(std::wstring::size_type i=0; i < s.size(); ++i) - { - if (s[i] == L'%') // digit request - { - if (nibbles_used == max_nibbles) - { - system_crypt_random(ran, sizeof(ran), ec); - if (ec != 0 && *ec) - return ""; - nibbles_used = 0; - } - int c = ran[nibbles_used/2]; - c >>= 4 * (nibbles_used++ & 1); // if odd, shift right 1 nibble - s[i] = hex[c & 0xf]; // convert to hex digit and replace - } - } - - if (ec != 0) ec->clear(); - - return s; -} - -}}} - -#endif // no wide character support diff --git a/src/third_party/boost/libs/filesystem/v3/src/utf8_codecvt_facet.cpp b/src/third_party/boost/libs/filesystem/v3/src/utf8_codecvt_facet.cpp deleted file mode 100644 index ed0b422af83..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/src/utf8_codecvt_facet.cpp +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright Vladimir Prus 2004. -// 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) - -// For HP-UX, request that WCHAR_MAX and WCHAR_MIN be defined as macros, -// not casts. See ticket 5048 -#define _INCLUDE_STDCSOURCE_199901 - -#ifndef BOOST_SYSTEM_NO_DEPRECATED -# define BOOST_SYSTEM_NO_DEPRECATED -#endif - -#define BOOST_FILESYSTEM_SOURCE -#include <boost/filesystem/config.hpp> - -#define BOOST_UTF8_BEGIN_NAMESPACE \ - namespace boost { namespace filesystem { namespace detail { - -#define BOOST_UTF8_END_NAMESPACE }}} -#define BOOST_UTF8_DECL BOOST_FILESYSTEM_DECL - -#include "libs/detail/utf8_codecvt_facet.cpp" - -#undef BOOST_UTF8_BEGIN_NAMESPACE -#undef BOOST_UTF8_END_NAMESPACE -#undef BOOST_UTF8_DECL diff --git a/src/third_party/boost/libs/filesystem/v3/src/windows_file_codecvt.cpp b/src/third_party/boost/libs/filesystem/v3/src/windows_file_codecvt.cpp deleted file mode 100644 index 85de59eee1c..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/src/windows_file_codecvt.cpp +++ /dev/null @@ -1,83 +0,0 @@ -// filesystem windows_file_codecvt.cpp -----------------------------------------// - -// Copyright Beman Dawes 2009 - -// 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 <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 - -#ifndef BOOST_SYSTEM_NO_DEPRECATED -# define BOOST_SYSTEM_NO_DEPRECATED -#endif - -#include <boost/filesystem/v3/config.hpp> -#include <cwchar> // for mbstate_t - -#ifdef BOOST_WINDOWS_API - -#include "windows_file_codecvt.hpp" - -// Versions of MinGW prior to GCC 4.6 requires this -#ifndef WINVER -# define WINVER 0x0500 -#endif - -#include <windows.h> - - std::codecvt_base::result windows_file_codecvt::do_in( - std::mbstate_t &, - const char* from, const char* from_end, const char*& from_next, - wchar_t* to, wchar_t* to_end, wchar_t*& to_next) const - { - UINT codepage = AreFileApisANSI() ? CP_ACP : CP_OEMCP; - - int count; - if ((count = ::MultiByteToWideChar(codepage, MB_PRECOMPOSED, from, - from_end - from, to, to_end - to)) == 0) - { - return error; // conversion failed - } - - from_next = from_end; - to_next = to + count; - *to_next = L'\0'; - return ok; - } - - std::codecvt_base::result windows_file_codecvt::do_out( - std::mbstate_t &, - const wchar_t* from, const wchar_t* from_end, const wchar_t* & from_next, - char* to, char* to_end, char* & to_next) const - { - UINT codepage = AreFileApisANSI() ? CP_ACP : CP_OEMCP; - - int count; - if ((count = ::WideCharToMultiByte(codepage, WC_NO_BEST_FIT_CHARS, from, - from_end - from, to, to_end - to, 0, 0)) == 0) - { - return error; // conversion failed - } - - from_next = from_end; - to_next = to + count; - *to_next = '\0'; - return ok; - } - - # endif // BOOST_WINDOWS_API - -#endif // no wide character support diff --git a/src/third_party/boost/libs/filesystem/v3/src/windows_file_codecvt.hpp b/src/third_party/boost/libs/filesystem/v3/src/windows_file_codecvt.hpp deleted file mode 100644 index d845d379429..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/src/windows_file_codecvt.hpp +++ /dev/null @@ -1,56 +0,0 @@ -// filesystem windows_file_codecvt.hpp -----------------------------------------------// - -// Copyright Beman Dawes 2009 - -// 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 - -#ifndef BOOST_FILESYSTEM3_WIN_FILE_CODECVT_HPP -#define BOOST_FILESYSTEM3_WIN_FILE_CODECVT_HPP - -#include <boost/filesystem/v3/config.hpp> -#include <locale> - - //------------------------------------------------------------------------------------// - // // - // class windows_file_codecvt // - // // - // Warning: partial implementation; even do_in and do_out only partially meet the // - // standard library specifications as the "to" buffer must hold the entire result. // - // // - //------------------------------------------------------------------------------------// - - class BOOST_FILESYSTEM_DECL windows_file_codecvt - : public std::codecvt< wchar_t, char, std::mbstate_t > - { - public: - explicit windows_file_codecvt() - : std::codecvt<wchar_t, char, std::mbstate_t>() {} - protected: - - virtual bool do_always_noconv() const throw() { return false; } - - // seems safest to assume variable number of characters since we don't - // actually know what codepage is active - virtual int do_encoding() const throw() { return 0; } - - virtual std::codecvt_base::result do_in(std::mbstate_t& state, - const char* from, const char* from_end, const char*& from_next, - wchar_t* to, wchar_t* to_end, wchar_t*& to_next) const; - - virtual std::codecvt_base::result do_out(std::mbstate_t & state, - const wchar_t* from, const wchar_t* from_end, const wchar_t*& from_next, - char* to, char* to_end, char*& to_next) const; - - virtual std::codecvt_base::result do_unshift(std::mbstate_t&, - char* /*from*/, char* /*to*/, char* & /*next*/) const { return ok; } - - virtual int do_length(std::mbstate_t&, - const char* /*from*/, const char* /*from_end*/, std::size_t /*max*/) const { return 0; } - - virtual int do_max_length() const throw () { return 0; } - }; - -#endif // BOOST_FILESYSTEM3_WIN_FILE_CODECVT_HPP diff --git a/src/third_party/boost/libs/filesystem/v3/test/Jamfile.v2 b/src/third_party/boost/libs/filesystem/v3/test/Jamfile.v2 deleted file mode 100644 index b076ffe8d25..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v3/test/convenience_test.cpp b/src/third_party/boost/libs/filesystem/v3/test/convenience_test.cpp deleted file mode 100644 index 17675a6826c..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/convenience_test.cpp +++ /dev/null @@ -1,180 +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 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 -#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> - -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 - - path unique_dir = fs::unique_path(); // unique name in case tests running in parallel - path unique_yy = unique_dir / "yy"; - path unique_yya = unique_dir / "yya"; - path unique_yy_zz = unique_dir / "yy" / "zz"; - - fs::remove_all(unique_dir); // make sure slate is blank - BOOST_TEST(!fs::exists(unique_dir)); // reality check - - BOOST_TEST(fs::create_directories(unique_dir)); - BOOST_TEST(fs::exists(unique_dir)); - BOOST_TEST(fs::is_directory(unique_dir)); - - BOOST_TEST(fs::create_directories(unique_yy_zz)); - BOOST_TEST(fs::exists(unique_dir)); - BOOST_TEST(fs::exists(unique_yy)); - BOOST_TEST(fs::exists(unique_yy_zz)); - BOOST_TEST(fs::is_directory(unique_dir)); - BOOST_TEST(fs::is_directory(unique_yy)); - BOOST_TEST(fs::is_directory(unique_yy_zz)); - - path is_a_file(unique_dir / "uu"); - { - std::ofstream f(is_a_file.string().c_str()); - BOOST_TEST(!!f); - } - BOOST_TEST(throws_fs_error( - boost::bind(fs::create_directories, is_a_file))); - BOOST_TEST(throws_fs_error( - boost::bind(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(unique_dir / "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(unique_yya.string().c_str()); - BOOST_TEST(!!f); - } - - for (it = fs::recursive_directory_iterator(unique_dir); - it != fs::recursive_directory_iterator(); ++it) - { std::cout << it->path() << '\n'; } - - it = fs::recursive_directory_iterator(unique_dir); - BOOST_TEST(it->path() == unique_yy); - BOOST_TEST(it.level() == 0); - ++it; - BOOST_TEST(it->path() == unique_yy_zz); - BOOST_TEST(it.level() == 1); - it.pop(); - BOOST_TEST(it->path() == unique_yya); - BOOST_TEST(it.level() == 0); - it++; - BOOST_TEST(it == fs::recursive_directory_iterator()); - - it = fs::recursive_directory_iterator(unique_dir); - BOOST_TEST(it->path() == unique_yy); - it.no_push(); - ++it; - BOOST_TEST(it->path() == unique_yya); - ++it; - BOOST_TEST(it == fs::recursive_directory_iterator()); - - fs::remove(unique_yya); -#endif - - it = fs::recursive_directory_iterator(unique_yy_zz); - BOOST_TEST(it == fs::recursive_directory_iterator()); - - it = fs::recursive_directory_iterator(unique_dir); - BOOST_TEST(it->path() == unique_yy); - BOOST_TEST(it.level() == 0); - ++it; - BOOST_TEST(it->path() == unique_yy_zz); - BOOST_TEST(it.level() == 1); - it++; - BOOST_TEST(it == fs::recursive_directory_iterator()); - - it = fs::recursive_directory_iterator(unique_dir); - BOOST_TEST(it->path() == unique_yy); - it.no_push(); - ++it; - BOOST_TEST(it == fs::recursive_directory_iterator()); - - it = fs::recursive_directory_iterator(unique_dir); - BOOST_TEST(it->path() == unique_yy); - ++it; - it.pop(); - BOOST_TEST(it == fs::recursive_directory_iterator()); - - ec.clear(); - BOOST_TEST(!ec); - // check that two argument failed constructor creates the end iterator - BOOST_TEST(fs::recursive_directory_iterator("nosuchdir", ec) - == fs::recursive_directory_iterator()); - BOOST_TEST(ec); - - fs::remove_all(unique_dir); // clean up behind ourselves - - return ::boost::report_errors(); -} diff --git a/src/third_party/boost/libs/filesystem/v3/test/deprecated_test.cpp b/src/third_party/boost/libs/filesystem/v3/test/deprecated_test.cpp deleted file mode 100644 index de82ff8b267..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/deprecated_test.cpp +++ /dev/null @@ -1,251 +0,0 @@ -// deprecated_test program --------------------------------------------------// - -// Copyright Beman Dawes 2002 -// Copyright Vladimir Prus 2002 - -// 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 - -// 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 - -#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> - -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.generic_string()== expected) return; - - ++::boost::detail::test_errors(); - - std::cout << '(' << line << ") source.string(): \"" << source.string() - << "\" != expected: \"" << expected - << "\"" << std::endl; - } - - void normalize_test() - { - 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"); - } - } - - // Compile-only tests not intended to be executed -----------------------------------// - - void compile_only() - { - fs::path p; - - fs::initial_path<fs::path>(); - fs::initial_path<fs::wpath>(); - - p.file_string(); - p.directory_string(); - } - - // path_rename_test -----------------------------------------------------------------// - - void path_rename_test() - { - fs::path p("foo/bar/blah"); - - BOOST_TEST_EQ(path("foo/bar/blah").remove_leaf(), "foo/bar"); - BOOST_TEST_EQ(p.leaf(), "blah"); - BOOST_TEST_EQ(p.branch_path(), "foo/bar"); - BOOST_TEST(p.has_leaf()); - BOOST_TEST(p.has_branch_path()); - BOOST_TEST(!p.is_complete()); - - if (platform == "Windows") - { - BOOST_TEST_EQ(path("foo\\bar\\blah").remove_leaf(), "foo\\bar"); - p = "foo\\bar\\blah"; - BOOST_TEST_EQ(p.branch_path(), "foo\\bar"); - } - } - -} // 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'; - - BOOST_TEST(fs::initial_path() == fs::current_path()); - - //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")); - - path_rename_test(); - normalize_test(); - -// 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/src/third_party/boost/libs/filesystem/v3/test/design_use_cases.cpp b/src/third_party/boost/libs/filesystem/v3/test/design_use_cases.cpp deleted file mode 100644 index 49b0c28c082..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/design_use_cases.cpp +++ /dev/null @@ -1,81 +0,0 @@ -#include <string> -#include <iostream> - -// Minimal class path - -class path -{ -public: - path( const char * ) - { - std::cout << "path( const char * )\n"; - } - path( const std::string & ) - { - std::cout << "path( std::string & )\n"; - } - -// for maximum efficiency, either signature must work -# ifdef BY_VALUE - operator const std::string() const -# else - operator const std::string&() const -# endif - { - std::cout << "operator string\n"; - return m_path; - } - -#ifdef NAMED_CONVERSION - std::string string() const - { - std::cout << "std::string string() const\n"; - return m_path; - } -#endif - -private: - std::string m_path; -}; - -bool operator==( const path &, const path & ) -{ - std::cout << "operator==( const path &, const path & )\n"; - return true; -} - -// These are the critical use cases. If any of these don't compile, usability -// is unacceptably degraded. - -void f( const path & ) -{ - std::cout << "f( const path & )\n"; -} - -int main() -{ - f( "foo" ); - f( std::string( "foo" ) ); - f( path( "foo" ) ); - - std::cout << '\n'; - - std::string s1( path( "foo" ) ); - std::string s2 = path( "foo" ); - s2 = path( "foo" ); - -#ifdef NAMED_CONVERSION - s2 = path( "foo" ).string(); -#endif - - std::cout << '\n'; - - // these must call bool path( const path &, const path & ); - path( "foo" ) == path( "foo" ); - path( "foo" ) == "foo"; - path( "foo" ) == std::string( "foo" ); - "foo" == path( "foo" ); - std::string( "foo" ) == path( "foo" ); - - return 0; -} diff --git a/src/third_party/boost/libs/filesystem/v3/test/equivalent.cpp b/src/third_party/boost/libs/filesystem/v3/test/equivalent.cpp deleted file mode 100644 index be3089afd60..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v3/test/fstream_test.cpp b/src/third_party/boost/libs/filesystem/v3/test/fstream_test.cpp deleted file mode 100644 index d194033ff83..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/fstream_test.cpp +++ /dev/null @@ -1,173 +0,0 @@ -// fstream_test.cpp ------------------------------------------------------------------// - -// Copyright Beman Dawes 2002 - -// 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 - -#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 -#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> - -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> - -#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; - - void test(const fs::path & p) - { - fs::remove(p); - { - 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()); - } - { - 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()); - } - { - 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()); - } - { - 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()); - } - { - 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()); - } - { - 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()); - } - { - 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()); - } - - if (cleanup) - fs::remove(p); - - } // test -} // unnamed namespace - -int cpp_main(int argc, char*[]) -{ - if (argc > 1) cleanup = false; - - std::cout << "BOOST_FILESYSTEM_C_STR defined as \"" - << BOOST_STRINGIZE(BOOST_FILESYSTEM_C_STR) << "\"\n"; - - // test narrow characters - std::cout << "narrow character tests:\n"; - test("v3_fstream_test"); - - - // 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::path::imbue(loc); - - // test with some wide characters - // \u2780 is circled 1 against white background == e2 9e 80 in UTF-8 - // \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"); - - return ::boost::report_errors(); -} diff --git a/src/third_party/boost/libs/filesystem/v3/test/large_file_support_test.cpp b/src/third_party/boost/libs/filesystem/v3/test/large_file_support_test.cpp deleted file mode 100644 index 287490efeab..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/large_file_support_test.cpp +++ /dev/null @@ -1,45 +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 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 - -// 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> - -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/src/third_party/boost/libs/filesystem/v3/test/locale_info.cpp b/src/third_party/boost/libs/filesystem/v3/test/locale_info.cpp deleted file mode 100644 index db57bb15883..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/locale_info.cpp +++ /dev/null @@ -1,88 +0,0 @@ -// locale_info.cpp ---------------------------------------------------------// - -// Copyright Beman Dawes 2011 - -// Distributed under the Boost Software License, Version 1.0. -// See http://www.boost.org/LICENSE_1_0.txt - -#include <locale> -#include <iostream> -#include <exception> -#include <cstdlib> -using namespace std; - -#ifdef _MSC_VER -# pragma warning(push) -# pragma warning(disable: 4996) // ... Function call with parameters that may be unsafe -#endif - -namespace -{ - void facet_info(const locale& loc, const char* msg) - { - cout << "has_facet<std::codecvt<wchar_t, char, std::mbstate_t> >(" - << msg << ") is " - << (has_facet<std::codecvt<wchar_t, char, std::mbstate_t> >(loc) - ? "true\n" - : "false\n"); - } - - void default_info() - { - try - { - locale loc; - cout << "\nlocale default construction OK" << endl; - facet_info(loc, "locale()"); - } - catch (const exception& ex) - { - cout << "\nlocale default construction threw: " << ex.what() << endl; - } - } - - void null_string_info() - { - try - { - locale loc(""); - cout << "\nlocale(\"\") construction OK" << endl; - facet_info(loc, "locale(\"\")"); - } - catch (const exception& ex) - { - cout << "\nlocale(\"\") construction threw: " << ex.what() << endl; - } - } - - void classic_info() - { - try - { - locale loc(locale::classic()); - cout << "\nlocale(locale::classic()) copy construction OK" << endl; - facet_info(loc, "locale::classic()"); - } - catch (const exception& ex) - { - cout << "\nlocale(locale::clasic()) copy construction threw: " << ex.what() << endl; - } - } -} - -int main() -{ - const char* lang = getenv("LANG"); - cout << "\nLANG environmental variable is " - << (lang ? lang : "not present") << endl; - - default_info(); - null_string_info(); - classic_info(); - - return 0; -} - -#ifdef _MSC_VER -# pragma warning(pop) -#endif diff --git a/src/third_party/boost/libs/filesystem/v3/test/long_path_test.cpp b/src/third_party/boost/libs/filesystem/v3/test/long_path_test.cpp deleted file mode 100644 index 65be7cb4e15..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/long_path_test.cpp +++ /dev/null @@ -1,61 +0,0 @@ -// long_path_test.cpp ----------------------------------------------------------------// - -// Copyright Beman Dawes 2011 - -// Distributed under the Boost Software License, Version 1.0. -// http://www.boost.org/LICENSE_1_0.txt - -// See http://www.boost.org/libs/btree for documentation. - -// 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> -#include <iostream> -#include <string> - -using namespace boost::filesystem; - -#include <boost/detail/lightweight_test.hpp> -#include <boost/detail/lightweight_main.hpp> - -namespace -{ -} // unnamed namespace - -int cpp_main(int, char*[]) -{ - - std::string prefix("d:\\temp\\"); - std::cout << "prefix is " << prefix << '\n'; - - const std::size_t safe_size - = 260 - prefix.size() - 100; // Windows MAX_PATH is 260 - - std::string safe_x_string(safe_size, 'x'); - std::string safe_y_string(safe_size, 'y'); - std::string path_escape("\\\\?\\"); - - path x_p(prefix + safe_x_string); - path y_p(path_escape + prefix + safe_x_string + "\\" + safe_y_string); - - std::cout << "x_p.native().size() is " << x_p.native().size() << '\n'; - std::cout << "y_p.native().size() is " << y_p.native().size() << '\n'; - - create_directory(x_p); - BOOST_TEST(exists(x_p)); - create_directory(y_p); - BOOST_TEST(exists(y_p)); - - //std::cout << "directory x.../y... ready for testing, where ... is " << safe_size - // << " repeats of x and y, respectively\n"; - - BOOST_TEST(exists(x_p)); - - //remove_all(x_p); - - return ::boost::report_errors(); -} diff --git a/src/third_party/boost/libs/filesystem/v3/test/msvc/common.vsprops b/src/third_party/boost/libs/filesystem/v3/test/msvc/common.vsprops deleted file mode 100644 index 9820ca15cfe..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v3/test/msvc/convenience_test/convenience_test.vcproj b/src/third_party/boost/libs/filesystem/v3/test/msvc/convenience_test/convenience_test.vcproj deleted file mode 100644 index 49435cf50b7..00000000000 --- a/src/third_party/boost/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=""$(TargetDir)\$(TargetName).exe"" - /> - </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=""$(TargetDir)\$(TargetName).exe"" - /> - </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/src/third_party/boost/libs/filesystem/v3/test/msvc/deprecated_test/deprecated_test.vcproj b/src/third_party/boost/libs/filesystem/v3/test/msvc/deprecated_test/deprecated_test.vcproj deleted file mode 100644 index c0b3ecdc4b9..00000000000 --- a/src/third_party/boost/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=""$(TargetDir)\$(TargetName).exe"" - /> - </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=""$(TargetDir)\$(TargetName).exe"" - /> - </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/src/third_party/boost/libs/filesystem/v3/test/msvc/error_demo/error_demo.vcproj b/src/third_party/boost/libs/filesystem/v3/test/msvc/error_demo/error_demo.vcproj deleted file mode 100644 index 91e29843b68..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v3/test/msvc/filesystem-v3.sln b/src/third_party/boost/libs/filesystem/v3/test/msvc/filesystem-v3.sln deleted file mode 100644 index 344008b9245..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v3/test/msvc/filesystem_dll/filesystem_dll.vcproj b/src/third_party/boost/libs/filesystem/v3/test/msvc/filesystem_dll/filesystem_dll.vcproj deleted file mode 100644 index 1120bf3fd50..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v3/test/msvc/fstream_test/fstream_test.vcproj b/src/third_party/boost/libs/filesystem/v3/test/msvc/fstream_test/fstream_test.vcproj deleted file mode 100644 index 6eb91af5adb..00000000000 --- a/src/third_party/boost/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=""$(TargetDir)\$(TargetName).exe"" - /> - </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=""$(TargetDir)\$(TargetName).exe"" - /> - </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/src/third_party/boost/libs/filesystem/v3/test/msvc/operations_test/operations_test.vcproj b/src/third_party/boost/libs/filesystem/v3/test/msvc/operations_test/operations_test.vcproj deleted file mode 100644 index 5e0cac2c729..00000000000 --- a/src/third_party/boost/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=""$(TargetDir)\$(TargetName).exe" -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=""$(TargetDir)\$(TargetName).exe" -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/src/third_party/boost/libs/filesystem/v3/test/msvc/operations_unit_test/operations_unit_test.vcproj b/src/third_party/boost/libs/filesystem/v3/test/msvc/operations_unit_test/operations_unit_test.vcproj deleted file mode 100644 index a5f95ed74a9..00000000000 --- a/src/third_party/boost/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=""$(TargetDir)\$(TargetName).exe"" - /> - </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=""$(TargetDir)\$(TargetName).exe"" - /> - </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/src/third_party/boost/libs/filesystem/v3/test/msvc/path_test/path_test.vcproj b/src/third_party/boost/libs/filesystem/v3/test/msvc/path_test/path_test.vcproj deleted file mode 100644 index 1131adfa5d2..00000000000 --- a/src/third_party/boost/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=""$(TargetDir)\$(TargetName).exe"" - /> - </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=""$(TargetDir)\$(TargetName).exe"" - /> - </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/src/third_party/boost/libs/filesystem/v3/test/msvc/path_test_dynamic_link/path_test_dynamic_linkl.vcproj b/src/third_party/boost/libs/filesystem/v3/test/msvc/path_test_dynamic_link/path_test_dynamic_linkl.vcproj deleted file mode 100644 index 9a754ef7c99..00000000000 --- a/src/third_party/boost/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=""$(TargetDir)\$(TargetName).exe"" - /> - </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=""$(TargetDir)\$(TargetName).exe"" - /> - </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/src/third_party/boost/libs/filesystem/v3/test/msvc/path_unit_test/path_unit_test.vcproj b/src/third_party/boost/libs/filesystem/v3/test/msvc/path_unit_test/path_unit_test.vcproj deleted file mode 100644 index 0f39d3bc595..00000000000 --- a/src/third_party/boost/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=""$(TargetDir)\$(TargetName).exe"" - /> - </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=""$(TargetDir)\$(TargetName).exe"" - /> - </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/src/third_party/boost/libs/filesystem/v3/test/msvc/simple_ls/simple_ls.vcproj b/src/third_party/boost/libs/filesystem/v3/test/msvc/simple_ls/simple_ls.vcproj deleted file mode 100644 index 3d52d4becd2..00000000000 --- a/src/third_party/boost/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=""$(TargetDir)\$(TargetName).exe"" - /> - </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=""$(TargetDir)\$(TargetName).exe"" - /> - </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/src/third_party/boost/libs/filesystem/v3/test/msvc/system_dll/system_dll.vcproj b/src/third_party/boost/libs/filesystem/v3/test/msvc/system_dll/system_dll.vcproj deleted file mode 100644 index 792371fd34f..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v3/test/msvc/tchar_example/tchar_example.vcproj b/src/third_party/boost/libs/filesystem/v3/test/msvc/tchar_example/tchar_example.vcproj deleted file mode 100644 index 80548e2e8ca..00000000000 --- a/src/third_party/boost/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=""$(TargetDir)\$(TargetName).exe"" - /> - </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=""$(TargetDir)\$(TargetName).exe"" - /> - </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/src/third_party/boost/libs/filesystem/v3/test/msvc/tut0/tut0.vcproj b/src/third_party/boost/libs/filesystem/v3/test/msvc/tut0/tut0.vcproj deleted file mode 100644 index fea6600ba48..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v3/test/msvc/tut1/tut1.vcproj b/src/third_party/boost/libs/filesystem/v3/test/msvc/tut1/tut1.vcproj deleted file mode 100644 index d288e527202..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v3/test/msvc/tut2/tut2.vcproj b/src/third_party/boost/libs/filesystem/v3/test/msvc/tut2/tut2.vcproj deleted file mode 100644 index 47d157d8d79..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v3/test/msvc/tut3/tut3.vcproj b/src/third_party/boost/libs/filesystem/v3/test/msvc/tut3/tut3.vcproj deleted file mode 100644 index 37964b0efbe..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v3/test/msvc/tut4/tut4.vcproj b/src/third_party/boost/libs/filesystem/v3/test/msvc/tut4/tut4.vcproj deleted file mode 100644 index 307b9b7cc02..00000000000 --- a/src/third_party/boost/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/src/third_party/boost/libs/filesystem/v3/test/msvc/wide_test/wide_test.vcproj b/src/third_party/boost/libs/filesystem/v3/test/msvc/wide_test/wide_test.vcproj deleted file mode 100644 index d16960254e7..00000000000 --- a/src/third_party/boost/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> diff --git a/src/third_party/boost/libs/filesystem/v3/test/msvc10/common.props b/src/third_party/boost/libs/filesystem/v3/test/msvc10/common.props deleted file mode 100644 index a341a589c5c..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/msvc10/common.props +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <PropertyGroup> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <OutDir>$(TEMP)\$(SolutionName)\$(Configuration)\</OutDir> - <IntDir>$(TEMP)\$(SolutionName)\$(ProjectName)\$(Configuration)\</IntDir> - </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> - <ExceptionHandling>Async</ExceptionHandling> - <DisableLanguageExtensions>false</DisableLanguageExtensions> - <WarningLevel>Level4</WarningLevel> - </ClCompile> - <Link> - <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - </Link> - </ItemDefinitionGroup> -</Project>
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/test/msvc10/convenience_test/convenience_test.vcxproj b/src/third_party/boost/libs/filesystem/v3/test/msvc10/convenience_test/convenience_test.vcxproj deleted file mode 100644 index 437ebf6b90c..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/msvc10/convenience_test/convenience_test.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ -<?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>{08986FB5-0C83-4BC4-92DF-05E12E1C03C1}</ProjectGuid> - <RootNamespace>convenience_test</RootNamespace> - <Keyword>Win32Proj</Keyword> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="..\common.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <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> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - <DebugInformationFormat>EditAndContinue</DebugInformationFormat> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <TargetMachine>MachineX86</TargetMachine> - </Link> - <PostBuildEvent> - <Message>Executing test $(TargetName).exe...</Message> - <Command>"$(TargetDir)\$(TargetName).exe"</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <Optimization>MaxSpeed</Optimization> - <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> - <FunctionLevelLinking>true</FunctionLevelLinking> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <OptimizeReferences>true</OptimizeReferences> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <TargetMachine>MachineX86</TargetMachine> - </Link> - <PostBuildEvent> - <Message>Executing test $(TargetName).exe...</Message> - <Command>"$(TargetDir)\$(TargetName).exe"</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\..\convenience_test.cpp" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj"> - <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - </ProjectReference> - <ProjectReference Include="..\system_dll\system_dll.vcxproj"> - <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project>
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/test/msvc10/deprecated_test/deprecated_test.vcxproj b/src/third_party/boost/libs/filesystem/v3/test/msvc10/deprecated_test/deprecated_test.vcxproj deleted file mode 100644 index c16b17707a1..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/msvc10/deprecated_test/deprecated_test.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ -<?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>{D73BC50F-956E-4A44-BF9F-A8BB80DF0000}</ProjectGuid> - <RootNamespace>deprecated_test</RootNamespace> - <Keyword>Win32Proj</Keyword> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="..\common.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <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> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>BOOST_ALL_NO_LIB;BOOST_SYSTEM_DYN_LINK;BOOST_FILESYSTEM_DYN_LINK;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - <DebugInformationFormat>EditAndContinue</DebugInformationFormat> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <TargetMachine>MachineX86</TargetMachine> - </Link> - <PostBuildEvent> - <Message>Executing test $(TargetName).exe...</Message> - <Command>"$(TargetDir)\$(TargetName).exe"</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <Optimization>MaxSpeed</Optimization> - <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>BOOST_ALL_NO_LIB;BOOST_SYSTEM_DYN_LINK;BOOST_FILESYSTEM_DYN_LINK;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> - <FunctionLevelLinking>true</FunctionLevelLinking> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <OptimizeReferences>true</OptimizeReferences> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <TargetMachine>MachineX86</TargetMachine> - </Link> - <PostBuildEvent> - <Message>Executing test $(TargetName).exe...</Message> - <Command>"$(TargetDir)\$(TargetName).exe"</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\..\deprecated_test.cpp" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj"> - <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - </ProjectReference> - <ProjectReference Include="..\system_dll\system_dll.vcxproj"> - <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project>
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/test/msvc10/file_status/file_status.vcxproj b/src/third_party/boost/libs/filesystem/v3/test/msvc10/file_status/file_status.vcxproj deleted file mode 100644 index dc8adc23dd0..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/msvc10/file_status/file_status.vcxproj +++ /dev/null @@ -1,100 +0,0 @@ -<?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>{43C4B4D8-0893-4C86-B9FD-6A7DEB1A4426}</ProjectGuid> - <Keyword>Win32Proj</Keyword> - <RootNamespace>file_status</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" /> - <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;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - <PostBuildEvent> - <Command>"$(TargetDir)\$(TargetName).exe"</Command> - <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>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - <PostBuildEvent> - <Command>"$(TargetDir)\$(TargetName).exe"</Command> - <Message>Executing test $(TargetName).exe...</Message> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\..\..\example\file_status.cpp" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj"> - <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project> - </ProjectReference> - <ProjectReference Include="..\system_dll\system_dll.vcxproj"> - <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project>
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/test/msvc10/filesystem-v3.sln b/src/third_party/boost/libs/filesystem/v3/test/msvc10/filesystem-v3.sln deleted file mode 100644 index 7f927261734..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/msvc10/filesystem-v3.sln +++ /dev/null @@ -1,190 +0,0 @@ - -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}" -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}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "system_dll", "system_dll\system_dll.vcxproj", "{F94CCADD-A90B-480C-A304-C19D015D36B1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "filesystem_dll", "filesystem_dll\filesystem_dll.vcxproj", "{FFD738F7-96F0-445C-81EA-551665EF53D1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "convenience_test", "convenience_test\convenience_test.vcxproj", "{08986FB5-0C83-4BC4-92DF-05E12E1C03C1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fstream_test", "fstream_test\fstream_test.vcxproj", "{A9939CD7-BE1C-4334-947C-4C320D49B3CA}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "deprecated_test", "deprecated_test\deprecated_test.vcxproj", "{D73BC50F-956E-4A44-BF9F-A8BB80DF0000}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut1", "tut1\tut1.vcxproj", "{6376B8E4-7FD4-466B-978E-E8DA6E938689}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut3", "tut3\tut3.vcxproj", "{4FF64FA7-6806-401D-865C-79DD064D4A9E}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut2", "tut2\tut2.vcxproj", "{CD69B175-389E-4F8F-85DC-03C56A47CD1D}" -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}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tut5", "tut5\tut5.vcxproj", "{5C9B3380-3C6E-45CC-986A-16D245E27E58}" - 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}") = "tut6a", "tut6a\tut6a.vcxproj", "{C781F9C4-31D4-4509-B031-84DB598B207D}" - 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}") = "tut6b", "tut6b\tut6b.vcxproj", "{4A77CA6A-8E72-4CC6-9FE7-2C555C51815C}" - 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}") = "tut6c", "tut6c\tut6c.vcxproj", "{17C6DD1B-EF6F-4561-B4FF-CF39F975ED29}" - 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}") = "stems", "stems\stems.vcxproj", "{23C735E1-0195-467F-BE9F-314829402FCF}" - 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}") = "long_path_test", "long_path_test\long_path_test.vcxproj", "{1A6A7DAF-8705-4B2B-83B5-93F84A63496C}" - 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}") = "file_status", "file_status\file_status.vcxproj", "{43C4B4D8-0893-4C86-B9FD-6A7DEB1A4426}" - 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}") = "locale_info", "locale_info\locale_info.vcxproj", "{3667C35E-78D5-43D4-AAC2-349145E4341D}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "thread_test", "thread_test\thread_test.vcxproj", "{20E2805D-9634-46CE-B979-21CCBBD16EA3}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "symlinked_cpp", "symlinked_cpp\symlinked_cpp.vcxproj", "{E37919AE-1A38-4E61-8E5E-FE4F981C6BFD}" - 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 -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 - {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 - {FC5C770F-3017-4021-8DAF-C5DCA3FDF005}.Debug|Win32.ActiveCfg = Debug|Win32 - {FC5C770F-3017-4021-8DAF-C5DCA3FDF005}.Debug|Win32.Build.0 = Debug|Win32 - {FC5C770F-3017-4021-8DAF-C5DCA3FDF005}.Release|Win32.ActiveCfg = Release|Win32 - {FC5C770F-3017-4021-8DAF-C5DCA3FDF005}.Release|Win32.Build.0 = Release|Win32 - {5C9B3380-3C6E-45CC-986A-16D245E27E58}.Debug|Win32.ActiveCfg = Debug|Win32 - {5C9B3380-3C6E-45CC-986A-16D245E27E58}.Debug|Win32.Build.0 = Debug|Win32 - {5C9B3380-3C6E-45CC-986A-16D245E27E58}.Release|Win32.ActiveCfg = Release|Win32 - {5C9B3380-3C6E-45CC-986A-16D245E27E58}.Release|Win32.Build.0 = Release|Win32 - {C781F9C4-31D4-4509-B031-84DB598B207D}.Debug|Win32.ActiveCfg = Debug|Win32 - {C781F9C4-31D4-4509-B031-84DB598B207D}.Debug|Win32.Build.0 = Debug|Win32 - {C781F9C4-31D4-4509-B031-84DB598B207D}.Release|Win32.ActiveCfg = Release|Win32 - {C781F9C4-31D4-4509-B031-84DB598B207D}.Release|Win32.Build.0 = Release|Win32 - {4A77CA6A-8E72-4CC6-9FE7-2C555C51815C}.Debug|Win32.ActiveCfg = Debug|Win32 - {4A77CA6A-8E72-4CC6-9FE7-2C555C51815C}.Debug|Win32.Build.0 = Debug|Win32 - {4A77CA6A-8E72-4CC6-9FE7-2C555C51815C}.Release|Win32.ActiveCfg = Release|Win32 - {4A77CA6A-8E72-4CC6-9FE7-2C555C51815C}.Release|Win32.Build.0 = Release|Win32 - {17C6DD1B-EF6F-4561-B4FF-CF39F975ED29}.Debug|Win32.ActiveCfg = Debug|Win32 - {17C6DD1B-EF6F-4561-B4FF-CF39F975ED29}.Debug|Win32.Build.0 = Debug|Win32 - {17C6DD1B-EF6F-4561-B4FF-CF39F975ED29}.Release|Win32.ActiveCfg = Release|Win32 - {17C6DD1B-EF6F-4561-B4FF-CF39F975ED29}.Release|Win32.Build.0 = Release|Win32 - {23C735E1-0195-467F-BE9F-314829402FCF}.Debug|Win32.ActiveCfg = Debug|Win32 - {23C735E1-0195-467F-BE9F-314829402FCF}.Debug|Win32.Build.0 = Debug|Win32 - {23C735E1-0195-467F-BE9F-314829402FCF}.Release|Win32.ActiveCfg = Release|Win32 - {23C735E1-0195-467F-BE9F-314829402FCF}.Release|Win32.Build.0 = Release|Win32 - {1A6A7DAF-8705-4B2B-83B5-93F84A63496C}.Debug|Win32.ActiveCfg = Debug|Win32 - {1A6A7DAF-8705-4B2B-83B5-93F84A63496C}.Debug|Win32.Build.0 = Debug|Win32 - {1A6A7DAF-8705-4B2B-83B5-93F84A63496C}.Release|Win32.ActiveCfg = Release|Win32 - {1A6A7DAF-8705-4B2B-83B5-93F84A63496C}.Release|Win32.Build.0 = Release|Win32 - {43C4B4D8-0893-4C86-B9FD-6A7DEB1A4426}.Debug|Win32.ActiveCfg = Debug|Win32 - {43C4B4D8-0893-4C86-B9FD-6A7DEB1A4426}.Debug|Win32.Build.0 = Debug|Win32 - {43C4B4D8-0893-4C86-B9FD-6A7DEB1A4426}.Release|Win32.ActiveCfg = Release|Win32 - {43C4B4D8-0893-4C86-B9FD-6A7DEB1A4426}.Release|Win32.Build.0 = Release|Win32 - {3667C35E-78D5-43D4-AAC2-349145E4341D}.Debug|Win32.ActiveCfg = Debug|Win32 - {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 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/src/third_party/boost/libs/filesystem/v3/test/msvc10/filesystem_dll/filesystem_dll.vcxproj b/src/third_party/boost/libs/filesystem/v3/test/msvc10/filesystem_dll/filesystem_dll.vcxproj deleted file mode 100644 index 64d97fc53b1..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/msvc10/filesystem_dll/filesystem_dll.vcxproj +++ /dev/null @@ -1,110 +0,0 @@ -<?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>{FFD738F7-96F0-445C-81EA-551665EF53D1}</ProjectGuid> - <RootNamespace>filesystem_dll</RootNamespace> - <Keyword>Win32Proj</Keyword> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="..\common.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <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> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\$(SolutionName)\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\$(SolutionName)\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;FILESYSTEM_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <ExceptionHandling>Async</ExceptionHandling> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - <DebugInformationFormat>EditAndContinue</DebugInformationFormat> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <TargetMachine>MachineX86</TargetMachine> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <Optimization>MaxSpeed</Optimization> - <IntrinsicFunctions>true</IntrinsicFunctions> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;FILESYSTEM_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <ExceptionHandling>Async</ExceptionHandling> - <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> - <FunctionLevelLinking>true</FunctionLevelLinking> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <OptimizeReferences>true</OptimizeReferences> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <TargetMachine>MachineX86</TargetMachine> - </Link> - </ItemDefinitionGroup> - <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_dll\system_dll.vcxproj"> - <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project>
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/test/msvc10/fstream_test/fstream_test.vcxproj b/src/third_party/boost/libs/filesystem/v3/test/msvc10/fstream_test/fstream_test.vcxproj deleted file mode 100644 index 90ed1fb262d..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/msvc10/fstream_test/fstream_test.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ -<?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>{A9939CD7-BE1C-4334-947C-4C320D49B3CA}</ProjectGuid> - <RootNamespace>fstream_test</RootNamespace> - <Keyword>Win32Proj</Keyword> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="..\common.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <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> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - <DebugInformationFormat>EditAndContinue</DebugInformationFormat> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <TargetMachine>MachineX86</TargetMachine> - </Link> - <PostBuildEvent> - <Message>Executing test $(TargetName).exe...</Message> - <Command>"$(TargetDir)\$(TargetName).exe"</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <Optimization>MaxSpeed</Optimization> - <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> - <FunctionLevelLinking>true</FunctionLevelLinking> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <OptimizeReferences>true</OptimizeReferences> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <TargetMachine>MachineX86</TargetMachine> - </Link> - <PostBuildEvent> - <Message>Executing test $(TargetName).exe...</Message> - <Command>"$(TargetDir)\$(TargetName).exe"</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\..\fstream_test.cpp" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj"> - <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - </ProjectReference> - <ProjectReference Include="..\system_dll\system_dll.vcxproj"> - <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project>
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/test/msvc10/locale_info/locale_info.vcxproj b/src/third_party/boost/libs/filesystem/v3/test/msvc10/locale_info/locale_info.vcxproj deleted file mode 100644 index e2ce0eb6bca..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/msvc10/locale_info/locale_info.vcxproj +++ /dev/null @@ -1,96 +0,0 @@ -<?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>{3667C35E-78D5-43D4-AAC2-349145E4341D}</ProjectGuid> - <Keyword>Win32Proj</Keyword> - <RootNamespace>locale_info</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" /> - <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;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - </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>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - </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="..\..\locale_info.cpp" /> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project>
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/test/msvc10/long_path_test/long_path_test.vcxproj b/src/third_party/boost/libs/filesystem/v3/test/msvc10/long_path_test/long_path_test.vcxproj deleted file mode 100644 index c8cc1910bba..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/msvc10/long_path_test/long_path_test.vcxproj +++ /dev/null @@ -1,100 +0,0 @@ -<?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>{1A6A7DAF-8705-4B2B-83B5-93F84A63496C}</ProjectGuid> - <Keyword>Win32Proj</Keyword> - <RootNamespace>long_path_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" /> - <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;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - <PostBuildEvent> - <Command>"$(TargetDir)\$(TargetName).exe"</Command> - <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>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - <PostBuildEvent> - <Command>"$(TargetDir)\$(TargetName).exe"</Command> - <Message>Executing test $(TargetName).exe...</Message> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\..\long_path_test.cpp" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj"> - <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project> - </ProjectReference> - <ProjectReference Include="..\system_dll\system_dll.vcxproj"> - <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project>
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/test/msvc10/operations_test/operations_test.vcxproj b/src/third_party/boost/libs/filesystem/v3/test/msvc10/operations_test/operations_test.vcxproj deleted file mode 100644 index b7bd47aea7a..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/msvc10/operations_test/operations_test.vcxproj +++ /dev/null @@ -1,106 +0,0 @@ -<?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>{8BB7E604-46EF-42BE-ABB5-D7044B3E8A40}</ProjectGuid> - <RootNamespace>operations_test</RootNamespace> - <Keyword>Win32Proj</Keyword> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="..\common.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <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> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>BOOST_FILEYSTEM_INCLUDE_IOSTREAM;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - <DebugInformationFormat>EditAndContinue</DebugInformationFormat> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <TargetMachine>MachineX86</TargetMachine> - </Link> - <PostBuildEvent> - <Message>Executing test $(TargetName).exe...</Message> - <Command>"$(TargetDir)\$(TargetName).exe" -x</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <Optimization>MaxSpeed</Optimization> - <IntrinsicFunctions>true</IntrinsicFunctions> - <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> - <FunctionLevelLinking>true</FunctionLevelLinking> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <OptimizeReferences>true</OptimizeReferences> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <TargetMachine>MachineX86</TargetMachine> - </Link> - <PostBuildEvent> - <Message>Executing test $(TargetName).exe...</Message> - <Command>"$(TargetDir)\$(TargetName).exe" -x</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\..\operations_test.cpp" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj"> - <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - </ProjectReference> - <ProjectReference Include="..\system_dll\system_dll.vcxproj"> - <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project>
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/test/msvc10/operations_unit_test/operations_unit_test.vcxproj b/src/third_party/boost/libs/filesystem/v3/test/msvc10/operations_unit_test/operations_unit_test.vcxproj deleted file mode 100644 index 2bc35c34d08..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/msvc10/operations_unit_test/operations_unit_test.vcxproj +++ /dev/null @@ -1,109 +0,0 @@ -<?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>{5DAF595A-4640-4F86-8A5F-E54E3E4CE7D0}</ProjectGuid> - <RootNamespace>operations_unit_test</RootNamespace> - <Keyword>Win32Proj</Keyword> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="..\common.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <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> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - <DebugInformationFormat>EditAndContinue</DebugInformationFormat> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <TargetMachine>MachineX86</TargetMachine> - </Link> - <PostBuildEvent> - <Message>Executing test $(TargetName).exe...</Message> - <Command>"$(TargetDir)\$(TargetName).exe"</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <Optimization>MaxSpeed</Optimization> - <IntrinsicFunctions>true</IntrinsicFunctions> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> - <FunctionLevelLinking>true</FunctionLevelLinking> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <OptimizeReferences>true</OptimizeReferences> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <TargetMachine>MachineX86</TargetMachine> - </Link> - <PostBuildEvent> - <Message>Executing test $(TargetName).exe...</Message> - <Command>"$(TargetDir)\$(TargetName).exe"</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\..\operations_unit_test.cpp" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj"> - <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - </ProjectReference> - <ProjectReference Include="..\system_dll\system_dll.vcxproj"> - <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project>
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/test/msvc10/path_test/path_test.vcxproj b/src/third_party/boost/libs/filesystem/v3/test/msvc10/path_test/path_test.vcxproj deleted file mode 100644 index 9f2698402e0..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/msvc10/path_test/path_test.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ -<?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>{F3D230C4-9185-4C2B-AB0E-0F0D28D8268C}</ProjectGuid> - <RootNamespace>path_test</RootNamespace> - <Keyword>Win32Proj</Keyword> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="..\common.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <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> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>BOOST_FILESYSTEM_PATH_CTOR_COUNT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - <DebugInformationFormat>EditAndContinue</DebugInformationFormat> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <TargetMachine>MachineX86</TargetMachine> - </Link> - <PostBuildEvent> - <Message>Executing test $(TargetName).exe...</Message> - <Command>"$(TargetDir)\$(TargetName).exe"</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <Optimization>MaxSpeed</Optimization> - <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> - <FunctionLevelLinking>true</FunctionLevelLinking> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <OptimizeReferences>true</OptimizeReferences> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <TargetMachine>MachineX86</TargetMachine> - </Link> - <PostBuildEvent> - <Message>Executing test $(TargetName).exe...</Message> - <Command>"$(TargetDir)\$(TargetName).exe"</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\..\path_test.cpp" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj"> - <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - </ProjectReference> - <ProjectReference Include="..\system_dll\system_dll.vcxproj"> - <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project>
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/test/msvc10/path_unit_test/path_unit_test.vcxproj b/src/third_party/boost/libs/filesystem/v3/test/msvc10/path_unit_test/path_unit_test.vcxproj deleted file mode 100644 index c1203bbd85c..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/msvc10/path_unit_test/path_unit_test.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ -<?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>{3C77F610-2E31-4087-9DF2-7CD45198A02D}</ProjectGuid> - <RootNamespace>path_unit_test</RootNamespace> - <Keyword>Win32Proj</Keyword> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="..\common.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <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> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - <DebugInformationFormat>EditAndContinue</DebugInformationFormat> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <TargetMachine>MachineX86</TargetMachine> - </Link> - <PostBuildEvent> - <Message>Executing test $(TargetName).exe...</Message> - <Command>"$(TargetDir)\$(TargetName).exe"</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <Optimization>MaxSpeed</Optimization> - <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> - <FunctionLevelLinking>true</FunctionLevelLinking> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <OptimizeReferences>true</OptimizeReferences> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <TargetMachine>MachineX86</TargetMachine> - </Link> - <PostBuildEvent> - <Message>Executing test $(TargetName).exe...</Message> - <Command>"$(TargetDir)\$(TargetName).exe"</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\..\path_unit_test.cpp" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj"> - <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - </ProjectReference> - <ProjectReference Include="..\system_dll\system_dll.vcxproj"> - <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project>
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/test/msvc10/stems/stems.vcxproj b/src/third_party/boost/libs/filesystem/v3/test/msvc10/stems/stems.vcxproj deleted file mode 100644 index 6ed20eebddb..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/msvc10/stems/stems.vcxproj +++ /dev/null @@ -1,92 +0,0 @@ -<?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>{23C735E1-0195-467F-BE9F-314829402FCF}</ProjectGuid> - <Keyword>Win32Proj</Keyword> - <RootNamespace>stems</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" /> - <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;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - </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="..\..\..\example\stems.cpp" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj"> - <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project> - </ProjectReference> - <ProjectReference Include="..\system_dll\system_dll.vcxproj"> - <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project>
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/test/msvc10/system_dll/system_dll.vcxproj b/src/third_party/boost/libs/filesystem/v3/test/msvc10/system_dll/system_dll.vcxproj deleted file mode 100644 index dd8a4902074..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/msvc10/system_dll/system_dll.vcxproj +++ /dev/null @@ -1,97 +0,0 @@ -<?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>{F94CCADD-A90B-480C-A304-C19D015D36B1}</ProjectGuid> - <RootNamespace>system_dll</RootNamespace> - <Keyword>Win32Proj</Keyword> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="..\common.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <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> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\$(SolutionName)\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TEMP)\$(SolutionName)\$(ProjectName)\$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\$(SolutionName)\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(TEMP)\$(SolutionName)\$(ProjectName)\$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> - </PropertyGroup> - <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> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - <DebugInformationFormat>EditAndContinue</DebugInformationFormat> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <TargetMachine>MachineX86</TargetMachine> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <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> - <FunctionLevelLinking>true</FunctionLevelLinking> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <OptimizeReferences>true</OptimizeReferences> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <TargetMachine>MachineX86</TargetMachine> - </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/src/third_party/boost/libs/filesystem/v3/test/msvc10/tut1/tut1.vcxproj b/src/third_party/boost/libs/filesystem/v3/test/msvc10/tut1/tut1.vcxproj deleted file mode 100644 index 4c2db0a4377..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/msvc10/tut1/tut1.vcxproj +++ /dev/null @@ -1,101 +0,0 @@ -<?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>{6376B8E4-7FD4-466B-978E-E8DA6E938689}</ProjectGuid> - <RootNamespace>tut1</RootNamespace> - <Keyword>Win32Proj</Keyword> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="..\common.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <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> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - <DebugInformationFormat>EditAndContinue</DebugInformationFormat> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <TargetMachine>MachineX86</TargetMachine> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <Optimization>MaxSpeed</Optimization> - <IntrinsicFunctions>true</IntrinsicFunctions> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> - <FunctionLevelLinking>true</FunctionLevelLinking> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <OptimizeReferences>true</OptimizeReferences> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <TargetMachine>MachineX86</TargetMachine> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\..\..\example\tut1.cpp" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj"> - <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - </ProjectReference> - <ProjectReference Include="..\system_dll\system_dll.vcxproj"> - <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project>
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/test/msvc10/tut2/tut2.vcxproj b/src/third_party/boost/libs/filesystem/v3/test/msvc10/tut2/tut2.vcxproj deleted file mode 100644 index 4e550c9e0cd..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/msvc10/tut2/tut2.vcxproj +++ /dev/null @@ -1,97 +0,0 @@ -<?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>{CD69B175-389E-4F8F-85DC-03C56A47CD1D}</ProjectGuid> - <RootNamespace>tut2</RootNamespace> - <Keyword>Win32Proj</Keyword> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="..\common.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <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> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - <PrecompiledHeader> - </PrecompiledHeader> - <DebugInformationFormat>EditAndContinue</DebugInformationFormat> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <TargetMachine>MachineX86</TargetMachine> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <Optimization>MaxSpeed</Optimization> - <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> - <FunctionLevelLinking>true</FunctionLevelLinking> - <PrecompiledHeader> - </PrecompiledHeader> - <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <OptimizeReferences>true</OptimizeReferences> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <TargetMachine>MachineX86</TargetMachine> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\..\..\example\tut2.cpp" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj"> - <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - </ProjectReference> - <ProjectReference Include="..\system_dll\system_dll.vcxproj"> - <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project>
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/test/msvc10/tut3/tut3.vcxproj b/src/third_party/boost/libs/filesystem/v3/test/msvc10/tut3/tut3.vcxproj deleted file mode 100644 index ddce9f8ca9f..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/msvc10/tut3/tut3.vcxproj +++ /dev/null @@ -1,95 +0,0 @@ -<?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>{4FF64FA7-6806-401D-865C-79DD064D4A9E}</ProjectGuid> - <RootNamespace>tut3</RootNamespace> - <Keyword>Win32Proj</Keyword> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="..\common.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <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> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <MinimalRebuild>true</MinimalRebuild> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - <PrecompiledHeader> - </PrecompiledHeader> - <DebugInformationFormat>EditAndContinue</DebugInformationFormat> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <TargetMachine>MachineX86</TargetMachine> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <Optimization>MaxSpeed</Optimization> - <IntrinsicFunctions>true</IntrinsicFunctions> - <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> - <FunctionLevelLinking>true</FunctionLevelLinking> - <PrecompiledHeader> - </PrecompiledHeader> - <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <OptimizeReferences>true</OptimizeReferences> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <TargetMachine>MachineX86</TargetMachine> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\..\..\example\tut3.cpp" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj"> - <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - </ProjectReference> - <ProjectReference Include="..\system_dll\system_dll.vcxproj"> - <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project>
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/test/msvc10/tut4/tut4.vcxproj b/src/third_party/boost/libs/filesystem/v3/test/msvc10/tut4/tut4.vcxproj deleted file mode 100644 index 9f838c2877a..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/msvc10/tut4/tut4.vcxproj +++ /dev/null @@ -1,97 +0,0 @@ -<?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>{256EA89A-E073-4CE8-B675-BE2FBC6B2691}</ProjectGuid> - <RootNamespace>tut4</RootNamespace> - <Keyword>Win32Proj</Keyword> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="..\common.props" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <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> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <MinimalRebuild>true</MinimalRebuild> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - <PrecompiledHeader> - </PrecompiledHeader> - <DebugInformationFormat>EditAndContinue</DebugInformationFormat> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <TargetMachine>MachineX86</TargetMachine> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <Optimization>MaxSpeed</Optimization> - <IntrinsicFunctions>true</IntrinsicFunctions> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> - <FunctionLevelLinking>true</FunctionLevelLinking> - <PrecompiledHeader> - </PrecompiledHeader> - <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <OptimizeReferences>true</OptimizeReferences> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <TargetMachine>MachineX86</TargetMachine> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\..\..\example\tut4.cpp" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj"> - <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - </ProjectReference> - <ProjectReference Include="..\system_dll\system_dll.vcxproj"> - <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project>
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/test/msvc10/tut5/tut5.vcxproj b/src/third_party/boost/libs/filesystem/v3/test/msvc10/tut5/tut5.vcxproj deleted file mode 100644 index bab40529527..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/msvc10/tut5/tut5.vcxproj +++ /dev/null @@ -1,92 +0,0 @@ -<?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>{5C9B3380-3C6E-45CC-986A-16D245E27E58}</ProjectGuid> - <Keyword>Win32Proj</Keyword> - <RootNamespace>tut5</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" /> - <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;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - </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="..\..\..\example\tut5.cpp" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj"> - <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project> - </ProjectReference> - <ProjectReference Include="..\system_dll\system_dll.vcxproj"> - <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project>
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/test/msvc10/tut6a/tut6a.vcxproj b/src/third_party/boost/libs/filesystem/v3/test/msvc10/tut6a/tut6a.vcxproj deleted file mode 100644 index 2794be5dbf8..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/msvc10/tut6a/tut6a.vcxproj +++ /dev/null @@ -1,92 +0,0 @@ -<?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>{C781F9C4-31D4-4509-B031-84DB598B207D}</ProjectGuid> - <Keyword>Win32Proj</Keyword> - <RootNamespace>tut6a</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" /> - <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;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - </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="..\..\..\example\tut6a.cpp" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj"> - <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project> - </ProjectReference> - <ProjectReference Include="..\system_dll\system_dll.vcxproj"> - <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project>
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/test/msvc10/tut6b/tut6b.vcxproj b/src/third_party/boost/libs/filesystem/v3/test/msvc10/tut6b/tut6b.vcxproj deleted file mode 100644 index b2be1370a95..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/msvc10/tut6b/tut6b.vcxproj +++ /dev/null @@ -1,92 +0,0 @@ -<?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>{4A77CA6A-8E72-4CC6-9FE7-2C555C51815C}</ProjectGuid> - <Keyword>Win32Proj</Keyword> - <RootNamespace>tut6b</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" /> - <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;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - </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="..\..\..\example\tut6b.cpp" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj"> - <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project> - </ProjectReference> - <ProjectReference Include="..\system_dll\system_dll.vcxproj"> - <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project>
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/test/msvc10/tut6c/tut6c.vcxproj b/src/third_party/boost/libs/filesystem/v3/test/msvc10/tut6c/tut6c.vcxproj deleted file mode 100644 index e06f948fbbb..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/msvc10/tut6c/tut6c.vcxproj +++ /dev/null @@ -1,92 +0,0 @@ -<?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>{17C6DD1B-EF6F-4561-B4FF-CF39F975ED29}</ProjectGuid> - <Keyword>Win32Proj</Keyword> - <RootNamespace>tut6c</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" /> - <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;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - </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="..\..\..\example\tut6c.cpp" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj"> - <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project> - </ProjectReference> - <ProjectReference Include="..\system_dll\system_dll.vcxproj"> - <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project>
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/test/msvc10/windows_attributes/windows_attributes.vcxproj b/src/third_party/boost/libs/filesystem/v3/test/msvc10/windows_attributes/windows_attributes.vcxproj deleted file mode 100644 index cd0e68e88ad..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/msvc10/windows_attributes/windows_attributes.vcxproj +++ /dev/null @@ -1,92 +0,0 @@ -<?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>{FC5C770F-3017-4021-8DAF-C5DCA3FDF005}</ProjectGuid> - <Keyword>Win32Proj</Keyword> - <RootNamespace>windows_attributes</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" /> - <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;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - </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="..\..\windows_attributes.cpp" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\filesystem_dll\filesystem_dll.vcxproj"> - <Project>{ffd738f7-96f0-445c-81ea-551665ef53d1}</Project> - </ProjectReference> - <ProjectReference Include="..\system_dll\system_dll.vcxproj"> - <Project>{f94ccadd-a90b-480c-a304-c19d015d36b1}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project>
\ No newline at end of file diff --git a/src/third_party/boost/libs/filesystem/v3/test/operations_test.cpp b/src/third_party/boost/libs/filesystem/v3/test/operations_test.cpp deleted file mode 100644 index 610f27fca1d..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/operations_test.cpp +++ /dev/null @@ -1,2005 +0,0 @@ -// Boost operations_test.cpp ---------------------------------------------------------// - -// Copyright Beman Dawes 2002, 2009. - -// 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 - -#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 -#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/cerrno.hpp> -namespace fs = boost::filesystem; - -#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> - -using std::cout; -using std::endl; - -#include <string> -#include <vector> -#include <algorithm> -#include <cstring> // for strncmp, etc. -#include <ctime> -#include <cstdlib> // for system(), getenv(), etc. - -#ifdef BOOST_WINDOWS_API -# include <windows.h> - -inline std::wstring convert(const char* c) -{ - std::string s(c); - - return std::wstring(s.begin(), s.end()); -} - -inline int setenv(const char* name, const fs::path::value_type* val, int) -{ - return SetEnvironmentVariableW(convert(name).c_str(), val); -} - -inline int setenv(const char* name, const char* val, int) -{ - return SetEnvironmentVariableW(convert(name).c_str(), convert(val).c_str()); -} - -inline int unsetenv(const char* name) -{ - return SetEnvironmentVariableW(convert(name).c_str(), 0); -} - -#else - -#include <stdlib.h> // allow unqualifed calls to env funcs on SunOS - -#endif - -// on Windows, except for standard libaries known to have wchar_t overloads for -// file stream I/O, use path::string() to get a narrow character c_str() -#if defined(BOOST_WINDOWS_API) \ - && (!defined(_CPPLIB_VER) || _CPPLIB_VER < 405) // not Dinkumware || no wide overloads -# define BOOST_FILESYSTEM_C_STR string().c_str() // use narrow, since wide not available -#else // use the native c_str, which will be narrow on POSIX, wide on Windows -# define BOOST_FILESYSTEM_C_STR c_str() -#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 = false; - bool cleanup = true; - bool skip_long_windows_tests = false; - - fs::directory_iterator end_itr; - fs::path dir; - fs::path d1; - fs::path d2; - fs::path f0; - fs::path f1; - fs::path d1f1; - - bool create_symlink_ok(true); - - fs::path ng(" no-way, Jose"); - - unsigned short language_id; // 0 except for Windows - - const char* temp_dir_name = "v3_operations_test"; - - void create_file(const fs::path & ph, const std::string & contents = std::string()) - { - std::ofstream f(ph.BOOST_FILESYSTEM_C_STR); - if (!f) - 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.BOOST_FILESYSTEM_C_STR); - if (!f) - throw fs::filesystem_error("operations_test verify_file", - ph, error_code(errno, system_category())); - std::string contents; - f >> contents; - if (contents != expected) - 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 - cout << "\n" << ex.what() << "\n"; - } - if (en == 0 - || en == ex.code().default_error_condition().value()) return true; - 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() - << endl; - return true; - } - return false; - } - - boost::system::error_category* poison_category_aux() { return 0; } - boost::system::error_category& poison_category() { return *poison_category_aux(); } - - // 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 bad_file_size() - { - fs::file_size(" No way, Jose"); - } - - void bad_directory_size() - { - fs::file_size(fs::current_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; - }; - - //------------------------------ debugging aids --------------------------------------// - - std::ostream& operator<<(std::ostream& os, const fs::file_status& s) - { - if (s.type() == fs::status_error) { os << "status_error"; } - else if (s.type() == fs::file_not_found) { os << "file_not_found"; } - else if (s.type() == fs::regular_file) { os << "regular_file"; } - else if (s.type() == fs::directory_file) { os << "directory_file"; } - else if (s.type() == fs::symlink_file) { os << "symlink_file"; } - else if (s.type() == fs::block_file) { os << "block_file"; } - else if (s.type() == fs::character_file) { os << "character_file"; } - else if (s.type() == fs::fifo_file) { os << "fifo_file"; } - else if (s.type() == fs::socket_file) { os << "socket_file"; } - else if (s.type() == fs::reparse_file) { os << "reparse_file"; } - else if (s.type() == fs::type_unknown) { os << "type_unknown"; } - else { os << "_detail_directory_symlink"; } - return os; - } - - void dump_tree(const fs::path & root) - { - cout << "dumping tree rooted at " << root << endl; - for (fs::recursive_directory_iterator it (root, fs::symlink_option::recurse); - it != fs::recursive_directory_iterator(); - ++it) - { - for (int i = 0; i <= it.level(); ++i) - cout << " "; - - cout << it->path(); - if (fs::is_symlink(it->path())) - { - cout << " [symlink]" << endl; - } - else - cout << endl; - } - } - - // exception_tests() ---------------------------------------------------------------// - - void exception_tests() - { - cout << "exception_tests..." << endl; - bool exception_thrown; - - // catch runtime_error by value - - cout << " catch runtime_error by value" << endl; - exception_thrown = false; - try - { - fs::create_directory("no-such-dir/foo/bar"); - } - catch (std::runtime_error x) - { - exception_thrown = true; - if (report_throws) cout << x.what() << 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); - - // catch system_error by value - - cout << " catch system_error by value" << endl; - exception_thrown = false; - try - { - fs::create_directory("no-such-dir/foo/bar"); - } - catch (system_error x) - { - exception_thrown = true; - if (report_throws) cout << x.what() << 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); - - // catch filesystem_error by value - - cout << " catch filesystem_error by value" << endl; - exception_thrown = false; - try - { - fs::create_directory("no-such-dir/foo/bar"); - } - catch (fs::filesystem_error x) - { - exception_thrown = true; - if (report_throws) cout << x.what() << 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) - { - cout << "what returns \"" << x.what() << "\"" << endl; - } - } - } - BOOST_TEST(exception_thrown); - - // catch filesystem_error by const reference - - cout << " catch filesystem_error by const reference" << endl; - exception_thrown = false; - try - { - fs::create_directory("no-such-dir/foo/bar"); - } - catch (const fs::filesystem_error & x) - { - exception_thrown = true; - if (report_throws) cout << x.what() << 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) - { - cout << "what returns \"" << x.what() << "\"" << endl; - } - } - } - BOOST_TEST(exception_thrown); - - // the bound functions should throw, so CHECK_EXCEPTION() should return true - - BOOST_TEST(CHECK_EXCEPTION(bad_file_size, ENOENT)); - - if (platform == "Windows") - BOOST_TEST(CHECK_EXCEPTION(bad_directory_size, ENOENT)); - else - BOOST_TEST(CHECK_EXCEPTION(bad_directory_size, 0)); - - // 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"); - } - - cout << " exception_tests complete" << endl; - } - - // create a directory tree that can be used by subsequent tests ---------------------// - // - // dir - // d1 - // d1f1 // an empty file - // f0 // an empty file - // f1 // a file containing "file-f1" - - void create_tree() - { - cout << "creating test directories and files in " << dir << endl; - - // create directory d1 - BOOST_TEST(!fs::create_directory(dir)); - BOOST_TEST(!fs::is_symlink(dir)); - BOOST_TEST(!fs::is_symlink("nosuchfileordirectory")); - d1 = dir / "d1"; - BOOST_TEST(fs::create_directory(d1)); - BOOST_TEST(fs::exists(d1)); - BOOST_TEST(fs::is_directory(d1)); - BOOST_TEST(fs::is_empty(d1)); - - // create an empty file named "d1f1" - d1f1 = d1 / "d1f1"; - create_file(d1f1, ""); - BOOST_TEST(fs::exists(d1f1)); - BOOST_TEST(!fs::is_directory(d1f1)); - BOOST_TEST(fs::is_regular_file(d1f1)); - BOOST_TEST(fs::is_empty(d1f1)); - BOOST_TEST(fs::file_size(d1f1) == 0); - BOOST_TEST(fs::hard_link_count(d1f1) == 1); - - // create an empty file named "f0" - f0 = dir / "f0"; - create_file(f0, ""); - BOOST_TEST(fs::exists(f0)); - BOOST_TEST(!fs::is_directory(f0)); - BOOST_TEST(fs::is_regular_file(f0)); - BOOST_TEST(fs::is_empty(f0)); - BOOST_TEST(fs::file_size(f0) == 0); - BOOST_TEST(fs::hard_link_count(f0) == 1); - - // create a file named "f1" - f1 = dir / "f1"; - create_file(f1, "file-f1"); - BOOST_TEST(fs::exists(f1)); - BOOST_TEST(!fs::is_directory(f1)); - BOOST_TEST(fs::is_regular_file(f1)); - BOOST_TEST(fs::file_size(f1) == 7); - verify_file(f1, "file-f1"); - } - - // directory_iterator_tests --------------------------------------------------------// - - void directory_iterator_tests() - { - cout << "directory_iterator_tests..." << endl; - - bool dir_itr_exception(false); - try { fs::directory_iterator it(""); } - catch (const fs::filesystem_error &) { dir_itr_exception = true; } - BOOST_TEST(dir_itr_exception); - - error_code ec; - - BOOST_TEST(!ec); - fs::directory_iterator it("", ec); - BOOST_TEST(ec); - - dir_itr_exception = false; - try { fs::directory_iterator it("nosuchdirectory"); } - catch (const fs::filesystem_error &) { dir_itr_exception = true; } - BOOST_TEST(dir_itr_exception); - - ec.clear(); - fs::directory_iterator it2("nosuchdirectory", ec); - BOOST_TEST(ec); - - dir_itr_exception = false; - try - { - error_code ec; - fs::directory_iterator it("nosuchdirectory", ec); - BOOST_TEST(ec); - BOOST_TEST(ec == boost::system::errc::no_such_file_or_directory); - } - catch (const fs::filesystem_error &) { dir_itr_exception = true; } - BOOST_TEST(!dir_itr_exception); - - // create a second directory named d2 - 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. - { - typedef std::vector<fs::directory_entry> vec_type; - vec_type vec; - - fs::directory_iterator it1(dir); - BOOST_TEST(it1 != fs::directory_iterator()); - BOOST_TEST(fs::exists(it1->status())); - vec.push_back(*it1); - BOOST_TEST(*it1 == vec[0]); - - fs::directory_iterator it2(dir); - BOOST_TEST(it2 != fs::directory_iterator()); - BOOST_TEST(*it1 == *it2); - - ++it1; - BOOST_TEST(it1 != fs::directory_iterator()); - BOOST_TEST(fs::exists(it1->status())); - BOOST_TEST(it1 != it2); - BOOST_TEST(*it1 != vec[0]); - BOOST_TEST(*it2 == vec[0]); - vec.push_back(*it1); - - ++it1; - BOOST_TEST(it1 != fs::directory_iterator()); - BOOST_TEST(fs::exists(it1->status())); - BOOST_TEST(it1 != it2); - BOOST_TEST(*it2 == vec[0]); - vec.push_back(*it1); - - ++it1; - BOOST_TEST(it1 != fs::directory_iterator()); - BOOST_TEST(fs::exists(it1->status())); - BOOST_TEST(it1 != it2); - BOOST_TEST(*it2 == vec[0]); - vec.push_back(*it1); - - ++it1; - BOOST_TEST(it1 == fs::directory_iterator()); - - BOOST_TEST(*it2 == vec[0]); - ec.clear(); - it2.increment(ec); - BOOST_TEST(!ec); - BOOST_TEST(it2 != fs::directory_iterator()); - BOOST_TEST(it1 == fs::directory_iterator()); - BOOST_TEST(*it2 == vec[1]); - ++it2; - BOOST_TEST(*it2 == vec[2]); - BOOST_TEST(it1 == fs::directory_iterator()); - ++it2; - BOOST_TEST(*it2 == vec[3]); - ++it2; - BOOST_TEST(it1 == fs::directory_iterator()); - BOOST_TEST(it2 == fs::directory_iterator()); - - // sort vec and check that the right directory entries were found - std::sort(vec.begin(), vec.end()); - - BOOST_TEST_EQ(vec[0].path().filename().string(), std::string("d1")); - BOOST_TEST_EQ(vec[1].path().filename().string(), std::string("d2")); - BOOST_TEST_EQ(vec[2].path().filename().string(), std::string("f0")); - BOOST_TEST_EQ(vec[3].path().filename().string(), std::string("f1")); - } - - { // *i++ must meet the standard's InputIterator requirements - fs::directory_iterator dir_itr(dir); - BOOST_TEST(dir_itr != fs::directory_iterator()); - fs::path p = dir_itr->path(); - BOOST_TEST((*dir_itr++).path() == p); - BOOST_TEST(dir_itr != fs::directory_iterator()); - BOOST_TEST(dir_itr->path() != p); - - // test case reported in comment to SourceForge bug tracker [937606] - fs::directory_iterator it(dir); - const fs::path p1 = (*it++).path(); - BOOST_TEST(it != fs::directory_iterator()); - const fs::path p2 = (*it++).path(); - BOOST_TEST(p1 != p2); - ++it; - ++it; - 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().root_name()); - fs::directory_iterator it(root_name_path); - BOOST_TEST(it != fs::directory_iterator()); -// BOOST_TEST(fs::exists((*it).path())); - BOOST_TEST(fs::exists(it->path())); - 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); - } - - // 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()); - } - - cout << " directory_iterator_tests complete" << endl; - } - - // recursive_directory_iterator_tests ----------------------------------------------// - - int walk_tree(bool recursive) - { - int d1f1_count = 0; - for (fs::recursive_directory_iterator it (dir, - recursive ? fs::symlink_option::recurse : fs::symlink_option::no_recurse); - it != fs::recursive_directory_iterator(); - ++it) - { - if (it->path().filename() == "d1f1") - ++d1f1_count; - } - return d1f1_count; - } - - void recursive_directory_iterator_tests() - { - cout << "recursive_directory_iterator_tests..." << endl; - BOOST_TEST(walk_tree(false) == 1); - if (create_symlink_ok) - BOOST_TEST(walk_tree(true) > 1); - - // test iterator increment with error_code argument - boost::system::error_code ec; - int d1f1_count = 0; - for (fs::recursive_directory_iterator it (dir, fs::symlink_option::no_recurse); - it != fs::recursive_directory_iterator(); - it.increment(ec)) - { - if (it->path().filename() == "d1f1") - ++d1f1_count; - } - BOOST_TEST(!ec); - BOOST_TEST(d1f1_count == 1); - - cout << " recursive_directory_iterator_tests complete" << endl; - } - - // iterator_status_tests -----------------------------------------------------------// - - void iterator_status_tests() - { - cout << "iterator_status_tests..." << endl; - - error_code ec; - // harmless if these fail: - fs::create_symlink(dir/"f0", dir/"f0_symlink", ec); - fs::create_symlink(dir/"no such file", dir/"dangling_symlink", ec); - fs::create_directory_symlink(dir/"d1", dir/"d1_symlink", ec); - fs::create_directory_symlink(dir/"no such directory", - dir/"dangling_directory_symlink", ec); - - for (fs::directory_iterator it(dir); - it != fs::directory_iterator(); ++it) - { - BOOST_TEST(fs::status(it->path()).type() == it->status().type()); - BOOST_TEST(fs::symlink_status(it->path()).type() == it->symlink_status().type()); - if (it->path().filename() == "d1") - { - BOOST_TEST(fs::is_directory(it->status())); - BOOST_TEST(fs::is_directory(it->symlink_status())); - } - else if (it->path().filename() == "d2") - { - BOOST_TEST(fs::is_directory(it->status())); - BOOST_TEST(fs::is_directory(it->symlink_status())); - } - else if (it->path().filename() == "f0") - { - BOOST_TEST(fs::is_regular_file(it->status())); - BOOST_TEST(fs::is_regular_file(it->symlink_status())); - } - else if (it->path().filename() == "f1") - { - BOOST_TEST(fs::is_regular_file(it->status())); - BOOST_TEST(fs::is_regular_file(it->symlink_status())); - } - else if (it->path().filename() == "f0_symlink") - { - BOOST_TEST(fs::is_regular_file(it->status())); - BOOST_TEST(fs::is_symlink(it->symlink_status())); - } - else if (it->path().filename() == "dangling_symlink") - { - BOOST_TEST(it->status().type() == fs::file_not_found); - BOOST_TEST(fs::is_symlink(it->symlink_status())); - } - else if (it->path().filename() == "d1_symlink") - { - BOOST_TEST(fs::is_directory(it->status())); - BOOST_TEST(fs::is_symlink(it->symlink_status())); - } - else if (it->path().filename() == "dangling_directory_symlink") - { - BOOST_TEST(it->status().type() == fs::file_not_found); - BOOST_TEST(fs::is_symlink(it->symlink_status())); - } - //else - // cout << " Note: unexpected directory entry " << it->path().filename() << endl; - } - } - - // recursive_iterator_status_tests -------------------------------------------------// - - void recursive_iterator_status_tests() - { - cout << "recursive_iterator_status_tests..." << endl; - for (fs::recursive_directory_iterator it (dir); - it != fs::recursive_directory_iterator(); - ++it) - { - BOOST_TEST(fs::status(it->path()).type() == it->status().type()); - BOOST_TEST(fs::symlink_status(it->path()).type() == it->symlink_status().type()); - } - } - - // create_hard_link_tests ----------------------------------------------------------// - - void create_hard_link_tests() - { - cout << "create_hard_link_tests..." << endl; - - fs::path from_ph(dir / "f3"); - fs::path f1(dir / "f1"); - - BOOST_TEST(!fs::exists(from_ph)); - BOOST_TEST(fs::exists(f1)); - bool create_hard_link_ok(true); - try { fs::create_hard_link(f1, from_ph); } - catch (const fs::filesystem_error & ex) - { - create_hard_link_ok = false; - cout - << " *** For information only ***\n" - " 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) - { - cout - << " *** For information only ***\n" - " create_hard_link() succeeded\n"; - BOOST_TEST(fs::exists(from_ph)); - BOOST_TEST(fs::exists(f1)); - BOOST_TEST(fs::equivalent(from_ph, f1)); - BOOST_TEST(fs::hard_link_count(from_ph) == 2); - BOOST_TEST(fs::hard_link_count(f1) == 2); - } - - // Although tests may be running on a FAT or other file system that does - // not support hard links, that is unusual enough that it is considered - // a test failure. - BOOST_TEST(create_hard_link_ok); - - error_code ec; - fs::create_hard_link(fs::path("doesnotexist"), - fs::path("shouldnotwork"), ec); - BOOST_TEST(ec); - } - - // create_symlink_tests ------------------------------------------------------------// - - void create_symlink_tests() - { - cout << "create_symlink_tests..." << endl; - - fs::path from_ph(dir / "f4"); - fs::path f1(dir / "f1"); - BOOST_TEST(!fs::exists(from_ph)); - BOOST_TEST(fs::exists(f1)); - try { fs::create_symlink(f1, from_ph); } - catch (const fs::filesystem_error & ex) - { - create_symlink_ok = false; - cout - << " *** For information only ***\n" - " create_symlink() attempt failed\n" - " filesystem_error.what() reports: " << ex.what() << "\n" - " create_symlink() may not be supported on this operating system or file system\n"; - } - - if (create_symlink_ok) - { - cout - << " *** For information only ***\n" - " create_symlink() succeeded\n"; - BOOST_TEST(fs::exists(from_ph)); - BOOST_TEST(fs::is_symlink(from_ph)); - BOOST_TEST(fs::exists(f1)); - BOOST_TEST(fs::equivalent(from_ph, f1)); - BOOST_TEST(fs::read_symlink(from_ph) == f1); - - fs::file_status 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)); - - stat = fs::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)); - - // since create_symlink worked, copy_symlink should also work - fs::path symlink2_ph(dir / "symlink2"); - fs::copy_symlink(from_ph, symlink2_ph); - stat = fs::symlink_status(symlink2_ph); - BOOST_TEST(fs::is_symlink(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)); - } - - error_code ec = error_code(); - fs::create_symlink("doesnotexist", "", ec); - BOOST_TEST(ec); - } - - // permissions_tests ---------------------------------------------------------------// - - void permissions_tests() - { - cout << "permissions_tests..." << endl; - - fs::path p(dir / "permissions.txt"); - create_file(p); - - if (platform == "POSIX") - { - cout << " fs::status(p).permissions() " << std::oct << fs::status(p).permissions() - << std::dec << endl; - BOOST_TEST((fs::status(p).permissions() & 0600) == 0600); // 0644, 0664 sometimes returned - - fs::permissions(p, fs::owner_all); - BOOST_TEST(fs::status(p).permissions() == fs::owner_all); - - fs::permissions(p, fs::add_perms | fs::group_all); - BOOST_TEST(fs::status(p).permissions() == (fs::owner_all | fs::group_all)); - - fs::permissions(p, fs::remove_perms | fs::group_all); - BOOST_TEST(fs::status(p).permissions() == fs::owner_all); - - // some POSIX platforms cache permissions during directory iteration, some don't - // so test that iteration finds the correct permissions - 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); - } - else // Windows - { - BOOST_TEST(fs::status(p).permissions() == 0666); - fs::permissions(p, fs::remove_perms | fs::group_write); - BOOST_TEST(fs::status(p).permissions() == 0444); - fs::permissions(p, fs::add_perms | fs::group_write); - BOOST_TEST(fs::status(p).permissions() == 0666); - } - } - - // rename_tests --------------------------------------------------------------------// - - void rename_tests() - { - cout << "rename_tests..." << endl; - - fs::path f1(dir / "f1"); - BOOST_TEST(fs::exists(f1)); - - // error: rename a non-existent old 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)); - - // error: rename an existing file to "" - renamer n2(f1, ""); - BOOST_TEST(CHECK_EXCEPTION(n2, ENOENT)); - - // rename an existing file to an existent file - create_file(dir / "ff1", "ff1"); - create_file(dir / "ff2", "ff2"); - fs::rename(dir / "ff2", dir / "ff1"); - BOOST_TEST(fs::exists(dir / "ff1")); - verify_file(dir / "ff1", "ff2"); - BOOST_TEST(!fs::exists(dir / "ff2")); - - // rename an existing file to itself - BOOST_TEST(fs::exists(dir / "f1")); - fs::rename(dir / "f1", dir / "f1"); - BOOST_TEST(fs::exists(dir / "f1")); - - // error: rename an existing directory to an existing non-empty directory - BOOST_TEST(fs::exists(dir / "f1")); - BOOST_TEST(fs::exists(d1 / "f2")); - // several POSIX implementations (cygwin, openBSD) report ENOENT instead of EEXIST, - // so we don't verify error type on the following test. - renamer n3b(dir, d1); - BOOST_TEST(CHECK_EXCEPTION(n3b, 0)); - - // error: move existing 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)); - - // rename existing 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")); - - // move and rename an existing file to a different directory - 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", "file-f1"); - fs::rename(d2 / "f3", d1 / "f2"); - BOOST_TEST(fs::exists(d1 / "f2")); - - // error: move existing 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)); - - // rename existing 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)); - - // 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")); - } - - // predicate_and_status_tests ------------------------------------------------------// - - void predicate_and_status_tests() - { - cout << "predicate_and_status_tests..." << endl; - - 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::type_present(stat)); - BOOST_TEST(fs::permissions_present(stat)); - 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::type_present(stat)); - BOOST_TEST(fs::permissions_present(stat)); - 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_directory_tests ----------------------------------------------------------// - - void create_directory_tests() - { - cout << "create_directory_tests..." << endl; - - // 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) - { - cout << x.what() << "\n\n" - "***** Creating directory " << dir << " failed. *****\n" - "***** This is a serious error that will prevent further tests *****\n" - "***** from returning useful results. Further testing is aborted. *****\n\n"; - std::exit(1); - } - - catch (...) - { - cout << "\n\n" - "***** Creating directory " << dir << " failed. *****\n" - "***** This is a serious error that will prevent further tests *****\n" - "***** from returning useful results. Further testing is aborted. *****\n\n"; - std::exit(1); - } - - BOOST_TEST(fs::exists(dir)); - BOOST_TEST(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)); - fs::file_status 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)); - - cout << " create_directory_tests complete" << endl; - } - - // current_directory_tests ---------------------------------------------------------// - - void current_directory_tests() - { - cout << "current_directory_tests..." << endl; - - // set the current directory, then check it for consistency - fs::path original_dir = fs::current_path(); - BOOST_TEST(dir != original_dir); - fs::current_path(dir); - BOOST_TEST(fs::current_path() == dir); - BOOST_TEST(fs::current_path() != original_dir); - fs::current_path(original_dir); - BOOST_TEST(fs::current_path() == original_dir); - BOOST_TEST(fs::current_path() != dir); - - // make sure the overloads work - fs::current_path(dir.c_str()); - BOOST_TEST(fs::current_path() == dir); - BOOST_TEST(fs::current_path() != original_dir); - fs::current_path(original_dir.string()); - BOOST_TEST(fs::current_path() == original_dir); - BOOST_TEST(fs::current_path() != dir); - } - - // create_directories_tests --------------------------------------------------------// - - void create_directories_tests() - { - cout << "create_directories_tests..." << endl; - - fs::path p = dir / "level1" / "level2"; - - BOOST_TEST(!fs::exists(p)); - BOOST_TEST(fs::create_directories(p)); - BOOST_TEST(fs::exists(p)); - BOOST_TEST(fs::is_directory(p)); - } - - // resize_file_tests ---------------------------------------------------------------// - - void resize_file_tests() - { - cout << "resize_file_tests..." << endl; - - fs::path p(dir / "resize_file_test.txt"); - - fs::remove(p); - create_file(p, "1234567890"); - - BOOST_TEST(fs::exists(p)); - BOOST_TEST_EQ(fs::file_size(p), 10U); - fs::resize_file(p, 5); - BOOST_TEST(fs::exists(p)); - BOOST_TEST_EQ(fs::file_size(p), 5U); - fs::resize_file(p, 15); - BOOST_TEST(fs::exists(p)); - BOOST_TEST_EQ(fs::file_size(p), 15U); - - error_code ec; - fs::resize_file("no such file", 15, ec); - BOOST_TEST(ec); - } - - // status_of_nonexistent_tests -----------------------------------------------------// - - void status_of_nonexistent_tests() - { - cout << "status_of_nonexistent_tests..." << endl; - fs::path p ("nosuch"); - BOOST_TEST(!fs::exists(p)); - BOOST_TEST(!fs::is_regular_file(p)); - BOOST_TEST(!fs::is_directory(p)); - BOOST_TEST(!fs::is_symlink(p)); - BOOST_TEST(!fs::is_other(p)); - - fs::file_status s = fs::status(p); - BOOST_TEST(!fs::exists(s)); - BOOST_TEST_EQ(s.type(), fs::file_not_found); - BOOST_TEST(fs::type_present(s)); - BOOST_TEST(!fs::is_regular_file(s)); - BOOST_TEST(!fs::is_directory(s)); - BOOST_TEST(!fs::is_symlink(s)); - BOOST_TEST(!fs::is_other(s)); - } - - // status_error_reporting_tests ----------------------------------------------------// - - void status_error_reporting_tests() - { - cout << "status_error_reporting_tests..." << endl; - - error_code ec; - - // test status, ec, for existing file - ec.assign(-1,poison_category()); - BOOST_TEST(ec.value() == -1); - BOOST_TEST(&ec.category() == &poison_category()); - fs::file_status s = fs::status(".",ec); - BOOST_TEST(ec.value() == 0); - BOOST_TEST(ec.category() == system_category()); - BOOST_TEST(fs::exists(s)); - BOOST_TEST(fs::is_directory(s)); - - // test status, ec, for non-existing file - fs::path p ("nosuch"); - ec.assign(-1,poison_category()); - s = fs::status(p,ec); - BOOST_TEST(ec.value() != 0); - BOOST_TEST(ec.category() == system_category()); - - BOOST_TEST(!fs::exists(s)); - BOOST_TEST_EQ(s.type(), fs::file_not_found); - BOOST_TEST(fs::type_present(s)); - BOOST_TEST(!fs::is_regular_file(s)); - BOOST_TEST(!fs::is_directory(s)); - BOOST_TEST(!fs::is_symlink(s)); - BOOST_TEST(!fs::is_other(s)); - - // test queries, ec, for existing file - ec.assign(-1,poison_category()); - BOOST_TEST(fs::exists(".", ec)); - BOOST_TEST(ec.value() == 0); - BOOST_TEST(ec.category() == system_category()); - ec.assign(-1,poison_category()); - BOOST_TEST(!fs::is_regular_file(".", ec)); - BOOST_TEST(ec.value() == 0); - BOOST_TEST(ec.category() == system_category()); - ec.assign(-1,poison_category()); - BOOST_TEST(fs::is_directory(".", ec)); - BOOST_TEST(ec.value() == 0); - BOOST_TEST(ec.category() == system_category()); - - // test queries, ec, for non-existing file - ec.assign(-1,poison_category()); - BOOST_TEST(!fs::exists(p, ec)); - BOOST_TEST(ec.value() != 0); - BOOST_TEST(ec.category() == system_category()); - ec.assign(-1,poison_category()); - BOOST_TEST(!fs::is_regular_file(p, ec)); - BOOST_TEST(ec.value() != 0); - BOOST_TEST(ec.category() == system_category()); - ec.assign(-1,poison_category()); - BOOST_TEST(!fs::is_directory(p, ec)); - BOOST_TEST(ec.value() != 0); - BOOST_TEST(ec.category() == system_category()); - } - - // remove_tests --------------------------------------------------------------------// - - void remove_tests(const fs::path& dir) - { - cout << "remove_tests..." << endl; - - // remove() file - fs::path f1 = dir / "shortlife"; - BOOST_TEST(!fs::exists(f1)); - create_file(f1, ""); - BOOST_TEST(fs::exists(f1)); - BOOST_TEST(!fs::is_directory(f1)); - BOOST_TEST(fs::remove(f1)); - BOOST_TEST(!fs::exists(f1)); - BOOST_TEST(!fs::remove("no-such-file")); - BOOST_TEST(!fs::remove("no-such-directory/no-such-file")); - - // remove() directory - fs::path 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(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)); - } - - // remove_symlink_tests ------------------------------------------------------------// - - void remove_symlink_tests() - { - cout << "remove_symlink_tests..." << endl; - - // 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 - fs::path f1 = "link_target"; - fs::remove(f1); // remove any residue from past tests - BOOST_TEST(!fs::exists(f1)); - create_file(f1, ""); - BOOST_TEST(fs::exists(f1)); - BOOST_TEST(!fs::is_directory(f1)); - BOOST_TEST(fs::is_regular_file(f1)); - link = "non_dangling_link"; - fs::create_symlink(f1, 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(f1)); - BOOST_TEST(!fs::exists(link)); - BOOST_TEST(!fs::is_symlink(link)); - BOOST_TEST(fs::remove(f1)); - BOOST_TEST(!fs::exists(f1)); - } - - // absolute_tests -----------------------------------------------------------------// - - void absolute_tests() - { - cout << "absolute_tests..." << endl; - - BOOST_TEST_EQ(fs::absolute(""), fs::current_path() ); - BOOST_TEST_EQ(fs::absolute("", ""), fs::current_path() ); - BOOST_TEST_EQ(fs::absolute(fs::current_path() / "foo/bar"), fs::current_path() / "foo/bar"); - BOOST_TEST_EQ(fs::absolute("foo"), fs::current_path() / "foo"); - BOOST_TEST_EQ(fs::absolute("foo", fs::current_path()), fs::current_path() / "foo"); - BOOST_TEST_EQ(fs::absolute("bar", "foo"), fs::current_path() / "foo" / "bar"); - BOOST_TEST_EQ(fs::absolute("/foo"), fs::current_path().root_path().string() + "foo"); - -# ifdef BOOST_WINDOWS_API - BOOST_TEST_EQ(fs::absolute("a:foo", "b:/bar"), "a:/bar/foo"); -# endif - - // these tests were moved from elsewhere, so may duplicate some of the above tests - - // p.empty() - BOOST_TEST_EQ(fs::absolute(fs::path(), "//foo/bar"), "//foo/bar"); - if (platform == "Windows") - { - BOOST_TEST_EQ(fs::absolute(fs::path(), "a:/bar"), "a:/bar"); - } - - // p.has_root_name() - // p.has_root_directory() - BOOST_TEST_EQ(fs::absolute(fs::path("//foo/bar"), "//uvw/xyz"), "//foo/bar"); - if (platform == "Windows") - { - BOOST_TEST_EQ(fs::absolute(fs::path("a:/bar"), "b:/xyz"), "a:/bar"); - } - // !p.has_root_directory() - BOOST_TEST_EQ(fs::absolute(fs::path("//net"), "//xyz/"), "//net/"); - BOOST_TEST_EQ(fs::absolute(fs::path("//net"), "//xyz/abc"), "//net/abc"); - BOOST_TEST_EQ(fs::absolute(fs::path("//net"), "//xyz/abc/def"), "//net/abc/def"); - if (platform == "Windows") - { - BOOST_TEST_EQ(fs::absolute(fs::path("a:"), "b:/"), "a:/"); - BOOST_TEST_EQ(fs::absolute(fs::path("a:"),"b:/abc"), "a:/abc"); - BOOST_TEST_EQ(fs::absolute(fs::path("a:"),"b:/abc/def"), "a:/abc/def"); - BOOST_TEST_EQ(fs::absolute(fs::path("a:foo"), "b:/"), "a:/foo"); - BOOST_TEST_EQ(fs::absolute(fs::path("a:foo"), "b:/abc"), "a:/abc/foo"); - BOOST_TEST_EQ(fs::absolute(fs::path("a:foo"), "b:/abc/def"), "a:/abc/def/foo"); - BOOST_TEST_EQ(fs::absolute(fs::path("a:foo/bar"), "b:/"), "a:/foo/bar"); - BOOST_TEST_EQ(fs::absolute(fs::path("a:foo/bar"), "b:/abc"), "a:/abc/foo/bar"); - BOOST_TEST_EQ(fs::absolute(fs::path("a:foo/bar"), "b:/abc/def"), "a:/abc/def/foo/bar"); - } - // !p.has_root_name() - // p.has_root_directory() - BOOST_TEST_EQ(fs::absolute(fs::path("/"), "//xyz/"), "//xyz/"); - BOOST_TEST_EQ(fs::absolute(fs::path("/"), "//xyz/abc"), "//xyz/"); - BOOST_TEST_EQ(fs::absolute(fs::path("/foo"), "//xyz/"), "//xyz/foo"); - BOOST_TEST_EQ(fs::absolute(fs::path("/foo"), "//xyz/abc"), "//xyz/foo"); - // !p.has_root_directory() - BOOST_TEST_EQ(fs::absolute(fs::path("foo"), "//xyz/abc"), "//xyz/abc/foo"); - BOOST_TEST_EQ(fs::absolute(fs::path("foo/bar"), "//xyz/abc"), "//xyz/abc/foo/bar"); - BOOST_TEST_EQ(fs::absolute(fs::path("."), "//xyz/abc"), "//xyz/abc/."); - BOOST_TEST_EQ(fs::absolute(fs::path(".."), "//xyz/abc"), "//xyz/abc/.."); - BOOST_TEST_EQ(fs::absolute(fs::path("./foo"), "//xyz/abc"), "//xyz/abc/./foo"); - BOOST_TEST_EQ(fs::absolute(fs::path("../foo"), "//xyz/abc"), "//xyz/abc/../foo"); - if (platform == "POSIX") - { - BOOST_TEST_EQ(fs::absolute(fs::path("foo"), "/abc"), "/abc/foo"); - BOOST_TEST_EQ(fs::absolute(fs::path("foo/bar"), "/abc"), "/abc/foo/bar"); - BOOST_TEST_EQ(fs::absolute(fs::path("."), "/abc"), "/abc/."); - BOOST_TEST_EQ(fs::absolute(fs::path(".."), "/abc"), "/abc/.."); - BOOST_TEST_EQ(fs::absolute(fs::path("./foo"), "/abc"), "/abc/./foo"); - BOOST_TEST_EQ(fs::absolute(fs::path("../foo"), "/abc"), "/abc/../foo"); - } - - } - - // canonical_basic_tests -----------------------------------------------------------// - - void canonical_basic_tests() - { - cout << "canonical_basic_tests..." << endl; - - // error handling - error_code ec; - ec.clear(); - fs::canonical("no-such-file", ec); - BOOST_TEST(ec); - ec.clear(); - fs::canonical("no-such-file", "x", ec); - BOOST_TEST(ec); - bool ok(false); - try { fs::canonical("no-such-file"); } - catch (const fs::filesystem_error&) { ok = true; } - BOOST_TEST(ok); - - // non-symlink tests; also see canonical_symlink_tests() - BOOST_TEST_EQ(fs::canonical(""), fs::current_path()); - BOOST_TEST_EQ(fs::canonical("", fs::current_path()), fs::current_path()); - BOOST_TEST_EQ(fs::canonical("", ""), fs::current_path()); - BOOST_TEST_EQ(fs::canonical(fs::current_path()), fs::current_path()); - BOOST_TEST_EQ(fs::canonical(fs::current_path(), ""), fs::current_path()); - BOOST_TEST_EQ(fs::canonical(fs::current_path(), "no-such-file"), fs::current_path()); - - BOOST_TEST_EQ(fs::canonical("."), fs::current_path()); - BOOST_TEST_EQ(fs::canonical(".."), fs::current_path().parent_path()); - BOOST_TEST_EQ(fs::canonical("/"), fs::current_path().root_path()); - - fs::path relative_dir(dir.filename()); - BOOST_TEST_EQ(fs::canonical(dir), dir); - BOOST_TEST_EQ(fs::canonical(relative_dir), dir); - BOOST_TEST_EQ(fs::canonical(dir / "f0"), dir / "f0"); - BOOST_TEST_EQ(fs::canonical(relative_dir / "f0"), dir / "f0"); - BOOST_TEST_EQ(fs::canonical(relative_dir / "./f0"), dir / "f0"); - BOOST_TEST_EQ(fs::canonical(relative_dir / "d1/../f0"), dir / "f0"); - } - - // canonical_symlink_tests -----------------------------------------------------------// - - void canonical_symlink_tests() - { - cout << "canonical_symlink_tests..." << endl; - - fs::path relative_dir(dir.filename()); - BOOST_TEST_EQ(fs::canonical(dir / "sym-d1/f2"), d1 / "f2"); - BOOST_TEST_EQ(fs::canonical(relative_dir / "sym-d1/f2"), d1 / "f2"); - } - - // copy_file_tests ------------------------------------------------------------------// - - void copy_file_tests(const fs::path& f1, const fs::path& d1) - { - cout << "copy_file_tests..." << endl; - - BOOST_TEST(fs::exists(f1)); - fs::remove(d1 / "f2"); // remove possible residue from prior testing - BOOST_TEST(fs::exists(d1)); - BOOST_TEST(!fs::exists(d1 / "f2")); - cout << " copy " << f1 << " to " << d1 / "f2" << endl; - fs::copy_file(f1, d1 / "f2"); - cout << " copy complete" << endl; - BOOST_TEST(fs::exists(f1)); - BOOST_TEST(fs::exists(d1 / "f2")); - BOOST_TEST(!fs::is_directory(d1 / "f2")); - verify_file(d1 / "f2", "file-f1"); - - bool copy_ex_ok = false; - try { fs::copy_file(f1, d1 / "f2"); } - catch (const fs::filesystem_error &) { copy_ex_ok = true; } - BOOST_TEST(copy_ex_ok); - - copy_ex_ok = false; - try { fs::copy_file(f1, d1 / "f2", fs::copy_option::fail_if_exists); } - catch (const fs::filesystem_error &) { copy_ex_ok = true; } - BOOST_TEST(copy_ex_ok); - - create_file(d1 / "f2", "1234567890"); - BOOST_TEST_EQ(fs::file_size(d1 / "f2"), 10U); - copy_ex_ok = true; - try { fs::copy_file(f1, d1 / "f2", fs::copy_option::overwrite_if_exists); } - catch (const fs::filesystem_error &) { copy_ex_ok = false; } - BOOST_TEST(copy_ex_ok); - BOOST_TEST_EQ(fs::file_size(d1 / "f2"), 7U); - verify_file(d1 / "f2", "file-f1"); - } - - // symlink_status_tests -------------------------------------------------------------// - - void symlink_status_tests() - { - cout << "symlink_status_tests..." << endl; - - boost::system::error_code ec; - - fs::path dangling_sym(dir / "dangling-sym"); - fs::path dangling_directory_sym(dir / "dangling-directory-sym"); - fs::path sym_d1(dir / "sym-d1"); - fs::path symsym_d1(dir / "symsym-d1"); - fs::path sym_f1(dir / "sym-f1"); - fs::path symsym_f1(dir / "symsym-f1"); - fs::create_symlink("does not exist", dangling_sym); - fs::create_directory_symlink("does not exist", dangling_directory_sym); - fs::create_directory_symlink(d1, sym_d1); - fs::create_directory_symlink(sym_d1, symsym_d1); - fs::create_symlink(f1, sym_f1); - fs::create_symlink(sym_f1, symsym_f1); - - // verify all cases detected as symlinks - BOOST_TEST_EQ(fs::symlink_status(dangling_sym, ec).type(), fs::symlink_file); - BOOST_TEST_EQ(fs::symlink_status(dangling_directory_sym, ec).type(), fs::symlink_file); - BOOST_TEST_EQ(fs::symlink_status(sym_d1, ec).type(), fs::symlink_file); - BOOST_TEST_EQ(fs::symlink_status(symsym_d1, ec).type(), fs::symlink_file); - BOOST_TEST_EQ(fs::symlink_status(sym_f1, ec).type(), fs::symlink_file); - BOOST_TEST_EQ(fs::symlink_status(symsym_f1, ec).type(), fs::symlink_file); - - // verify all cases resolve to the (possibly recursive) symlink target - BOOST_TEST_EQ(fs::status(dangling_sym, ec).type(), fs::file_not_found); - BOOST_TEST_EQ(fs::status(dangling_directory_sym, ec).type(), fs::file_not_found); - - BOOST_TEST_EQ(fs::status(sym_d1, ec).type(), fs::directory_file); - BOOST_TEST_EQ(fs::status(sym_d1 / "d1f1", ec).type(), fs::regular_file); - BOOST_TEST_EQ(fs::status(symsym_d1, ec).type(), fs::directory_file); - BOOST_TEST_EQ(fs::status(symsym_d1 / "d1f1", ec).type(), fs::regular_file); - BOOST_TEST_EQ(fs::status(sym_f1, ec).type(), fs::regular_file); - BOOST_TEST_EQ(fs::status(symsym_f1, ec).type(), fs::regular_file); - -#ifdef BOOST_WINDOWS_API - - // On Windows, telling if a filesystem entry is a symlink, rather than some other - // kind of reparse point such as a junction, requires some truely baroque code. - // See ticket #4663, filesystem objects falsely identified as symlinks. - // This test checks two directory entries created by Windows itself to verify - // is_symlink() works correctly. Try "dir /A %HOMEPATH%\.." from the command line to - // verify this test is valid on your version of Windows. It only works on Vista and - // later. - - fs::path users(getenv("HOMEDRIVE")); - BOOST_TEST(!users.empty()); - users /= "\\Users"; - BOOST_TEST(fs::exists(users)); - BOOST_TEST(fs::exists(users/"All Users")); - BOOST_TEST(fs::exists(users/"Default User")); - BOOST_TEST(fs::is_symlink(users/"All Users")); // dir /A reports <SYMLINKD> - BOOST_TEST(!fs::is_symlink(users/"Default User")); // dir /A reports <JUNCTION> <JUNCTION> - -#endif - } - - // copy_symlink_tests ---------------------------------------------------------------// - - void copy_symlink_tests(const fs::path& f1, const fs::path& d1) - { - cout << "copy_symlink_tests..." << endl; - - BOOST_TEST(fs::exists(f1)); - BOOST_TEST(fs::exists(d1)); - fs::path sym1(d1 / "symlink1"); - fs::remove(sym1); // remove possible residue from prior testing - fs::create_symlink(f1, sym1); - BOOST_TEST(fs::exists(sym1)); - BOOST_TEST(fs::is_symlink(sym1)); - fs::path sym2(d1 / "symlink2"); - fs::copy_symlink(sym1, sym2); - BOOST_TEST(fs::exists(sym2)); - BOOST_TEST(fs::is_symlink(sym2)); - //fs::path sym3(d1 / "symlink3"); - //fs::copy(sym1, sym3); - //BOOST_TEST(fs::exists(sym3)); - //BOOST_TEST(fs::is_symlink(sym3)); - - bool copy_ex_ok = false; - try { fs::copy_symlink("no-such-file", "new-symlink1"); } - catch (const fs::filesystem_error &) { copy_ex_ok = true; } - BOOST_TEST(copy_ex_ok); - - copy_ex_ok = false; - try { fs::copy_symlink(f1, "new-symlink2"); } // should fail; f1 not symlink - catch (const fs::filesystem_error &) { copy_ex_ok = true; } - BOOST_TEST(copy_ex_ok); - } - - // write_time_tests ----------------------------------------------------------------// - - void write_time_tests(const fs::path& dir) - { - cout << "write_time_tests..." << endl; - - fs::path f1 = dir / "foobar2"; - create_file(f1, "foobar2"); - BOOST_TEST(fs::exists(f1)); - BOOST_TEST(!fs::is_directory(f1)); - BOOST_TEST(fs::is_regular_file(f1)); - BOOST_TEST(fs::file_size(f1) == 7); - verify_file(f1, "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(f1); - cout << "\n UTC last_write_time() for a file just created is " - << std::asctime(std::gmtime(&ft)) << endl; - - std::tm * tmp = std::localtime(&ft); - cout << "\n Year is " << tmp->tm_year << endl; - --tmp->tm_year; - cout << " Change year to " << tmp->tm_year << endl; - fs::last_write_time(f1, std::mktime(tmp)); - std::time_t ft2 = fs::last_write_time(f1); - cout << " last_write_time() for the file is now " - << std::asctime(std::gmtime(&ft2)) << endl; - BOOST_TEST(ft != fs::last_write_time(f1)); - - cout << "\n Reset to current time" << endl; - fs::last_write_time(f1, ft); - double time_diff = std::difftime(ft, fs::last_write_time(f1)); - cout - << " original last_write_time() - current last_write_time() is " - << time_diff << " seconds" << endl; - BOOST_TEST(time_diff >= -60.0 && time_diff <= 60.0); - } - - // platform_specific_tests ---------------------------------------------------------// - - void platform_specific_tests() - { - // Windows only tests - if (platform == "Windows") - { - cout << "Window specific tests..." << endl; - if (!skip_long_windows_tests) - { - cout << " (may take several seconds)"<< endl; - - 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"))); - } - cout << endl; - - 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(dir.string().size() > 1 - && dir.string()[1] == ':'); // verify path includes drive - - BOOST_TEST(fs::system_complete("").empty()); - BOOST_TEST(fs::system_complete("/") == fs::initial_path().root_path()); - BOOST_TEST(fs::system_complete("foo") - == fs::initial_path() / "foo"); - - fs::path p1(fs::system_complete("/foo")); - BOOST_TEST_EQ(p1.string().size(), 6U); // this failed during v3 development due to bug - std::string s1(p1.string() ); - std::string s2(fs::initial_path().root_path().string()+"foo"); - BOOST_TEST_EQ(s1, s2); - - BOOST_TEST(fs::system_complete(fs::path(fs::initial_path().root_name())) - == fs::initial_path()); - BOOST_TEST(fs::system_complete(fs::path(fs::initial_path().root_name().string() - + "foo")).string() == fs::initial_path() / "foo"); - BOOST_TEST(fs::system_complete(fs::path("c:/")).generic_string() - == "c:/"); - BOOST_TEST(fs::system_complete(fs::path("c:/foo")).generic_string() - == "c:/foo"); - BOOST_TEST(fs::system_complete(fs::path("//share")).generic_string() - == "//share"); - } // Windows - - else if (platform == "POSIX") - { - cout << "POSIX specific tests..." << endl; - BOOST_TEST(fs::system_complete("").empty()); - BOOST_TEST(fs::initial_path().root_path().string() == "/"); - BOOST_TEST(fs::system_complete("/").string() == "/"); - BOOST_TEST(fs::system_complete("foo").string() - == fs::initial_path().string()+"/foo"); - BOOST_TEST(fs::system_complete("/foo").string() - == fs::initial_path().root_path().string()+"foo"); - } // POSIX - } - - // initial_tests -------------------------------------------------------------------// - - void initial_tests() - { - cout << "initial_tests..." << endl; - - cout << " current_path().string() is\n \"" - << fs::initial_path().string() - << "\"\n\n"; - BOOST_TEST(fs::initial_path() == fs::current_path()); - BOOST_TEST(fs::initial_path().is_absolute()); - BOOST_TEST(fs::current_path().is_absolute()); - BOOST_TEST(fs::initial_path().string() - == fs::current_path().string()); - } - - // space_tests ---------------------------------------------------------------------// - - void space_tests() - { - cout << "space_tests..." << endl; - - // 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 - cout << " capacity = " << spi.capacity << '\n'; - cout << " free = " << spi.free << '\n'; - cout << " available = " << spi.available << '\n'; -# endif - } - - // equivalent_tests ----------------------------------------------------------------// - - void equivalent_tests(const fs::path& f1) - { - cout << "equivalent_tests..." << endl; - - BOOST_TEST(CHECK_EXCEPTION(bad_equivalent, ENOENT)); - BOOST_TEST(fs::equivalent(f1, dir / "f1")); - BOOST_TEST(fs::equivalent(dir, d1 / "..")); - BOOST_TEST(!fs::equivalent(f1, dir)); - BOOST_TEST(!fs::equivalent(dir, f1)); - BOOST_TEST(!fs::equivalent(d1, d2)); - BOOST_TEST(!fs::equivalent(dir, ng)); - BOOST_TEST(!fs::equivalent(ng, dir)); - BOOST_TEST(!fs::equivalent(f1, ng)); - BOOST_TEST(!fs::equivalent(ng, f1)); - } - - // temp_directory_path_tests -------------------------------------------------------// - // contributed by Jeff Flinn - - struct guarded_env_var - { - struct previous_value - { - std::string m_name; - std::string m_string; - bool m_empty; - - previous_value(const char* name) - : m_string(name) - , m_empty (true) - { - if(const char* value = getenv(name)) - { - m_string.assign(value); - m_empty = false; - } - else - { - m_empty = true; - } - } - ~previous_value() - { - m_empty? unsetenv(m_name.c_str()) - : setenv(m_name.c_str(), m_string.c_str(), 1); - } - }; - - previous_value m_previous_value; - - guarded_env_var(const char* name, const fs::path::value_type* value) - : m_previous_value(name) - { - value? setenv(name, value, 1) : unsetenv(name); - } - }; - - void temp_directory_path_tests() - { - { - cout << "temp_directory_path_tests..." << endl; - - BOOST_TEST(!fs::temp_directory_path().empty()); - BOOST_TEST(exists(fs::temp_directory_path())); - fs::path ph = fs::temp_directory_path()/"temp_directory_path_test.txt"; - { - if(exists(ph)) remove(ph); - std::ofstream f(ph.BOOST_FILESYSTEM_C_STR); - f << "passed"; - } - BOOST_TEST(exists(ph)); - { - std::ifstream f(ph.BOOST_FILESYSTEM_C_STR); - std::string s; - f >> s; - BOOST_TEST(s == "passed"); - } - remove(ph); - BOOST_TEST(!exists(ph)); - } - - fs::path test_temp_dir = fs::initial_path(); - -#if defined BOOST_POSIX_API - { - struct guarded_tmp_vars - { - guarded_env_var m_tmpdir ; - guarded_env_var m_tmp ; - guarded_env_var m_temp ; - guarded_env_var m_tempdir; - - guarded_tmp_vars - ( const fs::path::value_type* tmpdir - , const fs::path::value_type* tmp - , const fs::path::value_type* temp - , const fs::path::value_type* tempdir - ) - : m_tmpdir ("TMPDIR" , tmpdir ) - , m_tmp ("TMP" , tmp ) - , m_temp ("TEMP" , temp ) - , m_tempdir("TEMPDIR", tempdir) - {} - }; - - { - guarded_tmp_vars vars(test_temp_dir.c_str(), 0, 0, 0); - fs::path ph = fs::temp_directory_path(); - BOOST_TEST(equivalent(test_temp_dir, ph)); - } - { - guarded_tmp_vars vars(0, test_temp_dir.c_str(), 0, 0); - fs::path ph = fs::temp_directory_path(); - BOOST_TEST(equivalent(test_temp_dir, ph)); - } - { - guarded_tmp_vars vars(0, 0, test_temp_dir.c_str(), 0); - fs::path ph = fs::temp_directory_path(); - BOOST_TEST(equivalent(test_temp_dir, ph)); - } - { - guarded_tmp_vars vars(0, 0, 0, test_temp_dir.c_str()); - fs::path ph = fs::temp_directory_path(); - BOOST_TEST(equivalent(test_temp_dir, ph)); - } - } -#endif - -#if defined BOOST_WINDOWS_API - { - struct guarded_tmp_vars - { - guarded_env_var m_tmp ; - guarded_env_var m_temp ; - guarded_env_var m_userprofile; - - guarded_tmp_vars - ( const fs::path::value_type* tmp - , const fs::path::value_type* temp - , const fs::path::value_type* userprofile - ) - : m_tmp ("TMP" , tmp ) - , m_temp ("TEMP" , temp ) - , m_userprofile("USERPROFILE", userprofile) - {} - }; - - // should NEVER throw - the windows directory or current_path always exists - { - guarded_tmp_vars vars(0, 0, 0); - fs::path ph = fs::temp_directory_path(); - - BOOST_TEST(test_temp_dir != ph); - } - - // should NEVER fail - the windows directory or current_path always exists - { - guarded_tmp_vars vars(0, 0, 0); - error_code ec; - fs::path ph = fs::temp_directory_path(ec); - BOOST_TEST(!ec); - } - - { - guarded_tmp_vars vars(test_temp_dir.c_str(), 0, 0); - fs::path ph = fs::temp_directory_path(); - BOOST_TEST(equivalent(test_temp_dir, ph)); - } - { - guarded_tmp_vars vars(0, test_temp_dir.c_str(), 0); - fs::path ph = fs::temp_directory_path(); - BOOST_TEST(equivalent(test_temp_dir, ph)); - } - { - guarded_tmp_vars vars(0, 0, test_temp_dir.c_str()); - fs::path ph = fs::temp_directory_path(); - BOOST_TEST(equivalent(test_temp_dir, ph)); - } - } -#endif - } - - // _tests --------------------------------------------------------------------------// - - void _tests() - { - cout << "_tests..." << endl; - } - -} // unnamed namespace - - //------------------------------------------------------------------------------------// - // // - // main // - // // - //------------------------------------------------------------------------------------// - -int cpp_main(int argc, char* argv[]) -{ -// document state of critical macros -#ifdef BOOST_POSIX_API - cout << "BOOST_POSIX_API is defined\n"; -#endif -#ifdef BOOST_WINDOWS_API - cout << "BOOST_WINDOWS_API is defined\n"; -#endif - - for (; argc > 1; --argc, ++argv) - { - if (*argv[1]=='-' && *(argv[1]+1)=='t') - report_throws = true; - else if (*argv[1]=='-' && *(argv[1]+1)=='x') - cleanup = false; - else if (*argv[1]=='-' && *(argv[1]+1)=='w') - skip_long_windows_tests = true; - } - - // The choice of platform to test 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 neither BOOST_POSIX_API nor BOOST_WINDOWS_API is defined. See boost/system/api_config.hpp -# endif - cout << "API is " << platform << endl; - - dir = fs::initial_path() / temp_dir_name; - - if (fs::exists(dir)) - { - cout << "remove residue from prior failed tests..." << endl; - fs::remove_all(dir); - } - BOOST_TEST(!fs::exists(dir)); - - // several functions give unreasonable results if uintmax_t isn't 64-bits - cout << "sizeof(boost::uintmax_t) = " << sizeof(boost::uintmax_t) << '\n'; - BOOST_TEST(sizeof(boost::uintmax_t) >= 8); - - initial_tests(); - predicate_and_status_tests(); - exception_tests(); - platform_specific_tests(); - create_directory_tests(); - current_directory_tests(); - space_tests(); - - // create a directory tree that can be used by subsequent tests - // - // dir - // d1 - // d1f1 // an empty file - // f0 // an empty file - // f1 // a file containing "file f1" - // - create_tree(); - - status_of_nonexistent_tests(); - status_error_reporting_tests(); - directory_iterator_tests(); - create_directories_tests(); // must run AFTER directory_iterator_tests - - bad_create_directory_path = f1; - BOOST_TEST(CHECK_EXCEPTION(bad_create_directory, EEXIST)); - fs::file_status stat = fs::status(f1); - 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)); - - equivalent_tests(f1); - create_hard_link_tests(); - create_symlink_tests(); - resize_file_tests(); - absolute_tests(); - canonical_basic_tests(); - permissions_tests(); - copy_file_tests(f1, d1); - if (create_symlink_ok) // only if symlinks supported - { - symlink_status_tests(); - copy_symlink_tests(f1, d1); - canonical_symlink_tests(); - } - iterator_status_tests(); // lots of cases by now, so a good time to test -// dump_tree(dir); - recursive_directory_iterator_tests(); - recursive_iterator_status_tests(); // lots of cases by now, so a good time to test - rename_tests(); - remove_tests(dir); - if (create_symlink_ok) // only if symlinks supported - remove_symlink_tests(); - write_time_tests(dir); - - temp_directory_path_tests(); - - cout << "testing complete" << endl; - - // post-test cleanup - if (cleanup) - { - cout << "post-test removal of " << dir << endl; - 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). - cout << "post-test removal complete" << endl; - BOOST_TEST(!fs::exists(dir)); - BOOST_TEST(fs::remove_all(dir) == 0); - } - - cout << "returning from main()" << endl; - return ::boost::report_errors(); -} // main diff --git a/src/third_party/boost/libs/filesystem/v3/test/operations_unit_test.cpp b/src/third_party/boost/libs/filesystem/v3/test/operations_unit_test.cpp deleted file mode 100644 index b592fd93ed2..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/operations_unit_test.cpp +++ /dev/null @@ -1,265 +0,0 @@ -// operations_unit_test.cpp ----------------------------------------------------------// - -// Copyright Beman Dawes 2008, 2009 - -// 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 - -// ------------------------------------------------------------------------------------// - -// This program is misnamed - it is really a smoke test rather than a unit_test - -// ------------------------------------------------------------------------------------// - -#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 -#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.hpp> // make sure filesystem.hpp works -#include <boost/system/error_code.hpp> -#include <boost/detail/lightweight_test.hpp> -#include <boost/detail/lightweight_main.hpp> -#include <iostream> - -using namespace boost::filesystem; -using namespace boost::system; -using std::cout; -using std::endl; -using std::string; - -#define CHECK(x) check(x, __FILE__, __LINE__) - -namespace -{ - - void check(bool ok, const char* file, int line) - { - if (ok) return; - - ++::boost::detail::test_errors(); - - cout << file << '(' << line << "): test failed\n"; - } - - // file_status_test ----------------------------------------------------------------// - - void file_status_test() - { - cout << "file_status test..." << endl; - - file_status s = status("."); - int v = s.permissions(); - cout << " status(\".\") permissions are " - << std::oct << (v & 0777) << std::dec << endl; - CHECK((v & 0400) == 0400); - - s = symlink_status("."); - v = s.permissions(); - cout << " symlink_status(\".\") permissions are " - << std::oct << (v & 0777) << std::dec << endl; - CHECK((v & 0400) == 0400); - } - - // query_test ----------------------------------------------------------------------// - - void query_test() - { - cout << "query test..." << endl; - - error_code ec; - - CHECK(file_size("no-such-file", ec) == static_cast<boost::uintmax_t>(-1)); - CHECK(ec == errc::no_such_file_or_directory); - - CHECK(status("no-such-file") == file_status(file_not_found, no_perms)); - - CHECK(exists("/")); - CHECK(is_directory("/")); - CHECK(!exists("no-such-file")); - - exists("/", ec); - if (ec) - { - cout << "exists(\"/\", ec) resulted in non-zero ec.value()" << endl; - cout << "ec value: " << ec.value() << ", message: "<< ec.message() << endl; - } - CHECK(!ec); - - CHECK(exists("/")); - CHECK(is_directory("/")); - CHECK(!is_regular_file("/")); - CHECK(!boost::filesystem::is_empty("/")); - CHECK(!is_other("/")); - } - - // directory_iterator_test -----------------------------------------------// - - void directory_iterator_test() - { - cout << "directory_iterator_test..." << endl; - - directory_iterator end; - - directory_iterator it("."); - - CHECK(!it->path().empty()); - - if (is_regular_file(it->status())) - { - CHECK(is_regular_file(it->symlink_status())); - CHECK(!is_directory(it->status())); - CHECK(!is_symlink(it->status())); - CHECK(!is_directory(it->symlink_status())); - CHECK(!is_symlink(it->symlink_status())); - } - else - { - CHECK(is_directory(it->status())); - CHECK(is_directory(it->symlink_status())); - CHECK(!is_regular_file(it->status())); - CHECK(!is_regular_file(it->symlink_status())); - CHECK(!is_symlink(it->status())); - CHECK(!is_symlink(it->symlink_status())); - } - - for (; it != end; ++it) - { -// cout << " " << it->path().string() << "\n"; - } - - cout << "directory_iterator_test complete" << endl; - } - - // operations_test -------------------------------------------------------// - - void operations_test() - { - cout << "operations test..." << endl; - - error_code ec; - - CHECK(!create_directory("/", ec)); - - CHECK(!boost::filesystem::remove("no-such-file-or-directory")); - CHECK(!remove_all("no-such-file-or-directory")); - - space_info info = space("/"); - - CHECK(info.available <= info.capacity); - - CHECK(equivalent("/", "/")); - CHECK(!equivalent("/", ".")); - - std::time_t ft = last_write_time("."); - ft = -1; - last_write_time(".", ft, ec); - } - - // directory_entry_test ------------------------------------------------------------// - - void directory_entry_test() - { - cout << "directory_entry test..." << endl; - - directory_entry de("foo.bar", - file_status(regular_file, owner_all), file_status(directory_file, group_all)); - - CHECK(de.path() == "foo.bar"); - CHECK(de.status() == file_status(regular_file, owner_all)); - CHECK(de.symlink_status() == file_status(directory_file, group_all)); - CHECK(de < directory_entry("goo.bar")); - CHECK(de == directory_entry("foo.bar")); - CHECK(de != directory_entry("goo.bar")); - de.replace_filename("bar.foo"); - CHECK(de.path() == "bar.foo"); - } - - // directory_entry_overload_test ---------------------------------------------------// - - void directory_entry_overload_test() - { - cout << "directory_entry overload test..." << endl; - - directory_iterator it("."); - path p(*it); - } - - // error_handling_test -------------------------------------------------------------// - - void error_handling_test() - { - cout << "error handling test..." << endl; - - bool threw(false); - try - { - file_size("no-such-file"); - } - catch (const boost::filesystem::filesystem_error & ex) - { - threw = true; - cout << "\nas expected, attempt to get size of non-existent file threw a filesystem_error\n" - "what() returns " << ex.what() << "\n"; - } - catch (...) - { - cout << "\nunexpected exception type caught" << endl; - } - - CHECK(threw); - - error_code ec; - CHECK(!create_directory("/", ec)); - } - -} // unnamed namespace - -//--------------------------------------------------------------------------------------// -// // -// main // -// // -//--------------------------------------------------------------------------------------// - -int cpp_main(int, char*[]) -{ -// document state of critical macros -#ifdef BOOST_POSIX_API - cout << "BOOST_POSIX_API is defined\n"; -#endif -#ifdef BOOST_WINDOWS_API - cout << "BOOST_WINDOWS_API is defined\n"; -#endif - cout << "BOOST_FILESYSTEM_DECL" << BOOST_STRINGIZE(=BOOST_FILESYSTEM_DECL) << "\n"; - cout << "BOOST_SYMBOL_VISIBLE" << BOOST_STRINGIZE(=BOOST_SYMBOL_VISIBLE) << "\n"; - - cout << "current_path() is " << current_path().string() << endl; - - file_status_test(); - query_test(); - directory_iterator_test(); - operations_test(); - directory_entry_test(); - directory_entry_overload_test(); - error_handling_test(); - - cout << unique_path() << endl; - cout << unique_path("foo-%%%%%-%%%%%-bar") << endl; - - return ::boost::report_errors(); -} diff --git a/src/third_party/boost/libs/filesystem/v3/test/path_test.cpp b/src/third_party/boost/libs/filesystem/v3/test/path_test.cpp deleted file mode 100644 index c3e64a73c30..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/path_test.cpp +++ /dev/null @@ -1,1811 +0,0 @@ -// path_test program -----------------------------------------------------------------// - -// Copyright Beman Dawes 2002, 2008 -// 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. - -//--------------------------------------------------------------------------------------// -// // -// Caution // -// // -// The class path relational operators (==, !=, <, etc.) on Windows treat slash and // -// backslash as equal. Thus any tests on Windows where the difference between slash // -// and backslash is significant should compare strings rather than paths. // -// // -// BOOST_TEST(path == path) // '\\' and '/' are equal // -// BOOST_TEST(path == convertable to string) // '\\' and '/' are equal // -// PATH_TEST_EQ(path, path) // '\\' and '/' are equal // -// // -// BOOST_TEST(path.string() == path.string()) // '\\' and '/' are not equal // -// BOOST_TEST(path.string() == // -// convertable to string) // '\\' and '/' are not equal // -// PATH_TEST_EQ(path.string(), // -// convertable to string) // '\\' and '/' are not equal // -// // -// The last of these is often what is needed, so the PATH_TEST_EQ macro is provided. // -// It converts its first argument to a path, and then performs a .string() on it, // -// eliminating much boilerplate .string() or even path(...).string() code. // -// // -// PATH_TEST_EQ(path, convertable to string) // '\\' and '/' are not equal // -// // -//--------------------------------------------------------------------------------------// - -#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 -#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> - -#ifdef BOOST_WINDOWS_API -# define BOOST_DIR_SEP "\\" -#else -# define BOOST_DIR_SEP "/" -#endif - -#define PATH_TEST_EQ(a, b) check(a, b, __FILE__, __LINE__) - -namespace -{ - std::string platform(BOOST_PLATFORM); - - void check(const fs::path & source, - const std::string & expected, const char* file, int line) - { - if (source.string() == expected) - return; - - std::cout << file - << '(' << line << "): source: \"" << source.string() - << "\" != expected: \"" << expected - << "\"" << std::endl; - - ++::boost::detail::test_errors(); - } - - path p1("fe/fi/fo/fum"); - path p2(p1); - path p3; - path p4("foobar"); - path p5; - - // exception_tests -----------------------------------------------------------------// - - void exception_tests() - { - std::cout << "exception_tests..." << std::endl; - const std::string str_1("string-1"); - boost::system::error_code ec(12345, boost::system::system_category()); - try { 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 { 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() == "p1"); - BOOST_TEST(ex.path2() == "p2"); - } - } - - // overload_tests ------------------------------------------------------------------// - - // These verify various overloads don't cause compiler errors - // They pre-date operations_unit_test.cpp - - void overload_tests() - { - std::cout << "overload_tests..." << std::endl; - - 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"); - } - - // iterator_tests ------------------------------------------------------------------// - - void iterator_tests() - { - std::cout << "iterator_tests..." << std::endl; - - 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->string() == "/"); - BOOST_TEST(++itr == itr_ck.end()); - BOOST_TEST((--itr)->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())->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->string() == "/"); - BOOST_TEST(*++itr == std::string("foo")); - BOOST_TEST(*++itr == std::string("bar")); - BOOST_TEST(++itr == itr_ck.end()); - PATH_TEST_EQ(*--itr, "bar"); - PATH_TEST_EQ(*--itr, "foo"); - PATH_TEST_EQ(*--itr, "/"); - - itr_ck = "../f"; // previously failed due to short name bug - itr = itr_ck.begin(); - PATH_TEST_EQ(itr->string(), ".."); - PATH_TEST_EQ(*++itr, "f"); - BOOST_TEST(++itr == itr_ck.end()); - PATH_TEST_EQ(*--itr, "f"); - PATH_TEST_EQ(*--itr, ".."); - - // POSIX says treat "/foo/bar/" as "/foo/bar/." - itr_ck = "/foo/bar/"; - itr = itr_ck.begin(); - PATH_TEST_EQ(itr->string(), "/"); - PATH_TEST_EQ(*++itr, "foo"); - PATH_TEST_EQ(*++itr, "bar"); - PATH_TEST_EQ(*++itr, "."); - BOOST_TEST(++itr == itr_ck.end()); - PATH_TEST_EQ(*--itr, "."); - PATH_TEST_EQ(*--itr, "bar"); - PATH_TEST_EQ(*--itr, "foo"); - PATH_TEST_EQ(*--itr, "/"); - - // POSIX says treat "/f/b/" as "/f/b/." - itr_ck = "/f/b/"; - itr = itr_ck.begin(); - PATH_TEST_EQ(itr->string(), "/"); - PATH_TEST_EQ(*++itr, "f"); - PATH_TEST_EQ(*++itr, "b"); - PATH_TEST_EQ(*++itr, "."); - BOOST_TEST(++itr == itr_ck.end()); - PATH_TEST_EQ(*--itr, "."); - PATH_TEST_EQ(*--itr, "b"); - PATH_TEST_EQ(*--itr, "f"); - PATH_TEST_EQ(*--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) - PATH_TEST_EQ(itr->string(), "//net"); - BOOST_TEST(++itr == itr_ck.end()); - PATH_TEST_EQ(*--itr, "//net"); - - itr_ck = "//net/"; - itr = itr_ck.begin(); - PATH_TEST_EQ(itr->string(), "//net"); - PATH_TEST_EQ(*++itr, "/"); - BOOST_TEST(++itr == itr_ck.end()); - PATH_TEST_EQ(*--itr, "/"); - PATH_TEST_EQ(*--itr, "//net"); - - itr_ck = "//foo///bar///"; - itr = itr_ck.begin(); - PATH_TEST_EQ(itr->string(), "//foo"); - PATH_TEST_EQ(*++itr, "/"); - PATH_TEST_EQ(*++itr, "bar"); - PATH_TEST_EQ(*++itr, "."); - BOOST_TEST(++itr == itr_ck.end()); - PATH_TEST_EQ(*--itr, "."); - PATH_TEST_EQ(*--itr, "bar"); - PATH_TEST_EQ(*--itr, "/"); - PATH_TEST_EQ(*--itr, "//foo"); - - itr_ck = "///foo///bar///"; - itr = itr_ck.begin(); - // three or more leading slashes are to be treated as a single slash - PATH_TEST_EQ(itr->string(), "/"); - PATH_TEST_EQ(*++itr, "foo"); - PATH_TEST_EQ(*++itr, "bar"); - PATH_TEST_EQ(*++itr, "."); - BOOST_TEST(++itr == itr_ck.end()); - PATH_TEST_EQ(*--itr, "."); - PATH_TEST_EQ(*--itr, "bar"); - PATH_TEST_EQ(*--itr, "foo"); - PATH_TEST_EQ(*--itr, "/"); - - if (platform == "Windows") - { - itr_ck = "c:/"; - itr = itr_ck.begin(); - PATH_TEST_EQ(itr->string(), "c:"); - PATH_TEST_EQ(*++itr, std::string("/")); - BOOST_TEST(++itr == itr_ck.end()); - PATH_TEST_EQ(*--itr, "/"); - PATH_TEST_EQ(*--itr, "c:"); - - itr_ck = "c:\\"; - itr = itr_ck.begin(); - PATH_TEST_EQ(itr->string(), "c:"); - PATH_TEST_EQ(*++itr, "/"); // test that iteration returns generic format - BOOST_TEST(++itr == itr_ck.end()); - PATH_TEST_EQ(*--itr, "/"); // test that iteration returns generic format - PATH_TEST_EQ(*--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)->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("\\")); - 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 = "\\\\\\foo\\\\\\bar\\\\\\"; - itr = itr_ck.begin(); - // three or more leading slashes are to be treated as a single slash - PATH_TEST_EQ(itr->string(), "/"); - PATH_TEST_EQ(*++itr, "foo"); - PATH_TEST_EQ(*++itr, "bar"); - PATH_TEST_EQ(*++itr, "."); - BOOST_TEST(++itr == itr_ck.end()); - PATH_TEST_EQ(*--itr, "."); - PATH_TEST_EQ(*--itr, "bar"); - PATH_TEST_EQ(*--itr, "foo"); - PATH_TEST_EQ(*--itr, "/"); - - 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:")); - - itr_ck = path("c:"); - BOOST_TEST(*itr_ck.begin() == std::string("c:")); - BOOST_TEST(next(itr_ck.begin()) == itr_ck.end()); - BOOST_TEST(prior(itr_ck.end()) == itr_ck.begin()); - BOOST_TEST(*prior(itr_ck.end()) == std::string("c:")); - - itr_ck = path("c:/"); - BOOST_TEST(*itr_ck.begin() == std::string("c:")); - BOOST_TEST(*next(itr_ck.begin()) == std::string("/")); - BOOST_TEST(next(next(itr_ck.begin())) == itr_ck.end()); - BOOST_TEST(prior(prior(itr_ck.end())) == itr_ck.begin()); - BOOST_TEST(*prior(itr_ck.end()) == std::string("/")); - BOOST_TEST(*prior(prior(itr_ck.end())) == std::string("c:")); - - itr_ck = path("c:foo"); - BOOST_TEST(*itr_ck.begin() == std::string("c:")); - BOOST_TEST(*next(itr_ck.begin()) == std::string("foo")); - BOOST_TEST(next(next(itr_ck.begin())) == itr_ck.end()); - BOOST_TEST(prior(prior(itr_ck.end())) == itr_ck.begin()); - BOOST_TEST(*prior(itr_ck.end()) == std::string("foo")); - BOOST_TEST(*prior(prior(itr_ck.end())) == std::string("c:")); - - itr_ck = path("c:/foo"); - BOOST_TEST(*itr_ck.begin() == std::string("c:")); - BOOST_TEST(*next(itr_ck.begin()) == std::string("/")); - BOOST_TEST(*next(next(itr_ck.begin())) == std::string("foo")); - BOOST_TEST(next(next(next(itr_ck.begin()))) == itr_ck.end()); - BOOST_TEST(prior(prior(prior(itr_ck.end()))) == itr_ck.begin()); - BOOST_TEST(*prior(itr_ck.end()) == std::string("foo")); - BOOST_TEST(*prior(prior(itr_ck.end())) == std::string("/")); - BOOST_TEST(*prior(prior(prior(itr_ck.end()))) == std::string("c:")); - - itr_ck = path("//net"); - BOOST_TEST(*itr_ck.begin() == std::string("//net")); - BOOST_TEST(next(itr_ck.begin()) == itr_ck.end()); - BOOST_TEST(prior(itr_ck.end()) == itr_ck.begin()); - BOOST_TEST(*prior(itr_ck.end()) == std::string("//net")); - - itr_ck = path("//net/"); - PATH_TEST_EQ(itr_ck.begin()->string(), "//net"); - PATH_TEST_EQ(next(itr_ck.begin())->string(), "/"); - BOOST_TEST(next(next(itr_ck.begin())) == itr_ck.end()); - BOOST_TEST(prior(prior(itr_ck.end())) == itr_ck.begin()); - PATH_TEST_EQ(prior(itr_ck.end())->string(), "/"); - PATH_TEST_EQ(prior(prior(itr_ck.end()))->string(), "//net"); - - itr_ck = path("//net/foo"); - BOOST_TEST(*itr_ck.begin() == std::string("//net")); - BOOST_TEST(*next(itr_ck.begin()) == std::string("/")); - BOOST_TEST(*next(next(itr_ck.begin())) == std::string("foo")); - BOOST_TEST(next(next(next(itr_ck.begin()))) == itr_ck.end()); - BOOST_TEST(prior(prior(prior(itr_ck.end()))) == itr_ck.begin()); - BOOST_TEST(*prior(itr_ck.end()) == std::string("foo")); - BOOST_TEST(*prior(prior(itr_ck.end())) == std::string("/")); - BOOST_TEST(*prior(prior(prior(itr_ck.end()))) == std::string("//net")); - - itr_ck = path("prn:"); - BOOST_TEST(*itr_ck.begin() == std::string("prn:")); - BOOST_TEST(next(itr_ck.begin()) == itr_ck.end()); - BOOST_TEST(prior(itr_ck.end()) == itr_ck.begin()); - BOOST_TEST(*prior(itr_ck.end()) == std::string("prn:")); - } - else - { - itr_ck = "///"; - itr = itr_ck.begin(); - PATH_TEST_EQ(itr->string(), "/"); - BOOST_TEST(++itr == itr_ck.end()); - } - } - - // non_member_tests ----------------------------------------------------------------// - - void non_member_tests() - { - std::cout << "non_member_tests..." << std::endl; - - // 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 / - PATH_TEST_EQ(path("") / ".", "."); - PATH_TEST_EQ(path("") / "..", ".."); - if (platform == "Windows") - { - BOOST_TEST(path("foo\\bar") == "foo/bar"); - BOOST_TEST((b / a).native() == path("b\\a").native()); - BOOST_TEST((bs / a).native() == path("b\\a").native()); - BOOST_TEST((bcs / a).native() == path("b\\a").native()); - BOOST_TEST((b / as).native() == path("b\\a").native()); - BOOST_TEST((b / acs).native() == path("b\\a").native()); - PATH_TEST_EQ(path("a") / "b", "a\\b"); - PATH_TEST_EQ(path("..") / "", ".."); - PATH_TEST_EQ(path("foo") / path("bar"), "foo\\bar"); // path arg - PATH_TEST_EQ(path("foo") / "bar", "foo\\bar"); // const char* arg - PATH_TEST_EQ(path("foo") / path("woo/bar").filename(), "foo\\bar"); // const std::string & arg - PATH_TEST_EQ("foo" / path("bar"), "foo\\bar"); - PATH_TEST_EQ(path("..") / ".." , "..\\.."); - PATH_TEST_EQ(path("/") / ".." , "/.."); - PATH_TEST_EQ(path("/..") / ".." , "/..\\.."); - PATH_TEST_EQ(path("..") / "foo" , "..\\foo"); - PATH_TEST_EQ(path("foo") / ".." , "foo\\.."); - PATH_TEST_EQ(path("..") / "f" , "..\\f"); - PATH_TEST_EQ(path("/..") / "f" , "/..\\f"); - PATH_TEST_EQ(path("f") / ".." , "f\\.."); - PATH_TEST_EQ(path("foo") / ".." / ".." , "foo\\..\\.."); - PATH_TEST_EQ(path("foo") / ".." / ".." / ".." , "foo\\..\\..\\.."); - PATH_TEST_EQ(path("f") / ".." / "b" , "f\\..\\b"); - PATH_TEST_EQ(path("foo") / ".." / "bar" , "foo\\..\\bar"); - PATH_TEST_EQ(path("foo") / "bar" / ".." , "foo\\bar\\.."); - PATH_TEST_EQ(path("foo") / "bar" / ".." / "..", "foo\\bar\\..\\.."); - PATH_TEST_EQ(path("foo") / "bar" / ".." / "blah", "foo\\bar\\..\\blah"); - PATH_TEST_EQ(path("f") / "b" / ".." , "f\\b\\.."); - PATH_TEST_EQ(path("f") / "b" / ".." / "a", "f\\b\\..\\a"); - PATH_TEST_EQ(path("foo") / "bar" / "blah" / ".." / "..", "foo\\bar\\blah\\..\\.."); - PATH_TEST_EQ(path("foo") / "bar" / "blah" / ".." / ".." / "bletch", "foo\\bar\\blah\\..\\..\\bletch"); - - PATH_TEST_EQ(path(".") / "foo", ".\\foo"); - PATH_TEST_EQ(path(".") / "..", ".\\.."); - PATH_TEST_EQ(path("foo") / ".", "foo\\."); - PATH_TEST_EQ(path("..") / ".", "..\\."); - PATH_TEST_EQ(path(".") / ".", ".\\."); - PATH_TEST_EQ(path(".") / "." / ".", ".\\.\\."); - PATH_TEST_EQ(path(".") / "foo" / ".", ".\\foo\\."); - PATH_TEST_EQ(path("foo") / "." / "bar", "foo\\.\\bar"); - PATH_TEST_EQ(path("foo") / "." / ".", "foo\\.\\."); - PATH_TEST_EQ(path("foo") / "." / "..", "foo\\.\\.."); - PATH_TEST_EQ(path(".") / "." / "..", ".\\.\\.."); - PATH_TEST_EQ(path(".") / ".." / ".", ".\\..\\."); - PATH_TEST_EQ(path("..") / "." / ".", "..\\.\\."); - } - else // POSIX - { - PATH_TEST_EQ(b / a, "b/a"); - PATH_TEST_EQ(bs / a, "b/a"); - PATH_TEST_EQ(bcs / a, "b/a"); - PATH_TEST_EQ(b / as, "b/a"); - PATH_TEST_EQ(b / acs, "b/a"); - PATH_TEST_EQ(path("a") / "b", "a/b"); - PATH_TEST_EQ(path("..") / "", ".."); - PATH_TEST_EQ(path("") / "..", ".."); - PATH_TEST_EQ(path("foo") / path("bar"), "foo/bar"); // path arg - PATH_TEST_EQ(path("foo") / "bar", "foo/bar"); // const char* arg - PATH_TEST_EQ(path("foo") / path("woo/bar").filename(), "foo/bar"); // const std::string & arg - PATH_TEST_EQ("foo" / path("bar"), "foo/bar"); - PATH_TEST_EQ(path("..") / ".." , "../.."); - PATH_TEST_EQ(path("/") / ".." , "/.."); - PATH_TEST_EQ(path("/..") / ".." , "/../.."); - PATH_TEST_EQ(path("..") / "foo" , "../foo"); - PATH_TEST_EQ(path("foo") / ".." , "foo/.."); - PATH_TEST_EQ(path("..") / "f" , "../f"); - PATH_TEST_EQ(path("/..") / "f" , "/../f"); - PATH_TEST_EQ(path("f") / ".." , "f/.."); - PATH_TEST_EQ(path("foo") / ".." / ".." , "foo/../.."); - PATH_TEST_EQ(path("foo") / ".." / ".." / ".." , "foo/../../.."); - PATH_TEST_EQ(path("f") / ".." / "b" , "f/../b"); - PATH_TEST_EQ(path("foo") / ".." / "bar" , "foo/../bar"); - PATH_TEST_EQ(path("foo") / "bar" / ".." , "foo/bar/.."); - PATH_TEST_EQ(path("foo") / "bar" / ".." / "..", "foo/bar/../.."); - PATH_TEST_EQ(path("foo") / "bar" / ".." / "blah", "foo/bar/../blah"); - PATH_TEST_EQ(path("f") / "b" / ".." , "f/b/.."); - PATH_TEST_EQ(path("f") / "b" / ".." / "a", "f/b/../a"); - PATH_TEST_EQ(path("foo") / "bar" / "blah" / ".." / "..", "foo/bar/blah/../.."); - PATH_TEST_EQ(path("foo") / "bar" / "blah" / ".." / ".." / "bletch", "foo/bar/blah/../../bletch"); - - PATH_TEST_EQ(path(".") / "foo", "./foo"); - PATH_TEST_EQ(path(".") / "..", "./.."); - PATH_TEST_EQ(path("foo") / ".", "foo/."); - PATH_TEST_EQ(path("..") / ".", "../."); - PATH_TEST_EQ(path(".") / ".", "./."); - PATH_TEST_EQ(path(".") / "." / ".", "././."); - PATH_TEST_EQ(path(".") / "foo" / ".", "./foo/."); - PATH_TEST_EQ(path("foo") / "." / "bar", "foo/./bar"); - PATH_TEST_EQ(path("foo") / "." / ".", "foo/./."); - PATH_TEST_EQ(path("foo") / "." / "..", "foo/./.."); - PATH_TEST_EQ(path(".") / "." / "..", "././.."); - PATH_TEST_EQ(path(".") / ".." / ".", "./../."); - PATH_TEST_EQ(path("..") / "." / ".", ".././."); - } - - // 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(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); - - // operator == and != are implemented separately, so test separately - - path p1("fe/fi/fo/fum"); - path p2(p1); - path p3("fe/fi/fo/fumm"); - 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); - - if (platform == "Windows") - { - std::cout << "Windows relational tests..." << std::endl; - path p10 ("c:\\file"); - path p11 ("c:/file"); - // check each overload - BOOST_TEST(p10.generic_string() == p11.generic_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 == L"c:\\file"); - BOOST_TEST(p10 == L"c:/file"); - BOOST_TEST(p11 == L"c:\\file"); - BOOST_TEST(p11 == L"c:/file"); - BOOST_TEST(L"c:\\file" == p10); - BOOST_TEST(L"c:/file" == p10); - BOOST_TEST(L"c:\\file" == p11); - BOOST_TEST(L"c:/file" == p11); - - BOOST_TEST(!(p10.generic_string() != p11.generic_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 != L"c:\\file")); - BOOST_TEST(!(p10 != L"c:/file")); - BOOST_TEST(!(p11 != L"c:\\file")); - BOOST_TEST(!(p11 != L"c:/file")); - BOOST_TEST(!(L"c:\\file" != p10)); - BOOST_TEST(!(L"c:/file" != p10)); - BOOST_TEST(!(L"c:\\file" != p11)); - BOOST_TEST(!(L"c:/file" != p11)); - - 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 < L"c:\\file")); - BOOST_TEST(!(p10 < L"c:/file")); - BOOST_TEST(!(p11 < L"c:\\file")); - BOOST_TEST(!(p11 < L"c:/file")); - BOOST_TEST(!(L"c:\\file" < p10)); - BOOST_TEST(!(L"c:/file" < p10)); - BOOST_TEST(!(L"c:\\file" < p11)); - BOOST_TEST(!(L"c:/file" < p11)); - - BOOST_TEST(!(p10.generic_string() > p11.generic_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 > L"c:\\file")); - BOOST_TEST(!(p10 > L"c:/file")); - BOOST_TEST(!(p11 > L"c:\\file")); - BOOST_TEST(!(p11 > L"c:/file")); - BOOST_TEST(!(L"c:\\file" > p10)); - BOOST_TEST(!(L"c:/file" > p10)); - BOOST_TEST(!(L"c:\\file" > p11)); - BOOST_TEST(!(L"c:/file" > p11)); - } - } - - // query_and_decomposition_tests ---------------------------------------------------// - // - // remove_filename() is also tested here, because its specification depends on - // a decomposition function. - - void query_and_decomposition_tests() - { - std::cout << "query_and_decomposition_tests..." << std::endl; - - // stem() tests not otherwise covered - 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"); - - // extension() tests not otherwise covered - 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("a/").extension() == ""); - - // main q & d test sequence - path p; - path q; - - p = q = ""; - BOOST_TEST(p.relative_path().string() == ""); - BOOST_TEST(p.parent_path().string() == ""); - PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); - BOOST_TEST(p.filename() == ""); - BOOST_TEST(p.stem() == ""); - BOOST_TEST(p.extension() == ""); - 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_stem()); - BOOST_TEST(!p.has_extension()); - BOOST_TEST(!p.has_parent_path()); - BOOST_TEST(!p.is_absolute()); - - p = q = "/"; - BOOST_TEST(p.relative_path().string() == ""); - BOOST_TEST(p.parent_path().string() == ""); - PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); - BOOST_TEST(p.filename() == "/"); - BOOST_TEST(p.stem() == "/"); - BOOST_TEST(p.extension() == ""); - 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_stem()); - BOOST_TEST(!p.has_extension()); - BOOST_TEST(!p.has_parent_path()); - if (platform == "POSIX") - BOOST_TEST(p.is_absolute()); - else - BOOST_TEST(!p.is_absolute()); - - p = q = "//"; - PATH_TEST_EQ(p.relative_path().string(), ""); - PATH_TEST_EQ(p.parent_path().string(), ""); - PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); - PATH_TEST_EQ(p.filename(), "//"); - PATH_TEST_EQ(p.stem(), "//"); - PATH_TEST_EQ(p.extension(), ""); - PATH_TEST_EQ(p.root_name(), "//"); - PATH_TEST_EQ(p.root_directory(), ""); - PATH_TEST_EQ(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_stem()); - BOOST_TEST(!p.has_extension()); - BOOST_TEST(!p.has_parent_path()); - BOOST_TEST(!p.is_absolute()); - - p = q = "///"; - PATH_TEST_EQ(p.relative_path().string(), ""); - PATH_TEST_EQ(p.parent_path().string(), ""); - PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); - PATH_TEST_EQ(p.filename(), "/"); - PATH_TEST_EQ(p.stem(), "/"); - PATH_TEST_EQ(p.extension(), ""); - PATH_TEST_EQ(p.root_name(), ""); - PATH_TEST_EQ(p.root_directory(), "/"); - PATH_TEST_EQ(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_stem()); - BOOST_TEST(!p.has_extension()); - BOOST_TEST(!p.has_parent_path()); - if (platform == "POSIX") - BOOST_TEST(p.is_absolute()); - else - BOOST_TEST(!p.is_absolute()); - - p = q = "."; - BOOST_TEST(p.relative_path().string() == "."); - BOOST_TEST(p.parent_path().string() == ""); - PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); - BOOST_TEST(p.filename() == "."); - BOOST_TEST(p.stem() == "."); - BOOST_TEST(p.extension() == ""); - 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_stem()); - BOOST_TEST(!p.has_extension()); - BOOST_TEST(!p.has_parent_path()); - BOOST_TEST(!p.is_absolute()); - - p = q = ".."; - BOOST_TEST(p.relative_path().string() == ".."); - BOOST_TEST(p.parent_path().string() == ""); - PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); - BOOST_TEST(p.filename() == ".."); - BOOST_TEST(p.stem() == ".."); - BOOST_TEST(p.extension() == ""); - 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_stem()); - BOOST_TEST(!p.has_extension()); - BOOST_TEST(!p.has_parent_path()); - BOOST_TEST(!p.is_absolute()); - - p = q = "foo"; - BOOST_TEST(p.relative_path().string() == "foo"); - BOOST_TEST(p.parent_path().string() == ""); - PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); - BOOST_TEST(p.filename() == "foo"); - BOOST_TEST(p.stem() == "foo"); - BOOST_TEST(p.extension() == ""); - 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_stem()); - BOOST_TEST(!p.has_extension()); - BOOST_TEST(!p.has_parent_path()); - BOOST_TEST(!p.is_absolute()); - - p = q = "/foo"; - PATH_TEST_EQ(p.relative_path().string(), "foo"); - PATH_TEST_EQ(p.parent_path().string(), "/"); - PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); - PATH_TEST_EQ(p.filename(), "foo"); - PATH_TEST_EQ(p.stem(), "foo"); - PATH_TEST_EQ(p.extension(), ""); - PATH_TEST_EQ(p.root_name(), ""); - PATH_TEST_EQ(p.root_directory(), "/"); - PATH_TEST_EQ(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_stem()); - BOOST_TEST(!p.has_extension()); - BOOST_TEST(p.has_parent_path()); - if (platform == "POSIX") - BOOST_TEST(p.is_absolute()); - else - BOOST_TEST(!p.is_absolute()); - - p = q = "/foo/"; - PATH_TEST_EQ(p.relative_path().string(), "foo/"); - PATH_TEST_EQ(p.parent_path().string(), "/foo"); - PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); - PATH_TEST_EQ(p.filename(), "."); - PATH_TEST_EQ(p.stem(), "."); - PATH_TEST_EQ(p.extension(), ""); - PATH_TEST_EQ(p.root_name(), ""); - PATH_TEST_EQ(p.root_directory(), "/"); - PATH_TEST_EQ(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_stem()); - BOOST_TEST(!p.has_extension()); - BOOST_TEST(p.has_parent_path()); - if (platform == "POSIX") - BOOST_TEST(p.is_absolute()); - else - BOOST_TEST(!p.is_absolute()); - - p = q = "///foo"; - PATH_TEST_EQ(p.relative_path().string(), "foo"); - PATH_TEST_EQ(p.parent_path().string(), "/"); - PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); - PATH_TEST_EQ(p.filename(), "foo"); - PATH_TEST_EQ(p.root_name(), ""); - PATH_TEST_EQ(p.root_directory(), "/"); - PATH_TEST_EQ(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_absolute()); - else - BOOST_TEST(!p.is_absolute()); - - p = q = "foo/bar"; - BOOST_TEST(p.relative_path().string() == "foo/bar"); - BOOST_TEST(p.parent_path().string() == "foo"); - PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); - BOOST_TEST(p.filename() == "bar"); - BOOST_TEST(p.stem() == "bar"); - BOOST_TEST(p.extension() == ""); - 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_stem()); - BOOST_TEST(!p.has_extension()); - BOOST_TEST(p.has_parent_path()); - BOOST_TEST(!p.is_absolute()); - - p = q = "../foo"; - BOOST_TEST(p.relative_path().string() == "../foo"); - BOOST_TEST(p.parent_path().string() == ".."); - PATH_TEST_EQ(q.remove_filename().string(), 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_absolute()); - - p = q = "..///foo"; - PATH_TEST_EQ(p.relative_path().string(), "..///foo"); - PATH_TEST_EQ(p.parent_path().string(), ".."); - PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); - PATH_TEST_EQ(p.filename(), "foo"); - PATH_TEST_EQ(p.root_name(), ""); - PATH_TEST_EQ(p.root_directory(), ""); - PATH_TEST_EQ(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_absolute()); - - p = q = "/foo/bar"; - BOOST_TEST(p.relative_path().string() == "foo/bar"); - BOOST_TEST(p.parent_path().string() == "/foo"); - PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); - 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_absolute()); - else - BOOST_TEST(!p.is_absolute()); - - // Both POSIX and Windows allow two leading slashs - // (POSIX meaning is implementation defined) - PATH_TEST_EQ(path("//resource"), "//resource"); - PATH_TEST_EQ(path("//resource/"), "//resource/"); - PATH_TEST_EQ(path("//resource/foo"), "//resource/foo"); - - p = q = path("//net"); - PATH_TEST_EQ(p.string(), "//net"); - PATH_TEST_EQ(p.relative_path().string(), ""); - PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); - PATH_TEST_EQ(p.parent_path().string(), ""); - PATH_TEST_EQ(p.filename(), "//net"); - PATH_TEST_EQ(p.root_name(), "//net"); - PATH_TEST_EQ(p.root_directory(), ""); - PATH_TEST_EQ(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_absolute()); - - p = q = path("//net/"); - BOOST_TEST(p.relative_path().string() == ""); - BOOST_TEST(p.parent_path().string() == "//net"); - PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); - 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_absolute()); - - p = q = path("//net/foo"); - BOOST_TEST(p.relative_path().string() == "foo"); - BOOST_TEST(p.parent_path().string() == "//net/"); - PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); - 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_absolute()); - - p = q = path("//net///foo"); - PATH_TEST_EQ(p.relative_path().string(), "foo"); - PATH_TEST_EQ(p.parent_path().string(), "//net/"); - PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); - PATH_TEST_EQ(p.filename(), "foo"); - PATH_TEST_EQ(p.root_name(), "//net"); - PATH_TEST_EQ(p.root_directory(), "/"); - PATH_TEST_EQ(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_absolute()); - - if (platform == "Windows") - { - - //p = q = L"\\\\?\\"; - //BOOST_TEST(p.relative_path().string() == ""); - //BOOST_TEST(p.parent_path().string() == ""); - //PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); - //BOOST_TEST(p.filename() == ""); - //BOOST_TEST(p.stem() == ""); - //BOOST_TEST(p.extension() == ""); - //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_stem()); - //BOOST_TEST(!p.has_extension()); - //BOOST_TEST(!p.has_parent_path()); - //BOOST_TEST(!p.is_absolute()); - - p = q = path("c:"); - BOOST_TEST(p.relative_path().string() == ""); - BOOST_TEST(p.parent_path().string() == ""); - PATH_TEST_EQ(q.remove_filename().string(), 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_absolute()); - - //p = q = path(L"\\\\?\\c:"); - //BOOST_TEST(p.relative_path().string() == ""); - //BOOST_TEST(p.parent_path().string() == ""); - //PATH_TEST_EQ(q.remove_filename().string(), 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_absolute()); - - p = q = path("c:foo"); - BOOST_TEST(p.relative_path().string() == "foo"); - BOOST_TEST(p.parent_path().string() == "c:"); - PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); - 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_absolute()); - - //p = q = path(L"\\\\?\\c:foo"); - //BOOST_TEST(p.relative_path().string() == "foo"); - //BOOST_TEST(p.parent_path().string() == "c:"); - //PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); - //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_absolute()); - - p = q = path("c:/"); - BOOST_TEST(p.relative_path().string() == ""); - BOOST_TEST(p.parent_path().string() == "c:"); - PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); - 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_absolute()); - - p = q = path("c:.."); - BOOST_TEST(p.relative_path().string() == ".."); - BOOST_TEST(p.parent_path().string() == "c:"); - PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); - 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_absolute()); - - p = q = path("c:/foo"); - PATH_TEST_EQ(p.relative_path().string(), "foo"); - PATH_TEST_EQ(p.parent_path().string(), "c:/"); - PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); - PATH_TEST_EQ(p.filename(), "foo"); - PATH_TEST_EQ(p.root_name(), "c:"); - PATH_TEST_EQ(p.root_directory(), "/"); - PATH_TEST_EQ(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_absolute()); - - p = q = path("c://foo"); - PATH_TEST_EQ(p.relative_path().string(), "foo"); - PATH_TEST_EQ(p.parent_path().string(), "c:/"); - PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); - PATH_TEST_EQ(p.filename(), "foo"); - PATH_TEST_EQ(p.root_name(), "c:"); - PATH_TEST_EQ(p.root_directory(), "/"); - PATH_TEST_EQ(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_absolute()); - - p = q = path("c:\\foo\\bar"); - PATH_TEST_EQ(p.relative_path().string(), "foo\\bar"); - PATH_TEST_EQ(p.parent_path().string(), "c:\\foo"); - PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); - PATH_TEST_EQ(p.filename(), "bar"); - PATH_TEST_EQ(p.root_name(), "c:"); - PATH_TEST_EQ(p.root_directory(), "\\"); - PATH_TEST_EQ(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_absolute()); - - p = q = path("prn:"); - BOOST_TEST(p.relative_path().string() == ""); - BOOST_TEST(p.parent_path().string() == ""); - PATH_TEST_EQ(q.remove_filename().string(), 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_absolute()); - - p = q = path("\\\\net\\\\\\foo"); - PATH_TEST_EQ(p.relative_path().string(), "foo"); - PATH_TEST_EQ(p.parent_path().string(), "\\\\net\\"); - PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string()); - PATH_TEST_EQ(p.filename(), "foo"); - PATH_TEST_EQ(p.root_name(), "\\\\net"); - PATH_TEST_EQ(p.root_directory(), "\\"); - PATH_TEST_EQ(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_absolute()); - } // Windows - - else - { // POSIX - PATH_TEST_EQ(path("/foo/bar/"), "/foo/bar/"); - PATH_TEST_EQ(path("//foo//bar//"), "//foo//bar//"); - PATH_TEST_EQ(path("///foo///bar///"), "///foo///bar///"); - - p = path("/usr/local/bin:/usr/bin:/bin"); - BOOST_TEST(p.string() == "/usr/local/bin:/usr/bin:/bin"); - } // POSIX - } - - // composition_tests ----------------------------------------------------------------// - - void composition_tests() - { - std::cout << "composition_tests..." << std::endl; - - } - - // construction_tests ---------------------------------------------------------------// - - void construction_tests() - { - std::cout << "construction_tests..." << std::endl; - - PATH_TEST_EQ("", ""); - - PATH_TEST_EQ("foo", "foo"); - PATH_TEST_EQ("f", "f"); - - PATH_TEST_EQ("foo/", "foo/"); - PATH_TEST_EQ("f/", "f/"); - PATH_TEST_EQ("foo/..", "foo/.."); - PATH_TEST_EQ("foo/../", "foo/../"); - PATH_TEST_EQ("foo/bar/../..", "foo/bar/../.."); - PATH_TEST_EQ("foo/bar/../../", "foo/bar/../../"); - PATH_TEST_EQ("/", "/"); - PATH_TEST_EQ("/f", "/f"); - - PATH_TEST_EQ("/foo", "/foo"); - PATH_TEST_EQ("/foo/bar/", "/foo/bar/"); - PATH_TEST_EQ("//foo//bar//", "//foo//bar//"); - PATH_TEST_EQ("///foo///bar///", "///foo///bar///"); - PATH_TEST_EQ("\\/foo\\/bar\\/", "\\/foo\\/bar\\/"); - PATH_TEST_EQ("\\//foo\\//bar\\//", "\\//foo\\//bar\\//"); - - if (platform == "Windows") - { - PATH_TEST_EQ(path("c:") / "foo", "c:foo"); - PATH_TEST_EQ(path("c:") / "/foo", "c:/foo"); - - PATH_TEST_EQ("\\foo\\bar\\", "\\foo\\bar\\"); - PATH_TEST_EQ("\\\\foo\\\\bar\\\\", "\\\\foo\\\\bar\\\\"); - PATH_TEST_EQ("\\\\\\foo\\\\\\bar\\\\\\", "\\\\\\foo\\\\\\bar\\\\\\"); - - PATH_TEST_EQ("\\", "\\"); - PATH_TEST_EQ("\\f", "\\f"); - PATH_TEST_EQ("\\foo", "\\foo"); - PATH_TEST_EQ("foo\\bar", "foo\\bar"); - PATH_TEST_EQ("foo bar", "foo bar"); - PATH_TEST_EQ("c:", "c:"); - PATH_TEST_EQ("c:/", "c:/"); - PATH_TEST_EQ("c:.", "c:."); - PATH_TEST_EQ("c:./foo", "c:./foo"); - PATH_TEST_EQ("c:.\\foo", "c:.\\foo"); - PATH_TEST_EQ("c:..", "c:.."); - PATH_TEST_EQ("c:/.", "c:/."); - PATH_TEST_EQ("c:/..", "c:/.."); - PATH_TEST_EQ("c:/../", "c:/../"); - PATH_TEST_EQ("c:\\..\\", "c:\\..\\"); - PATH_TEST_EQ("c:/../..", "c:/../.."); - PATH_TEST_EQ("c:/../foo", "c:/../foo"); - PATH_TEST_EQ("c:\\..\\foo", "c:\\..\\foo"); - PATH_TEST_EQ("c:../foo", "c:../foo"); - PATH_TEST_EQ("c:..\\foo", "c:..\\foo"); - PATH_TEST_EQ("c:/../../foo", "c:/../../foo"); - PATH_TEST_EQ("c:\\..\\..\\foo", "c:\\..\\..\\foo"); - PATH_TEST_EQ("c:foo/..", "c:foo/.."); - PATH_TEST_EQ("c:/foo/..", "c:/foo/.."); - PATH_TEST_EQ("c:/..foo", "c:/..foo"); - PATH_TEST_EQ("c:foo", "c:foo"); - PATH_TEST_EQ("c:/foo", "c:/foo"); - PATH_TEST_EQ("\\\\netname", "\\\\netname"); - PATH_TEST_EQ("\\\\netname\\", "\\\\netname\\"); - PATH_TEST_EQ("\\\\netname\\foo", "\\\\netname\\foo"); - PATH_TEST_EQ("c:/foo", "c:/foo"); - PATH_TEST_EQ("prn:", "prn:"); - } - else - { - } - - PATH_TEST_EQ("foo/bar", "foo/bar"); - PATH_TEST_EQ("a/b", "a/b"); // probe for length effects - PATH_TEST_EQ("..", ".."); - PATH_TEST_EQ("../..", "../.."); - PATH_TEST_EQ("/..", "/.."); - PATH_TEST_EQ("/../..", "/../.."); - PATH_TEST_EQ("../foo", "../foo"); - PATH_TEST_EQ("foo/..", "foo/.."); - PATH_TEST_EQ("foo/..bar", "foo/..bar"); - PATH_TEST_EQ("../f", "../f"); - PATH_TEST_EQ("/../f", "/../f"); - PATH_TEST_EQ("f/..", "f/.."); - PATH_TEST_EQ("foo/../..", "foo/../.."); - PATH_TEST_EQ("foo/../../..", "foo/../../.."); - PATH_TEST_EQ("foo/../bar", "foo/../bar"); - PATH_TEST_EQ("foo/bar/..", "foo/bar/.."); - PATH_TEST_EQ("foo/bar/../..", "foo/bar/../.."); - PATH_TEST_EQ("foo/bar/../blah", "foo/bar/../blah"); - PATH_TEST_EQ("f/../b", "f/../b"); - PATH_TEST_EQ("f/b/..", "f/b/.."); - PATH_TEST_EQ("f/b/../a", "f/b/../a"); - PATH_TEST_EQ("foo/bar/blah/../..", "foo/bar/blah/../.."); - PATH_TEST_EQ("foo/bar/blah/../../bletch", "foo/bar/blah/../../bletch"); - PATH_TEST_EQ("...", "..."); - PATH_TEST_EQ("....", "...."); - PATH_TEST_EQ("foo/...", "foo/..."); - PATH_TEST_EQ("abc.", "abc."); - PATH_TEST_EQ("abc..", "abc.."); - PATH_TEST_EQ("foo/abc.", "foo/abc."); - PATH_TEST_EQ("foo/abc..", "foo/abc.."); - - PATH_TEST_EQ(".abc", ".abc"); - PATH_TEST_EQ("a.c", "a.c"); - PATH_TEST_EQ("..abc", "..abc"); - PATH_TEST_EQ("a..c", "a..c"); - PATH_TEST_EQ("foo/.abc", "foo/.abc"); - PATH_TEST_EQ("foo/a.c", "foo/a.c"); - PATH_TEST_EQ("foo/..abc", "foo/..abc"); - PATH_TEST_EQ("foo/a..c", "foo/a..c"); - - PATH_TEST_EQ(".", "."); - PATH_TEST_EQ("./foo", "./foo"); - PATH_TEST_EQ("./..", "./.."); - PATH_TEST_EQ("./../foo", "./../foo"); - PATH_TEST_EQ("foo/.", "foo/."); - PATH_TEST_EQ("../.", "../."); - PATH_TEST_EQ("./.", "./."); - PATH_TEST_EQ("././.", "././."); - PATH_TEST_EQ("./foo/.", "./foo/."); - PATH_TEST_EQ("foo/./bar", "foo/./bar"); - PATH_TEST_EQ("foo/./.", "foo/./."); - PATH_TEST_EQ("foo/./..", "foo/./.."); - PATH_TEST_EQ("foo/./../bar", "foo/./../bar"); - PATH_TEST_EQ("foo/../.", "foo/../."); - PATH_TEST_EQ("././..", "././.."); - PATH_TEST_EQ("./../.", "./../."); - PATH_TEST_EQ(".././.", ".././."); - } - - // append_tests --------------------------------------------------------------------// - - void append_test_aux(const path & p, const std::string & s, const std::string & expect) - { - PATH_TEST_EQ((p / path(s)).string(), expect); - PATH_TEST_EQ((p / s.c_str()).string(), expect); - PATH_TEST_EQ((p / s).string(), expect); - path x(p); - x.append(s.begin(), s.end()); - PATH_TEST_EQ(x.string(), expect); - } - - void append_tests() - { - std::cout << "append_tests..." << std::endl; - - // There are many control paths to be exercised, since empty paths and arguments, - // paths with trailing separators, arguments with leading separators, with or without - // other characters being present, are all separate cases that need to be tested. - // Furthermore, some of the code to be tested is specific to argument categories, - // so that results in further permutations to be tested. - - //// code to generate test cases - //// - //// expected results must be checked by hand - //// "foo\bar" expected result must be edited by hand and moved for Windows/POSIX - //// - //const char* x[] = { "", "/", "foo", "foo/" }; - //const char* y[] = { "", "/", "bar", "/bar" }; - - //for (int i = 0; i < sizeof(x)/sizeof(char*); ++i) - // for (int j = 0; j < sizeof(y)/sizeof(char*); ++j) - // { - // std::cout << "\n PATH_TEST_EQ(path(\"" << x[i] << "\") / \"" << y[j] << "\", \"" - // << path(x[i]) / y[j] << "\");\n"; - // std::cout << " append_test_aux(\"" << x[i] << "\", \"" << y[j] << "\", \"" - // << path(x[i]) / y[j] << "\");\n"; - // } - - PATH_TEST_EQ(path("") / "", ""); - append_test_aux("", "", ""); - - PATH_TEST_EQ(path("") / "/", "/"); - append_test_aux("", "/", "/"); - - PATH_TEST_EQ(path("") / "bar", "bar"); - append_test_aux("", "bar", "bar"); - - PATH_TEST_EQ(path("") / "/bar", "/bar"); - append_test_aux("", "/bar", "/bar"); - - PATH_TEST_EQ(path("/") / "", "/"); - append_test_aux("/", "", "/"); - - PATH_TEST_EQ(path("/") / "/", "//"); - append_test_aux("/", "/", "//"); - - PATH_TEST_EQ(path("/") / "bar", "/bar"); - append_test_aux("/", "bar", "/bar"); - - PATH_TEST_EQ(path("/") / "/bar", "//bar"); - append_test_aux("/", "/bar", "//bar"); - - PATH_TEST_EQ(path("foo") / "", "foo"); - append_test_aux("foo", "", "foo"); - - PATH_TEST_EQ(path("foo") / "/", "foo/"); - append_test_aux("foo", "/", "foo/"); - - PATH_TEST_EQ(path("foo") / "/bar", "foo/bar"); - append_test_aux("foo", "/bar", "foo/bar"); - - PATH_TEST_EQ(path("foo/") / "", "foo/"); - append_test_aux("foo/", "", "foo/"); - - PATH_TEST_EQ(path("foo/") / "/", "foo//"); - append_test_aux("foo/", "/", "foo//"); - - PATH_TEST_EQ(path("foo/") / "bar", "foo/bar"); - append_test_aux("foo/", "bar", "foo/bar"); - - PATH_TEST_EQ(path("foo/") / "/bar", "foo//bar"); - append_test_aux("foo/", "/bar", "foo//bar"); - - if (platform == "Windows") - { - PATH_TEST_EQ(path("foo") / "bar", "foo\\bar"); - append_test_aux("foo", "bar", "foo\\bar"); - - // hand created test case specific to Windows - PATH_TEST_EQ(path("c:") / "bar", "c:bar"); - append_test_aux("c:", "bar", "c:bar"); - } - else - { - PATH_TEST_EQ(path("foo") / "bar", "foo/bar"); - append_test_aux("foo", "bar", "foo/bar"); - } - - } - -// self_assign_and_append_tests ------------------------------------------------------// - - void self_assign_and_append_tests() - { - std::cout << "self_assign_and_append_tests..." << std::endl; - - path p; - - p = "snafubar"; - PATH_TEST_EQ(p = p, "snafubar"); - - p = "snafubar"; - p = p.c_str(); - PATH_TEST_EQ(p, "snafubar"); - - p = "snafubar"; - p.assign(p.c_str(), path::codecvt()); - PATH_TEST_EQ(p, "snafubar"); - - p = "snafubar"; - PATH_TEST_EQ(p = p.c_str()+5, "bar"); - - p = "snafubar"; - PATH_TEST_EQ(p.assign(p.c_str() + 5, p.c_str() + 7), "ba"); - - p = "snafubar"; - p /= p; - PATH_TEST_EQ(p, "snafubar" BOOST_DIR_SEP "snafubar"); - - p = "snafubar"; - p /= p.c_str(); - PATH_TEST_EQ(p, "snafubar" BOOST_DIR_SEP "snafubar"); - - p = "snafubar"; - p.append(p.c_str(), path::codecvt()); - PATH_TEST_EQ(p, "snafubar" BOOST_DIR_SEP "snafubar"); - - p = "snafubar"; - PATH_TEST_EQ(p.append(p.c_str() + 5, p.c_str() + 7), "snafubar" BOOST_DIR_SEP "ba"); - } - - - // 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."))); - } - - // replace_extension_tests ---------------------------------------------------------// - - void replace_extension_tests() - { - 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"); - // see the rationale in html docs for explanation why this works: - BOOST_TEST(path().replace_extension(".txt") == ".txt"); - - BOOST_TEST(path("a.txt").replace_extension() == "a"); - 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.").replace_extension(".tex") == "a.tex"); - BOOST_TEST(path("a.").replace_extension("tex") == "a"); - BOOST_TEST(path("a").replace_extension(".txt") == "a.txt"); - BOOST_TEST(path("a").replace_extension("txt") == "a"); - 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").replace_extension(".c") == "a/b.c"); - PATH_TEST_EQ(path("a.txt/b").replace_extension(".c"), "a.txt/b.c"); // ticket 4702 - } - - // make_preferred_tests ------------------------------------------------------------// - - void make_preferred_tests() - { - std::cout << "make_preferred_tests..." << std::endl; - - if (platform == "Windows") - { - BOOST_TEST(path("//abc\\def/ghi").make_preferred().native() - == path("\\\\abc\\def\\ghi").native()); - } - else - { - BOOST_TEST(path("//abc\\def/ghi").make_preferred().native() - == path("//abc\\def/ghi").native()); - } - } - -} // unnamed namespace - -//--------------------------------------------------------------------------------------// -// // -// main // -// // -//--------------------------------------------------------------------------------------// - -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'; - - BOOST_TEST(p1.string() != p3.string()); - p3 = p2; - BOOST_TEST(p1.string() == p3.string()); - - path p4("foobar"); - BOOST_TEST(p4.string() == "foobar"); - p4 = p4; // self-assignment - BOOST_TEST(p4.string() == "foobar"); - - construction_tests(); - append_tests(); - self_assign_and_append_tests(); - overload_tests(); - query_and_decomposition_tests(); - composition_tests(); - iterator_tests(); - non_member_tests(); - exception_tests(); - name_function_tests(); - replace_extension_tests(); - make_preferred_tests(); - - // 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 - - std::string s1("//:somestring"); // this used to be treated specially - - // check the path member templates - p5.assign(s1.begin(), s1.end()); - - PATH_TEST_EQ(p5.string(), "//:somestring"); - p5 = s1; - PATH_TEST_EQ(p5.string(), "//:somestring"); - - // this code, courtesy of David Whetstone, detects 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_TEST_EQ(p5.string(), s2); - p5.assign(s1.begin(), s1.begin() + 1); - PATH_TEST_EQ(p5.string(), "/"); - - 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); - - // 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; - 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/src/third_party/boost/libs/filesystem/v3/test/path_unit_test.cpp b/src/third_party/boost/libs/filesystem/v3/test/path_unit_test.cpp deleted file mode 100644 index 0e2536be82f..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/path_unit_test.cpp +++ /dev/null @@ -1,1037 +0,0 @@ -// filesystem path_unit_test.cpp --------------------------------------------------- // - -// Copyright Beman Dawes 2008, 2009 - -// 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 - -// ---------------------------------------------------------------------------------- // -// -// The purpose of this test is to ensure that each function in the public -// interface can be called with arguments of the appropriate types. It does -// not attempt to verify that the full range of values for each argument -// are processed correctly. -// -// For full functionality tests, including probes with many different argument -// values, see path_test.cpp and other test programs. -// -// ---------------------------------------------------------------------------------- // - -#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 -#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/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> -#include <boost/smart_ptr.hpp> // used constructor tests -#include <boost/functional/hash.hpp> - -#include <iostream> -#include <iomanip> -#include <sstream> -#include <string> -#include <cstring> -#include <cwchar> -#include <locale> -#include <list> - -namespace fs = boost::filesystem; -namespace bs = boost::system; -using boost::filesystem::path; -using std::cout; -using std::endl; -using std::string; -using std::wstring; - -#define CHECK(x) check(x, __FILE__, __LINE__) -#define PATH_IS(a, b) check_path(a, b, __FILE__, __LINE__) -#define NATIVE_IS(p, s, ws) check_native(p, s, ws, __FILE__, __LINE__) -#define IS(a,b) check_equal(a, b, __FILE__, __LINE__) - -#if defined(_MSC_VER) -# pragma warning(push) // Save warning settings. -# pragma warning(disable : 4428) // Disable universal-character-name encountered in source warning. -#endif - -namespace -{ - - boost::system::error_code ec; - const boost::system::error_code ok; - const boost::system::error_code ng(-1, boost::system::system_category()); - - std::string platform(BOOST_PLATFORM); - - void check_path(const path& source, - const wstring& expected, const char* file, int line) - { - if (source == expected) return; - - ++::boost::detail::test_errors(); - - std::cout << file; - std::wcout << L'(' << line << L"): source.wstring(): \"" - << source.wstring() - << L"\" != expected: \"" << expected - << L"\"\n" ; - } - -# ifdef BOOST_WINDOWS_API - void check_native(const path& p, - const string&, const wstring& expected, const char* file, int line) -# else - void check_native(const path& p, - const string& expected, const wstring&, const char* file, int line) -# endif - { - if (p.native() == expected) return; - - ++::boost::detail::test_errors(); - - std::cout << file << '(' << line << "): native() is not equal expected\n" - " native---: " << std::hex; - path::string_type nat(p.native()); - for (path::string_type::const_iterator it = nat.begin(); it != nat.end(); ++it) - std::cout << long(*it) << ' '; - std::cout << "\n expected-: "; - for (path::string_type::const_iterator it = expected.begin(); it != expected.end(); ++it) - std::cout << long(*it) << ' '; - std::cout << std::dec << std::endl; - } - - template< class T1, class T2 > - void check_equal(const T1& value, - const T2& expected, const char* file, int line) - { - if (value == expected) return; - - ++::boost::detail::test_errors(); - - std::cout << file; - - std::wcout << L'(' << line << L"): value: \"" << value - << L"\" != expected: \"" << expected - << L"\"\n" ; - } - - void check(bool ok, const char* file, int line) - { - if (ok) return; - - ++::boost::detail::test_errors(); - - std::cout << file << '(' << line << "): test failed\n"; - } - - string s("string"); - wstring ws(L"wstring"); - std::list<char> l; // see main() for initialization to s, t, r, i, n, g - std::list<wchar_t> wl; // see main() for initialization to w, s, t, r, i, n, g - std::vector<char> v; // see main() for initialization to f, u, z - std::vector<wchar_t> wv; // see main() for initialization to w, f, u, z - - class Base {}; - class Derived : public Base {}; - void fun(const boost::filesystem::path&) {} - void fun(const boost::shared_ptr< Base >&) {} - - // test_constructors ---------------------------------------------------------------// - - void test_constructors() - { - std::cout << "testing constructors..." << std::endl; - - path x0; // default constructor - PATH_IS(x0, L""); - BOOST_TEST_EQ(x0.native().size(), 0U); - - path x1(l.begin(), l.end()); // iterator range char - PATH_IS(x1, L"string"); - BOOST_TEST_EQ(x1.native().size(), 6U); - - path x2(x1); // copy constructor - PATH_IS(x2, L"string"); - BOOST_TEST_EQ(x2.native().size(), 6U); - - path x3(wl.begin(), wl.end()); // iterator range wchar_t - PATH_IS(x3, L"wstring"); - BOOST_TEST_EQ(x3.native().size(), 7U); - - // contiguous containers - path x4(string("std::string")); // std::string - PATH_IS(x4, L"std::string"); - BOOST_TEST_EQ(x4.native().size(), 11U); - - path x5(wstring(L"std::wstring")); // std::wstring - PATH_IS(x5, L"std::wstring"); - BOOST_TEST_EQ(x5.native().size(), 12U); - - path x4v(v); // std::vector<char> - PATH_IS(x4v, L"fuz"); - BOOST_TEST_EQ(x4v.native().size(), 3U); - - path x5v(wv); // std::vector<wchar_t> - PATH_IS(x5v, L"wfuz"); - BOOST_TEST_EQ(x5v.native().size(), 4U); - - path x6("array char"); // array char - PATH_IS(x6, L"array char"); - BOOST_TEST_EQ(x6.native().size(), 10U); - - path x7(L"array wchar_t"); // array wchar_t - PATH_IS(x7, L"array wchar_t"); - BOOST_TEST_EQ(x7.native().size(), 13U); - - char char_array[100]; - std::strcpy(char_array, "big array char"); - path x6o(char_array); // array char, only partially full - PATH_IS(x6o, L"big array char"); - BOOST_TEST_EQ(x6o.native().size(), 14U); - - wchar_t wchar_array[100]; - std::wcscpy(wchar_array, L"big array wchar_t"); - path x7o(wchar_array); // array char, only partially full - PATH_IS(x7o, L"big array wchar_t"); - BOOST_TEST_EQ(x7o.native().size(), 17U); - - path x8(s.c_str()); // const char* null terminated - PATH_IS(x8, L"string"); - BOOST_TEST_EQ(x8.native().size(), 6U); - - path x9(ws.c_str()); // const wchar_t* null terminated - PATH_IS(x9, L"wstring"); - BOOST_TEST_EQ(x9.native().size(), 7U); - - // non-contiguous containers - path x10(l); // std::list<char> - PATH_IS(x10, L"string"); - BOOST_TEST_EQ(x10.native().size(), 6U); - - path xll(wl); // std::list<wchar_t> - PATH_IS(xll, L"wstring"); - BOOST_TEST_EQ(xll.native().size(), 7U); - - // easy-to-make coding errors - // path e1(x0, path::codecvt()); // fails to compile, and that is OK - - boost::shared_ptr< Derived > pDerived( new Derived() ); - fun( pDerived ); // tests constructor member template enable_if working correctly; - // will fail to compile if enable_if not taking path off the table - } - - path x; - path y; - - // test_assignments ----------------------------------------------------------------// - - void test_assignments() - { - std::cout << "testing assignments..." << std::endl; - - x = path("yet another path"); // another path - PATH_IS(x, L"yet another path"); - BOOST_TEST_EQ(x.native().size(), 16U); - - x = x; // self-assignment - PATH_IS(x, L"yet another path"); - BOOST_TEST_EQ(x.native().size(), 16U); - - x.assign(l.begin(), l.end()); // iterator range char - PATH_IS(x, L"string"); - - x.assign(wl.begin(), wl.end()); // iterator range wchar_t - PATH_IS(x, L"wstring"); - - x = string("std::string"); // container char - PATH_IS(x, L"std::string"); - - x = wstring(L"std::wstring"); // container wchar_t - PATH_IS(x, L"std::wstring"); - - x = "array char"; // array char - PATH_IS(x, L"array char"); - - x = L"array wchar"; // array wchar_t - PATH_IS(x, L"array wchar"); - - x = s.c_str(); // const char* null terminated - PATH_IS(x, L"string"); - - x = ws.c_str(); // const wchar_t* null terminated - PATH_IS(x, L"wstring"); - } - - // test_appends --------------------------------------------------------------------// - - void test_appends() - { - std::cout << "testing appends..." << std::endl; - -# ifdef BOOST_WINDOWS_API -# define BOOST_FS_FOO L"/foo\\" -# else // POSIX paths -# define BOOST_FS_FOO L"/foo/" -# endif - - 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"/foo/boo"); - - x = "/foo"; - x /= x; // self-append - PATH_IS(x, L"/foo/foo"); - - x = "/foo"; - x /= path("yet another path"); // another path - PATH_IS(x, BOOST_FS_FOO L"yet another path"); - - x = "/foo"; - x.append(l.begin(), l.end()); // iterator range char - PATH_IS(x, BOOST_FS_FOO L"string"); - - x = "/foo"; - x.append(wl.begin(), wl.end()); // iterator range wchar_t - PATH_IS(x, BOOST_FS_FOO L"wstring"); - - x = "/foo"; - x /= string("std::string"); // container char - PATH_IS(x, BOOST_FS_FOO L"std::string"); - - x = "/foo"; - x /= wstring(L"std::wstring"); // container wchar_t - PATH_IS(x, BOOST_FS_FOO L"std::wstring"); - - x = "/foo"; - x /= "array char"; // array char - PATH_IS(x, BOOST_FS_FOO L"array char"); - - x = "/foo"; - x /= L"array wchar"; // array wchar_t - PATH_IS(x, BOOST_FS_FOO L"array wchar"); - - x = "/foo"; - x /= s.c_str(); // const char* null terminated - PATH_IS(x, BOOST_FS_FOO L"string"); - - x = "/foo"; - x /= ws.c_str(); // const wchar_t* null terminated - PATH_IS(x, BOOST_FS_FOO L"wstring"); - } - - // test_observers ------------------------------------------------------------------// - - void test_observers() - { - std::cout << "testing observers..." << std::endl; - - path p0("abc"); - - CHECK(p0.native().size() == 3); - CHECK(p0.string() == "abc"); - CHECK(p0.string().size() == 3); - CHECK(p0.wstring() == L"abc"); - CHECK(p0.wstring().size() == 3); - -# ifdef BOOST_WINDOWS_API - - path p("abc\\def/ghi"); - - CHECK(std::wstring(p.c_str()) == L"abc\\def/ghi"); - - CHECK(p.string() == "abc\\def/ghi"); - CHECK(p.wstring() == L"abc\\def/ghi"); - - CHECK(p.generic_string() == "abc/def/ghi"); - CHECK(p.generic_wstring() == L"abc/def/ghi"); - - CHECK(p.generic_string<string>() == "abc/def/ghi"); - CHECK(p.generic_string<wstring>() == L"abc/def/ghi"); - CHECK(p.generic_string<path::string_type>() == L"abc/def/ghi"); - -# else // BOOST_POSIX_API - - path p("abc\\def/ghi"); - - CHECK(string(p.c_str()) == "abc\\def/ghi"); - - CHECK(p.string() == "abc\\def/ghi"); - CHECK(p.wstring() == L"abc\\def/ghi"); - - CHECK(p.generic_string() == "abc\\def/ghi"); - CHECK(p.generic_wstring() == L"abc\\def/ghi"); - - CHECK(p.generic_string<string>() == "abc\\def/ghi"); - CHECK(p.generic_string<wstring>() == L"abc\\def/ghi"); - CHECK(p.generic_string<path::string_type>() == "abc\\def/ghi"); - -# endif - } - - // test_relationals ----------------------------------------------------------------// - - void test_relationals() - { - std::cout << "testing relationals..." << std::endl; - - boost::hash<path> hash; - -# ifdef BOOST_WINDOWS_API - // this is a critical use case to meet user expectations - CHECK(path("c:\\abc") == path("c:/abc")); - CHECK(hash(path("c:\\abc")) == hash(path("c:/abc"))); -# endif - - const path p("bar"); - const path p2("baz"); - - CHECK(!(p < p)); - CHECK(p < p2); - CHECK(!(p2 < p)); - CHECK(p < "baz"); - CHECK(p < string("baz")); - CHECK(p < L"baz"); - CHECK(p < wstring(L"baz")); - CHECK(!("baz" < p)); - CHECK(!(string("baz") < p)); - CHECK(!(L"baz" < p)); - CHECK(!(wstring(L"baz") < p)); - - CHECK(p == p); - CHECK(!(p == p2)); - CHECK(!(p2 == p)); - CHECK(p2 == "baz"); - CHECK(p2 == string("baz")); - CHECK(p2 == L"baz"); - CHECK(p2 == wstring(L"baz")); - CHECK("baz" == p2); - CHECK(string("baz") == p2); - CHECK(L"baz" == p2); - CHECK(wstring(L"baz") == p2); - - CHECK(hash(p) == hash(p)); - CHECK(hash(p) != hash(p2)); // Not strictly required, but desirable - - CHECK(!(p != p)); - CHECK(p != p2); - CHECK(p2 != p); - - CHECK(p <= p); - CHECK(p <= p2); - CHECK(!(p2 <= p)); - - CHECK(!(p > p)); - CHECK(!(p > p2)); - CHECK(p2 > p); - - CHECK(p >= p); - CHECK(!(p >= p2)); - CHECK(p2 >= p); -} - - // test_inserter_and_extractor -----------------------------------------------------// - - void test_inserter_and_extractor() - { - std::cout << "testing inserter and extractor..." << std::endl; - - path p1("foo bar"); // verify space in path roundtrips per ticket #3863 - path p2; - - std::stringstream ss; - - CHECK(p1 != p2); - ss << p1; - ss >> p2; - CHECK(p1 == p2); - - path wp1(L"foo bar"); - path wp2; - - std::wstringstream wss; - - CHECK(wp1 != wp2); - wss << wp1; - wss >> wp2; - CHECK(wp1 == wp2); - } - - // test_other_non_members ----------------------------------------------------------// - - void test_other_non_members() - { - std::cout << "testing other_non_members..." << std::endl; - - path p1("foo"); - path p2("bar"); - - // operator / - - CHECK(p1 / p2 == path("foo/bar").make_preferred()); - CHECK("foo" / p2 == path("foo/bar").make_preferred()); - CHECK(L"foo" / p2 == path("foo/bar").make_preferred()); - CHECK(string("foo") / p2 == path("foo/bar").make_preferred()); - CHECK(wstring(L"foo") / p2 == path("foo/bar").make_preferred()); - CHECK(p1 / "bar" == path("foo/bar").make_preferred()); - CHECK(p1 / L"bar" == path("foo/bar").make_preferred()); - CHECK(p1 / string("bar") == path("foo/bar").make_preferred()); - CHECK(p1 / wstring(L"bar") == path("foo/bar").make_preferred()); - - swap(p1, p2); - - CHECK(p1 == "bar"); - CHECK(p2 == "foo"); - - CHECK(path("").remove_filename() == ""); - CHECK(path("foo").remove_filename() == ""); - CHECK(path("foo/bar").remove_filename() == "foo"); - } - -// // test_modifiers ------------------------------------------------------------------// -// -// void test_modifiers() -// { -// std::cout << "testing modifiers..." << std::endl; -// -// } - - // test_iterators ------------------------------------------------------------------// - - void test_iterators() - { - std::cout << "testing iterators..." << std::endl; - - path p1; - CHECK(p1.begin() == p1.end()); - - path p2("/"); - CHECK(p2.begin() != p2.end()); - CHECK(*p2.begin() == "/"); - CHECK(++p2.begin() == p2.end()); - - path p3("foo/bar/baz"); - - path::iterator it(p3.begin()); - CHECK(p3.begin() != p3.end()); - CHECK(*it == "foo"); - CHECK(*++it == "bar"); - CHECK(*++it == "baz"); - CHECK(*--it == "bar"); - CHECK(*--it == "foo"); - CHECK(*++it == "bar"); - CHECK(*++it == "baz"); - CHECK(++it == p3.end()); - } - - // test_modifiers ------------------------------------------------------------------// - - void test_modifiers() - { - std::cout << "testing modifiers..." << std::endl; - - } - - // test_decompositions -------------------------------------------------------------// - - void test_decompositions() - { - std::cout << "testing decompositions..." << std::endl; - - CHECK(path("").root_name().string() == ""); - CHECK(path("foo").root_name().string() == ""); - CHECK(path("/").root_name().string() == ""); - CHECK(path("/foo").root_name().string() == ""); - CHECK(path("//netname").root_name().string() == "//netname"); - CHECK(path("//netname/foo").root_name().string() == "//netname"); - - CHECK(path("").root_directory().string() == ""); - CHECK(path("foo").root_directory().string() == ""); - CHECK(path("/").root_directory().string() == "/"); - CHECK(path("/foo").root_directory().string() == "/"); - CHECK(path("//netname").root_directory().string() == ""); - CHECK(path("//netname/foo").root_directory().string() == "/"); - - CHECK(path("").root_path().string() == ""); - CHECK(path("/").root_path().string() == "/"); - CHECK(path("/foo").root_path().string() == "/"); - CHECK(path("//netname").root_path().string() == "//netname"); - CHECK(path("//netname/foo").root_path().string() == "//netname/"); - -# ifdef BOOST_WINDOWS_API - CHECK(path("c:/foo").root_path().string() == "c:/"); -# endif - - CHECK(path("").relative_path().string() == ""); - CHECK(path("/").relative_path().string() == ""); - CHECK(path("/foo").relative_path().string() == "foo"); - - CHECK(path("").parent_path().string() == ""); - CHECK(path("/").parent_path().string() == ""); - CHECK(path("/foo").parent_path().string() == "/"); - CHECK(path("/foo/bar").parent_path().string() == "/foo"); - - CHECK(path("/foo/bar/baz.zoo").filename().string() == "baz.zoo"); - - CHECK(path("/foo/bar/baz.zoo").stem().string() == "baz"); - CHECK(path("/foo/bar.woo/baz").stem().string() == "baz"); - - CHECK(path("foo.bar.baz.tar.bz2").extension().string() == ".bz2"); - CHECK(path("/foo/bar/baz.zoo").extension().string() == ".zoo"); - CHECK(path("/foo/bar.woo/baz").extension().string() == ""); - } - - // test_queries --------------------------------------------------------------------// - - void test_queries() - { - std::cout << "testing queries..." << std::endl; - - path p1(""); - path p2("//netname/foo.doo"); - - CHECK(p1.empty()); - CHECK(!p1.has_root_path()); - CHECK(!p1.has_root_name()); - CHECK(!p1.has_root_directory()); - CHECK(!p1.has_relative_path()); - CHECK(!p1.has_parent_path()); - CHECK(!p1.has_filename()); - CHECK(!p1.has_stem()); - CHECK(!p1.has_extension()); - CHECK(!p1.is_absolute()); - CHECK(p1.is_relative()); - - CHECK(!p2.empty()); - CHECK(p2.has_root_path()); - CHECK(p2.has_root_name()); - CHECK(p2.has_root_directory()); - CHECK(p2.has_relative_path()); - CHECK(p2.has_parent_path()); - CHECK(p2.has_filename()); - CHECK(p2.has_stem()); - CHECK(p2.has_extension()); - CHECK(p2.is_absolute()); - CHECK(!p2.is_relative()); - - } - - // test_imbue_locale ---------------------------------------------------------------// - - void test_imbue_locale() - { - std::cout << "testing imbue locale..." << std::endl; - - // weak test case for before/after states since we don't know what characters the - // default locale accepts. - path before("abc"); - - // So that tests are run with known encoding, use Boost UTF-8 codecvt - // \u2722 and \xE2\x9C\xA2 are UTF-16 and UTF-8 FOUR TEARDROP-SPOKED ASTERISK - - std::locale global_loc = std::locale(); - std::locale loc(global_loc, new fs::detail::utf8_codecvt_facet); - std::cout << " imbuing locale ..." << std::endl; - std::locale old_loc = path::imbue(loc); - - std::cout << " testing with the imbued locale ..." << std::endl; - path p2("\xE2\x9C\xA2"); - CHECK(p2 == L"\u2722"); - CHECK(p2.wstring() == L"\u2722"); - - std::cout << " imbuing the original locale ..." << std::endl; - path::imbue(old_loc); - - std::cout << " testing with the original locale ..." << std::endl; - path after("abc"); - CHECK(before == after); - - std::cout << " locale testing complete" << std::endl; - } - - // test_codecvt_argument -----------------------------------------------------------// - - void test_codecvt_argument() - { - std::cout << "testing codecvt arguments..." << std::endl; - - const char * c1 = "a1"; - const std::string s1(c1); - const std::wstring ws1(L"b2"); // off-by-one mimics test_codecvt - const std::string s2("y8"); - const std::wstring ws2(L"z9"); - - test_codecvt cvt; // produces off-by-one values that will always differ from - // the system's default locale codecvt facet - - int t = 0; - - // constructors - std::cout << " constructors test " << ++t << std::endl; - path p(c1, cvt); - NATIVE_IS(p, s1, ws1); - - std::cout << " test " << ++t << std::endl; - path p1(s1.begin(), s1.end(), cvt); - NATIVE_IS(p1, s1, ws1); - - std::cout << " test " << ++t << std::endl; - path p2(ws2, cvt); - NATIVE_IS(p2, s2, ws2); - - std::cout << " test " << ++t << std::endl; - path p3(ws2.begin(), ws2.end(), cvt); - NATIVE_IS(p3, s2, ws2); - - // path p2(p1, cvt); // fails to compile, and that is OK - - // assigns - p1.clear(); - std::cout << " assigns test " << ++t << std::endl; - p1.assign(s1,cvt); - NATIVE_IS(p1, s1, ws1); - p1.clear(); - std::cout << " test " << ++t << std::endl; - p1.assign(s1.begin(), s1.end(), cvt); - NATIVE_IS(p1, s1, ws1); - // p1.assign(p, cvt); // fails to compile, and that is OK - - // appends - p1.clear(); - std::cout << " appends test " << ++t << std::endl; - p1.append(s1,cvt); - NATIVE_IS(p1, s1, ws1); - p1.clear(); - std::cout << " test " << ++t << std::endl; - p1.append(s1.begin(), s1.end(), cvt); - NATIVE_IS(p1, s1, ws1); - // p1.append(p, cvt); // fails to compile, and that is OK - - // native observers - std::cout << " native observers test " << ++t << std::endl; - CHECK(p.string<std::string>(cvt) == s1); - std::cout << " test " << ++t << std::endl; - CHECK(p.string(cvt) == s1); - std::cout << " test " << ++t << std::endl; - CHECK(p.string<std::wstring>(cvt) == ws1); - std::cout << " test " << ++t << std::endl; - CHECK(p.wstring(cvt) == ws1); - - // generic observers - std::cout << " generic observers test " << ++t << std::endl; - CHECK(p.generic_string<std::string>(cvt) == s1); - std::cout << " test " << ++t << std::endl; - CHECK(p.generic_string(cvt) == s1); - std::cout << " test " << ++t << std::endl; - CHECK(p.generic_string<std::wstring>(cvt) == ws1); - std::cout << " test " << ++t << std::endl; - CHECK(p.generic_wstring(cvt) == ws1); - - std::cout << " codecvt arguments testing complete" << std::endl; - } - - // test_overloads ------------------------------------------------------------------// - - void test_overloads() - { - std::cout << "testing overloads..." << std::endl; - std::string s("hello"); - const char a[] = "goodbye"; - path p1(s); - path p2(s.c_str()); - path p3(a); - path p4("foo"); - - std::wstring ws(L"hello"); - const wchar_t wa[] = L"goodbye"; - path wp1(ws); - path wp2(ws.c_str()); - path wp3(wa); - path wp4(L"foo"); - } - - // test_error_handling -------------------------------------------------------------// - - class error_codecvt - : public std::codecvt< wchar_t, char, std::mbstate_t > - { - public: - explicit error_codecvt() - : std::codecvt<wchar_t, char, std::mbstate_t>() {} - protected: - - virtual bool do_always_noconv() const throw() { return false; } - virtual int do_encoding() const throw() { return 0; } - - virtual std::codecvt_base::result do_in(std::mbstate_t&, - const char*, const char*, const char*&, - wchar_t*, wchar_t*, wchar_t*&) const - { - static std::codecvt_base::result r = std::codecvt_base::noconv; - if (r == std::codecvt_base::partial) r = std::codecvt_base::error; - else if (r == std::codecvt_base::error) r = std::codecvt_base::noconv; - else r = std::codecvt_base::partial; - return r; - } - - virtual std::codecvt_base::result do_out(std::mbstate_t &, - const wchar_t*, const wchar_t*, const wchar_t*&, - char*, char*, char*&) const - { - static std::codecvt_base::result r = std::codecvt_base::noconv; - if (r == std::codecvt_base::partial) r = std::codecvt_base::error; - else if (r == std::codecvt_base::error) r = std::codecvt_base::noconv; - else r = std::codecvt_base::partial; - return r; - } - - virtual std::codecvt_base::result do_unshift(std::mbstate_t&, - char*, char*, char* &) const { return ok; } - virtual int do_length(std::mbstate_t &, - const char*, const char*, std::size_t) const { return 0; } - virtual int do_max_length() const throw () { return 0; } - }; - - void test_error_handling() - { - std::cout << "testing error handling..." << std::endl; - - std::locale global_loc = std::locale(); - std::locale loc(global_loc, new error_codecvt); - std::cout << " imbuing error locale ..." << std::endl; - std::locale old_loc = path::imbue(loc); - - // These tests rely on a path constructor that fails in the locale conversion. - // Thus construction has to call codecvt. Force that by using a narrow string - // for Windows, and a wide string for POSIX. -# ifdef BOOST_WINDOWS_API -# define STRING_FOO_ "foo" -# else -# define STRING_FOO_ L"foo" -# endif - - { - std::cout << " testing std::codecvt_base::partial error..." << std::endl; - bool exception_thrown (false); - try { path(STRING_FOO_); } - catch (const bs::system_error & ex) - { - exception_thrown = true; - BOOST_TEST_EQ(ex.code(), bs::error_code(std::codecvt_base::partial, - fs::codecvt_error_category())); - } - catch (...) { std::cout << "***** unexpected exception type *****" << std::endl; } - BOOST_TEST(exception_thrown); - } - - { - std::cout << " testing std::codecvt_base::error error..." << std::endl; - bool exception_thrown (false); - try { path(STRING_FOO_); } - catch (const bs::system_error & ex) - { - exception_thrown = true; - BOOST_TEST_EQ(ex.code(), bs::error_code(std::codecvt_base::error, - fs::codecvt_error_category())); - } - catch (...) { std::cout << "***** unexpected exception type *****" << std::endl; } - BOOST_TEST(exception_thrown); - } - - { - std::cout << " testing std::codecvt_base::noconv error..." << std::endl; - bool exception_thrown (false); - try { path(STRING_FOO_); } - catch (const bs::system_error & ex) - { - exception_thrown = true; - BOOST_TEST_EQ(ex.code(), bs::error_code(std::codecvt_base::noconv, - fs::codecvt_error_category())); - } - catch (...) { std::cout << "***** unexpected exception type *****" << std::endl; } - BOOST_TEST(exception_thrown); - } - - std::cout << " restoring original locale ..." << std::endl; - path::imbue(old_loc); - std::cout << " testing error handling complete" << std::endl; - } - -# if 0 - -// // test_locales --------------------------------------------------------------------// -// -// void test_locales() -// { -// std::cout << "testing locales..." << std::endl; -// -// } - - // test_user_supplied_type ---------------------------------------------------------// - - typedef std::basic_string<int> user_string; - -} // unnamed namespace - -namespace boost -{ -namespace filesystem -{ - namespace path_traits - { - template<> struct is_iterator<const user_string::value_type *> { static const bool value = true; }; - template<> struct is_iterator<user_string::value_type *> { static const bool value = true; }; - template<> struct is_iterator<user_string::iterator> { static const bool value = true; }; - template<> struct is_iterator<user_string::const_iterator> { static const bool value = true; }; - template<> struct is_container<user_string> { static const bool value = true; }; - - template<> - void append<user_string::value_type>(const user_string::value_type * begin, - const user_string::value_type * end, string_type & target, system::error_code & ec) - { - for (; begin != end && *begin; ++begin) - target += *begin + 1; // change so that results distinguishable from char cvts - } - -# ifdef __GNUC__ - // This specialization shouldn't be needed, and VC++, Intel, and others work - // fine without it. But gcc 4.3.2, and presumably other versions, need it. - template<> - void append<user_string::value_type>(const user_string::value_type * begin, - string_type & target, system::error_code & ec) - { - path_traits::append<user_string::value_type>(begin, - static_cast<const user_string::value_type *>(0), target, ec); - } -# endif - - template<> - user_string convert<user_string>(const string_type & source, - system::error_code & ec) - { - user_string temp; - for (string_type::const_iterator it = source.begin(); - it != source.end(); ++it) - temp += *it - 1; - return temp; - } - } // namespace path_traits -} // namespace filesystem -} // namespace boost - -namespace -{ - - void test_user_supplied_type() - { - std::cout << "testing user supplied type..." << std::endl; - - user_string::value_type usr_c_str[] = { 'a', 'b', 'c', 0 }; - user_string usr(usr_c_str); - - path p1(usr.c_str()); - CHECK(p1 == path("bcd")); - CHECK(p1 == "bcd"); - user_string s1(p1.string<user_string>()); - CHECK(s1 == usr); - } - -# endif - -} // unnamed namespace - -//--------------------------------------------------------------------------------------// -// // -// main // -// // -//--------------------------------------------------------------------------------------// - -int cpp_main(int, char*[]) -{ -// document state of critical macros -#ifdef BOOST_POSIX_API - cout << "BOOST_POSIX_API" << endl; -#endif -#ifdef BOOST_WINDOWS_API - cout << "BOOST_WINDOWS_API" << endl; -#endif - - l.push_back('s'); - l.push_back('t'); - l.push_back('r'); - l.push_back('i'); - l.push_back('n'); - l.push_back('g'); - - wl.push_back(L'w'); - wl.push_back(L's'); - wl.push_back(L't'); - wl.push_back(L'r'); - wl.push_back(L'i'); - wl.push_back(L'n'); - wl.push_back(L'g'); - - v.push_back('f'); - v.push_back('u'); - v.push_back('z'); - - wv.push_back(L'w'); - wv.push_back(L'f'); - wv.push_back(L'u'); - wv.push_back(L'z'); - - test_overloads(); - test_constructors(); - test_assignments(); - test_appends(); - test_modifiers(); - test_observers(); - test_relationals(); - test_inserter_and_extractor(); - test_other_non_members(); - test_iterators(); - test_decompositions(); - test_queries(); - test_imbue_locale(); - test_codecvt_argument(); - test_error_handling(); - -# if 0 - - test_user_supplied_type(); - -#endif - - std::string foo("\\abc"); - const char* bar = "/abc"; - - if (foo == bar) - cout << "unintended consequence\n"; - - return ::boost::report_errors(); -} diff --git a/src/third_party/boost/libs/filesystem/v3/test/test_codecvt.hpp b/src/third_party/boost/libs/filesystem/v3/test/test_codecvt.hpp deleted file mode 100644 index 32b2d36e598..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/test_codecvt.hpp +++ /dev/null @@ -1,79 +0,0 @@ -// test_codecvt.hpp ------------------------------------------------------------------// - -// Copyright Beman Dawes 2009, 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 - -#ifndef BOOST_FILESYSTEM3_TEST_CODECVT_HPP -#define BOOST_FILESYSTEM3_TEST_CODECVT_HPP - -#include <boost/filesystem/v3/config.hpp> -#include <locale> -#include <cwchar> // for mbstate_t - - //------------------------------------------------------------------------------------// - // // - // class test_codecvt // - // // - // Warning: partial implementation; even do_in and do_out only partially meet the // - // standard library specifications as the "to" buffer must hold the entire result. // - // // - // The value of a wide character is the value of the corresponding narrow character // - // plus 1. This ensures that compares against expected values will fail if the // - // code conversion did not occur as expected. // - // // - //------------------------------------------------------------------------------------// - - class test_codecvt - : public std::codecvt< wchar_t, char, std::mbstate_t > - { - public: - explicit test_codecvt() - : std::codecvt<wchar_t, char, std::mbstate_t>() {} - protected: - - virtual bool do_always_noconv() const throw() { return false; } - - virtual int do_encoding() const throw() { return 0; } - - virtual std::codecvt_base::result do_in(std::mbstate_t&, - const char* from, const char* from_end, const char*& from_next, - wchar_t* to, wchar_t* to_end, wchar_t*& to_next) const - { - for (; from != from_end && to != to_end; ++from, ++to) - *to = *from + 1; - if (to == to_end) - return error; - *to = L'\0'; - from_next = from; - to_next = to; - return ok; - } - - virtual std::codecvt_base::result do_out(std::mbstate_t&, - const wchar_t* from, const wchar_t* from_end, const wchar_t*& from_next, - char* to, char* to_end, char*& to_next) const - { - for (; from != from_end && to != to_end; ++from, ++to) - *to = static_cast<char>(*from - 1); - if (to == to_end) - return error; - *to = '\0'; - from_next = from; - to_next = to; - return ok; - } - - virtual std::codecvt_base::result do_unshift(std::mbstate_t&, - char* /*from*/, char* /*to*/, char* & /*next*/) const { return ok; } - - virtual int do_length(std::mbstate_t&, - const char* /*from*/, const char* /*from_end*/, std::size_t /*max*/) const { return 0; } - - virtual int do_max_length() const throw () { return 0; } - }; - -#endif // BOOST_FILESYSTEM3_TEST_CODECVT_HPP diff --git a/src/third_party/boost/libs/filesystem/v3/test/windows_attributes.cpp b/src/third_party/boost/libs/filesystem/v3/test/windows_attributes.cpp deleted file mode 100644 index e1a686ce835..00000000000 --- a/src/third_party/boost/libs/filesystem/v3/test/windows_attributes.cpp +++ /dev/null @@ -1,108 +0,0 @@ -// windows_attributes ----------------------------------------------------------------// - -// 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 - -//--------------------------------------------------------------------------------------// - -// Useful for debugging status related issues // - -//--------------------------------------------------------------------------------------// - -#include <boost/filesystem.hpp> -#include <boost/detail/lightweight_main.hpp> -#include <windows.h> -#include <map> -#include <utility> -#include <iostream> -#include <string> - -using std::make_pair; -namespace fs = boost::filesystem; - -int cpp_main( int argc, char* argv[]) -{ - typedef std::map<DWORD, std::string> decode_type; - decode_type table; - - table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_ARCHIVE, "FILE_ATTRIBUTE_ARCHIVE")); - table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_COMPRESSED, "FILE_ATTRIBUTE_COMPRESSED")); - table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_DEVICE, "FILE_ATTRIBUTE_DEVICE")); - table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_DIRECTORY, "FILE_ATTRIBUTE_DIRECTORY")); - table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_ENCRYPTED, "FILE_ATTRIBUTE_ENCRYPTED")); - table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_HIDDEN, "FILE_ATTRIBUTE_HIDDEN")); - table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_NOT_CONTENT_INDEXED, "FILE_ATTRIBUTE_NOT_CONTENT_INDEXED")); - table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_OFFLINE, "FILE_ATTRIBUTE_OFFLINE")); - table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_READONLY, "FILE_ATTRIBUTE_READONLY")); - table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_REPARSE_POINT, "FILE_ATTRIBUTE_REPARSE_POINT")); - table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_SPARSE_FILE, "FILE_ATTRIBUTE_SPARSE_FILE")); - table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_SYSTEM, "FILE_ATTRIBUTE_SYSTEM")); - table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_TEMPORARY, "FILE_ATTRIBUTE_TEMPORARY")); - table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_VIRTUAL, "FILE_ATTRIBUTE_VIRTUAL")); - - if (argc < 2) - { - std::cout << "Usage: windows_attributes path\n"; - return 1; - } - - // report Win32 ::GetFileAttributesA() - - DWORD at(::GetFileAttributesA(argv[1])); - if (at == INVALID_FILE_ATTRIBUTES) - { - std::cout << "GetFileAttributes(\"" << argv[1] - << "\") returned INVALID_FILE_ATTRIBUTES\n"; - return 0; - } - - std::cout << "GetFileAttributes(\"" << argv[1] - << "\") returned "; - - bool bar = false; - for (decode_type::iterator it = table.begin(); it != table.end(); ++it) - { - if (!(it->first & at)) - continue; - if (bar) - std::cout << " | "; - bar = true; - std::cout << it->second; - at &= ~it->first; - } - std::cout << std::endl; - - if (at) - std::cout << "plus unknown attributes " << at << std::endl; - - // report Boost Filesystem file_type - - fs::file_status stat = fs::status(argv[1]); - - const char* types[] = - { - "status_error", - "file_not_found", - "regular_file", - "directory_file", - // the following may not apply to some operating systems or file systems - "symlink_file", - "block_file", - "character_file", - "fifo_file", - "socket_file", - "reparse_file", // Windows: FILE_ATTRIBUTE_REPARSE_POINT that is not a symlink - "type_unknown", // file does exist", but isn't one of the above types or - // we don't have strong enough permission to find its type - - "_detail_directory_symlink" // internal use only; never exposed to users - }; - - std::cout << "boost::filesystem::status().type() is " << types[stat.type()] << std::endl; - - return 0; -} diff --git a/src/third_party/boost/libs/program_options/src/cmdline.cpp b/src/third_party/boost/libs/program_options/src/cmdline.cpp deleted file mode 100644 index be313851129..00000000000 --- a/src/third_party/boost/libs/program_options/src/cmdline.cpp +++ /dev/null @@ -1,656 +0,0 @@ -// Copyright Vladimir Prus 2002-2004. -// 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) - -#define BOOST_PROGRAM_OPTIONS_SOURCE -#include <boost/program_options/config.hpp> - -#include <boost/config.hpp> - -#include <boost/program_options/detail/cmdline.hpp> -#include <boost/program_options/errors.hpp> -#include <boost/program_options/value_semantic.hpp> -#include <boost/program_options/options_description.hpp> -#include <boost/program_options/positional_options.hpp> -#include <boost/throw_exception.hpp> - -#include <boost/bind.hpp> - -#include <string> -#include <utility> -#include <vector> -#include <cassert> -#include <cstring> -#include <cctype> -#include <climits> - -#include <cstdio> - -#include <iostream> - -namespace boost { namespace program_options { - - using namespace std; - using namespace boost::program_options::command_line_style; - - invalid_syntax:: - invalid_syntax(const string& tokens, kind_t kind) - : error(error_message(kind).append(" in '").append(tokens).append("'")) - , m_tokens(tokens) - , m_kind(kind) - {} - - string - invalid_syntax::error_message(kind_t kind) - { - // Initially, store the message in 'const char*' variable, - // to avoid conversion to string in all cases. - const char* msg; - switch(kind) - { - case long_not_allowed: - msg = "long options are not allowed"; - break; - case long_adjacent_not_allowed: - msg = "parameters adjacent to long options not allowed"; - break; - case short_adjacent_not_allowed: - msg = "parameters adjust to short options are not allowed"; - break; - case empty_adjacent_parameter: - msg = "adjacent parameter is empty"; - break; - case missing_parameter: - msg = "required parameter is missing"; - break; - case extra_parameter: - msg = "extra parameter"; - break; - case unrecognized_line: - msg = "unrecognized line"; - break; - default: - msg = "unknown error"; - } - return msg; - } - - invalid_syntax::kind_t - invalid_syntax::kind() const - { - return m_kind; - } - - const string& - invalid_syntax::tokens() const - { - return m_tokens; - } - - invalid_command_line_syntax:: - invalid_command_line_syntax(const string& tokens, kind_t kind) - : invalid_syntax(tokens, kind) - {} - -}} - - -namespace boost { namespace program_options { namespace detail { - - // vc6 needs this, but borland chokes when this is added. -#if BOOST_WORKAROUND(_MSC_VER, < 1300) - using namespace std; - using namespace program_options; -#endif - - - cmdline::cmdline(const vector<string>& args) - { - init(args); - } - - cmdline::cmdline(int argc, const char*const * argv) - { -#if defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS) - vector<string> args; - copy(argv+1, argv+argc+!argc, inserter(args, args.end())); - init(args); -#else - init(vector<string>(argv+1, argv+argc+!argc)); -#endif - } - - void - cmdline::init(const vector<string>& args) - { - this->args = args; - m_style = command_line_style::default_style; - m_desc = 0; - m_positional = 0; - m_allow_unregistered = false; - } - - void - cmdline::style(int style) - { - if (style == 0) - style = default_style; - - check_style(style); - this->m_style = style_t(style); - } - - void - cmdline::allow_unregistered() - { - this->m_allow_unregistered = true; - } - - void - cmdline::check_style(int style) const - { - bool allow_some_long = - (style & allow_long) || (style & allow_long_disguise); - - const char* error = 0; - if (allow_some_long && - !(style & long_allow_adjacent) && !(style & long_allow_next)) - error = "style disallows parameters for long options"; - - if (!error && (style & allow_short) && - !(style & short_allow_adjacent) && !(style & short_allow_next)) - error = "style disallows parameters for short options"; - - if (!error && (style & allow_short) && - !(style & allow_dash_for_short) && !(style & allow_slash_for_short)) - error = "style disallows all characters for short options"; - - if (error) - boost::throw_exception(invalid_command_line_style(error)); - - // Need to check that if guessing and long disguise are enabled - // -f will mean the same as -foo - } - - bool - cmdline::is_style_active(style_t style) const - { - return ((m_style & style) ? true : false); - } - - void - cmdline::set_options_description(const options_description& desc) - { - m_desc = &desc; - } - - void - cmdline::set_positional_options( - const positional_options_description& positional) - { - m_positional = &positional; - } - - - vector<option> - cmdline::run() - { - // The parsing is done by having a set of 'style parsers' - // and trying then in order. Each parser is passed a vector - // of unparsed tokens and can consume some of them (by - // removing elements on front) and return a vector of options. - // - // We try each style parser in turn, untill some input - // is consumed. The returned vector of option may contain the - // result of just syntactic parsing of token, say --foo will - // be parsed as option with name 'foo', and the style parser - // is not required to care if that option is defined, and how - // many tokens the value may take. - // So, after vector is returned, we validate them. - assert(m_desc); - - vector<style_parser> style_parsers; - - if (m_style_parser) - style_parsers.push_back(m_style_parser); - - if (m_additional_parser) - style_parsers.push_back( - boost::bind(&cmdline::handle_additional_parser, this, _1)); - - if (m_style & allow_long) - style_parsers.push_back( - boost::bind(&cmdline::parse_long_option, this, _1)); - - if ((m_style & allow_long_disguise)) - style_parsers.push_back( - boost::bind(&cmdline::parse_disguised_long_option, this, _1)); - - if ((m_style & allow_short) && (m_style & allow_dash_for_short)) - style_parsers.push_back( - boost::bind(&cmdline::parse_short_option, this, _1)); - - if ((m_style & allow_short) && (m_style & allow_slash_for_short)) - style_parsers.push_back(boost::bind(&cmdline::parse_dos_option, this, _1)); - - style_parsers.push_back(boost::bind(&cmdline::parse_terminator, this, _1)); - - vector<option> result; - while(!args.empty()) - { - bool ok = false; - for(unsigned i = 0; i < style_parsers.size(); ++i) - { - unsigned current_size = args.size(); - vector<option> next = style_parsers[i](args); - - // Check that option names - // are valid, and that all values are in place. - if (!next.empty()) - { - vector<string> e; - for(unsigned k = 0; k < next.size()-1; ++k) { - finish_option(next[k], e, style_parsers); - } - // For the last option, pass the unparsed tokens - // so that they can be added to next.back()'s values - // if appropriate. - finish_option(next.back(), args, style_parsers); - for (unsigned j = 0; j < next.size(); ++j) - result.push_back(next[j]); - } - - if (args.size() != current_size) { - ok = true; - break; - } - } - - if (!ok) { - option opt; - opt.value.push_back(args[0]); - opt.original_tokens.push_back(args[0]); - result.push_back(opt); - args.erase(args.begin()); - } - } - - /* If an key option is followed by a positional option, - can can consume more tokens (e.g. it's multitoke option), - give those tokens to it. */ - vector<option> result2; - for (unsigned i = 0; i < result.size(); ++i) - { - result2.push_back(result[i]); - option& opt = result2.back(); - - if (opt.string_key.empty()) - continue; - - const option_description* xd = - m_desc->find_nothrow(opt.string_key, - is_style_active(allow_guessing), - is_style_active(long_case_insensitive), - is_style_active(short_case_insensitive)); - if (!xd) - continue; - - unsigned min_tokens = xd->semantic()->min_tokens(); - unsigned max_tokens = xd->semantic()->max_tokens(); - if (min_tokens < max_tokens && opt.value.size() < max_tokens) - { - // This option may grab some more tokens. - // We only allow to grab tokens that are not already - // recognized as key options. - - int can_take_more = max_tokens - opt.value.size(); - unsigned j = i+1; - for (; can_take_more && j < result.size(); --can_take_more, ++j) - { - option& opt2 = result[j]; - if (!opt2.string_key.empty()) - break; - - if (opt2.position_key == INT_MAX) - { - // We use INT_MAX to mark positional options that - // were found after the '--' terminator and therefore - // should stay positional forever. - break; - } - - assert(opt2.value.size() == 1); - - opt.value.push_back(opt2.value[0]); - - assert(opt2.original_tokens.size() == 1); - - opt.original_tokens.push_back(opt2.original_tokens[0]); - } - i = j-1; - } - } - result.swap(result2); - - - // Assign position keys to positional options. - int position_key = 0; - for(unsigned i = 0; i < result.size(); ++i) { - if (result[i].string_key.empty()) - result[i].position_key = position_key++; - } - - if (m_positional) - { - unsigned position = 0; - for (unsigned i = 0; i < result.size(); ++i) { - option& opt = result[i]; - if (opt.position_key != -1) { - if (position >= m_positional->max_total_count()) - { - boost::throw_exception(too_many_positional_options_error()); - } - opt.string_key = m_positional->name_for_position(position); - ++position; - } - } - } - - // set case sensitive flag - for (unsigned i = 0; i < result.size(); ++i) { - if (result[i].string_key.size() > 2 || - (result[i].string_key.size() > 1 && result[i].string_key[0] != '-')) - { - // it is a long option - result[i].case_insensitive = is_style_active(long_case_insensitive); - } - else - { - // it is a short option - result[i].case_insensitive = is_style_active(short_case_insensitive); - } - } - - return result; - } - - void - cmdline::finish_option(option& opt, - vector<string>& other_tokens, - const vector<style_parser>& style_parsers) - { - if (opt.string_key.empty()) - return; - - // First check that the option is valid, and get its description. - const option_description* xd = m_desc->find_nothrow(opt.string_key, - is_style_active(allow_guessing), - is_style_active(long_case_insensitive), - is_style_active(short_case_insensitive)); - - if (!xd) - { - if (m_allow_unregistered) { - opt.unregistered = true; - return; - } else { - boost::throw_exception(unknown_option(opt.string_key)); - } - } - const option_description& d = *xd; - - // Canonize the name - opt.string_key = d.key(opt.string_key); - - // We check that the min/max number of tokens for the option - // agrees with the number of tokens we have. The 'adjacent_value' - // (the value in --foo=1) counts as a separate token, and if present - // must be consumed. The following tokens on the command line may be - // left unconsumed. - - // We don't check if those tokens look like option, or not! - - unsigned min_tokens = d.semantic()->min_tokens(); - unsigned max_tokens = d.semantic()->max_tokens(); - - unsigned present_tokens = opt.value.size() + other_tokens.size(); - - if (present_tokens >= min_tokens) - { - if (!opt.value.empty() && max_tokens == 0) - { - boost::throw_exception(invalid_command_line_syntax(opt.string_key, - invalid_command_line_syntax::extra_parameter)); - } - - // If an option wants, at minimum, N tokens, we grab them there, - // when adding these tokens as values to current option we check - // if they look like options - if (opt.value.size() <= min_tokens) - { - min_tokens -= opt.value.size(); - } - else - { - min_tokens = 0; - } - - // Everything's OK, move the values to the result. - for(;!other_tokens.empty() && min_tokens--; ) - { - // check if extra parameter looks like a known option - // we use style parsers to check if it is syntactically an option, - // additionally we check if an option_description exists - vector<option> followed_option; - vector<string> next_token(1, other_tokens[0]); - for (unsigned i = 0; followed_option.empty() && i < style_parsers.size(); ++i) - { - followed_option = style_parsers[i](next_token); - } - if (!followed_option.empty()) - { - const option_description* od = m_desc->find_nothrow(other_tokens[0], - is_style_active(allow_guessing), - is_style_active(long_case_insensitive), - is_style_active(short_case_insensitive)); - if (od) - boost::throw_exception(invalid_command_line_syntax(opt.string_key, - invalid_command_line_syntax::missing_parameter)); - } - opt.value.push_back(other_tokens[0]); - opt.original_tokens.push_back(other_tokens[0]); - other_tokens.erase(other_tokens.begin()); - } - } - else - { - boost::throw_exception(invalid_command_line_syntax(opt.string_key, - invalid_command_line_syntax::missing_parameter)); - - } - } - - vector<option> - cmdline::parse_long_option(vector<string>& args) - { - vector<option> result; - const string& tok = args[0]; - if (tok.size() >= 3 && tok[0] == '-' && tok[1] == '-') - { - string name, adjacent; - - string::size_type p = tok.find('='); - if (p != tok.npos) - { - name = tok.substr(2, p-2); - adjacent = tok.substr(p+1); - if (adjacent.empty()) - boost::throw_exception( invalid_command_line_syntax(name, - invalid_command_line_syntax::empty_adjacent_parameter) ); - } - else - { - name = tok.substr(2); - } - option opt; - opt.string_key = name; - if (!adjacent.empty()) - opt.value.push_back(adjacent); - opt.original_tokens.push_back(tok); - result.push_back(opt); - args.erase(args.begin()); - } - return result; - } - - - vector<option> - cmdline::parse_short_option(vector<string>& args) - { - const string& tok = args[0]; - if (tok.size() >= 2 && tok[0] == '-' && tok[1] != '-') - { - vector<option> result; - - string name = tok.substr(0,2); - string adjacent = tok.substr(2); - - // Short options can be 'grouped', so that - // "-d -a" becomes "-da". Loop, processing one - // option at a time. We exit the loop when either - // we've processed all the token, or when the remainder - // of token is considered to be value, not further grouped - // option. - for(;;) { - const option_description* d - = m_desc->find_nothrow(name, false, false, - is_style_active(short_case_insensitive)); - - // FIXME: check for 'allow_sticky'. - if (d && (m_style & allow_sticky) && - d->semantic()->max_tokens() == 0 && !adjacent.empty()) { - // 'adjacent' is in fact further option. - option opt; - opt.string_key = name; - result.push_back(opt); - - if (adjacent.empty()) - { - args.erase(args.begin()); - break; - } - - name = string("-") + adjacent[0]; - adjacent.erase(adjacent.begin()); - } else { - - option opt; - opt.string_key = name; - opt.original_tokens.push_back(tok); - if (!adjacent.empty()) - opt.value.push_back(adjacent); - result.push_back(opt); - args.erase(args.begin()); - break; - } - } - return result; - } - return vector<option>(); - } - - vector<option> - cmdline::parse_dos_option(vector<string>& args) - { - vector<option> result; - const string& tok = args[0]; - if (tok.size() >= 2 && tok[0] == '/') - { - string name = "-" + tok.substr(1,1); - string adjacent = tok.substr(2); - - option opt; - opt.string_key = name; - if (!adjacent.empty()) - opt.value.push_back(adjacent); - opt.original_tokens.push_back(tok); - result.push_back(opt); - args.erase(args.begin()); - } - return result; - } - - vector<option> - cmdline::parse_disguised_long_option(vector<string>& args) - { - const string& tok = args[0]; - if (tok.size() >= 2 && - ((tok[0] == '-' && tok[1] != '-') || - ((m_style & allow_slash_for_short) && tok[0] == '/'))) - { - if (m_desc->find_nothrow(tok.substr(1, tok.find('=')-1), - is_style_active(allow_guessing), - is_style_active(long_case_insensitive), - is_style_active(short_case_insensitive))) - { - args[0].insert(0, "-"); - if (args[0][1] == '/') - args[0][1] = '-'; - return parse_long_option(args); - } - } - return vector<option>(); - } - - vector<option> - cmdline::parse_terminator(vector<string>& args) - { - vector<option> result; - const string& tok = args[0]; - if (tok == "--") - { - for(unsigned i = 1; i < args.size(); ++i) - { - option opt; - opt.value.push_back(args[i]); - opt.original_tokens.push_back(args[i]); - opt.position_key = INT_MAX; - result.push_back(opt); - } - args.clear(); - } - return result; - } - - vector<option> - cmdline::handle_additional_parser(vector<string>& args) - { - vector<option> result; - pair<string, string> r = m_additional_parser(args[0]); - if (!r.first.empty()) { - option next; - next.string_key = r.first; - if (!r.second.empty()) - next.value.push_back(r.second); - result.push_back(next); - args.erase(args.begin()); - } - return result; - } - - void - cmdline::set_additional_parser(additional_parser p) - { - m_additional_parser = p; - } - - void - cmdline::extra_style_parser(style_parser s) - { - m_style_parser = s; - } - - - -}}} diff --git a/src/third_party/boost/libs/program_options/src/config_file.cpp b/src/third_party/boost/libs/program_options/src/config_file.cpp deleted file mode 100644 index a12844cee60..00000000000 --- a/src/third_party/boost/libs/program_options/src/config_file.cpp +++ /dev/null @@ -1,196 +0,0 @@ -// Copyright Vladimir Prus 2002-2004. -// 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) - - -#define BOOST_PROGRAM_OPTIONS_SOURCE -#include <boost/program_options/config.hpp> - -#include <boost/program_options/detail/config_file.hpp> -#include <boost/program_options/errors.hpp> -#include <boost/program_options/detail/convert.hpp> -#include <boost/throw_exception.hpp> - -#include <iostream> -#include <fstream> -#include <cassert> - -namespace boost { namespace program_options { namespace detail { - - using namespace std; - - common_config_file_iterator::common_config_file_iterator( - const std::set<std::string>& allowed_options, - bool allow_unregistered) - : allowed_options(allowed_options), - m_allow_unregistered(allow_unregistered) - { - for(std::set<std::string>::const_iterator i = allowed_options.begin(); - i != allowed_options.end(); - ++i) - { - add_option(i->c_str()); - } - } - - void - common_config_file_iterator::add_option(const char* name) - { - string s(name); - assert(!s.empty()); - if (*s.rbegin() == '*') { - s.resize(s.size()-1); - bool bad_prefixes(false); - // If 's' is a prefix of one of allowed suffix, then - // lower_bound will return that element. - // If some element is prefix of 's', then lower_bound will - // return the next element. - set<string>::iterator i = allowed_prefixes.lower_bound(s); - if (i != allowed_prefixes.end()) { - if (i->find(s) == 0) - bad_prefixes = true; - } - if (i != allowed_prefixes.begin()) { - --i; - if (s.find(*i) == 0) - bad_prefixes = true; - } - if (bad_prefixes) - boost::throw_exception(error("bad prefixes")); - allowed_prefixes.insert(s); - } - } - - namespace { - string trim_ws(const string& s) - { - string::size_type n, n2; - n = s.find_first_not_of(" \t\r\n"); - if (n == string::npos) - return string(); - else { - n2 = s.find_last_not_of(" \t\r\n"); - return s.substr(n, n2-n+1); - } - } - } - - - void common_config_file_iterator::get() - { - string s; - string::size_type n; - bool found = false; - - while(this->getline(s)) { - - // strip '#' comments and whitespace - if ((n = s.find('#')) != string::npos) - s = s.substr(0, n); - s = trim_ws(s); - - if (!s.empty()) { - // Handle section name - if (*s.begin() == '[' && *s.rbegin() == ']') { - m_prefix = s.substr(1, s.size()-2); - if (*m_prefix.rbegin() != '.') - m_prefix += '.'; - } - else if ((n = s.find('=')) != string::npos) { - - string name = m_prefix + trim_ws(s.substr(0, n)); - string value = trim_ws(s.substr(n+1)); - - bool registered = allowed_option(name); - if (!registered && !m_allow_unregistered) - boost::throw_exception(unknown_option(name)); - - found = true; - this->value().string_key = name; - this->value().value.clear(); - this->value().value.push_back(value); - this->value().unregistered = !registered; - this->value().original_tokens.clear(); - this->value().original_tokens.push_back(name); - this->value().original_tokens.push_back(value); - break; - - } else { - boost::throw_exception(invalid_syntax(s, invalid_syntax::unrecognized_line)); - } - } - } - if (!found) - found_eof(); - } - - - bool - common_config_file_iterator::allowed_option(const std::string& s) const - { - set<string>::const_iterator i = allowed_options.find(s); - if (i != allowed_options.end()) - return true; - // If s is "pa" where "p" is allowed prefix then - // lower_bound should find the element after "p". - // This depends on 'allowed_prefixes' invariant. - i = allowed_prefixes.lower_bound(s); - if (i != allowed_prefixes.begin() && s.find(*--i) == 0) - return true; - return false; - } - -#if BOOST_WORKAROUND(__COMO_VERSION__, BOOST_TESTED_AT(4303)) || \ - (defined(__sgi) && BOOST_WORKAROUND(_COMPILER_VERSION, BOOST_TESTED_AT(741))) - template<> - bool - basic_config_file_iterator<wchar_t>::getline(std::string& s) - { - std::wstring ws; - // On Comeau, using two-argument version causes - // call to some internal function with std::wstring, and '\n' - // (not L'\n') and compile can't resolve that call. - - if (std::getline(*is, ws, L'\n')) { - s = to_utf8(ws); - return true; - } else { - return false; - } - } -#endif - -}}} - -#if 0 -using boost::program_options::config_file; - -#include <sstream> -#include <cassert> - -int main() -{ - try { - stringstream s( - "a = 1\n" - "b = 2\n"); - - config_file cf(s); - cf.add_option("a"); - cf.add_option("b"); - - assert(++cf); - assert(cf.name() == "a"); - assert(cf.value() == "1"); - assert(++cf); - assert(cf.name() == "b"); - assert(cf.value() == "2"); - assert(!++cf); - } - catch(exception& e) - { - cout << e.what() << "\n"; - } -} -#endif diff --git a/src/third_party/boost/libs/program_options/src/convert.cpp b/src/third_party/boost/libs/program_options/src/convert.cpp deleted file mode 100644 index 9be759e2603..00000000000 --- a/src/third_party/boost/libs/program_options/src/convert.cpp +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright Vladimir Prus 2004. -// 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) - -#include <fstream> -#include <locale.h> -#include <locale> -#include <iostream> -#include <string> -#include <locale> -#include <stdexcept> - -#include <boost/config.hpp> - -#define BOOST_PROGRAM_OPTIONS_SOURCE -#include <boost/program_options/config.hpp> -#include <boost/program_options/detail/convert.hpp> -#include <boost/program_options/detail/utf8_codecvt_facet.hpp> -#include <boost/throw_exception.hpp> - -#include <boost/bind.hpp> - -using namespace std; - -namespace boost { namespace detail { - - /* Internal function to actually perform conversion. - The logic in from_8_bit and to_8_bit function is exactly - the same, except that one calls 'in' method of codecvt and another - calls the 'out' method, and that syntax difference makes straightforward - template implementation impossible. - - This functions takes a 'fun' argument, which should have the same - parameters and return type and the in/out methods. The actual converting - function will pass functional objects created with boost::bind. - Experiments show that the performance loss is less than 10%. - */ - template<class ToChar, class FromChar, class Fun> - std::basic_string<ToChar> - convert(const std::basic_string<FromChar>& s, Fun fun) - - { - std::basic_string<ToChar> result; - - std::mbstate_t state = std::mbstate_t(); - - const FromChar* from = s.data(); - const FromChar* from_end = s.data() + s.size(); - // The interface of cvt is not really iterator-like, and it's - // not possible the tell the required output size without the conversion. - // All we can is convert data by pieces. - while(from != from_end) { - - // std::basic_string does not provide non-const pointers to the data, - // so converting directly into string is not possible. - ToChar buffer[32]; - - ToChar* to_next = buffer; - // Need variable because boost::bind doesn't work with rvalues. - ToChar* to_end = buffer + 32; - std::codecvt_base::result r = - fun(state, from, from_end, from, buffer, to_end, to_next); - - if (r == std::codecvt_base::error) - boost::throw_exception( - std::logic_error("character conversion failed")); - // 'partial' is not an error, it just means not all source - // characters were converted. However, we need to check that at - // least one new target character was produced. If not, it means - // the source data is incomplete, and since we don't have extra - // data to add to source, it's error. - if (to_next == buffer) - boost::throw_exception( - std::logic_error("character conversion failed")); - - // Add converted characters - result.append(buffer, to_next); - } - - return result; - } -}} - -namespace boost { - -#ifndef BOOST_NO_STD_WSTRING - BOOST_PROGRAM_OPTIONS_DECL std::wstring - from_8_bit(const std::string& s, - const std::codecvt<wchar_t, char, std::mbstate_t>& cvt) - { - return detail::convert<wchar_t>( - s, - boost::bind(&std::codecvt<wchar_t, char, mbstate_t>::in, - &cvt, - _1, _2, _3, _4, _5, _6, _7)); - } - - BOOST_PROGRAM_OPTIONS_DECL std::string - to_8_bit(const std::wstring& s, - const std::codecvt<wchar_t, char, std::mbstate_t>& cvt) - { - return detail::convert<char>( - s, - boost::bind(&codecvt<wchar_t, char, mbstate_t>::out, - &cvt, - _1, _2, _3, _4, _5, _6, _7)); - } - - - namespace { - boost::program_options::detail::utf8_codecvt_facet - utf8_facet; - } - - BOOST_PROGRAM_OPTIONS_DECL std::wstring - from_utf8(const std::string& s) - { - return from_8_bit(s, utf8_facet); - } - - BOOST_PROGRAM_OPTIONS_DECL std::string - to_utf8(const std::wstring& s) - { - return to_8_bit(s, utf8_facet); - } - - BOOST_PROGRAM_OPTIONS_DECL std::wstring - from_local_8_bit(const std::string& s) - { - typedef codecvt<wchar_t, char, mbstate_t> facet_type; - return from_8_bit(s, - BOOST_USE_FACET(facet_type, locale())); - } - - BOOST_PROGRAM_OPTIONS_DECL std::string - to_local_8_bit(const std::wstring& s) - { - typedef codecvt<wchar_t, char, mbstate_t> facet_type; - return to_8_bit(s, - BOOST_USE_FACET(facet_type, locale())); - } -#endif - - namespace program_options - { - BOOST_PROGRAM_OPTIONS_DECL std::string to_internal(const std::string& s) - { - return s; - } - -#ifndef BOOST_NO_STD_WSTRING - BOOST_PROGRAM_OPTIONS_DECL std::string to_internal(const std::wstring& s) - { - return to_utf8(s); - } -#endif - } - - -} diff --git a/src/third_party/boost/libs/program_options/src/options_description.cpp b/src/third_party/boost/libs/program_options/src/options_description.cpp deleted file mode 100644 index 0d8dfd48be5..00000000000 --- a/src/third_party/boost/libs/program_options/src/options_description.cpp +++ /dev/null @@ -1,624 +0,0 @@ -// Copyright Vladimir Prus 2002-2004. -// Copyright Bertolt Mildner 2004. -// 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) - - -#define BOOST_PROGRAM_OPTIONS_SOURCE -#include <boost/program_options/config.hpp> -#include <boost/program_options/options_description.hpp> -// FIXME: this is only to get multiple_occurences class -// should move that to a separate headers. -#include <boost/program_options/parsers.hpp> - - -#include <boost/lexical_cast.hpp> -#include <boost/tokenizer.hpp> -#include <boost/detail/workaround.hpp> -#include <boost/throw_exception.hpp> - -#include <cassert> -#include <climits> -#include <cstring> -#include <cstdarg> -#include <sstream> -#include <iterator> -using namespace std; - -namespace boost { namespace program_options { - - namespace { - - template< class charT > - std::basic_string< charT > tolower_(const std::basic_string< charT >& str) - { - std::basic_string< charT > result; - for (typename std::basic_string< charT >::size_type i = 0; i < str.size(); ++i) - { - result.append(1, static_cast< charT >(std::tolower(str[i]))); - } - return result; - } - - } // unnamed namespace - - - option_description::option_description() - { - } - - option_description:: - option_description(const char* name, - const value_semantic* s) - : m_value_semantic(s) - { - this->set_name(name); - } - - - option_description:: - option_description(const char* name, - const value_semantic* s, - const char* description) - : m_description(description), m_value_semantic(s) - { - this->set_name(name); - } - - option_description::~option_description() - { - } - - option_description::match_result - option_description::match(const std::string& option, - bool approx, - bool long_ignore_case, - bool short_ignore_case) const - { - match_result result = no_match; - - std::string local_long_name((long_ignore_case ? tolower_(m_long_name) : m_long_name)); - - if (!local_long_name.empty()) { - - std::string local_option = (long_ignore_case ? tolower_(option) : option); - - if (*local_long_name.rbegin() == '*') - { - // The name ends with '*'. Any specified name with the given - // prefix is OK. - if (local_option.find(local_long_name.substr(0, local_long_name.length()-1)) - == 0) - result = approximate_match; - } - - if (local_long_name == local_option) - { - result = full_match; - } - else if (approx) - { - if (local_long_name.find(local_option) == 0) - { - result = approximate_match; - } - } - } - - if (result != full_match) - { - std::string local_option(short_ignore_case ? tolower_(option) : option); - std::string local_short_name(short_ignore_case ? tolower_(m_short_name) : m_short_name); - - if (local_short_name == local_option) - { - result = full_match; - } - } - - return result; - } - - const std::string& - option_description::key(const std::string& option) const - { - if (!m_long_name.empty()) - if (m_long_name.find('*') != string::npos) - // The '*' character means we're long_name - // matches only part of the input. So, returning - // long name will remove some of the information, - // and we have to return the option as specified - // in the source. - return option; - else - return m_long_name; - else - return m_short_name; - } - - const std::string& - option_description::long_name() const - { - return m_long_name; - } - - option_description& - option_description::set_name(const char* _name) - { - std::string name(_name); - string::size_type n = name.find(','); - if (n != string::npos) { - assert(n == name.size()-2); - m_long_name = name.substr(0, n); - m_short_name = '-' + name.substr(n+1,1); - } else { - m_long_name = name; - } - return *this; - } - - const std::string& - option_description::description() const - { - return m_description; - } - - shared_ptr<const value_semantic> - option_description::semantic() const - { - return m_value_semantic; - } - - std::string - option_description::format_name() const - { - if (!m_short_name.empty()) - return string(m_short_name).append(" [ --"). - append(m_long_name).append(" ]"); - else - return string("--").append(m_long_name); - } - - std::string - option_description::format_parameter() const - { - if (m_value_semantic->max_tokens() != 0) - return m_value_semantic->name(); - else - return ""; - } - - options_description_easy_init:: - options_description_easy_init(options_description* owner) - : owner(owner) - {} - - options_description_easy_init& - options_description_easy_init:: - operator()(const char* name, - const char* description) - { - // Create untypes semantic which accepts zero tokens: i.e. - // no value can be specified on command line. - // FIXME: does not look exception-safe - shared_ptr<option_description> d( - new option_description(name, new untyped_value(true), description)); - - owner->add(d); - return *this; - } - - options_description_easy_init& - options_description_easy_init:: - operator()(const char* name, - const value_semantic* s) - { - shared_ptr<option_description> d(new option_description(name, s)); - owner->add(d); - return *this; - } - - options_description_easy_init& - options_description_easy_init:: - operator()(const char* name, - const value_semantic* s, - const char* description) - { - shared_ptr<option_description> d(new option_description(name, s, description)); - - owner->add(d); - return *this; - } - - const unsigned options_description::m_default_line_length = 80; - - options_description::options_description(unsigned line_length, - unsigned min_description_length) - : m_line_length(line_length) - , m_min_description_length(min_description_length) - { - // we require a space between the option and description parts, so add 1. - assert(m_min_description_length < m_line_length - 1); - } - - options_description::options_description(const std::string& caption, - unsigned line_length, - unsigned min_description_length) - : m_caption(caption) - , m_line_length(line_length) - , m_min_description_length(min_description_length) - { - // we require a space between the option and description parts, so add 1. - assert(m_min_description_length < m_line_length - 1); - } - - void - options_description::add(shared_ptr<option_description> desc) - { - m_options.push_back(desc); - belong_to_group.push_back(false); - } - - options_description& - options_description::add(const options_description& desc) - { - shared_ptr<options_description> d(new options_description(desc)); - groups.push_back(d); - - for (size_t i = 0; i < desc.m_options.size(); ++i) { - add(desc.m_options[i]); - belong_to_group.back() = true; - } - - return *this; - } - - options_description_easy_init - options_description::add_options() - { - return options_description_easy_init(this); - } - - const option_description& - options_description::find(const std::string& name, - bool approx, - bool long_ignore_case, - bool short_ignore_case) const - { - const option_description* d = find_nothrow(name, approx, - long_ignore_case, short_ignore_case); - if (!d) - boost::throw_exception(unknown_option(name)); - return *d; - } - - const std::vector< shared_ptr<option_description> >& - options_description::options() const - { - return m_options; - } - - const option_description* - options_description::find_nothrow(const std::string& name, - bool approx, - bool long_ignore_case, - bool short_ignore_case) const - { - shared_ptr<option_description> found; - bool had_full_match = false; - vector<string> approximate_matches; - vector<string> full_matches; - - // We use linear search because matching specified option - // name with the declared option name need to take care about - // case sensitivity and trailing '*' and so we can't use simple map. - for(unsigned i = 0; i < m_options.size(); ++i) - { - option_description::match_result r = - m_options[i]->match(name, approx, long_ignore_case, short_ignore_case); - - if (r == option_description::no_match) - continue; - - if (r == option_description::full_match) - { - full_matches.push_back(m_options[i]->key(name)); - found = m_options[i]; - had_full_match = true; - } - else - { - // FIXME: the use of 'key' here might not - // be the best approach. - approximate_matches.push_back(m_options[i]->key(name)); - if (!had_full_match) - found = m_options[i]; - } - } - if (full_matches.size() > 1) - boost::throw_exception( - ambiguous_option(name, full_matches)); - - // If we have a full match, and an approximate match, - // ignore approximate match instead of reporting error. - // Say, if we have options "all" and "all-chroots", then - // "--all" on the command line should select the first one, - // without ambiguity. - if (full_matches.empty() && approximate_matches.size() > 1) - boost::throw_exception( - ambiguous_option(name, approximate_matches)); - - return found.get(); - } - - BOOST_PROGRAM_OPTIONS_DECL - std::ostream& operator<<(std::ostream& os, const options_description& desc) - { - desc.print(os); - return os; - } - - namespace { - - /* Given a string 'par', that contains no newline characters - outputs it to 'os' with wordwrapping, that is, as several - line. - - Each output line starts with 'indent' space characters, - following by characters from 'par'. The total length of - line is no longer than 'line_length'. - - */ - void format_paragraph(std::ostream& os, - std::string par, - unsigned indent, - unsigned line_length) - { - // Through reminder of this function, 'line_length' will - // be the length available for characters, not including - // indent. - assert(indent < line_length); - line_length -= indent; - - // index of tab (if present) is used as additional indent relative - // to first_column_width if paragrapth is spanned over multiple - // lines if tab is not on first line it is ignored - string::size_type par_indent = par.find('\t'); - - if (par_indent == string::npos) - { - par_indent = 0; - } - else - { - // only one tab per paragraph allowed - if (count(par.begin(), par.end(), '\t') > 1) - { - boost::throw_exception(program_options::error( - "Only one tab per paragraph is allowed")); - } - - // erase tab from string - par.erase(par_indent, 1); - - // this assert may fail due to user error or - // environment conditions! - assert(par_indent < line_length); - - // ignore tab if not on first line - if (par_indent >= line_length) - { - par_indent = 0; - } - } - - if (par.size() < line_length) - { - os << par; - } - else - { - string::const_iterator line_begin = par.begin(); - const string::const_iterator par_end = par.end(); - - bool first_line = true; // of current paragraph! - - while (line_begin < par_end) // paragraph lines - { - if (!first_line) - { - // If line starts with space, but second character - // is not space, remove the leading space. - // We don't remove double spaces because those - // might be intentianal. - if ((*line_begin == ' ') && - ((line_begin + 1 < par_end) && - (*(line_begin + 1) != ' '))) - { - line_begin += 1; // line_begin != line_end - } - } - - // Take care to never increment the iterator past - // the end, since MSVC 8.0 (brokenly), assumes that - // doing that, even if no access happens, is a bug. - unsigned remaining = distance(line_begin, par_end); - string::const_iterator line_end = line_begin + - ((remaining < line_length) ? remaining : line_length); - - // prevent chopped words - // Is line_end between two non-space characters? - if ((*(line_end - 1) != ' ') && - ((line_end < par_end) && (*line_end != ' '))) - { - // find last ' ' in the second half of the current paragraph line - string::const_iterator last_space = - find(reverse_iterator<string::const_iterator>(line_end), - reverse_iterator<string::const_iterator>(line_begin), - ' ') - .base(); - - if (last_space != line_begin) - { - // is last_space within the second half ot the - // current line - if (static_cast<unsigned>(distance(last_space, line_end)) < - (line_length / 2)) - { - line_end = last_space; - } - } - } // prevent chopped words - - // write line to stream - copy(line_begin, line_end, ostream_iterator<char>(os)); - - if (first_line) - { - indent += par_indent; - line_length -= par_indent; // there's less to work with now - first_line = false; - } - - // more lines to follow? - if (line_end != par_end) - { - os << '\n'; - - for(unsigned pad = indent; pad > 0; --pad) - { - os.put(' '); - } - } - - // next line starts after of this line - line_begin = line_end; - } // paragraph lines - } - } - - void format_description(std::ostream& os, - const std::string& desc, - unsigned first_column_width, - unsigned line_length) - { - // we need to use one char less per line to work correctly if actual - // console has longer lines - assert(line_length > 1); - if (line_length > 1) - { - --line_length; - } - - // line_length must be larger than first_column_width - // this assert may fail due to user error or environment conditions! - assert(line_length > first_column_width); - - // Note: can't use 'tokenizer' as name of typedef -- borland - // will consider uses of 'tokenizer' below as uses of - // boost::tokenizer, not typedef. - typedef boost::tokenizer<boost::char_separator<char> > tok; - - tok paragraphs( - desc, - char_separator<char>("\n", "", boost::keep_empty_tokens)); - - tok::const_iterator par_iter = paragraphs.begin(); - const tok::const_iterator par_end = paragraphs.end(); - - while (par_iter != par_end) // paragraphs - { - format_paragraph(os, *par_iter, first_column_width, - line_length); - - ++par_iter; - - // prepair next line if any - if (par_iter != par_end) - { - os << '\n'; - - for(unsigned pad = first_column_width; pad > 0; --pad) - { - os.put(' '); - } - } - } // paragraphs - } - - void format_one(std::ostream& os, const option_description& opt, - unsigned first_column_width, unsigned line_length) - { - stringstream ss; - ss << " " << opt.format_name() << ' ' << opt.format_parameter(); - - // Don't use ss.rdbuf() since g++ 2.96 is buggy on it. - os << ss.str(); - - if (!opt.description().empty()) - { - if (ss.str().size() >= first_column_width) - { - os.put('\n'); // first column is too long, lets put description in new line - for (unsigned pad = first_column_width; pad > 0; --pad) - { - os.put(' '); - } - } else { - for(unsigned pad = first_column_width - ss.str().size(); pad > 0; --pad) - { - os.put(' '); - } - } - - format_description(os, opt.description(), - first_column_width, line_length); - } - } - } - - void - options_description::print(std::ostream& os) const - { - if (!m_caption.empty()) - os << m_caption << ":\n"; - - /* Find the maximum width of the option column */ - unsigned width(23); - unsigned i; // vc6 has broken for loop scoping - for (i = 0; i < m_options.size(); ++i) - { - const option_description& opt = *m_options[i]; - stringstream ss; - ss << " " << opt.format_name() << ' ' << opt.format_parameter(); - width = (max)(width, static_cast<unsigned>(ss.str().size())); - } - /* this is the column were description should start, if first - column is longer, we go to a new line */ - const unsigned start_of_description_column = m_line_length - m_min_description_length; - - width = (min)(width, start_of_description_column-1); - - /* add an additional space to improve readability */ - ++width; - - /* The options formatting style is stolen from Subversion. */ - for (i = 0; i < m_options.size(); ++i) - { - if (belong_to_group[i]) - continue; - - const option_description& opt = *m_options[i]; - - format_one(os, opt, width, m_line_length); - - os << "\n"; - } - - for (unsigned j = 0; j < groups.size(); ++j) { - os << "\n" << *groups[j]; - } - } - -}} diff --git a/src/third_party/boost/libs/program_options/src/parsers.cpp b/src/third_party/boost/libs/program_options/src/parsers.cpp deleted file mode 100644 index bc3b8585943..00000000000 --- a/src/third_party/boost/libs/program_options/src/parsers.cpp +++ /dev/null @@ -1,245 +0,0 @@ -// Copyright Vladimir Prus 2002-2004. -// 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) - - -#include <boost/config.hpp> - -#define BOOST_PROGRAM_OPTIONS_SOURCE -#include <boost/program_options/config.hpp> -#include <boost/program_options/parsers.hpp> -#include <boost/program_options/options_description.hpp> -#include <boost/program_options/positional_options.hpp> -#include <boost/program_options/detail/cmdline.hpp> -#include <boost/program_options/detail/config_file.hpp> -#include <boost/program_options/environment_iterator.hpp> -#include <boost/program_options/detail/convert.hpp> - -#include <boost/bind.hpp> -#include <boost/throw_exception.hpp> - -#include <cctype> -#include <fstream> - -#if !defined(__GNUC__) || __GNUC__ < 3 -#include <iostream> -#else -#include <istream> -#endif - -#ifdef _WIN32 -#include <stdlib.h> -#else -#include <unistd.h> -#endif - -// The 'environ' should be declared in some cases. E.g. Linux man page says: -// (This variable must be declared in the user program, but is declared in -// the header file unistd.h in case the header files came from libc4 or libc5, -// and in case they came from glibc and _GNU_SOURCE was defined.) -// To be safe, declare it here. - -// It appears that on Mac OS X the 'environ' variable is not -// available to dynamically linked libraries. -// See: http://article.gmane.org/gmane.comp.lib.boost.devel/103843 -// See: http://lists.gnu.org/archive/html/bug-guile/2004-01/msg00013.html -#if defined(__APPLE__) && defined(__DYNAMIC__) -#include <crt_externs.h> -#define environ (*_NSGetEnviron()) -#else -#if defined(__MWERKS__) -#include <crtl.h> -#else -#if !defined(_WIN32) || defined(__COMO_VERSION__) -extern char** environ; -#endif -#endif -#endif - -using namespace std; - -namespace boost { namespace program_options { - -#ifndef BOOST_NO_STD_WSTRING - namespace { - woption woption_from_option(const option& opt) - { - woption result; - result.string_key = opt.string_key; - result.position_key = opt.position_key; - result.unregistered = opt.unregistered; - - std::transform(opt.value.begin(), opt.value.end(), - back_inserter(result.value), - boost::bind(from_utf8, _1)); - - std::transform(opt.original_tokens.begin(), - opt.original_tokens.end(), - back_inserter(result.original_tokens), - boost::bind(from_utf8, _1)); - return result; - } - } - - basic_parsed_options<wchar_t> - ::basic_parsed_options(const parsed_options& po) - : description(po.description), - utf8_encoded_options(po) - { - for (unsigned i = 0; i < po.options.size(); ++i) - options.push_back(woption_from_option(po.options[i])); - } -#endif - - template<class charT> - basic_parsed_options<charT> - parse_config_file(std::basic_istream<charT>& is, - const options_description& desc, - bool allow_unregistered) - { - set<string> allowed_options; - - const vector<shared_ptr<option_description> >& options = desc.options(); - for (unsigned i = 0; i < options.size(); ++i) - { - const option_description& d = *options[i]; - - if (d.long_name().empty()) - boost::throw_exception( - error("long name required for config file")); - - allowed_options.insert(d.long_name()); - } - - // Parser return char strings - parsed_options result(&desc); - copy(detail::basic_config_file_iterator<charT>( - is, allowed_options, allow_unregistered), - detail::basic_config_file_iterator<charT>(), - back_inserter(result.options)); - // Convert char strings into desired type. - return basic_parsed_options<charT>(result); - } - - template - BOOST_PROGRAM_OPTIONS_DECL basic_parsed_options<char> - parse_config_file(std::basic_istream<char>& is, - const options_description& desc, - bool allow_unregistered); - -#ifndef BOOST_NO_STD_WSTRING - template - BOOST_PROGRAM_OPTIONS_DECL basic_parsed_options<wchar_t> - parse_config_file(std::basic_istream<wchar_t>& is, - const options_description& desc, - bool allow_unregistered); -#endif - - template<class charT> - basic_parsed_options<charT> - parse_config_file(const char* filename, - const options_description& desc, - bool allow_unregistered) - { - // Parser return char strings - std::basic_ifstream< charT > strm(filename); - if (!strm) - { - boost::throw_exception(reading_file(filename)); - } - return parse_config_file(strm, desc, allow_unregistered); - } - - template - BOOST_PROGRAM_OPTIONS_DECL basic_parsed_options<char> - parse_config_file(const char* filename, - const options_description& desc, - bool allow_unregistered); - -#ifndef BOOST_NO_STD_WSTRING - template - BOOST_PROGRAM_OPTIONS_DECL basic_parsed_options<wchar_t> - parse_config_file(const char* filename, - const options_description& desc, - bool allow_unregistered); -#endif - - -// This versio, which accepts any options without validation, is disabled, -// in the hope that nobody will need it and we cant drop it altogether. -// Besides, probably the right way to handle all options is the '*' name. -#if 0 - BOOST_PROGRAM_OPTIONS_DECL parsed_options - parse_config_file(std::istream& is) - { - detail::config_file_iterator cf(is, false); - parsed_options result(0); - copy(cf, detail::config_file_iterator(), - back_inserter(result.options)); - return result; - } -#endif - - BOOST_PROGRAM_OPTIONS_DECL parsed_options - parse_environment(const options_description& desc, - const function1<std::string, std::string>& name_mapper) - { - parsed_options result(&desc); - - for(environment_iterator i(environ), e; i != e; ++i) { - string option_name = name_mapper(i->first); - - if (!option_name.empty()) { - option n; - n.string_key = option_name; - n.value.push_back(i->second); - result.options.push_back(n); - } - } - - return result; - } - - namespace detail { - class prefix_name_mapper { - public: - prefix_name_mapper(const std::string& prefix) - : prefix(prefix) - {} - - std::string operator()(const std::string& s) - { - string result; - if (s.find(prefix) == 0) { - for(string::size_type n = prefix.size(); n < s.size(); ++n) - { - // Intel-Win-7.1 does not understand - // push_back on string. - result += tolower(s[n]); - } - } - return result; - } - private: - std::string prefix; - }; - } - - BOOST_PROGRAM_OPTIONS_DECL parsed_options - parse_environment(const options_description& desc, - const std::string& prefix) - { - return parse_environment(desc, detail::prefix_name_mapper(prefix)); - } - - BOOST_PROGRAM_OPTIONS_DECL parsed_options - parse_environment(const options_description& desc, const char* prefix) - { - return parse_environment(desc, string(prefix)); - } - - - - -}} diff --git a/src/third_party/boost/libs/program_options/src/positional_options.cpp b/src/third_party/boost/libs/program_options/src/positional_options.cpp deleted file mode 100644 index 55995d7f077..00000000000 --- a/src/third_party/boost/libs/program_options/src/positional_options.cpp +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright Vladimir Prus 2004. -// 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) - -#define BOOST_PROGRAM_OPTIONS_SOURCE -#include <boost/program_options/config.hpp> - -#include <boost/program_options/positional_options.hpp> - -#include <boost/limits.hpp> - -#include <cassert> - -namespace boost { namespace program_options { - - positional_options_description::positional_options_description() - {} - - positional_options_description& - positional_options_description::add(const char* name, int max_count) - { - assert(max_count != -1 || m_trailing.empty()); - - if (max_count == -1) - m_trailing = name; - else { - m_names.resize(m_names.size() + max_count, name); - } - return *this; - } - - unsigned - positional_options_description::max_total_count() const - { - return m_trailing.empty() ? - m_names.size() : (std::numeric_limits<unsigned>::max)(); - } - - const std::string& - positional_options_description::name_for_position(unsigned position) const - { - assert(position < max_total_count()); - - if (position < m_names.size()) - return m_names[position]; - else - return m_trailing; - } - - -}} - diff --git a/src/third_party/boost/libs/program_options/src/split.cpp b/src/third_party/boost/libs/program_options/src/split.cpp deleted file mode 100644 index 96da068b824..00000000000 --- a/src/third_party/boost/libs/program_options/src/split.cpp +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright Sascha Ochsenknecht 2009. -// 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) - -#define BOOST_PROGRAM_OPTIONS_SOURCE - -#include <boost/program_options/parsers.hpp> -#include <boost/tokenizer.hpp> - -#include <string> -#include <vector> - -namespace boost { namespace program_options { namespace detail { - - template< class charT > - std::vector<std::basic_string<charT> > - split_unix( - const std::basic_string<charT>& cmdline, - const std::basic_string<charT>& seperator, - const std::basic_string<charT>& quote, - const std::basic_string<charT>& escape) - { - typedef boost::tokenizer< boost::escaped_list_separator<charT>, - typename std::basic_string<charT>::const_iterator, - std::basic_string<charT> > tokenizerT; - - tokenizerT tok(cmdline.begin(), cmdline.end(), - boost::escaped_list_separator< charT >(escape, seperator, quote)); - - std::vector< std::basic_string<charT> > result; - for (typename tokenizerT::iterator cur_token(tok.begin()), end_token(tok.end()); cur_token != end_token; ++cur_token) { - if (!cur_token->empty()) - result.push_back(*cur_token); - } - return result; - } - -}}} // namespace - -namespace boost { namespace program_options { - - // Take a command line string and splits in into tokens, according - // to the given collection of seperators chars. - BOOST_PROGRAM_OPTIONS_DECL std::vector<std::string> - split_unix(const std::string& cmdline, const std::string& seperator, - const std::string& quote, const std::string& escape) - { - return detail::split_unix< char >(cmdline, seperator, quote, escape); - } - -#ifndef BOOST_NO_STD_WSTRING - BOOST_PROGRAM_OPTIONS_DECL std::vector<std::wstring> - split_unix(const std::wstring& cmdline, const std::wstring& seperator, - const std::wstring& quote, const std::wstring& escape) - { - return detail::split_unix< wchar_t >(cmdline, seperator, quote, escape); - } -#endif - -}} // namespace - diff --git a/src/third_party/boost/libs/program_options/src/utf8_codecvt_facet.cpp b/src/third_party/boost/libs/program_options/src/utf8_codecvt_facet.cpp deleted file mode 100644 index c0fd7c0f3bd..00000000000 --- a/src/third_party/boost/libs/program_options/src/utf8_codecvt_facet.cpp +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright Vladimir Prus 2004. -// 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) - -#define BOOST_PROGRAM_OPTIONS_SOURCE -#include <boost/program_options/config.hpp> - -#define BOOST_UTF8_BEGIN_NAMESPACE \ - namespace boost { namespace program_options { namespace detail { - -#define BOOST_UTF8_END_NAMESPACE }}} -#define BOOST_UTF8_DECL BOOST_PROGRAM_OPTIONS_DECL - -#include "../../detail/utf8_codecvt_facet.cpp" - - -#undef BOOST_UTF8_BEGIN_NAMESPACE -#undef BOOST_UTF8_END_NAMESPACE -#undef BOOST_UTF8_DECL - diff --git a/src/third_party/boost/libs/program_options/src/value_semantic.cpp b/src/third_party/boost/libs/program_options/src/value_semantic.cpp deleted file mode 100644 index f5770f1d088..00000000000 --- a/src/third_party/boost/libs/program_options/src/value_semantic.cpp +++ /dev/null @@ -1,335 +0,0 @@ -// Copyright Vladimir Prus 2004. -// 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) - -#define BOOST_PROGRAM_OPTIONS_SOURCE -#include <boost/program_options/config.hpp> -#include <boost/program_options/value_semantic.hpp> -#include <boost/program_options/detail/convert.hpp> - -#include <cctype> - -namespace boost { namespace program_options { - - using namespace std; - - void - value_semantic_codecvt_helper<char>:: - parse(boost::any& value_store, - const std::vector<std::string>& new_tokens, - bool utf8) const - { - if (utf8) { -#ifndef BOOST_NO_STD_WSTRING - // Need to convert to local encoding. - std::vector<string> local_tokens; - for (unsigned i = 0; i < new_tokens.size(); ++i) { - std::wstring w = from_utf8(new_tokens[i]); - local_tokens.push_back(to_local_8_bit(w)); - } - xparse(value_store, local_tokens); -#else - boost::throw_exception( - std::runtime_error("UTF-8 conversion not supported.")); -#endif - } else { - // Already in local encoding, pass unmodified - xparse(value_store, new_tokens); - } - } - -#ifndef BOOST_NO_STD_WSTRING - void - value_semantic_codecvt_helper<wchar_t>:: - parse(boost::any& value_store, - const std::vector<std::string>& new_tokens, - bool utf8) const - { - std::vector<wstring> tokens; - if (utf8) { - // Convert from utf8 - for (unsigned i = 0; i < new_tokens.size(); ++i) { - tokens.push_back(from_utf8(new_tokens[i])); - } - - } else { - // Convert from local encoding - for (unsigned i = 0; i < new_tokens.size(); ++i) { - tokens.push_back(from_local_8_bit(new_tokens[i])); - } - } - - xparse(value_store, tokens); - } -#endif - - BOOST_PROGRAM_OPTIONS_DECL std::string arg("arg"); - - std::string - untyped_value::name() const - { - return arg; - } - - unsigned - untyped_value::min_tokens() const - { - if (m_zero_tokens) - return 0; - else - return 1; - } - - unsigned - untyped_value::max_tokens() const - { - if (m_zero_tokens) - return 0; - else - return 1; - } - - - void - untyped_value::xparse(boost::any& value_store, - const std::vector<std::string>& new_tokens) const - { - if (!value_store.empty()) - boost::throw_exception( - multiple_occurrences()); - if (new_tokens.size() > 1) - boost::throw_exception(multiple_values()); - value_store = new_tokens.empty() ? std::string("") : new_tokens.front(); - } - - BOOST_PROGRAM_OPTIONS_DECL typed_value<bool>* - bool_switch() - { - return bool_switch(0); - } - - BOOST_PROGRAM_OPTIONS_DECL typed_value<bool>* - bool_switch(bool* v) - { - typed_value<bool>* r = new typed_value<bool>(v); - r->default_value(0); - r->zero_tokens(); - - return r; - } - - /* Validates bool value. - Any of "1", "true", "yes", "on" will be converted to "1".<br> - Any of "0", "false", "no", "off" will be converted to "0".<br> - Case is ignored. The 'xs' vector can either be empty, in which - case the value is 'true', or can contain explicit value. - */ - BOOST_PROGRAM_OPTIONS_DECL void validate(any& v, const vector<string>& xs, - bool*, int) - { - check_first_occurrence(v); - string s(get_single_string(xs, true)); - - for (size_t i = 0; i < s.size(); ++i) - s[i] = char(tolower(s[i])); - - if (s.empty() || s == "on" || s == "yes" || s == "1" || s == "true") - v = any(true); - else if (s == "off" || s == "no" || s == "0" || s == "false") - v = any(false); - else - boost::throw_exception(validation_error(validation_error::invalid_bool_value, s)); - } - - // This is blatant copy-paste. However, templating this will cause a problem, - // since wstring can't be constructed/compared with char*. We'd need to - // create auxiliary 'widen' routine to convert from char* into - // needed string type, and that's more work. -#if !defined(BOOST_NO_STD_WSTRING) - BOOST_PROGRAM_OPTIONS_DECL - void validate(any& v, const vector<wstring>& xs, bool*, int) - { - check_first_occurrence(v); - wstring s(get_single_string(xs, true)); - - for (size_t i = 0; i < s.size(); ++i) - s[i] = wchar_t(tolower(s[i])); - - if (s.empty() || s == L"on" || s == L"yes" || s == L"1" || s == L"true") - v = any(true); - else if (s == L"off" || s == L"no" || s == L"0" || s == L"false") - v = any(false); - else - boost::throw_exception(validation_error(validation_error::invalid_bool_value)); - } -#endif - BOOST_PROGRAM_OPTIONS_DECL - void validate(any& v, const vector<string>& xs, std::string*, int) - { - check_first_occurrence(v); - v = any(get_single_string(xs)); - } - -#if !defined(BOOST_NO_STD_WSTRING) - BOOST_PROGRAM_OPTIONS_DECL - void validate(any& v, const vector<wstring>& xs, std::string*, int) - { - check_first_occurrence(v); - v = any(get_single_string(xs)); - } -#endif - - namespace validators { - - BOOST_PROGRAM_OPTIONS_DECL - void check_first_occurrence(const boost::any& value) - { - if (!value.empty()) - boost::throw_exception( - multiple_occurrences()); - } - } - - - invalid_option_value:: - invalid_option_value(const std::string& bad_value) - : validation_error(validation_error::invalid_option_value, bad_value) - {} - -#ifndef BOOST_NO_STD_WSTRING - namespace - { - std::string convert_value(const std::wstring& s) - { - try { - return to_local_8_bit(s); - } - catch(const std::exception&) { - return "<unrepresentable unicode string>"; - } - } - } - - invalid_option_value:: - invalid_option_value(const std::wstring& bad_value) - : validation_error(validation_error::invalid_option_value, convert_value(bad_value)) - {} -#endif - const std::string& - unknown_option::get_option_name() const throw() - { - return m_option_name; - } - - const std::string& - ambiguous_option::get_option_name() const throw() - { - return m_option_name; - } - - const std::vector<std::string>& - ambiguous_option::alternatives() const throw() - { - return m_alternatives; - } - - void - multiple_values::set_option_name(const std::string& option_name) - { - m_option_name = option_name; - } - - const std::string& - multiple_values::get_option_name() const throw() - { - return m_option_name; - } - - void - multiple_occurrences::set_option_name(const std::string& option_name) - { - m_option_name = option_name; - } - - const std::string& - multiple_occurrences::get_option_name() const throw() - { - return m_option_name; - } - - validation_error:: - validation_error(kind_t kind, - const std::string& option_value, - const std::string& option_name) - : error("") - , m_kind(kind) - , m_option_name(option_name) - , m_option_value(option_value) - , m_message(error_message(kind)) - { - if (!option_value.empty()) - { - m_message.append(std::string("'") + option_value + std::string("'")); - } - } - - void - validation_error::set_option_name(const std::string& option_name) - { - m_option_name = option_name; - } - - const std::string& - validation_error::get_option_name() const throw() - { - return m_option_name; - } - - std::string - validation_error::error_message(kind_t kind) - { - // Initially, store the message in 'const char*' variable, - // to avoid conversion to std::string in all cases. - const char* msg; - switch(kind) - { - case multiple_values_not_allowed: - msg = "multiple values not allowed"; - break; - case at_least_one_value_required: - msg = "at least one value required"; - break; - case invalid_bool_value: - msg = "invalid bool value"; - break; - case invalid_option_value: - msg = "invalid option value"; - break; - case invalid_option: - msg = "invalid option"; - break; - default: - msg = "unknown error"; - } - return msg; - } - - const char* - validation_error::what() const throw() - { - if (!m_option_name.empty()) - { - m_message = "in option '" + m_option_name + "': " - + error_message(m_kind); - } - return m_message.c_str(); - } - - const std::string& - required_option::get_option_name() const throw() - { - return m_option_name; - } - -}} diff --git a/src/third_party/boost/libs/program_options/src/variables_map.cpp b/src/third_party/boost/libs/program_options/src/variables_map.cpp deleted file mode 100644 index 29b1de97737..00000000000 --- a/src/third_party/boost/libs/program_options/src/variables_map.cpp +++ /dev/null @@ -1,231 +0,0 @@ -// Copyright Vladimir Prus 2002-2004. -// 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) - - -#define BOOST_PROGRAM_OPTIONS_SOURCE -#include <boost/program_options/config.hpp> -#include <boost/program_options/parsers.hpp> -#include <boost/program_options/options_description.hpp> -#include <boost/program_options/value_semantic.hpp> -#include <boost/program_options/variables_map.hpp> - -#include <cassert> - -namespace boost { namespace program_options { - - using namespace std; - - // First, performs semantic actions for 'oa'. - // Then, stores in 'm' all options that are defined in 'desc'. - BOOST_PROGRAM_OPTIONS_DECL - void store(const parsed_options& options, variables_map& xm, - bool utf8) - { - // TODO: what if we have different definition - // for the same option name during different calls - // 'store'. - assert(options.description); - const options_description& desc = *options.description; - - // We need to access map's operator[], not the overriden version - // variables_map. Ehmm.. messy. - std::map<std::string, variable_value>& m = xm; - - std::set<std::string> new_final; - - // Declared once, to please Intel in VC++ mode; - unsigned i; - - // First, convert/store all given options - for (i = 0; i < options.options.size(); ++i) { - - const string& name = options.options[i].string_key; - // Skip positional options without name - if (name.empty()) - continue; - - // Ignore unregistered option. The 'unregistered' - // field can be true only if user has explicitly asked - // to allow unregistered options. We can't store them - // to variables map (lacking any information about paring), - // so just ignore them. - if (options.options[i].unregistered) - continue; - - // If option has final value, skip this assignment - if (xm.m_final.count(name)) - continue; - - const option_description& d = desc.find(name, false, - false, false); - - variable_value& v = m[name]; - if (v.defaulted()) { - // Explicit assignment here erases defaulted value - v = variable_value(); - } - - try { - d.semantic()->parse(v.value(), options.options[i].value, utf8); - } -#ifndef BOOST_NO_EXCEPTIONS - catch(validation_error& e) - { - e.set_option_name(name); - throw; - } - catch(multiple_occurrences& e) - { - e.set_option_name(name); - throw; - } - catch(multiple_values& e) - { - e.set_option_name(name); - throw; - } -#endif - v.m_value_semantic = d.semantic(); - - // The option is not composing, and the value is explicitly - // provided. Ignore values of this option for subsequent - // calls to 'store'. We store this to a temporary set, - // so that several assignment inside *this* 'store' call - // are allowed. - if (!d.semantic()->is_composing()) - new_final.insert(name); - } - xm.m_final.insert(new_final.begin(), new_final.end()); - - - - // Second, apply default values and store required options. - const vector<shared_ptr<option_description> >& all = desc.options(); - for(i = 0; i < all.size(); ++i) - { - const option_description& d = *all[i]; - string key = d.key(""); - // FIXME: this logic relies on knowledge of option_description - // internals. - // The 'key' is empty if options description contains '*'. - // In that - // case, default value makes no sense at all. - if (key.empty()) - { - continue; - } - if (m.count(key) == 0) { - - boost::any def; - if (d.semantic()->apply_default(def)) { - m[key] = variable_value(def, true); - m[key].m_value_semantic = d.semantic(); - } - } - - // add empty value if this is an required option - if (d.semantic()->is_required()) { - xm.m_required.insert(key); - } - } - } - - BOOST_PROGRAM_OPTIONS_DECL - void store(const wparsed_options& options, variables_map& m) - { - store(options.utf8_encoded_options, m, true); - } - - BOOST_PROGRAM_OPTIONS_DECL - void notify(variables_map& vm) - { - vm.notify(); - } - - abstract_variables_map::abstract_variables_map() - : m_next(0) - {} - - abstract_variables_map:: - abstract_variables_map(const abstract_variables_map* next) - : m_next(next) - {} - - const variable_value& - abstract_variables_map::operator[](const std::string& name) const - { - const variable_value& v = get(name); - if (v.empty() && m_next) - return (*m_next)[name]; - else if (v.defaulted() && m_next) { - const variable_value& v2 = (*m_next)[name]; - if (!v2.empty() && !v2.defaulted()) - return v2; - else return v; - } else { - return v; - } - } - - void - abstract_variables_map::next(abstract_variables_map* next) - { - m_next = next; - } - - variables_map::variables_map() - {} - - variables_map::variables_map(const abstract_variables_map* next) - : abstract_variables_map(next) - {} - - const variable_value& - variables_map::get(const std::string& name) const - { - static variable_value empty; - const_iterator i = this->find(name); - if (i == this->end()) - return empty; - else - return i->second; - } - - void - variables_map::notify() - { - // This checks if all required options occur - for (set<string>::const_iterator r = m_required.begin(); - r != m_required.end(); - ++r) - { - const string& opt = *r; - map<string, variable_value>::const_iterator iter = find(opt); - if (iter == end() || iter->second.empty()) - { - boost::throw_exception(required_option(opt)); - - } - } - - // Lastly, run notify actions. - for (map<string, variable_value>::iterator k = begin(); - k != end(); - ++k) - { - /* Users might wish to use variables_map to store their own values - that are not parsed, and therefore will not have value_semantics - defined. Do no crash on such values. In multi-module programs, - one module might add custom values, and the 'notify' function - will be called after that, so we check that value_sematics is - not NULL. See: - https://svn.boost.org/trac/boost/ticket/2782 - */ - if (k->second.m_value_semantic) - k->second.m_value_semantic->notify(k->second.value()); - } - } - -}} diff --git a/src/third_party/boost/libs/program_options/src/winmain.cpp b/src/third_party/boost/libs/program_options/src/winmain.cpp deleted file mode 100644 index 8a7c43f885d..00000000000 --- a/src/third_party/boost/libs/program_options/src/winmain.cpp +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright Vladimir Prus 2002-2004. -// 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) - -#define BOOST_PROGRAM_OPTIONS_SOURCE -#include <boost/program_options/parsers.hpp> -#include <cctype> - -#ifdef _WIN32 -namespace boost { namespace program_options { - - // Take a command line string and splits in into tokens, according - // to the rules windows command line processor uses. - // - // The rules are pretty funny, see - // http://article.gmane.org/gmane.comp.lib.boost.user/3005 - // http://msdn.microsoft.com/library/en-us/vccelng/htm/progs_12.asp - BOOST_PROGRAM_OPTIONS_DECL - std::vector<std::string> split_winmain(const std::string& input) - { - std::vector<std::string> result; - - std::string::const_iterator i = input.begin(), e = input.end(); - for(;i != e; ++i) - if (!isspace((unsigned char)*i)) - break; - - if (i != e) { - - std::string current; - bool inside_quoted = false; - bool empty_quote = false; - int backslash_count = 0; - - for(; i != e; ++i) { - if (*i == '"') { - // '"' preceded by even number (n) of backslashes generates - // n/2 backslashes and is a quoted block delimiter - if (backslash_count % 2 == 0) { - current.append(backslash_count / 2, '\\'); - empty_quote = inside_quoted && current.empty(); - inside_quoted = !inside_quoted; - // '"' preceded by odd number (n) of backslashes generates - // (n-1)/2 backslashes and is literal quote. - } else { - current.append(backslash_count / 2, '\\'); - current += '"'; - } - backslash_count = 0; - } else if (*i == '\\') { - ++backslash_count; - } else { - // Not quote or backslash. All accumulated backslashes should be - // added - if (backslash_count) { - current.append(backslash_count, '\\'); - backslash_count = 0; - } - if (isspace((unsigned char)*i) && !inside_quoted) { - // Space outside quoted section terminate the current argument - result.push_back(current); - current.resize(0); - empty_quote = false; - for(;i != e && isspace((unsigned char)*i); ++i) - ; - --i; - } else { - current += *i; - } - } - } - - // If we have trailing backslashes, add them - if (backslash_count) - current.append(backslash_count, '\\'); - - // If we have non-empty 'current' or we're still in quoted - // section (even if 'current' is empty), add the last token. - if (!current.empty() || inside_quoted || empty_quote) - result.push_back(current); - } - return result; - } - -#ifndef BOOST_NO_STD_WSTRING - BOOST_PROGRAM_OPTIONS_DECL std::vector<std::wstring> - split_winmain(const std::wstring& cmdline) - { - std::vector<std::wstring> result; - std::vector<std::string> aux = split_winmain(to_internal(cmdline)); - for (unsigned i = 0, e = aux.size(); i < e; ++i) - result.push_back(from_utf8(aux[i])); - return result; - } -#endif - -}} -#endif - diff --git a/src/third_party/boost/libs/system/src/error_code.cpp b/src/third_party/boost/libs/system/src/error_code.cpp deleted file mode 100644 index bcdbea9cfd6..00000000000 --- a/src/third_party/boost/libs/system/src/error_code.cpp +++ /dev/null @@ -1,429 +0,0 @@ -// error_code support implementation file ----------------------------------// - -// Copyright Beman Dawes 2002, 2006 - -// 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/system - -//----------------------------------------------------------------------------// - -#include <boost/config/warning_disable.hpp> - -// define BOOST_SYSTEM_SOURCE so that <boost/system/config.hpp> knows -// the library is being built (possibly exporting rather than importing code) -#define BOOST_SYSTEM_SOURCE - -#include <boost/system/config.hpp> -#include <boost/system/error_code.hpp> -#include <boost/cerrno.hpp> -#include <vector> -#include <cstdlib> -#include <cassert> - -using namespace boost::system; -using namespace boost::system::errc; - -#include <cstring> // for strerror/strerror_r - -# if defined( BOOST_WINDOWS_API ) -# include <windows.h> -# include "local_free_on_destruction.hpp" -# ifndef ERROR_INCORRECT_SIZE -# define ERROR_INCORRECT_SIZE ERROR_BAD_ARGUMENTS -# endif -# endif - -//----------------------------------------------------------------------------// - -namespace -{ -#if defined(__PGI) - using boost::system::errc::invalid_argument; -#endif - // standard error categories ---------------------------------------------// - - class generic_error_category : public error_category - { - public: - generic_error_category(){} - const char * name() const; - std::string message( int ev ) const; - }; - - class system_error_category : public error_category - { - public: - system_error_category(){} - const char * name() const; - std::string message( int ev ) const; - error_condition default_error_condition( int ev ) const; - }; - - // generic_error_category implementation ---------------------------------// - - const char * generic_error_category::name() const - { - return "generic"; - } - - std::string generic_error_category::message( int ev ) const - { - static std::string unknown_err( "Unknown error" ); - // strerror_r is preferred because it is always thread safe, - // however, we fallback to strerror in certain cases because: - // -- Windows doesn't provide strerror_r. - // -- HP and Sundo provide strerror_r on newer systems, but there is - // no way to tell if is available at runtime and in any case their - // versions of strerror are thread safe anyhow. - // -- Linux only sometimes provides strerror_r. - // -- Tru64 provides strerror_r only when compiled -pthread. - // -- VMS doesn't provide strerror_r, but on this platform, strerror is - // thread safe. - # if defined(BOOST_WINDOWS_API) || defined(__hpux) || defined(__sun)\ - || (defined(__linux) && (!defined(__USE_XOPEN2K) || defined(BOOST_SYSTEM_USE_STRERROR)))\ - || (defined(__osf__) && !defined(_REENTRANT))\ - || (defined(__vms))\ - || (defined(__QNXNTO__)) - const char * c_str = std::strerror( ev ); - return c_str - ? std::string( c_str ) - : unknown_err; - # else // use strerror_r - char buf[64]; - char * bp = buf; - std::size_t sz = sizeof(buf); - # if defined(__CYGWIN__) || defined(__USE_GNU) - // Oddball version of strerror_r - const char * c_str = strerror_r( ev, bp, sz ); - return c_str - ? std::string( c_str ) - : unknown_err; - # else - // POSIX version of strerror_r - int result; - for (;;) - { - // strerror_r returns 0 on success, otherwise ERANGE if buffer too small, - // invalid_argument if ev not a valid error number - # if defined (__sgi) - const char * c_str = strerror( ev ); - result = 0; - return c_str - ? std::string( c_str ) - : unknown_err; - # else - result = strerror_r( ev, bp, sz ); - # endif - if (result == 0 ) - break; - else - { - # if defined(__linux) - // Linux strerror_r returns -1 on error, with error number in errno - result = errno; - # endif - if ( result != ERANGE ) break; - if ( sz > sizeof(buf) ) std::free( bp ); - sz *= 2; - if ( (bp = static_cast<char*>(std::malloc( sz ))) == 0 ) - return std::string( "ENOMEM" ); - } - } - std::string msg; - try - { - msg = ( ( result == invalid_argument ) ? "Unknown error" : bp ); - } - -# ifndef BOOST_NO_EXCEPTIONS - // See ticket #2098 - catch(...) - { - // just eat the exception - } -# endif - - if ( sz > sizeof(buf) ) std::free( bp ); - sz = 0; - return msg; - # endif // else POSIX version of strerror_r - # endif // else use strerror_r - } - // system_error_category implementation --------------------------------// - - const char * system_error_category::name() const - { - return "system"; - } - - error_condition system_error_category::default_error_condition( int ev ) const - { - switch ( ev ) - { - case 0: return make_error_condition( success ); -# if defined(BOOST_POSIX_API) - // POSIX-like O/S -> posix_errno decode table ---------------------------// - case E2BIG: return make_error_condition( argument_list_too_long ); - case EACCES: return make_error_condition( permission_denied ); - case EADDRINUSE: return make_error_condition( address_in_use ); - case EADDRNOTAVAIL: return make_error_condition( address_not_available ); - case EAFNOSUPPORT: return make_error_condition( address_family_not_supported ); - case EAGAIN: return make_error_condition( resource_unavailable_try_again ); -# if EALREADY != EBUSY // EALREADY and EBUSY are the same on QNX Neutrino - case EALREADY: return make_error_condition( connection_already_in_progress ); -# endif - case EBADF: return make_error_condition( bad_file_descriptor ); - case EBADMSG: return make_error_condition( bad_message ); - case EBUSY: return make_error_condition( device_or_resource_busy ); - case ECANCELED: return make_error_condition( operation_canceled ); - case ECHILD: return make_error_condition( no_child_process ); - case ECONNABORTED: return make_error_condition( connection_aborted ); - case ECONNREFUSED: return make_error_condition( connection_refused ); - case ECONNRESET: return make_error_condition( connection_reset ); - case EDEADLK: return make_error_condition( resource_deadlock_would_occur ); - case EDESTADDRREQ: return make_error_condition( destination_address_required ); - case EDOM: return make_error_condition( argument_out_of_domain ); - case EEXIST: return make_error_condition( file_exists ); - case EFAULT: return make_error_condition( bad_address ); - case EFBIG: return make_error_condition( file_too_large ); - case EHOSTUNREACH: return make_error_condition( host_unreachable ); - case EIDRM: return make_error_condition( identifier_removed ); - case EILSEQ: return make_error_condition( illegal_byte_sequence ); - case EINPROGRESS: return make_error_condition( operation_in_progress ); - case EINTR: return make_error_condition( interrupted ); - case EINVAL: return make_error_condition( invalid_argument ); - case EIO: return make_error_condition( io_error ); - case EISCONN: return make_error_condition( already_connected ); - case EISDIR: return make_error_condition( is_a_directory ); - case ELOOP: return make_error_condition( too_many_symbolic_link_levels ); - case EMFILE: return make_error_condition( too_many_files_open ); - case EMLINK: return make_error_condition( too_many_links ); - case EMSGSIZE: return make_error_condition( message_size ); - case ENAMETOOLONG: return make_error_condition( filename_too_long ); - case ENETDOWN: return make_error_condition( network_down ); - case ENETRESET: return make_error_condition( network_reset ); - case ENETUNREACH: return make_error_condition( network_unreachable ); - case ENFILE: return make_error_condition( too_many_files_open_in_system ); - case ENOBUFS: return make_error_condition( no_buffer_space ); - case ENODATA: return make_error_condition( no_message_available ); - case ENODEV: return make_error_condition( no_such_device ); - case ENOENT: return make_error_condition( no_such_file_or_directory ); - case ENOEXEC: return make_error_condition( executable_format_error ); - case ENOLCK: return make_error_condition( no_lock_available ); - case ENOLINK: return make_error_condition( no_link ); - case ENOMEM: return make_error_condition( not_enough_memory ); - case ENOMSG: return make_error_condition( no_message ); - case ENOPROTOOPT: return make_error_condition( no_protocol_option ); - case ENOSPC: return make_error_condition( no_space_on_device ); - case ENOSR: return make_error_condition( no_stream_resources ); - case ENOSTR: return make_error_condition( not_a_stream ); - case ENOSYS: return make_error_condition( function_not_supported ); - case ENOTCONN: return make_error_condition( not_connected ); - case ENOTDIR: return make_error_condition( not_a_directory ); - # if ENOTEMPTY != EEXIST // AIX treats ENOTEMPTY and EEXIST as the same value - case ENOTEMPTY: return make_error_condition( directory_not_empty ); - # endif // ENOTEMPTY != EEXIST - # if ENOTRECOVERABLE != ECONNRESET // the same on some Broadcom chips - case ENOTRECOVERABLE: return make_error_condition( state_not_recoverable ); - # endif // ENOTRECOVERABLE != ECONNRESET - case ENOTSOCK: return make_error_condition( not_a_socket ); - case ENOTSUP: return make_error_condition( not_supported ); - case ENOTTY: return make_error_condition( inappropriate_io_control_operation ); - case ENXIO: return make_error_condition( no_such_device_or_address ); - # if EOPNOTSUPP != ENOTSUP - case EOPNOTSUPP: return make_error_condition( operation_not_supported ); - # endif // EOPNOTSUPP != ENOTSUP - case EOVERFLOW: return make_error_condition( value_too_large ); - # if EOWNERDEAD != ECONNABORTED // the same on some Broadcom chips - case EOWNERDEAD: return make_error_condition( owner_dead ); - # endif // EOWNERDEAD != ECONNABORTED - case EPERM: return make_error_condition( operation_not_permitted ); - case EPIPE: return make_error_condition( broken_pipe ); - case EPROTO: return make_error_condition( protocol_error ); - case EPROTONOSUPPORT: return make_error_condition( protocol_not_supported ); - case EPROTOTYPE: return make_error_condition( wrong_protocol_type ); - case ERANGE: return make_error_condition( result_out_of_range ); - case EROFS: return make_error_condition( read_only_file_system ); - case ESPIPE: return make_error_condition( invalid_seek ); - case ESRCH: return make_error_condition( no_such_process ); - case ETIME: return make_error_condition( stream_timeout ); - case ETIMEDOUT: return make_error_condition( timed_out ); - case ETXTBSY: return make_error_condition( text_file_busy ); - # if EAGAIN != EWOULDBLOCK - case EWOULDBLOCK: return make_error_condition( operation_would_block ); - # endif // EAGAIN != EWOULDBLOCK - case EXDEV: return make_error_condition( cross_device_link ); - #else - // Windows system -> posix_errno decode table ---------------------------// - // see WinError.h comments for descriptions of errors - case ERROR_ACCESS_DENIED: return make_error_condition( permission_denied ); - case ERROR_ALREADY_EXISTS: return make_error_condition( file_exists ); - case ERROR_BAD_UNIT: return make_error_condition( no_such_device ); - case ERROR_BUFFER_OVERFLOW: return make_error_condition( filename_too_long ); - case ERROR_BUSY: return make_error_condition( device_or_resource_busy ); - case ERROR_BUSY_DRIVE: return make_error_condition( device_or_resource_busy ); - case ERROR_CANNOT_MAKE: return make_error_condition( permission_denied ); - case ERROR_CANTOPEN: return make_error_condition( io_error ); - case ERROR_CANTREAD: return make_error_condition( io_error ); - case ERROR_CANTWRITE: return make_error_condition( io_error ); - case ERROR_CURRENT_DIRECTORY: return make_error_condition( permission_denied ); - case ERROR_DEV_NOT_EXIST: return make_error_condition( no_such_device ); - case ERROR_DEVICE_IN_USE: return make_error_condition( device_or_resource_busy ); - case ERROR_DIR_NOT_EMPTY: return make_error_condition( directory_not_empty ); - case ERROR_DIRECTORY: return make_error_condition( invalid_argument ); // WinError.h: "The directory name is invalid" - case ERROR_DISK_FULL: return make_error_condition( no_space_on_device ); - case ERROR_FILE_EXISTS: return make_error_condition( file_exists ); - case ERROR_FILE_NOT_FOUND: return make_error_condition( no_such_file_or_directory ); - case ERROR_HANDLE_DISK_FULL: return make_error_condition( no_space_on_device ); - case ERROR_INVALID_ACCESS: return make_error_condition( permission_denied ); - case ERROR_INVALID_DRIVE: return make_error_condition( no_such_device ); - case ERROR_INVALID_FUNCTION: return make_error_condition( function_not_supported ); - case ERROR_INVALID_HANDLE: return make_error_condition( invalid_argument ); - case ERROR_INVALID_NAME: return make_error_condition( invalid_argument ); - case ERROR_LOCK_VIOLATION: return make_error_condition( no_lock_available ); - case ERROR_LOCKED: return make_error_condition( no_lock_available ); - case ERROR_NEGATIVE_SEEK: return make_error_condition( invalid_argument ); - case ERROR_NOACCESS: return make_error_condition( permission_denied ); - case ERROR_NOT_ENOUGH_MEMORY: return make_error_condition( not_enough_memory ); - case ERROR_NOT_READY: return make_error_condition( resource_unavailable_try_again ); - case ERROR_NOT_SAME_DEVICE: return make_error_condition( cross_device_link ); - case ERROR_OPEN_FAILED: return make_error_condition( io_error ); - case ERROR_OPEN_FILES: return make_error_condition( device_or_resource_busy ); - case ERROR_OPERATION_ABORTED: return make_error_condition( operation_canceled ); - case ERROR_OUTOFMEMORY: return make_error_condition( not_enough_memory ); - case ERROR_PATH_NOT_FOUND: return make_error_condition( no_such_file_or_directory ); - case ERROR_READ_FAULT: return make_error_condition( io_error ); - case ERROR_RETRY: return make_error_condition( resource_unavailable_try_again ); - case ERROR_SEEK: return make_error_condition( io_error ); - case ERROR_SHARING_VIOLATION: return make_error_condition( permission_denied ); - case ERROR_TOO_MANY_OPEN_FILES: return make_error_condition( too_many_files_open ); - case ERROR_WRITE_FAULT: return make_error_condition( io_error ); - case ERROR_WRITE_PROTECT: return make_error_condition( permission_denied ); - case WSAEACCES: return make_error_condition( permission_denied ); - case WSAEADDRINUSE: return make_error_condition( address_in_use ); - case WSAEADDRNOTAVAIL: return make_error_condition( address_not_available ); - case WSAEAFNOSUPPORT: return make_error_condition( address_family_not_supported ); - case WSAEALREADY: return make_error_condition( connection_already_in_progress ); - case WSAEBADF: return make_error_condition( bad_file_descriptor ); - case WSAECONNABORTED: return make_error_condition( connection_aborted ); - case WSAECONNREFUSED: return make_error_condition( connection_refused ); - case WSAECONNRESET: return make_error_condition( connection_reset ); - case WSAEDESTADDRREQ: return make_error_condition( destination_address_required ); - case WSAEFAULT: return make_error_condition( bad_address ); - case WSAEHOSTUNREACH: return make_error_condition( host_unreachable ); - case WSAEINPROGRESS: return make_error_condition( operation_in_progress ); - case WSAEINTR: return make_error_condition( interrupted ); - case WSAEINVAL: return make_error_condition( invalid_argument ); - case WSAEISCONN: return make_error_condition( already_connected ); - case WSAEMFILE: return make_error_condition( too_many_files_open ); - case WSAEMSGSIZE: return make_error_condition( message_size ); - case WSAENAMETOOLONG: return make_error_condition( filename_too_long ); - case WSAENETDOWN: return make_error_condition( network_down ); - case WSAENETRESET: return make_error_condition( network_reset ); - case WSAENETUNREACH: return make_error_condition( network_unreachable ); - case WSAENOBUFS: return make_error_condition( no_buffer_space ); - case WSAENOPROTOOPT: return make_error_condition( no_protocol_option ); - case WSAENOTCONN: return make_error_condition( not_connected ); - case WSAENOTSOCK: return make_error_condition( not_a_socket ); - case WSAEOPNOTSUPP: return make_error_condition( operation_not_supported ); - case WSAEPROTONOSUPPORT: return make_error_condition( protocol_not_supported ); - case WSAEPROTOTYPE: return make_error_condition( wrong_protocol_type ); - case WSAETIMEDOUT: return make_error_condition( timed_out ); - case WSAEWOULDBLOCK: return make_error_condition( operation_would_block ); - #endif - default: return error_condition( ev, system_category() ); - } - } - -# if !defined( BOOST_WINDOWS_API ) - - std::string system_error_category::message( int ev ) const - { - return generic_category().message( ev ); - } -# else - - std::string system_error_category::message( int ev ) const - { -# ifndef BOOST_NO_ANSI_APIS - LPVOID lpMsgBuf = 0; - DWORD retval = ::FormatMessageA( - FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, - ev, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language - (LPSTR) &lpMsgBuf, - 0, - NULL - ); - detail::local_free_on_destruction lfod(lpMsgBuf); - if (retval == 0) - return std::string("Unknown error"); - - std::string str( static_cast<LPCSTR>(lpMsgBuf) ); -# else // WinCE workaround - LPVOID lpMsgBuf = 0; - DWORD retval = ::FormatMessageW( - FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, - ev, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language - (LPWSTR) &lpMsgBuf, - 0, - NULL - ); - detail::local_free_on_destruction lfod(lpMsgBuf); - if (retval == 0) - return std::string("Unknown error"); - - int num_chars = (wcslen( static_cast<LPCWSTR>(lpMsgBuf) ) + 1) * 2; - LPSTR narrow_buffer = (LPSTR)_alloca( num_chars ); - if (::WideCharToMultiByte(CP_ACP, 0, static_cast<LPCWSTR>(lpMsgBuf), -1, narrow_buffer, num_chars, NULL, NULL) == 0) - return std::string("Unknown error"); - - std::string str( narrow_buffer ); -# endif - while ( str.size() - && (str[str.size()-1] == '\n' || str[str.size()-1] == '\r') ) - str.erase( str.size()-1 ); - if ( str.size() && str[str.size()-1] == '.' ) - { str.erase( str.size()-1 ); } - return str; - } -# endif - -} // unnamed namespace - -namespace boost -{ - namespace system - { - -# ifndef BOOST_SYSTEM_NO_DEPRECATED - BOOST_SYSTEM_DECL error_code throws; // "throw on error" special error_code; - // note that it doesn't matter if this - // isn't initialized before use since - // the only use is to take its - // address for comparison purposes -# endif - - BOOST_SYSTEM_DECL const error_category & system_category() - { - static const system_error_category system_category_const; - return system_category_const; - } - - BOOST_SYSTEM_DECL const error_category & generic_category() - { - static const generic_error_category generic_category_const; - return generic_category_const; - } - - } // namespace system -} // namespace boost diff --git a/src/third_party/boost/libs/system/src/local_free_on_destruction.hpp b/src/third_party/boost/libs/system/src/local_free_on_destruction.hpp deleted file mode 100644 index 110024f3d57..00000000000 --- a/src/third_party/boost/libs/system/src/local_free_on_destruction.hpp +++ /dev/null @@ -1,40 +0,0 @@ -// local_free_on_exit.hpp ------------------------------------------------------------// - -// Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) -// Copyright (c) 2010 Beman Dawes - -// Distributed under the Boost Software License, Version 1.0. -// See http://www.boost.org/LICENSE_1_0.txt - -// This is derived from boost/asio/detail/local_free_on_block_exit.hpp to avoid -// a dependency on asio. Thanks to Chris Kohlhoff for pointing it out. - -#ifndef BOOST_SYSTEM_LOCAL_FREE_ON_EXIT_HPP -#define BOOST_SYSTEM_LOCAL_FREE_ON_EXIT_HPP - -namespace boost { -namespace system { -namespace detail { - -class local_free_on_destruction -{ -public: - explicit local_free_on_destruction(void* p) - : p_(p) {} - - ~local_free_on_destruction() - { - ::LocalFree(p_); - } - -private: - void* p_; - local_free_on_destruction(const local_free_on_destruction&); // = deleted - local_free_on_destruction& operator=(const local_free_on_destruction&); // = deleted -}; - -} // namespace detail -} // namespace system -} // namespace boost - -#endif // BOOST_SYSTEM_LOCAL_FREE_ON_EXIT_HPP diff --git a/src/third_party/boost/libs/thread/src/pthread/once.cpp b/src/third_party/boost/libs/thread/src/pthread/once.cpp deleted file mode 100644 index 6e0466f17ea..00000000000 --- a/src/third_party/boost/libs/thread/src/pthread/once.cpp +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (C) 2007 Anthony Williams -// -// 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) - -#define __STDC_CONSTANT_MACROS -#include <boost/thread/once.hpp> -#include <boost/assert.hpp> -#include <pthread.h> -#include <stdlib.h> - -namespace boost -{ - namespace detail - { - BOOST_THREAD_DECL boost::uintmax_t once_global_epoch=UINTMAX_C(~0); - BOOST_THREAD_DECL pthread_mutex_t once_epoch_mutex=PTHREAD_MUTEX_INITIALIZER; - BOOST_THREAD_DECL pthread_cond_t once_epoch_cv = PTHREAD_COND_INITIALIZER; - - namespace - { - pthread_key_t epoch_tss_key; - pthread_once_t epoch_tss_key_flag=PTHREAD_ONCE_INIT; - - extern "C" - { - static void delete_epoch_tss_data(void* data) - { - free(data); - } - - static void create_epoch_tss_key() - { - BOOST_VERIFY(!pthread_key_create(&epoch_tss_key,delete_epoch_tss_data)); - } - } - } - - boost::uintmax_t& get_once_per_thread_epoch() - { - BOOST_VERIFY(!pthread_once(&epoch_tss_key_flag,create_epoch_tss_key)); - void* data=pthread_getspecific(epoch_tss_key); - if(!data) - { - data=malloc(sizeof(boost::uintmax_t)); - BOOST_VERIFY(!pthread_setspecific(epoch_tss_key,data)); - *static_cast<boost::uintmax_t*>(data)=UINTMAX_C(~0); - } - return *static_cast<boost::uintmax_t*>(data); - } - } - -} diff --git a/src/third_party/boost/libs/thread/src/pthread/thread.cpp b/src/third_party/boost/libs/thread/src/pthread/thread.cpp deleted file mode 100644 index 847662b90f4..00000000000 --- a/src/third_party/boost/libs/thread/src/pthread/thread.cpp +++ /dev/null @@ -1,606 +0,0 @@ -// Copyright (C) 2001-2003 -// William E. Kempf -// Copyright (C) 2007-8 Anthony Williams -// -// 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) - -#include <boost/thread/detail/config.hpp> - -#include <boost/thread/thread.hpp> -#include <boost/thread/xtime.hpp> -#include <boost/thread/condition.hpp> -#include <boost/thread/locks.hpp> -#include <boost/thread/once.hpp> -#include <boost/thread/tss.hpp> -#include <boost/throw_exception.hpp> -#ifdef __GLIBC__ -#include <sys/sysinfo.h> -#elif defined(__APPLE__) || defined(__FreeBSD__) -#include <sys/types.h> -#include <sys/sysctl.h> -#elif defined BOOST_HAS_UNISTD_H -#include <unistd.h> -#endif - -#include "timeconv.inl" - -namespace boost -{ - namespace detail - { - thread_data_base::~thread_data_base() - {} - - struct thread_exit_callback_node - { - boost::detail::thread_exit_function_base* func; - thread_exit_callback_node* next; - - thread_exit_callback_node(boost::detail::thread_exit_function_base* func_, - thread_exit_callback_node* next_): - func(func_),next(next_) - {} - }; - - namespace - { - boost::once_flag current_thread_tls_init_flag=BOOST_ONCE_INIT; - pthread_key_t current_thread_tls_key; - - extern "C" - { - static void tls_destructor(void* data) - { - boost::detail::thread_data_base* thread_info=static_cast<boost::detail::thread_data_base*>(data); - if(thread_info) - { - while(!thread_info->tss_data.empty() || thread_info->thread_exit_callbacks) - { - while(thread_info->thread_exit_callbacks) - { - detail::thread_exit_callback_node* const current_node=thread_info->thread_exit_callbacks; - thread_info->thread_exit_callbacks=current_node->next; - if(current_node->func) - { - (*current_node->func)(); - delete current_node->func; - } - delete current_node; - } - for(std::map<void const*,tss_data_node>::iterator next=thread_info->tss_data.begin(), - current, - end=thread_info->tss_data.end(); - next!=end;) - { - current=next; - ++next; - if(current->second.func && (current->second.value!=0)) - { - (*current->second.func)(current->second.value); - } - thread_info->tss_data.erase(current); - } - } - thread_info->self.reset(); - } - } - } - - - void create_current_thread_tls_key() - { - BOOST_VERIFY(!pthread_key_create(¤t_thread_tls_key,&tls_destructor)); - } - } - - boost::detail::thread_data_base* get_current_thread_data() - { - boost::call_once(current_thread_tls_init_flag,create_current_thread_tls_key); - return (boost::detail::thread_data_base*)pthread_getspecific(current_thread_tls_key); - } - - void set_current_thread_data(detail::thread_data_base* new_data) - { - boost::call_once(current_thread_tls_init_flag,create_current_thread_tls_key); - BOOST_VERIFY(!pthread_setspecific(current_thread_tls_key,new_data)); - } - } - - namespace - { - extern "C" - { - static void* thread_proxy(void* param) - { - boost::detail::thread_data_ptr thread_info = static_cast<boost::detail::thread_data_base*>(param)->self; - thread_info->self.reset(); - detail::set_current_thread_data(thread_info.get()); - try - { - thread_info->run(); - } - catch(thread_interrupted const&) - { - } -// Removed as it stops the debugger identifying the cause of the exception -// Unhandled exceptions still cause the application to terminate -// catch(...) -// { -// std::terminate(); -// } - - detail::tls_destructor(thread_info.get()); - detail::set_current_thread_data(0); - boost::lock_guard<boost::mutex> lock(thread_info->data_mutex); - thread_info->done=true; - thread_info->done_condition.notify_all(); - return 0; - } - } - - struct externally_launched_thread: - detail::thread_data_base - { - externally_launched_thread() - { - interrupt_enabled=false; - } - - void run() - {} - - private: - externally_launched_thread(externally_launched_thread&); - void operator=(externally_launched_thread&); - }; - - detail::thread_data_base* make_external_thread_data() - { - detail::thread_data_base* const me(new externally_launched_thread()); - me->self.reset(me); - set_current_thread_data(me); - return me; - } - - - detail::thread_data_base* get_or_make_current_thread_data() - { - detail::thread_data_base* current_thread_data(detail::get_current_thread_data()); - if(!current_thread_data) - { - current_thread_data=make_external_thread_data(); - } - return current_thread_data; - } - - } - - - thread::thread() - {} - - void thread::start_thread() - { - thread_info->self=thread_info; - int const res = pthread_create(&thread_info->thread_handle, 0, &thread_proxy, thread_info.get()); - if (res != 0) - { - thread_info->self.reset(); - boost::throw_exception(thread_resource_error()); - } - } - - thread::~thread() - { - detach(); - } - - detail::thread_data_ptr thread::get_thread_info BOOST_PREVENT_MACRO_SUBSTITUTION () const - { - return thread_info; - } - - void thread::join() - { - detail::thread_data_ptr const local_thread_info=(get_thread_info)(); - if(local_thread_info) - { - bool do_join=false; - - { - unique_lock<mutex> lock(local_thread_info->data_mutex); - while(!local_thread_info->done) - { - local_thread_info->done_condition.wait(lock); - } - do_join=!local_thread_info->join_started; - - if(do_join) - { - local_thread_info->join_started=true; - } - else - { - while(!local_thread_info->joined) - { - local_thread_info->done_condition.wait(lock); - } - } - } - if(do_join) - { - void* result=0; - BOOST_VERIFY(!pthread_join(local_thread_info->thread_handle,&result)); - lock_guard<mutex> lock(local_thread_info->data_mutex); - local_thread_info->joined=true; - local_thread_info->done_condition.notify_all(); - } - - if(thread_info==local_thread_info) - { - thread_info.reset(); - } - } - } - - bool thread::timed_join(system_time const& wait_until) - { - detail::thread_data_ptr const local_thread_info=(get_thread_info)(); - if(local_thread_info) - { - bool do_join=false; - - { - unique_lock<mutex> lock(local_thread_info->data_mutex); - while(!local_thread_info->done) - { - if(!local_thread_info->done_condition.timed_wait(lock,wait_until)) - { - return false; - } - } - do_join=!local_thread_info->join_started; - - if(do_join) - { - local_thread_info->join_started=true; - } - else - { - while(!local_thread_info->joined) - { - local_thread_info->done_condition.wait(lock); - } - } - } - if(do_join) - { - void* result=0; - BOOST_VERIFY(!pthread_join(local_thread_info->thread_handle,&result)); - lock_guard<mutex> lock(local_thread_info->data_mutex); - local_thread_info->joined=true; - local_thread_info->done_condition.notify_all(); - } - - if(thread_info==local_thread_info) - { - thread_info.reset(); - } - } - return true; - } - - bool thread::joinable() const - { - return (get_thread_info)(); - } - - - void thread::detach() - { - detail::thread_data_ptr local_thread_info; - thread_info.swap(local_thread_info); - - if(local_thread_info) - { - lock_guard<mutex> lock(local_thread_info->data_mutex); - if(!local_thread_info->join_started) - { - BOOST_VERIFY(!pthread_detach(local_thread_info->thread_handle)); - local_thread_info->join_started=true; - local_thread_info->joined=true; - } - } - } - - namespace this_thread - { - -#ifdef __DECXXX - /// Workaround of DECCXX issue of incorrect template substitution - template<> -#endif - void sleep(const system_time& st) - { - detail::thread_data_base* const thread_info=detail::get_current_thread_data(); - - if(thread_info) - { - unique_lock<mutex> lk(thread_info->sleep_mutex); - while(thread_info->sleep_condition.timed_wait(lk,st)); - } - else - { - xtime const xt=get_xtime(st); - - for (int foo=0; foo < 5; ++foo) - { -# if defined(BOOST_HAS_PTHREAD_DELAY_NP) - timespec ts; - to_timespec_duration(xt, ts); - BOOST_VERIFY(!pthread_delay_np(&ts)); -# elif defined(BOOST_HAS_NANOSLEEP) - timespec ts; - to_timespec_duration(xt, ts); - - // nanosleep takes a timespec that is an offset, not - // an absolute time. - nanosleep(&ts, 0); -# else - mutex mx; - mutex::scoped_lock lock(mx); - condition cond; - cond.timed_wait(lock, xt); -# endif - xtime cur; - xtime_get(&cur, TIME_UTC_); - if (xtime_cmp(xt, cur) <= 0) - return; - } - } - } - - void yield() - { -# if defined(BOOST_HAS_SCHED_YIELD) - BOOST_VERIFY(!sched_yield()); -# elif defined(BOOST_HAS_PTHREAD_YIELD) - BOOST_VERIFY(!pthread_yield()); -# else - xtime xt; - xtime_get(&xt, TIME_UTC_); - sleep(xt); -# endif - } - } - - unsigned thread::hardware_concurrency() - { -#if defined(PTW32_VERSION) || defined(__hpux) - return pthread_num_processors_np(); -#elif defined(__APPLE__) || defined(__FreeBSD__) - int count; - size_t size=sizeof(count); - return sysctlbyname("hw.ncpu",&count,&size,NULL,0)?0:count; -#elif defined(BOOST_HAS_UNISTD_H) && defined(_SC_NPROCESSORS_ONLN) - int const count=sysconf(_SC_NPROCESSORS_ONLN); - return (count>0)?count:0; -#elif defined(__GLIBC__) - return get_nprocs(); -#else - return 0; -#endif - } - - thread::id thread::get_id() const - { - detail::thread_data_ptr const local_thread_info=(get_thread_info)(); - if(local_thread_info) - { - return id(local_thread_info); - } - else - { - return id(); - } - } - - void thread::interrupt() - { - detail::thread_data_ptr const local_thread_info=(get_thread_info)(); - if(local_thread_info) - { - lock_guard<mutex> lk(local_thread_info->data_mutex); - local_thread_info->interrupt_requested=true; - if(local_thread_info->current_cond) - { - boost::pthread::pthread_mutex_scoped_lock internal_lock(local_thread_info->cond_mutex); - BOOST_VERIFY(!pthread_cond_broadcast(local_thread_info->current_cond)); - } - } - } - - bool thread::interruption_requested() const - { - detail::thread_data_ptr const local_thread_info=(get_thread_info)(); - if(local_thread_info) - { - lock_guard<mutex> lk(local_thread_info->data_mutex); - return local_thread_info->interrupt_requested; - } - else - { - return false; - } - } - - thread::native_handle_type thread::native_handle() - { - detail::thread_data_ptr const local_thread_info=(get_thread_info)(); - if(local_thread_info) - { - lock_guard<mutex> lk(local_thread_info->data_mutex); - return local_thread_info->thread_handle; - } - else - { - return pthread_t(); - } - } - - - - namespace this_thread - { - thread::id get_id() - { - boost::detail::thread_data_base* const thread_info=get_or_make_current_thread_data(); - return thread::id(thread_info?thread_info->shared_from_this():detail::thread_data_ptr()); - } - - void interruption_point() - { - boost::detail::thread_data_base* const thread_info=detail::get_current_thread_data(); - if(thread_info && thread_info->interrupt_enabled) - { - lock_guard<mutex> lg(thread_info->data_mutex); - if(thread_info->interrupt_requested) - { - thread_info->interrupt_requested=false; - throw thread_interrupted(); - } - } - } - - bool interruption_enabled() - { - boost::detail::thread_data_base* const thread_info=detail::get_current_thread_data(); - return thread_info && thread_info->interrupt_enabled; - } - - bool interruption_requested() - { - boost::detail::thread_data_base* const thread_info=detail::get_current_thread_data(); - if(!thread_info) - { - return false; - } - else - { - lock_guard<mutex> lg(thread_info->data_mutex); - return thread_info->interrupt_requested; - } - } - - disable_interruption::disable_interruption(): - interruption_was_enabled(interruption_enabled()) - { - if(interruption_was_enabled) - { - detail::get_current_thread_data()->interrupt_enabled=false; - } - } - - disable_interruption::~disable_interruption() - { - if(detail::get_current_thread_data()) - { - detail::get_current_thread_data()->interrupt_enabled=interruption_was_enabled; - } - } - - restore_interruption::restore_interruption(disable_interruption& d) - { - if(d.interruption_was_enabled) - { - detail::get_current_thread_data()->interrupt_enabled=true; - } - } - - restore_interruption::~restore_interruption() - { - if(detail::get_current_thread_data()) - { - detail::get_current_thread_data()->interrupt_enabled=false; - } - } - } - - namespace detail - { - void add_thread_exit_function(thread_exit_function_base* func) - { - detail::thread_data_base* const current_thread_data(get_or_make_current_thread_data()); - thread_exit_callback_node* const new_node= - new thread_exit_callback_node(func,current_thread_data->thread_exit_callbacks); - current_thread_data->thread_exit_callbacks=new_node; - } - - tss_data_node* find_tss_data(void const* key) - { - detail::thread_data_base* const current_thread_data(get_current_thread_data()); - if(current_thread_data) - { - std::map<void const*,tss_data_node>::iterator current_node= - current_thread_data->tss_data.find(key); - if(current_node!=current_thread_data->tss_data.end()) - { - return ¤t_node->second; - } - } - return NULL; - } - - void* get_tss_data(void const* key) - { - if(tss_data_node* const current_node=find_tss_data(key)) - { - return current_node->value; - } - return NULL; - } - - void add_new_tss_node(void const* key, - boost::shared_ptr<tss_cleanup_function> func, - void* tss_data) - { - detail::thread_data_base* const current_thread_data(get_or_make_current_thread_data()); - current_thread_data->tss_data.insert(std::make_pair(key,tss_data_node(func,tss_data))); - } - - void erase_tss_node(void const* key) - { - detail::thread_data_base* const current_thread_data(get_or_make_current_thread_data()); - current_thread_data->tss_data.erase(key); - } - - void set_tss_data(void const* key, - boost::shared_ptr<tss_cleanup_function> func, - void* tss_data,bool cleanup_existing) - { - if(tss_data_node* const current_node=find_tss_data(key)) - { - if(cleanup_existing && current_node->func && (current_node->value!=0)) - { - (*current_node->func)(current_node->value); - } - if(func || (tss_data!=0)) - { - current_node->func=func; - current_node->value=tss_data; - } - else - { - erase_tss_node(key); - } - } - else - { - add_new_tss_node(key,func,tss_data); - } - } - } - - -} diff --git a/src/third_party/boost/libs/thread/src/pthread/timeconv.inl b/src/third_party/boost/libs/thread/src/pthread/timeconv.inl deleted file mode 100644 index cab7c55a783..00000000000 --- a/src/third_party/boost/libs/thread/src/pthread/timeconv.inl +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright (C) 2001-2003 -// William E. Kempf -// Copyright (C) 2009 Anthony Williams -// -// 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) - -// boostinspect:nounnamed - -#include <boost/assert.hpp> - -namespace { -const int MILLISECONDS_PER_SECOND = 1000; -const int NANOSECONDS_PER_SECOND = 1000000000; -const int NANOSECONDS_PER_MILLISECOND = 1000000; - -const int MICROSECONDS_PER_SECOND = 1000000; -const int NANOSECONDS_PER_MICROSECOND = 1000; - -inline void to_time(int milliseconds, boost::xtime& xt) -{ - int res = 0; - res = boost::xtime_get(&xt, boost::TIME_UTC_); - BOOST_ASSERT(res == boost::TIME_UTC_); (void)res; - - xt.sec += (milliseconds / MILLISECONDS_PER_SECOND); - xt.nsec += ((milliseconds % MILLISECONDS_PER_SECOND) * - NANOSECONDS_PER_MILLISECOND); - - if (xt.nsec >= NANOSECONDS_PER_SECOND) - { - ++xt.sec; - xt.nsec -= NANOSECONDS_PER_SECOND; - } -} -#if defined(BOOST_HAS_PTHREADS) -inline void to_timespec(const boost::xtime& xt, timespec& ts) -{ - ts.tv_sec = static_cast<int>(xt.sec); - ts.tv_nsec = static_cast<int>(xt.nsec); - if(ts.tv_nsec >= NANOSECONDS_PER_SECOND) - { - ts.tv_sec += ts.tv_nsec / NANOSECONDS_PER_SECOND; - ts.tv_nsec %= NANOSECONDS_PER_SECOND; - } -} - -inline void to_time(int milliseconds, timespec& ts) -{ - boost::xtime xt; - to_time(milliseconds, xt); - to_timespec(xt, ts); -} - -inline void to_timespec_duration(const boost::xtime& xt, timespec& ts) -{ - boost::xtime cur; - int res = 0; - res = boost::xtime_get(&cur, boost::TIME_UTC_); - BOOST_ASSERT(res == boost::TIME_UTC_); (void)res; - - if (boost::xtime_cmp(xt, cur) <= 0) - { - ts.tv_sec = 0; - ts.tv_nsec = 0; - } - else - { - ts.tv_sec = xt.sec - cur.sec; - ts.tv_nsec = xt.nsec - cur.nsec; - - if( ts.tv_nsec < 0 ) - { - ts.tv_sec -= 1; - ts.tv_nsec += NANOSECONDS_PER_SECOND; - } - if(ts.tv_nsec >= NANOSECONDS_PER_SECOND) - { - ts.tv_sec += ts.tv_nsec / NANOSECONDS_PER_SECOND; - ts.tv_nsec %= NANOSECONDS_PER_SECOND; - } - } -} -#endif - -inline void to_duration(boost::xtime xt, int& milliseconds) -{ - boost::xtime cur; - int res = 0; - res = boost::xtime_get(&cur, boost::TIME_UTC_); - BOOST_ASSERT(res == boost::TIME_UTC_); (void)res; - - if (boost::xtime_cmp(xt, cur) <= 0) - milliseconds = 0; - else - { - if (cur.nsec > xt.nsec) - { - xt.nsec += NANOSECONDS_PER_SECOND; - --xt.sec; - } - milliseconds = (int)((xt.sec - cur.sec) * MILLISECONDS_PER_SECOND) + - (((xt.nsec - cur.nsec) + (NANOSECONDS_PER_MILLISECOND/2)) / - NANOSECONDS_PER_MILLISECOND); - } -} - -inline void to_microduration(boost::xtime xt, int& microseconds) -{ - boost::xtime cur; - int res = 0; - res = boost::xtime_get(&cur, boost::TIME_UTC_); - BOOST_ASSERT(res == boost::TIME_UTC_); (void)res; - - if (boost::xtime_cmp(xt, cur) <= 0) - microseconds = 0; - else - { - if (cur.nsec > xt.nsec) - { - xt.nsec += NANOSECONDS_PER_SECOND; - --xt.sec; - } - microseconds = (int)((xt.sec - cur.sec) * MICROSECONDS_PER_SECOND) + - (((xt.nsec - cur.nsec) + (NANOSECONDS_PER_MICROSECOND/2)) / - NANOSECONDS_PER_MICROSECOND); - } -} -} - -// Change Log: -// 1 Jun 01 Initial creation. diff --git a/src/third_party/boost/libs/thread/src/tss_null.cpp b/src/third_party/boost/libs/thread/src/tss_null.cpp deleted file mode 100644 index e93ba0ff736..00000000000 --- a/src/third_party/boost/libs/thread/src/tss_null.cpp +++ /dev/null @@ -1,38 +0,0 @@ -// (C) Copyright Michael Glassford 2004. -// (C) Copyright 2007 Anthony Williams -// Use, modification and distribution are 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) - -#include <boost/thread/detail/config.hpp> - -#if defined(BOOST_HAS_WINTHREADS) && (defined(BOOST_THREAD_BUILD_LIB) || defined(BOOST_THREAD_TEST) || defined(UNDER_CE)) && (!defined(_MSC_VER) || defined(UNDER_CE)) - -namespace boost -{ - /* - This file is a "null" implementation of tss cleanup; it's - purpose is to to eliminate link errors in cases - where it is known that tss cleanup is not needed. - */ - - void tss_cleanup_implemented(void) - { - /* - This function's sole purpose is to cause a link error in cases where - automatic tss cleanup is not implemented by Boost.Threads as a - reminder that user code is responsible for calling the necessary - functions at the appropriate times (and for implementing an a - tss_cleanup_implemented() function to eliminate the linker's - missing symbol error). - - If Boost.Threads later implements automatic tss cleanup in cases - where it currently doesn't (which is the plan), the duplicate - symbol error will warn the user that their custom solution is no - longer needed and can be removed. - */ - } - -} - -#endif //defined(BOOST_HAS_WINTHREADS) && defined(BOOST_THREAD_BUILD_LIB) && !defined(_MSC_VER) diff --git a/src/third_party/boost/libs/thread/src/win32/thread.cpp b/src/third_party/boost/libs/thread/src/win32/thread.cpp deleted file mode 100644 index d30b8ca8312..00000000000 --- a/src/third_party/boost/libs/thread/src/win32/thread.cpp +++ /dev/null @@ -1,638 +0,0 @@ -// 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) -// (C) Copyright 2007 Anthony Williams -// (C) Copyright 2007 David Deakins - -#ifndef _WIN32_WINNT -#define _WIN32_WINNT 0x400 -#endif - -#ifndef WINVER -#define WINVER 0x400 -#endif - -#include <boost/thread/thread.hpp> -#include <algorithm> -#ifndef UNDER_CE -#include <process.h> -#endif -#include <stdio.h> -#include <boost/thread/once.hpp> -#include <boost/thread/tss.hpp> -#include <boost/assert.hpp> -#include <boost/throw_exception.hpp> -#include <boost/thread/detail/tss_hooks.hpp> -#include <boost/date_time/posix_time/conversion.hpp> -#include <windows.h> -#include <memory> - -namespace boost -{ - namespace - { - boost::once_flag current_thread_tls_init_flag=BOOST_ONCE_INIT; - DWORD current_thread_tls_key=0; - - void create_current_thread_tls_key() - { - tss_cleanup_implemented(); // if anyone uses TSS, we need the cleanup linked in - current_thread_tls_key=TlsAlloc(); - #if defined(UNDER_CE) - // Windows CE does not define the TLS_OUT_OF_INDEXES constant. - BOOST_ASSERT(current_thread_tls_key!=0xFFFFFFFF); - #else - BOOST_ASSERT(current_thread_tls_key!=TLS_OUT_OF_INDEXES); - #endif - } - - void cleanup_tls_key() - { - if(current_thread_tls_key) - { - TlsFree(current_thread_tls_key); - current_thread_tls_key=0; - } - } - - detail::thread_data_base* get_current_thread_data() - { - if(!current_thread_tls_key) - { - return 0; - } - return (detail::thread_data_base*)TlsGetValue(current_thread_tls_key); - } - - void set_current_thread_data(detail::thread_data_base* new_data) - { - boost::call_once(current_thread_tls_init_flag,create_current_thread_tls_key); - if(current_thread_tls_key) - BOOST_VERIFY(TlsSetValue(current_thread_tls_key,new_data)); - else - boost::throw_exception(thread_resource_error()); - } - -#ifndef BOOST_HAS_THREADEX -// Windows CE doesn't define _beginthreadex - - struct ThreadProxyData - { - typedef unsigned (__stdcall* func)(void*); - func start_address_; - void* arglist_; - ThreadProxyData(func start_address,void* arglist) : start_address_(start_address), arglist_(arglist) {} - }; - - DWORD WINAPI ThreadProxy(LPVOID args) - { - std::auto_ptr<ThreadProxyData> data(reinterpret_cast<ThreadProxyData*>(args)); - DWORD ret=data->start_address_(data->arglist_); - return ret; - } - - typedef void* uintptr_t; - - inline uintptr_t const _beginthreadex(void* security, unsigned stack_size, unsigned (__stdcall* start_address)(void*), - void* arglist, unsigned initflag, unsigned* thrdaddr) - { - DWORD threadID; - ThreadProxyData* data = new ThreadProxyData(start_address,arglist); - HANDLE hthread=CreateThread(static_cast<LPSECURITY_ATTRIBUTES>(security),stack_size,ThreadProxy, - data,initflag,&threadID); - if (hthread==0) { - delete data; - return 0; - } - *thrdaddr=threadID; - return reinterpret_cast<uintptr_t const>(hthread); - } - -#endif - - } - - namespace detail - { - struct thread_exit_callback_node - { - boost::detail::thread_exit_function_base* func; - thread_exit_callback_node* next; - - thread_exit_callback_node(boost::detail::thread_exit_function_base* func_, - thread_exit_callback_node* next_): - func(func_),next(next_) - {} - }; - - struct tss_data_node - { - void const* key; - boost::shared_ptr<boost::detail::tss_cleanup_function> func; - void* value; - tss_data_node* next; - - tss_data_node(void const* key_,boost::shared_ptr<boost::detail::tss_cleanup_function> func_,void* value_, - tss_data_node* next_): - key(key_),func(func_),value(value_),next(next_) - {} - }; - - } - - namespace - { - void run_thread_exit_callbacks() - { - detail::thread_data_ptr current_thread_data(get_current_thread_data(),false); - if(current_thread_data) - { - while(current_thread_data->tss_data || current_thread_data->thread_exit_callbacks) - { - while(current_thread_data->thread_exit_callbacks) - { - detail::thread_exit_callback_node* const current_node=current_thread_data->thread_exit_callbacks; - current_thread_data->thread_exit_callbacks=current_node->next; - if(current_node->func) - { - (*current_node->func)(); - boost::detail::heap_delete(current_node->func); - } - boost::detail::heap_delete(current_node); - } - while(current_thread_data->tss_data) - { - detail::tss_data_node* const current_node=current_thread_data->tss_data; - current_thread_data->tss_data=current_node->next; - if(current_node->func) - { - (*current_node->func)(current_node->value); - } - boost::detail::heap_delete(current_node); - } - } - - set_current_thread_data(0); - } - } - - unsigned __stdcall thread_start_function(void* param) - { - detail::thread_data_base* const thread_info(reinterpret_cast<detail::thread_data_base*>(param)); - set_current_thread_data(thread_info); - try - { - thread_info->run(); - } - catch(thread_interrupted const&) - { - } -// Removed as it stops the debugger identifying the cause of the exception -// Unhandled exceptions still cause the application to terminate -// catch(...) -// { -// std::terminate(); -// } - run_thread_exit_callbacks(); - return 0; - } - } - - thread::thread() - {} - - void thread::start_thread() - { - uintptr_t const new_thread=_beginthreadex(0,0,&thread_start_function,thread_info.get(),CREATE_SUSPENDED,&thread_info->id); - if(!new_thread) - { - boost::throw_exception(thread_resource_error()); - } - intrusive_ptr_add_ref(thread_info.get()); - thread_info->thread_handle=(detail::win32::handle)(new_thread); - ResumeThread(thread_info->thread_handle); - } - - thread::thread(detail::thread_data_ptr data): - thread_info(data) - {} - - namespace - { - struct externally_launched_thread: - detail::thread_data_base - { - externally_launched_thread() - { - ++count; - interruption_enabled=false; - } - - void run() - {} - private: - externally_launched_thread(externally_launched_thread&); - void operator=(externally_launched_thread&); - }; - - void make_external_thread_data() - { - externally_launched_thread* me=detail::heap_new<externally_launched_thread>(); - try - { - set_current_thread_data(me); - } - catch(...) - { - detail::heap_delete(me); - throw; - } - } - - detail::thread_data_base* get_or_make_current_thread_data() - { - detail::thread_data_base* current_thread_data(get_current_thread_data()); - if(!current_thread_data) - { - make_external_thread_data(); - current_thread_data=get_current_thread_data(); - } - return current_thread_data; - } - - } - - thread::~thread() - { - detach(); - } - - thread::id thread::get_id() const - { - return thread::id((get_thread_info)()); - } - - bool thread::joinable() const - { - return (get_thread_info)(); - } - - void thread::join() - { - detail::thread_data_ptr local_thread_info=(get_thread_info)(); - if(local_thread_info) - { - this_thread::interruptible_wait(local_thread_info->thread_handle,detail::timeout::sentinel()); - release_handle(); - } - } - - bool thread::timed_join(boost::system_time const& wait_until) - { - detail::thread_data_ptr local_thread_info=(get_thread_info)(); - if(local_thread_info) - { - if(!this_thread::interruptible_wait(local_thread_info->thread_handle,get_milliseconds_until(wait_until))) - { - return false; - } - release_handle(); - } - return true; - } - - void thread::detach() - { - release_handle(); - } - - void thread::release_handle() - { - thread_info=0; - } - - void thread::interrupt() - { - detail::thread_data_ptr local_thread_info=(get_thread_info)(); - if(local_thread_info) - { - local_thread_info->interrupt(); - } - } - - bool thread::interruption_requested() const - { - detail::thread_data_ptr local_thread_info=(get_thread_info)(); - return local_thread_info.get() && (detail::win32::WaitForSingleObject(local_thread_info->interruption_handle,0)==0); - } - - unsigned thread::hardware_concurrency() - { - SYSTEM_INFO info={{0}}; - GetSystemInfo(&info); - return info.dwNumberOfProcessors; - } - - thread::native_handle_type thread::native_handle() - { - detail::thread_data_ptr local_thread_info=(get_thread_info)(); - return local_thread_info?(detail::win32::handle)local_thread_info->thread_handle:detail::win32::invalid_handle_value; - } - - detail::thread_data_ptr thread::get_thread_info BOOST_PREVENT_MACRO_SUBSTITUTION () const - { - return thread_info; - } - - namespace this_thread - { - namespace - { - LARGE_INTEGER get_due_time(detail::timeout const& target_time) - { - LARGE_INTEGER due_time={{0}}; - if(target_time.relative) - { - unsigned long const elapsed_milliseconds=GetTickCount()-target_time.start; - LONGLONG const remaining_milliseconds=(target_time.milliseconds-elapsed_milliseconds); - LONGLONG const hundred_nanoseconds_in_one_millisecond=10000; - - if(remaining_milliseconds>0) - { - due_time.QuadPart=-(remaining_milliseconds*hundred_nanoseconds_in_one_millisecond); - } - } - else - { - SYSTEMTIME target_system_time={0}; - target_system_time.wYear=target_time.abs_time.date().year(); - target_system_time.wMonth=target_time.abs_time.date().month(); - target_system_time.wDay=target_time.abs_time.date().day(); - target_system_time.wHour=(WORD)target_time.abs_time.time_of_day().hours(); - target_system_time.wMinute=(WORD)target_time.abs_time.time_of_day().minutes(); - target_system_time.wSecond=(WORD)target_time.abs_time.time_of_day().seconds(); - - if(!SystemTimeToFileTime(&target_system_time,((FILETIME*)&due_time))) - { - due_time.QuadPart=0; - } - else - { - long const hundred_nanoseconds_in_one_second=10000000; - posix_time::time_duration::tick_type const ticks_per_second= - target_time.abs_time.time_of_day().ticks_per_second(); - if(ticks_per_second>hundred_nanoseconds_in_one_second) - { - posix_time::time_duration::tick_type const - ticks_per_hundred_nanoseconds= - ticks_per_second/hundred_nanoseconds_in_one_second; - due_time.QuadPart+= - target_time.abs_time.time_of_day().fractional_seconds()/ - ticks_per_hundred_nanoseconds; - } - else - { - due_time.QuadPart+= - target_time.abs_time.time_of_day().fractional_seconds()* - (hundred_nanoseconds_in_one_second/ticks_per_second); - } - } - } - return due_time; - } - } - - - bool interruptible_wait(detail::win32::handle handle_to_wait_for,detail::timeout target_time) - { - detail::win32::handle handles[3]={0}; - unsigned handle_count=0; - unsigned wait_handle_index=~0U; - unsigned interruption_index=~0U; - unsigned timeout_index=~0U; - if(handle_to_wait_for!=detail::win32::invalid_handle_value) - { - wait_handle_index=handle_count; - handles[handle_count++]=handle_to_wait_for; - } - if(get_current_thread_data() && get_current_thread_data()->interruption_enabled) - { - interruption_index=handle_count; - handles[handle_count++]=get_current_thread_data()->interruption_handle; - } - - detail::win32::handle_manager timer_handle; - -#ifndef UNDER_CE - unsigned const min_timer_wait_period=20; - - if(!target_time.is_sentinel()) - { - detail::timeout::remaining_time const time_left=target_time.remaining_milliseconds(); - if(time_left.milliseconds > min_timer_wait_period) - { - // for a long-enough timeout, use a waitable timer (which tracks clock changes) - timer_handle=CreateWaitableTimer(NULL,false,NULL); - if(timer_handle!=0) - { - LARGE_INTEGER due_time=get_due_time(target_time); - - bool const set_time_succeeded=SetWaitableTimer(timer_handle,&due_time,0,0,0,false)!=0; - if(set_time_succeeded) - { - timeout_index=handle_count; - handles[handle_count++]=timer_handle; - } - } - } - else if(!target_time.relative) - { - // convert short absolute-time timeouts into relative ones, so we don't race against clock changes - target_time=detail::timeout(time_left.milliseconds); - } - } -#endif - - bool const using_timer=timeout_index!=~0u; - detail::timeout::remaining_time time_left(0); - - do - { - if(!using_timer) - { - time_left=target_time.remaining_milliseconds(); - } - - if(handle_count) - { - unsigned long const notified_index=detail::win32::WaitForMultipleObjects(handle_count,handles,false,using_timer?INFINITE:time_left.milliseconds); - if(notified_index<handle_count) - { - if(notified_index==wait_handle_index) - { - return true; - } - else if(notified_index==interruption_index) - { - detail::win32::ResetEvent(get_current_thread_data()->interruption_handle); - throw thread_interrupted(); - } - else if(notified_index==timeout_index) - { - return false; - } - } - } - else - { - detail::win32::Sleep(time_left.milliseconds); - } - if(target_time.relative) - { - target_time.milliseconds-=detail::timeout::max_non_infinite_wait; - } - } - while(time_left.more); - return false; - } - - thread::id get_id() - { - return thread::id(get_or_make_current_thread_data()); - } - - void interruption_point() - { - if(interruption_enabled() && interruption_requested()) - { - detail::win32::ResetEvent(get_current_thread_data()->interruption_handle); - throw thread_interrupted(); - } - } - - bool interruption_enabled() - { - return get_current_thread_data() && get_current_thread_data()->interruption_enabled; - } - - bool interruption_requested() - { - return get_current_thread_data() && (detail::win32::WaitForSingleObject(get_current_thread_data()->interruption_handle,0)==0); - } - - void yield() - { - detail::win32::Sleep(0); - } - - disable_interruption::disable_interruption(): - interruption_was_enabled(interruption_enabled()) - { - if(interruption_was_enabled) - { - get_current_thread_data()->interruption_enabled=false; - } - } - - disable_interruption::~disable_interruption() - { - if(get_current_thread_data()) - { - get_current_thread_data()->interruption_enabled=interruption_was_enabled; - } - } - - restore_interruption::restore_interruption(disable_interruption& d) - { - if(d.interruption_was_enabled) - { - get_current_thread_data()->interruption_enabled=true; - } - } - - restore_interruption::~restore_interruption() - { - if(get_current_thread_data()) - { - get_current_thread_data()->interruption_enabled=false; - } - } - } - - namespace detail - { - void add_thread_exit_function(thread_exit_function_base* func) - { - detail::thread_data_base* const current_thread_data(get_or_make_current_thread_data()); - thread_exit_callback_node* const new_node= - heap_new<thread_exit_callback_node>( - func,current_thread_data->thread_exit_callbacks); - current_thread_data->thread_exit_callbacks=new_node; - } - - tss_data_node* find_tss_data(void const* key) - { - detail::thread_data_base* const current_thread_data(get_current_thread_data()); - if(current_thread_data) - { - detail::tss_data_node* current_node=current_thread_data->tss_data; - while(current_node) - { - if(current_node->key==key) - { - return current_node; - } - current_node=current_node->next; - } - } - return NULL; - } - - void* get_tss_data(void const* key) - { - if(tss_data_node* const current_node=find_tss_data(key)) - { - return current_node->value; - } - return NULL; - } - - void set_tss_data(void const* key,boost::shared_ptr<tss_cleanup_function> func,void* tss_data,bool cleanup_existing) - { - if(tss_data_node* const current_node=find_tss_data(key)) - { - if(cleanup_existing && current_node->func.get() && current_node->value) - { - (*current_node->func)(current_node->value); - } - current_node->func=func; - current_node->value=tss_data; - } - else if(func && tss_data) - { - detail::thread_data_base* const current_thread_data(get_or_make_current_thread_data()); - tss_data_node* const new_node= - heap_new<tss_data_node>(key,func,tss_data,current_thread_data->tss_data); - current_thread_data->tss_data=new_node; - } - } - } - BOOST_THREAD_DECL void __cdecl on_process_enter() - {} - - BOOST_THREAD_DECL void __cdecl on_thread_enter() - {} - - BOOST_THREAD_DECL void __cdecl on_process_exit() - { - boost::cleanup_tls_key(); - } - - BOOST_THREAD_DECL void __cdecl on_thread_exit() - { - boost::run_thread_exit_callbacks(); - } - -} - - diff --git a/src/third_party/boost/libs/thread/src/win32/timeconv.inl b/src/third_party/boost/libs/thread/src/win32/timeconv.inl deleted file mode 100644 index c6467832a7e..00000000000 --- a/src/third_party/boost/libs/thread/src/win32/timeconv.inl +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright (C) 2001-2003 -// William E. Kempf -// -// 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) - -// boostinspect:nounnamed - -namespace { -const int MILLISECONDS_PER_SECOND = 1000; -const int NANOSECONDS_PER_SECOND = 1000000000; -const int NANOSECONDS_PER_MILLISECOND = 1000000; - -const int MICROSECONDS_PER_SECOND = 1000000; -const int NANOSECONDS_PER_MICROSECOND = 1000; - -inline void to_time(int milliseconds, boost::xtime& xt) -{ - int res = 0; - res = boost::xtime_get(&xt, boost::TIME_UTC_); - assert(res == boost::TIME_UTC_); - - xt.sec += (milliseconds / MILLISECONDS_PER_SECOND); - xt.nsec += ((milliseconds % MILLISECONDS_PER_SECOND) * - NANOSECONDS_PER_MILLISECOND); - - if (xt.nsec >= NANOSECONDS_PER_SECOND) - { - ++xt.sec; - xt.nsec -= NANOSECONDS_PER_SECOND; - } -} - -#if defined(BOOST_HAS_PTHREADS) -inline void to_timespec(const boost::xtime& xt, timespec& ts) -{ - ts.tv_sec = static_cast<int>(xt.sec); - ts.tv_nsec = static_cast<int>(xt.nsec); - if(ts.tv_nsec >= NANOSECONDS_PER_SECOND) - { - ts.tv_sec += ts.tv_nsec / NANOSECONDS_PER_SECOND; - ts.tv_nsec %= NANOSECONDS_PER_SECOND; - } -} - -inline void to_time(int milliseconds, timespec& ts) -{ - boost::xtime xt; - to_time(milliseconds, xt); - to_timespec(xt, ts); -} - -inline void to_timespec_duration(const boost::xtime& xt, timespec& ts) -{ - boost::xtime cur; - int res = 0; - res = boost::xtime_get(&cur, boost::TIME_UTC_); - assert(res == boost::TIME_UTC_); - - if (boost::xtime_cmp(xt, cur) <= 0) - { - ts.tv_sec = 0; - ts.tv_nsec = 0; - } - else - { - ts.tv_sec = xt.sec - cur.sec; - ts.tv_nsec = xt.nsec - cur.nsec; - - if( ts.tv_nsec < 0 ) - { - ts.tv_sec -= 1; - ts.tv_nsec += NANOSECONDS_PER_SECOND; - } - if(ts.tv_nsec >= NANOSECONDS_PER_SECOND) - { - ts.tv_sec += ts.tv_nsec / NANOSECONDS_PER_SECOND; - ts.tv_nsec %= NANOSECONDS_PER_SECOND; - } - } -} -#endif - -inline void to_duration(boost::xtime xt, int& milliseconds) -{ - boost::xtime cur; - int res = 0; - res = boost::xtime_get(&cur, boost::TIME_UTC_); - assert(res == boost::TIME_UTC_); - - if (boost::xtime_cmp(xt, cur) <= 0) - milliseconds = 0; - else - { - if (cur.nsec > xt.nsec) - { - xt.nsec += NANOSECONDS_PER_SECOND; - --xt.sec; - } - milliseconds = (int)((xt.sec - cur.sec) * MILLISECONDS_PER_SECOND) + - (((xt.nsec - cur.nsec) + (NANOSECONDS_PER_MILLISECOND/2)) / - NANOSECONDS_PER_MILLISECOND); - } -} - -inline void to_microduration(boost::xtime xt, int& microseconds) -{ - boost::xtime cur; - int res = 0; - res = boost::xtime_get(&cur, boost::TIME_UTC_); - assert(res == boost::TIME_UTC_); - - if (boost::xtime_cmp(xt, cur) <= 0) - microseconds = 0; - else - { - if (cur.nsec > xt.nsec) - { - xt.nsec += NANOSECONDS_PER_SECOND; - --xt.sec; - } - microseconds = (int)((xt.sec - cur.sec) * MICROSECONDS_PER_SECOND) + - (((xt.nsec - cur.nsec) + (NANOSECONDS_PER_MICROSECOND/2)) / - NANOSECONDS_PER_MICROSECOND); - } -} -} - -// Change Log: -// 1 Jun 01 Initial creation. diff --git a/src/third_party/boost/libs/thread/src/win32/tss_dll.cpp b/src/third_party/boost/libs/thread/src/win32/tss_dll.cpp deleted file mode 100644 index 9699a12b82c..00000000000 --- a/src/third_party/boost/libs/thread/src/win32/tss_dll.cpp +++ /dev/null @@ -1,76 +0,0 @@ -// (C) Copyright Michael Glassford 2004. -// Use, modification and distribution are 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) - -#include <boost/thread/detail/config.hpp> - -#if defined(BOOST_HAS_WINTHREADS) && defined(BOOST_THREAD_BUILD_DLL) - - #include <boost/thread/detail/tss_hooks.hpp> - - #define WIN32_LEAN_AND_MEAN - #include <windows.h> - - #if defined(__BORLANDC__) - extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE /*hInstance*/, DWORD dwReason, LPVOID /*lpReserved*/) - #elif defined(_WIN32_WCE) - extern "C" BOOL WINAPI DllMain(HANDLE /*hInstance*/, DWORD dwReason, LPVOID /*lpReserved*/) - #else - extern "C" BOOL WINAPI DllMain(HINSTANCE /*hInstance*/, DWORD dwReason, LPVOID /*lpReserved*/) - #endif - { - switch(dwReason) - { - case DLL_PROCESS_ATTACH: - { - boost::on_process_enter(); - boost::on_thread_enter(); - break; - } - - case DLL_THREAD_ATTACH: - { - boost::on_thread_enter(); - break; - } - - case DLL_THREAD_DETACH: - { - boost::on_thread_exit(); - break; - } - - case DLL_PROCESS_DETACH: - { - boost::on_thread_exit(); - boost::on_process_exit(); - break; - } - } - - return TRUE; - } - -namespace boost -{ - void tss_cleanup_implemented() - { - /* - This function's sole purpose is to cause a link error in cases where - automatic tss cleanup is not implemented by Boost.Threads as a - reminder that user code is responsible for calling the necessary - functions at the appropriate times (and for implementing an a - tss_cleanup_implemented() function to eliminate the linker's - missing symbol error). - - If Boost.Threads later implements automatic tss cleanup in cases - where it currently doesn't (which is the plan), the duplicate - symbol error will warn the user that their custom solution is no - longer needed and can be removed. - */ - } -} - - -#endif //defined(BOOST_HAS_WINTHREADS) && defined(BOOST_THREAD_BUILD_DLL) diff --git a/src/third_party/boost/libs/thread/src/win32/tss_pe.cpp b/src/third_party/boost/libs/thread/src/win32/tss_pe.cpp deleted file mode 100644 index 1d07d6b42bc..00000000000 --- a/src/third_party/boost/libs/thread/src/win32/tss_pe.cpp +++ /dev/null @@ -1,284 +0,0 @@ -// $Id: tss_pe.cpp 72431 2011-06-06 08:28:31Z anthonyw $ -// (C) Copyright Aaron W. LaFramboise, Roland Schwarz, Michael Glassford 2004. -// (C) Copyright 2007 Roland Schwarz -// (C) Copyright 2007 Anthony Williams -// (C) Copyright 2007 David Deakins -// Use, modification and distribution are 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) - -#include <boost/thread/detail/config.hpp> - -#if defined(BOOST_HAS_WINTHREADS) && defined(BOOST_THREAD_BUILD_LIB) - -#if (defined(__MINGW32__) && !defined(_WIN64)) || defined(__MINGW64__) - -#include <boost/thread/detail/tss_hooks.hpp> - -#include <windows.h> - -#include <cstdlib> - -namespace boost -{ - void tss_cleanup_implemented() {} -} - -namespace { - void NTAPI on_tls_callback(void* h, DWORD dwReason, PVOID pv) - { - switch (dwReason) - { - case DLL_THREAD_DETACH: - { - boost::on_thread_exit(); - break; - } - } - } -} - -#if defined(__MINGW64__) || (__MINGW32_MAJOR_VERSION >3) || \ - ((__MINGW32_MAJOR_VERSION==3) && (__MINGW32_MINOR_VERSION>=18)) -extern "C" -{ - PIMAGE_TLS_CALLBACK __crt_xl_tls_callback__ __attribute__ ((section(".CRT$XLB"))) = on_tls_callback; -} -#else -extern "C" { - - void (* after_ctors )() __attribute__((section(".ctors"))) = boost::on_process_enter; - void (* before_dtors)() __attribute__((section(".dtors"))) = boost::on_thread_exit; - void (* after_dtors )() __attribute__((section(".dtors.zzz"))) = boost::on_process_exit; - - ULONG __tls_index__ = 0; - char __tls_end__ __attribute__((section(".tls$zzz"))) = 0; - char __tls_start__ __attribute__((section(".tls"))) = 0; - - - PIMAGE_TLS_CALLBACK __crt_xl_start__ __attribute__ ((section(".CRT$XLA"))) = 0; - PIMAGE_TLS_CALLBACK __crt_xl_end__ __attribute__ ((section(".CRT$XLZ"))) = 0; -} -extern "C" const IMAGE_TLS_DIRECTORY32 _tls_used __attribute__ ((section(".rdata$T"))) = -{ - (DWORD) &__tls_start__, - (DWORD) &__tls_end__, - (DWORD) &__tls_index__, - (DWORD) (&__crt_xl_start__+1), - (DWORD) 0, - (DWORD) 0 -}; -#endif - - -#elif defined(_MSC_VER) && !defined(UNDER_CE) - - #include <boost/thread/detail/tss_hooks.hpp> - - #include <stdlib.h> - - #define WIN32_LEAN_AND_MEAN - #include <windows.h> - - //Definitions required by implementation - - #if (_MSC_VER < 1300) // 1300 == VC++ 7.0 - typedef void (__cdecl *_PVFV)(); - #define INIRETSUCCESS - #define PVAPI void __cdecl - #else - typedef int (__cdecl *_PVFV)(); - #define INIRETSUCCESS 0 - #define PVAPI int __cdecl - #endif - - typedef void (NTAPI* _TLSCB)(HINSTANCE, DWORD, PVOID); - - //Symbols for connection to the runtime environment - - extern "C" - { - extern DWORD _tls_used; //the tls directory (located in .rdata segment) - extern _TLSCB __xl_a[], __xl_z[]; //tls initializers */ - } - - namespace - { - //Forward declarations - - static PVAPI on_tls_prepare(); - static PVAPI on_process_init(); - static PVAPI on_process_term(); - static void NTAPI on_tls_callback(HINSTANCE, DWORD, PVOID); - - //The .CRT$Xxx information is taken from Codeguru: - //http://www.codeguru.com/Cpp/misc/misc/threadsprocesses/article.php/c6945__2/ - -#if (_MSC_VER >= 1400) -#pragma section(".CRT$XIU",long,read) -#pragma section(".CRT$XCU",long,read) -#pragma section(".CRT$XTU",long,read) -#pragma section(".CRT$XLC",long,read) - __declspec(allocate(".CRT$XLC")) _TLSCB __xl_ca=on_tls_callback; - __declspec(allocate(".CRT$XIU"))_PVFV p_tls_prepare = on_tls_prepare; - __declspec(allocate(".CRT$XCU"))_PVFV p_process_init = on_process_init; - __declspec(allocate(".CRT$XTU"))_PVFV p_process_term = on_process_term; -#else - #if (_MSC_VER >= 1300) // 1300 == VC++ 7.0 - # pragma data_seg(push, old_seg) - #endif - //Callback to run tls glue code first. - //I don't think it is necessary to run it - //at .CRT$XIB level, since we are only - //interested in thread detachement. But - //this could be changed easily if required. - - #pragma data_seg(".CRT$XIU") - static _PVFV p_tls_prepare = on_tls_prepare; - #pragma data_seg() - - //Callback after all global ctors. - - #pragma data_seg(".CRT$XCU") - static _PVFV p_process_init = on_process_init; - #pragma data_seg() - - //Callback for tls notifications. - - #pragma data_seg(".CRT$XLB") - _TLSCB p_thread_callback = on_tls_callback; - #pragma data_seg() - //Callback for termination. - - #pragma data_seg(".CRT$XTU") - static _PVFV p_process_term = on_process_term; - #pragma data_seg() - #if (_MSC_VER >= 1300) // 1300 == VC++ 7.0 - # pragma data_seg(pop, old_seg) - #endif -#endif - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable:4189) -#endif - - PVAPI on_tls_prepare() - { - //The following line has an important side effect: - //if the TLS directory is not already there, it will - //be created by the linker. In other words, it forces a tls - //directory to be generated by the linker even when static tls - //(i.e. __declspec(thread)) is not used. - //The volatile should prevent the optimizer - //from removing the reference. - - DWORD volatile dw = _tls_used; - - #if (_MSC_VER < 1300) // 1300 == VC++ 7.0 - _TLSCB* pfbegin = __xl_a; - _TLSCB* pfend = __xl_z; - _TLSCB* pfdst = pfbegin; - //pfdst = (_TLSCB*)_tls_used.AddressOfCallBacks; - - //The following loop will merge the address pointers - //into a contiguous area, since the tlssup code seems - //to require this (at least on MSVC 6) - - while (pfbegin < pfend) - { - if (*pfbegin != 0) - { - *pfdst = *pfbegin; - ++pfdst; - } - ++pfbegin; - } - - *pfdst = 0; - #endif - - return INIRETSUCCESS; - } -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - - PVAPI on_process_init() - { - //Schedule on_thread_exit() to be called for the main - //thread before destructors of global objects have been - //called. - - //It will not be run when 'quick' exiting the - //library; however, this is the standard behaviour - //for destructors of global objects, so that - //shouldn't be a problem. - - atexit(boost::on_thread_exit); - - //Call Boost process entry callback here - - boost::on_process_enter(); - - return INIRETSUCCESS; - } - - PVAPI on_process_term() - { - boost::on_process_exit(); - return INIRETSUCCESS; - } - - void NTAPI on_tls_callback(HINSTANCE /*h*/, DWORD dwReason, PVOID /*pv*/) - { - switch (dwReason) - { - case DLL_THREAD_DETACH: - boost::on_thread_exit(); - break; - } - } - - BOOL WINAPI dll_callback(HANDLE, DWORD dwReason, LPVOID) - { - switch (dwReason) - { - case DLL_THREAD_DETACH: - boost::on_thread_exit(); - break; - case DLL_PROCESS_DETACH: - boost::on_process_exit(); - break; - } - return true; - } - } //namespace - -extern "C" -{ - extern BOOL (WINAPI * const _pRawDllMain)(HANDLE, DWORD, LPVOID)=&dll_callback; -} -namespace boost -{ - void tss_cleanup_implemented() - { - /* - This function's sole purpose is to cause a link error in cases where - automatic tss cleanup is not implemented by Boost.Threads as a - reminder that user code is responsible for calling the necessary - functions at the appropriate times (and for implementing an a - tss_cleanup_implemented() function to eliminate the linker's - missing symbol error). - - If Boost.Threads later implements automatic tss cleanup in cases - where it currently doesn't (which is the plan), the duplicate - symbol error will warn the user that their custom solution is no - longer needed and can be removed. - */ - } -} - -#endif //defined(_MSC_VER) && !defined(UNDER_CE) - -#endif //defined(BOOST_HAS_WINTHREADS) && defined(BOOST_THREAD_BUILD_LIB) |