Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r50951 - in sandbox/filesystem-v3: . libs/filesystem libs/filesystem/doc
From: bdawes_at_[hidden]
Date: 2009-02-01 09:38:13


Author: bemandawes
Date: 2009-02-01 09:38:12 EST (Sun, 01 Feb 2009)
New Revision: 50951
URL: http://svn.boost.org/trac/boost/changeset/50951

Log:
Filesystem.v3: docs organization work-in-progress
Added:
   sandbox/filesystem-v3/libs/filesystem/doc/design.htm (contents, props changed)
   sandbox/filesystem-v3/libs/filesystem/doc/faq.htm (contents, props changed)
   sandbox/filesystem-v3/libs/filesystem/doc/index.htm (contents, props changed)
   sandbox/filesystem-v3/libs/filesystem/doc/portability_guide.htm (contents, props changed)
   sandbox/filesystem-v3/libs/filesystem/index.html (contents, props changed)
Removed:
   sandbox/filesystem-v3/index.html
   sandbox/filesystem-v3/libs/filesystem/readme-sandbox-v3.html
Text files modified:
   sandbox/filesystem-v3/libs/filesystem/doc/v3_design.html | 41 ++++++++++++++++++++++++++++-----------
   1 files changed, 29 insertions(+), 12 deletions(-)

Deleted: sandbox/filesystem-v3/index.html
==============================================================================
--- sandbox/filesystem-v3/index.html 2009-02-01 09:38:12 EST (Sun, 01 Feb 2009)
+++ (empty file)
@@ -1,22 +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 Version 3</title>
-</head>
-
-<body>
-
-<h1>Filesystem Version 3 in the Sandbox</h1>
-<p>To experiment with filesystem.v3:</p>
-<ul>
- <li>Subversion checkout filesystem-v3 from the sandbox.</li>
- <li>Subversion export trunk to the same directory.</li>
-</ul>
-
-</body>
-
-</html>
\ No newline at end of file

Added: sandbox/filesystem-v3/libs/filesystem/doc/design.htm
==============================================================================
--- (empty file)
+++ sandbox/filesystem-v3/libs/filesystem/doc/design.htm 2009-02-01 09:38:12 EST (Sun, 01 Feb 2009)
@@ -0,0 +1,353 @@
+<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>Introduction<br>
+Requirements<br>
+Realities<br>
+Rationale<br>
+Abandoned_Designs<br>
+References</p>
+
+<h2><a name="Introduction">Introduction</a></h2>
+
+<p>The primary motivation for beginning work on the Filesystem Library was
+frustration with Boost administrative tools.&nbsp; Scripts were written in
+Python, Perl, Bash, and Windows command languages.&nbsp; There was no single
+scripting language familiar and acceptable to all Boost administrators. Yet they
+were all skilled C++ programmers - why couldn't C++ be used as the scripting
+language?</p>
+
+<p>The key feature C++ lacked for script-like applications was the ability to
+perform portable filesystem operations on directories and their contents. The
+Filesystem Library was developed to fill that void.</p>
+
+<p>The intent is not to compete with traditional scripting languages, but to
+provide a solution for situations where C++ is already the language
+of choice..</p>
+
+<h2><a name="Requirements">Requirements</a></h2>
+<ul>
+ <li>Be able to write portable script-style filesystem operations in modern
+ C++.<br>
+ <br>
+ Rationale: This is a common programming need. It is both an
+ embarrassment and a hardship that this is not possible with either the current
+ C++ or Boost libraries.&nbsp; The need is particularly acute
+ when C++ is the only toolset allowed in the tool chain.&nbsp; File system
+ operations are provided by many languages&nbsp;used on multiple platforms,
+ such as Perl and Python, as well as by many platform specific scripting
+ languages. All operating systems provide some form of API for filesystem
+ operations, and the POSIX bindings are increasingly available even on
+ operating systems not normally associated with POSIX, such as the Mac, z/OS,
+ or OS/390.<br>
+&nbsp;</li>
+ <li>Work within the realities described below.<br>
+ <br>
+ Rationale: This isn't a research project. The need is for something that works on
+ today's platforms, including some of the embedded operating systems
+ with limited file systems. Because of the emphasis on portability, such a
+ library would be much more useful if standardized. That means being able to
+ work with a much wider range of platforms that just Unix or Windows and their
+ clones.<br>
+&nbsp;</li>
+ <li>Avoid dangerous programming practices. Particularly, all-too-easy-to-ignore error notifications
+ and use of global variables.&nbsp;If a dangerous feature is provided, identify it as such.<br>
+ <br>
+ Rationale: Normally this would be covered by &quot;the usual Boost requirements...&quot;,
+ but it is mentioned explicitly because the equivalent native platform and
+ scripting language interfaces often depend on all-too-easy-to-ignore error
+ notifications and global variables like &quot;current
+ working directory&quot;.<br>
+&nbsp;</li>
+ <li>Structure the library so that it is still useful even if some functionality
+ does not map well onto a given platform or directory tree. Particularly, much
+ useful functionality should be portable even to flat
+(non-hierarchical) filesystems.<br>
+ <br>
+ Rationale: Much functionality which does not
+ require a hierarchical directory structure is still useful on flat-structure
+ filesystems.&nbsp; There are many systems, particularly embedded systems,
+ where even very limited functionality is still useful.</li>
+</ul>
+<ul>
+ <li>Interface smoothly with current C++ Standard Library input/output
+ facilities.&nbsp; For example, paths should be
+ easy to use in std::basic_fstream constructors.<br>
+ <br>
+ Rationale: One of the most common uses of file system functionality is to
+ manipulate paths for eventual use in input/output operations.&nbsp;
+ Thus the need to interface smoothly with standard library I/O.<br>
+&nbsp;</li>
+ <li>Suitable for eventual standardization. The implication of this requirement
+ is that the interface be close to minimal, and that great care be take
+ regarding portability.<br>
+ <br>
+ Rationale: The lack of file system operations is a serious hole
+ in the current standard, with no other known candidates to fill that hole.
+ Libraries with elaborate interfaces and difficult to port specifications are much less likely to be accepted for
+ standardization.<br>
+&nbsp;</li>
+ <li>The usual Boost <a href="http://www.boost.org/more/lib_guide.htm">requirements and
+ guidelines</a> apply.<br>
+&nbsp;</li>
+ <li>Encourage, but do not require, portability in path names.<br>
+ <br>
+ Rationale: For paths which originate from user input it is unreasonable to
+ require portable path syntax.<br>
+&nbsp;</li>
+ <li>Avoid giving the illusion of portability where portability in fact does not
+ exist.<br>
+ <br>
+ Rationale: Leaving important behavior unspecified or &quot;implementation defined&quot; does a
+ great disservice to programmers using a library because it makes it appear
+ that code relying on the behavior is portable, when in fact there is nothing
+ portable about it. The only case where such under-specification is acceptable is when both users and implementors know from
+ other sources exactly what behavior is required, yet for some reason it isn't
+ possible to specify it exactly.</li>
+</ul>
+<h2><a name="Realities">Realities</a></h2>
+<ul>
+ <li>Some operating systems have a single directory tree root, others have
+ multiple roots.<br>
+&nbsp;</li>
+ <li>Some file systems provide both a long and short form of filenames.<br>
+&nbsp;</li>
+ <li>Some file systems have different syntax for file paths and directory
+ paths.<br>
+&nbsp;</li>
+ <li>Some file systems have different rules for valid file names and valid
+ directory names.<br>
+&nbsp;</li>
+ <li>Some file systems (ISO-9660, level 1, for example) use very restricted
+ (so-called 8.3) file names.<br>
+&nbsp;</li>
+ <li>Some operating systems allow file systems with different
+ characteristics to be &quot;mounted&quot; within a directory tree.&nbsp; Thus a
+ ISO-9660 or Windows
+ file system may end up as a sub-tree of a POSIX directory tree.<br>
+&nbsp;</li>
+ <li>Wide-character versions of directory and file operations are available on some operating
+ systems, and not available on others.<br>
+&nbsp;</li>
+ <li>There is no law that says directory hierarchies have to be specified in
+ terms of left-to-right decent from the root.<br>
+&nbsp;</li>
+ <li>Some file systems have a concept of file &quot;version number&quot; or &quot;generation
+ number&quot;.&nbsp; Some don't.<br>
+&nbsp;</li>
+ <li>Not all operating systems use single character separators in path names.&nbsp; Some use
+ paired notations. A typical fully-specified OpenVMS filename
+ might look something like this:<br>
+ <br>
+ <code>&nbsp;&nbsp; DISK$SCRATCH:[GEORGE.PROJECT1.DAT]BIG_DATA_FILE.NTP;5<br>
+ </code><br>
+ The general OpenVMS format is:<br>
+ <br>
+&nbsp;&nbsp;&nbsp;&nbsp;
+ <i>Device:[directories.dot.separated]filename.extension;version_number</i><br>
+&nbsp;</li>
+ <li>For common file systems, determining if two descriptors are for same
+ entity is extremely difficult or impossible.&nbsp; For example, the concept of
+ equality can be different for each portion of a path - some portions may be
+ case or locale sensitive, others not. Case sensitivity is a property of the
+ pathname itself, and not the platform. Determining collating sequence is even
+ worse.<br>
+&nbsp;</li>
+ <li>Race-conditions may occur. Directory trees, directories, files, and file attributes are in effect shared between all threads, processes, and computers which have access to the
+ filesystem.&nbsp; That may well include computers on the other side of the
+ world or in orbit around the world. This implies that file system operations
+ may fail in unexpected ways.&nbsp;For example:<br>
+ <br>
+ <code>&nbsp;&nbsp;&nbsp;&nbsp; assert( exists(&quot;foo&quot;) == exists(&quot;foo&quot;) );
+ // may fail!<br>
+&nbsp;&nbsp;&nbsp;&nbsp; assert( is_directory(&quot;foo&quot;) == is_directory(&quot;foo&quot;);
+ // may fail!<br>
+ </code><br>
+ In the first example, the file may have been deleted between calls to
+ exists().&nbsp; In the second example, the file may have been deleted and then
+ replaced by a directory of the same name between the calls to is_directory().<br>
+&nbsp;</li>
+ <li>Even though an application may be portable, it still will have to traffic
+ in system specific paths occasionally; user provided input is a common
+ example.<br>
+&nbsp;</li>
+ <li><a name="symbolic-link-use-case">Symbolic</a> links cause canonical and
+ normal form of some paths to represent different files or directories. For
+ example, given the directory hierarchy <code>/a/b/c</code>, with a symbolic
+ link in <code>/a</code> named <code>x</code>&nbsp; pointing to <code>b/c</code>,
+ then under POSIX Pathname Resolution rules a path of <code>&quot;/a/x/..&quot;</code>
+ should resolve to <code>&quot;/a/b&quot;</code>. If <code>&quot;/a/x/..&quot;</code> were first
+ normalized to <code>&quot;/a&quot;</code>, it would resolve incorrectly. (Case supplied
+ by Walter Landry.)</li>
+</ul>
+
+<h2><a name="Rationale">Rationale</a></h2>
+
+<p>The Requirements and <a href="#Realities">
+Realities</a> above drove much of the C++ interface design.&nbsp; In particular,
+the desire to make script-like code straightforward caused a great deal of
+effort to go into ensuring that apparently simple expressions like <i>exists( &quot;foo&quot;
+)</i> work as expected.</p>
+
+<p>See the FAQ for the rationale behind many detailed
+design decisions.</p>
+
+<p>Several key insights went into the <i>path</i> class design:</p>
+<ul>
+ <li>Decoupling of the input formats, internal conceptual (<i>vector&lt;string&gt;</i>
+ or other sequence)
+ model, and output formats.</li>
+ <li>Providing two input formats (generic and O/S specific) broke a major
+ design deadlock.</li>
+ <li>Providing several output formats solved another set of previously
+ intractable problems.</li>
+ <li>Several non-obvious functions (particularly decomposition and composition)
+ are required to support portable code. (Peter Dimov, Thomas Witt, Glen
+ Knowles, others.)</li>
+</ul>
+
+<p>Error checking was a particularly difficult area. One key insight was that
+with file and directory names, portability isn't a universal truth.&nbsp;
+Rather, the programmer must think out the question &quot;What operating systems do I
+want this path to be portable to?&quot;&nbsp; By providing support for several
+answers to that question, the Filesystem Library alerts programmers of the need
+to ask it in the first place.</p>
+<h2><a name="Abandoned_Designs">Abandoned Designs</a></h2>
+<h3>operations.hpp</h3>
+<p>Dietmar Kühl's original dir_it design and implementation supported
+wide-character file and directory names. It was abandoned after extensive
+discussions among Library Working Group members failed to identify portable
+semantics for wide-character names on systems not providing native support. See
+FAQ.</p>
+<p>Previous iterations of the interface design used explicitly named functions providing a
+large number of convenience operations, with no compile-time or run-time
+options. There were so many function names that they were very confusing to use,
+and the interface was much larger. Any benefits seemed theoretical rather than
+real. </p>
+<p>Designs based on compile time (rather than runtime) flag and option selection
+(via policy, enum, or int template parameters) became so complicated that they
+were abandoned, often after investing quite a bit of time and effort. The need
+to qualify attribute or option names with namespaces, even aliases, made use in
+template parameters ugly; that wasn't fully appreciated until actually writing
+real code.</p>
+<p>Yet another set of convenience functions ( for example, <i>remove</i> with
+permissive, prune, recurse, and other options, plus predicate, and possibly
+other, filtering features) were abandoned because the details became both
+complex and contentious.</p>
+
+<p>What is left is a toolkit of low-level operations from which the user can
+create more complex convenience operations, plus a very small number of
+convenience functions which were found to be useful enough to justify inclusion.</p>
+
+<h3>path.hpp</h3>
+
+<p>There were so many abandoned path designs, I've lost track. Policy-based
+class templates in several flavors, constructor supplied runtime policies,
+operation specific runtime policies, they were all considered, often
+implemented, and ultimately abandoned as far too complicated for any small
+benefits observed.</p>
+
+<p>Additional design considerations apply to <a href="i18n.html">
+Internationalization</a>. </p>
+
+<h3>error checking</h3>
+
+<p>A number of designs for the error checking machinery were abandoned, some
+after experiments with implementations. Totally automatic error checking was
+attempted in particular. But automatic error checking tended to make the overall
+library design much more complicated.</p>
+
+<p>Some designs associated error checking mechanisms with paths.&nbsp; Some with
+operations functions.&nbsp; A policy-based error checking template design was
+partially implemented, then abandoned as too complicated for everyday
+script-like programs.</p>
+
+<p>The final design, which depends partially on explicit error checking function
+calls,&nbsp; is much simpler and straightforward, although it does depend to
+some extent on programmer discipline.&nbsp; But it should allow programmers who
+are concerned about portability to be reasonably sure that their programs will
+work correctly on their choice of target systems.</p>
+
+<h2><a name="References">References</a></h2>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
+ <tr>
+ <td width="13%" valign="top">[<a name="IBM-01">IBM-01</a>]</td>
+ <td width="87%">IBM Corporation, <i>z/OS V1R3.0 C/C++ Run-Time
+Library Reference</i>, SA22-7821-02, 2001,
+<a href="http://www-1.ibm.com/servers/eserver/zseries/zos/bkserv/">
+ www-1.ibm.com/servers/eserver/zseries/zos/bkserv/</a></td>
+ </tr>
+ <tr>
+ <td width="13%" valign="top">[<a name="ISO-9660">ISO-9660</a>]</td>
+ <td width="87%">International Standards Organization, 1988</td>
+ </tr>
+ <tr>
+ <td width="13%" valign="top">[<a name="Kuhn">Kuhn</a>]</td>
+ <td width="87%">UTF-8 and Unicode FAQ for Unix/Linux,
+<a href="http://www.cl.cam.ac.uk/~mgk25/unicode.html">
+ www.cl.cam.ac.uk/~mgk25/unicode.html</a></td>
+ </tr>
+ <tr>
+ <td width="13%" valign="top">[<a name="MSDN">MSDN</a>] </td>
+ <td width="87%">Microsoft Platform SDK for Windows, Storage Start
+Page,
+<a href="http://msdn.microsoft.com/library/en-us/fileio/base/storage_start_page.asp">
+ msdn.microsoft.com/library/en-us/fileio/base/storage_start_page.asp</a></td>
+ </tr>
+ <tr>
+ <td width="13%" valign="top">[<a name="POSIX-01">POSIX-01</a>]</td>
+ <td width="87%">IEEE&nbsp;Std&nbsp;1003.1-2001, ISO/IEC 9945:2002, and The Open Group Base Specifications, Issue 6. Also known as The
+ Single Unix<font face="Times New Roman">® Specification, Version 3.
+ Available from each of the organizations involved in its creation. For
+ example, read online or download from
+ <a href="http://www.unix.org/single_unix_specification/">
+ www.unix.org/single_unix_specification/</a>.</font> The ISO JTC1/SC22/WG15 - POSIX
+homepage is <a href="http://www.open-std.org/jtc1/sc22/WG15/">
+ www.open-std.org/jtc1/sc22/WG15/</a></td>
+ </tr>
+ <tr>
+ <td width="13%" valign="top">[<a name="URI">URI</a>]</td>
+ <td width="87%">RFC-2396, Uniform Resource Identifiers (URI): Generic
+Syntax, <a href="http://www.ietf.org/rfc/rfc2396.txt">
+ www.ietf.org/rfc/rfc2396.txt</a></td>
+ </tr>
+ <tr>
+ <td width="13%" valign="top">[<a name="UTF-16">UTF-16</a>]</td>
+ <td width="87%">Wikipedia, UTF-16,
+<a href="http://en.wikipedia.org/wiki/UTF-16">
+ en.wikipedia.org/wiki/UTF-16</a></td>
+ </tr>
+ <tr>
+ <td width="13%" valign="top">[<a name="Wulf-Shaw-73">Wulf-Shaw-73</a>]</td>
+ <td width="87%">William Wulf, Mary Shaw, <i>Global
+Variable Considered Harmful</i>, ACM SIGPLAN Notices, 8, 2, 1973, pp. 23-34</td>
+ </tr>
+</table>
+
+<hr>
+<p>Revised
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->02 August, 2005<!--webbot bot="Timestamp" endspan i-checksum="34600" --></p>
+
+<p>© Copyright Beman Dawes, 2002</p>
+<p> Use, modification, and distribution are subject to the Boost Software
+License, Version 1.0. (See accompanying file <a href="../../../LICENSE_1_0.txt">
+LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
+www.boost.org/LICENSE_1_0.txt</a>)</p>
+
+</body>
+
+</html>
\ No newline at end of file

Added: sandbox/filesystem-v3/libs/filesystem/doc/faq.htm
==============================================================================
--- (empty file)
+++ sandbox/filesystem-v3/libs/filesystem/doc/faq.htm 2009-02-01 09:38:12 EST (Sun, 01 Feb 2009)
@@ -0,0 +1,150 @@
+<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/html/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>Boost Home&nbsp;&nbsp;&nbsp;
+ Library Home&nbsp; &nbsp;
+ Tutorial&nbsp; &nbsp; <a href="reference.html">
+ Reference</a>&nbsp;&nbsp; FAQ</td>
+ </tr>
+</table>
+
+<h1>
+Frequently Asked Questions</h1>
+<p><b>Why base the generic-path string format on POSIX?</b></p>
+<p>[POSIX-01] is an ISO Standard. It is the basis for the most familiar path-string formats,
+not just for POSIX systems but also for the native Windows format and the
+URL portion of URI's. It is ubiquitous and
+familiar.&nbsp; On many systems, it is very easy to implement because it is
+either the native operating system format (Unix and Windows) or via a
+operating system supplied
+POSIX library (z/OS, OS/390, and many more.)</p>
+<p><b>Why not use a full URI (Universal Resource Identifier) based path?</b></p>
+<p>URI's would promise more than the Filesystem Library can actually deliver,
+since URI's extend far beyond what most operating systems consider a file or a
+directory.&nbsp; Thus for the primary &quot;portable script-style file system
+operations&quot; requirement of the Filesystem Library, full URI's appear to be over-specification.</p>
+<p><b>Why isn't <i>path</i> a base class with derived <i>directory_path</i> and
+<i>file_path</i> classes?</b></p>
+<p>Why bother?&nbsp; The behavior of all three classes is essentially identical.
+Several early versions did require users to identify each path as a file or
+directory path, and this seemed to increase errors and decrease code
+readability. There was no apparent upside benefit.</p>
+<p><b>Why are fully specified paths called <i>complete</i> rather than <i>
+<a name="absolute">absolute</a></i>?</b></p>
+<p>To avoid long-held assumptions (what do you mean, <i>&quot;/foo&quot;</i> isn't
+absolute on some systems?) by programmers used to single-rooted filesystems.
+Using an unfamiliar name for the concept and related functions causes
+programmers to read the specs rather than just assuming the meaning is known.</p>
+<p><b>Why not support a concept of specific kinds of file systems, such as posix_file_system or windows_file_system.</b></p>
+<p>Portability is one of the most important requirements for the
+library.&nbsp;Gaining some advantage by using features specific to particular
+operating systems is not a requirement. There doesn't appear to be much need for
+the ability to manipulate, say, a classic Mac OS path while running on an
+OpenVMS machine.</p>
+<p>Furthermore, concepts like &quot;file system&quot;
+are very slippery. What happens when a NTFS or FAT file system is mounted
+in directory on a machine running a POSIX-like operating system, for example?
+Some of the POSIX API's may return very un-POSIX like results.</p>
+<p><b>Why not supply a 'handle' type, and let the file and directory operations
+traffic in it?</b></p>
+<p>It isn't clear there is any feasible way to meet the &quot;portable script-style
+file system operations&quot; requirement with such a system. File systems exist where operations are usually performed on
+ some non-string handle type. The classic Mac OS has been mentioned explicitly as a case where
+trafficking in paths isn't always natural.&nbsp;&nbsp;&nbsp; </p>
+<p>The case for the &quot;handle&quot; (opaque data type to identify a file)
+style may be strongest for directory iterator value type.&nbsp; (See Jesse Jones' Jan 28,
+2002, Boost postings). However, as class path has evolved, it seems sufficient
+even as the directory iterator value type.</p>
+<p><b>Why are the operations.hpp non-member functions so low-level?</b></p>
+<p>To provide a toolkit from which higher-level functionality can be created.</p>
+<p>An
+extended attempt to add convenience functions on top of, or as a replacement
+for, the low-level functionality failed because there is no widely acceptable
+set of simple semantics for most convenience functions considered.&nbsp;
+Attempts to provide alternate semantics via either run-time options or
+compile-time polices became overly complicated in relation to the value
+delivered, or became contentious.&nbsp; OTOH, the specific functionality needed for several trial
+applications was very easy for the user to construct from the lower-level
+toolkit functions.&nbsp; See <a href="design.htm#Abandoned_Designs">Failed
+Attempts</a>.</p>
+<p><b>Isn't it inconsistent then to provide a few convenience functions?</b></p>
+<p>Yes, but experience with both this library, POSIX, and Windows indicates
+the utility of certain convenience functions, and that it is possible to provide
+simple, yet widely acceptable, semantics for them. For example, remove_all.</p>
+<p><b>Why are there basic_directory_iterator&lt;&gt; overloads for operations.hpp
+predicate functions? Isn't two ways to do the same thing poor design?</b></p>
+<p>Yes, two ways to do the same thing is often a poor design practice. But the
+iterator versions are often much more efficient. Calling status() during
+iteration over a directory containing 15,000 files took 6 seconds for the path
+overload, and 1 second for the iterator overload, for tests on a freshly booted
+machine. Times were .90 seconds and .30 seconds, for tests after prior use of
+the directory. This performance gain is large enough to justify deviating from
+preferred design practices. Neither overload alone meets all needs.</p>
+<p><b>Why are library functions so picky about errors?</b></p>
+<p>Safety. The default is to be safe rather than sorry. This is particularly
+important given the reality that on many computer systems files and directories
+are globally shared resources, and thus subject to
+unexpected errors.</p>
+<p><b>Why are errors reported by exception rather than return code or error
+notification variable?</b></p>
+<p>Safety.&nbsp;Return codes or error notification variables are often ignored
+by programmers.&nbsp; Exceptions are much harder to ignore, provided desired
+default behavior (program termination) if not caught, yet allow error recovery
+if desired. Non-throwing versions of functions are provided where experience
+indicates the need.</p>
+<p><b>Why are attributes accessed via named functions rather than property maps?</b></p>
+<p>For commonly used attributes (existence, directory or file, emptiness),
+simple syntax and guaranteed presence outweigh other considerations. Because
+access to many other attributes is inherently system dependent,
+property maps are viewed as the best hope for access and modification, but it is
+better design to provide such functionality in a separate library. (Historical
+note: even the apparently simple attribute &quot;read-only&quot; turned out to be so
+system depend as to be disqualified as a &quot;guaranteed presence&quot; operation.)</p>
+<p><b>Why aren't <a name="wide-character_names">wide-character names</a> supported? Why not std::wstring or even
+a templated type?</b></p>
+<p>They <u>are</u> supported, starting with version 1.33. See
+Internationalization.</p>
+<p><b>Why isn't automatic name portability error detection provided?</b></p>
+<p>A number (at least six) of designs for name validity error
+detection were evaluated, including at least four complete implementations.&nbsp;
+While the details for rejection differed, all of the more powerful name validity checking
+designs distorted other
+otherwise simple aspects of the library. Even the simple name checking provided
+in prior library versions was a constant source of user complaints. While name checking can be helpful, it
+isn't important enough to justify added a lot of additional complexity.</p>
+<p><b>Why are paths sometimes manipulated by member functions and sometimes by
+non-member functions?</b></p>
+<p>The design rule is that purely lexical operations are supplied as <i>class
+basic_path</i> member
+functions, while operations performed by the operating system are provided as
+free functions.</p>
+<hr>
+<p>Revised
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->18 March, 2008<!--webbot bot="Timestamp" endspan i-checksum="29005" --></p>
+<p>© Copyright Beman Dawes, 2002</p>
+<p> Use, modification, and distribution are subject to the Boost Software
+License, Version 1.0. See <a href="http://www.boost.org/LICENSE_1_0.txt">
+www.boost.org/LICENSE_1_0.txt</a></p>
\ No newline at end of file

Added: sandbox/filesystem-v3/libs/filesystem/doc/index.htm
==============================================================================
--- (empty file)
+++ sandbox/filesystem-v3/libs/filesystem/doc/index.htm 2009-02-01 09:38:12 EST (Sun, 01 Feb 2009)
@@ -0,0 +1,816 @@
+<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/html/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>Boost Home&nbsp;&nbsp;&nbsp;
+ Library Home&nbsp; &nbsp; Tutorial&nbsp; &nbsp; <a href="reference.html">
+ Reference</a>&nbsp;&nbsp; FAQ</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">
+ Introduction<br>
+ Using the library<br>
+ Two-minute tutorial<br>
+ Cautions<br>
+ Example programs<br>
+ Implementation<br>
+ Macros<br>
+ Deprecated names and features<br>
+ Using only narrow character paths<br>
+ Building the object-library<br>
+ &nbsp;&nbsp;&nbsp;&nbsp;Notes for Cygwin users<br>
+ Acknowledgements<br>
+ Change history</td>
+ </tr>
+ <tr>
+ <td width="100%" bgcolor="#D7EEFF" align="center">
+ <i><b>Other Documents</b></i></td>
+ </tr>
+ <tr>
+ <td width="100%" bgcolor="#E8F5FF">
+ Reference<br>
+ Library Design<br>
+ FAQ<br>
+ Portability Guide<br>
+ Do-list
+ </td>
+ </tr>
+</table>
+
+<h2><a name="Introduction">Introduction</a></h2>
+<p>The Boost.Filesystem library provides portable facilities to query and
+manipulate paths, files, and directories.</p>
+
+<p>The motivation for the library is the need to perform portable script-like operations from within C++ programs. The intent is not to
+compete with Python, Perl, or shell languages, but rather to provide portable filesystem
+operations when C++ is already the language of choice. The <a href="design.htm">
+design</a> encourages, but does not require, safe and portable usage.</p>
+
+<p>Programs using the library are <b><i>portable</i></b>, both in the sense that
+the syntax of program code is portable, and the sense that the semantics or
+behavior of code is portable. The <a href="reference.html">generic path
+grammar</a> is another important aid to portability.</p>
+
+<p>Usage is <i><b>safe</b></i> in the sense that errors cannot be ignored since most functions throw C++
+exceptions when errors are detected. This is also convenient for users because
+it alleviates the&nbsp;need to explicitly check error
+return codes.</p>
+
+<p>A proposal,
+<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1975.html">
+N1975</a>, to include Boost.Filesystem in Technical Report 2 has been accepted
+by the C++ Standards Committee. The Boost.Filesystem library will stay in
+alignment with the TR2 Filesystem proposal as it works its way through the TR2
+process. Note, however, that namespaces and header granularity differs between
+Boost.Filesystem and the TR2 proposal.</p>
+
+<p>The Boost.Filesystem library provides several&nbsp; headers:</p>
+
+<ul>
+ <li>Header &lt;boost/filesystem.hpp&gt; provides class <i>
+ basic_path, </i>a portable mechanism for representing
+ paths in C++ programs. Typedefs <i>path</i> and <i>
+ wpath</i> ease the most common usages of <i>basic_path</i>. Operational
+ functions provide useful query and maintenance operations on files and directories.
+ Class <i>basic_directory_iterator</i> with typdefs <i>
+ directory_iterator</i> and <i>wdirectory_iterator</i> provide iteration over
+ the contents of directories. Convenience functions and classes combine lower-level functionality
+ in useful ways.<br>
+&nbsp;</li>
+ <li>Header &lt;boost/filesystem/fstream.hpp&gt; provides the same components as the C++ Standard
+ Library's <i>fstream</i> header, except
+ that files are identified by <i>basic_path</i> objects rather that <i>char *</i>'s.</li>
+</ul>
+<h2><a name="Using">Using</a> the library</h2>
+<p>Boost.Filesystem is implemented as a separately compiled library, so before
+using it you must install it in a location that can be found by your linker. See
+Building the object-library. </p>
+<p>The library's example directory contains very simple
+scripts for building the example programs on various
+platforms. You can use these scripts to see what's needed to compile and link
+your own programs.</p>
+<h2>Two-minute <a name="tutorial">tutorial</a></h2>
+<p>(A
+<a href="http://beans.seartipy.com/2006/05/10/boost-filesystem-library-writing-portable-c-programs-to-acess-the-filesystem/">
+more elaborate tutorial</a> is also available from Tabrez Iqbal.)</p>
+<p>First some preliminaries:</p>
+<blockquote>
+ <pre>#include &quot;boost/filesystem.hpp&quot; // includes all needed Boost.Filesystem declarations
+#include &lt;iostream&gt; // for std::cout
+using boost::filesystem; // for ease of tutorial presentation;
+ // a namespace alias is preferred practice in real code</pre>
+</blockquote>
+<p>A class path object can be created:</p>
+<blockquote>
+ <pre>path my_path( &quot;some_dir/file.txt&quot; );</pre>
+</blockquote>
+<p>The string passed to the <i>path</i> constructor may be in a
+portable generic path format or an
+implementation-defined native operating system format. Access functions
+make <i>my_path</i> contents available to the underlying operating system API in an operating system dependent format,
+such as <code>&quot;some_dir:file.txt&quot;</code>, <code>&quot;[some_dir]file.txt&quot;</code>,
+<code>&quot;some_dir/file.txt&quot;</code>, or whatever is appropriate for the
+operating system. If class <i>wpath</i> is used instead of class <i>path</i>,
+translation between wide and narrow character paths is performed automatically
+if necessary for the operating system.</p>
+<p>Class <i>path</i> has conversion constructors from <i>const char*</i> and <i>
+const std:: string&amp;</i>, so that even though the Filesystem Library
+functions used in the following code snippet have <i>const path&amp;</i> formal
+parameters, the user can just
+code C-style strings as actual arguments:</p>
+<blockquote>
+ <pre>remove_all( &quot;foobar&quot; );
+create_directory( &quot;foobar&quot; );
+ofstream file( &quot;foobar/cheeze&quot; );
+file &lt;&lt; &quot;tastes good!\n&quot;;
+file.close();
+if ( !exists( &quot;foobar/cheeze&quot; ) )
+ std::cout &lt;&lt; &quot;Something is rotten in foobar\n&quot;;</pre>
+</blockquote>
+<p>To make class <i>path</i> objects easy to use in expressions, <i>operator/</i>
+appends paths:</p>
+<blockquote>
+ <pre>ifstream file1( arg_path / &quot;foo/bar&quot; );
+ifstream file2( arg_path / &quot;foo&quot; / &quot;bar&quot; );</pre>
+</blockquote>
+<p>The expressions <i>arg_path / &quot;foo/bar&quot;</i> and <i>arg_path / &quot;foo&quot;
+/ &quot;bar&quot;</i> yield identical results.</p>
+<p>Paths can include references to the current directory, using &quot;<code>.</code>&quot;
+notation, and the parent directory, using &quot;<code>..</code>&quot;
+notation.</p>
+<p>Class basic_directory_iterator
+is an important component of the library. It provides an input iterator over the
+contents of a directory, with the value type being class <i>basic_path</i>.
+Typedefs <i>directory_iterator</i> and <i>wdirectory_iterator</i> are provided
+to cover the most common use cases.</p>
+<p>The following function, given a directory path and a file name, recursively
+searches the directory and its sub-directories for the file name, returning a
+bool, and if successful, the path to the file that was found.&nbsp; The code
+below is extracted from a real program, slightly modified for clarity:</p>
+<blockquote>
+ <pre>bool find_file( const path &amp; dir_path, // in this directory,
+ const std::string &amp; file_name, // search for this name,
+ path &amp; path_found ) // placing path here if found
+{
+ if ( !exists( dir_path ) ) return false;
+ directory_iterator end_itr; // default construction yields past-the-end
+ for ( directory_iterator itr( dir_path );
+ itr != end_itr;
+ ++itr )
+ {
+ if ( is_directory(itr-&gt;status()) )
+ {
+ if ( find_file( itr-&gt;path(), file_name, path_found ) ) return true;
+ }
+ else if ( itr-&gt;leaf() == file_name ) // see below
+ {
+ path_found = itr-&gt;path();
+ return true;
+ }
+ }
+ return false;
+}</pre>
+</blockquote>
+<p>The expression <i>itr-&gt;path().leaf() == file_name</i>, in the line commented <i>//
+see below</i>, calls the <i>leaf()</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>leaf()</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>In addition to <i>leaf()</i>, several other function names use the
+tree/root/branch/leaf metaphor.</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 race-condition exists, a function's
+postconditions may no longer be true by the time the function returns to the
+caller.</p>
+<blockquote>
+<p><b><i>Explanation: </i></b>The state of files and directories is often
+globally shared, and thus may be changed unexpectedly by other threads,
+processes, or even other computers having network access to the filesystem. As an
+example of the difficulties this can cause, note that the following asserts
+may fail:</p>
+<blockquote>
+<p><code>assert( exists( &quot;foo&quot; ) == exists( &quot;foo&quot; ) );&nbsp; //
+(1)<br>
+<br>
+remove_all( &quot;foo&quot; );<br>
+assert( !exists( &quot;foo&quot; ) );&nbsp; // (2)<br>
+<br>
+assert( is_directory( &quot;foo&quot; ) == is_directory( &quot;foo&quot; ) ); //
+(3)</code></p>
+</blockquote>
+<p>(1) will fail if a non-existent &quot;foo&quot; comes into existence, or an
+existent &quot;foo&quot; is removed, between the first and second call to <i>exists()</i>.
+This could happen if, during the execution of the example code, another thread,
+process, or computer is also performing operations in the same directory.</p>
+<p>(2) will fail if between the call to <i>remove_all()</i> and the call to
+<i>exists()</i> a new file or directory named &quot;foo&quot; is created by another
+thread, process, or computer.</p>
+<p>(3) will fail if another thread, process, or computer removes an
+existing file &quot;foo&quot; and then creates a directory named &quot;foo&quot;, between the
+example code's two calls to <i>is_directory()</i>.</p>
+</blockquote>
+<h4><b>May throw exceptions</b></h4>
+<p>Unless otherwise specified, Boost.Filesystem functions throw <i>
+basic_filesystem_error</i>
+exceptions if they cannot successfully complete their operational
+specifications. Also, implementations may use C++ Standard Library functions,
+which may throw <i>std::bad_alloc</i>. These exceptions may be thrown even
+though the error condition leading to the exception is not explicitly specified
+in the function's &quot;Throws&quot; paragraph.</p>
+<p>All exceptions thrown by the Filesystem
+Library are implemented by calling <a href="../../utility/throw_exception.html">
+boost::throw_exception()</a>. Thus exact behavior may differ depending on
+BOOST_NO_EXCEPTIONS at the time the filesystem source files are compiled.</p>
+<p>Non-throwing versions are provided of several functions that are often used
+in contexts where error codes may be the preferred way to report an error.</p>
+<h2><a name="Examples">Example programs</a></h2>
+<h3>simple_ls.cpp</h3>
+<p>The example program simple_ls.cpp 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 simple_ls.cpp
+to see how it works on your system. Try various path arguments to see what
+happens.</p>
+<h3>file_size.cpp</h3>
+<p>This example program prints the file's size if it is a regular file.</p>
+<h3>Other examples</h3>
+<p>The programs used to generate the Boost regression test status tables use the
+Filesystem Library extensively.&nbsp; See:</p>
+<ul>
+ <li>process_jam_log.cpp</li>
+ <li>compiler_status.cpp</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>wide_test.cpp</li>
+ <li>path_test.cpp</li>
+ <li>operations_test.cpp</li>
+ <li>fstream_test.cpp</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_WINDOWS_API</code></td>
+ <td valign="top">Defined if Windows is detected by Boost.System's automatic configuration
+ code, otherwise not defined.</td>
+ <td valign="top">Implementation uses the Microsoft Windows native
+ application program interface (API).</td>
+ </tr>
+ <tr>
+ <td valign="top"><code>BOOST_POSIX_API</code></td>
+ <td valign="top">Defined if Windows is not detected by Boost.System's automatic configuration
+ code.</td>
+ <td valign="top">Implementation uses the POSIX native
+ application program interface (API).</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">As the library evolves over time, names sometimes
+change or features are removed. To ease transition, Boost.Filesystem deprecates
+the old names and features, but continues to provide them unless macro <code>
+BOOST_FILESYSTEM_NO_DEPRECATED</code> is defined.</p>
+<table border="1" cellpadding="5" cellspacing="1" style="border-collapse: collapse" bordercolor="#111111">
+ <tr>
+ <td style="font-size: 10pt">
+ <b><i>Component</i></b></td>
+ <td style="font-size: 10pt">
+ <p style="font-size: 10pt"><b><i>Old name, now deprecated</i></b></td>
+ <td style="font-size: 10pt">
+ <p style="font-size: 10pt"><b><i>New name</i></b></td>
+ </tr>
+ <tr>
+ <td style="font-size: 10pt" valign="top"><code>basic_path</code></td>
+ <td style="font-size: 10pt"><code>leaf()</code></td>
+ <td style="font-size: 10pt"><code>filename()</code></td>
+ </tr>
+ <tr>
+ <td style="font-size: 10pt" valign="top"><code>basic_path</code></td>
+ <td style="font-size: 10pt"><code>branch_path()</code></td>
+ <td style="font-size: 10pt"><code>parent_path()</code></td>
+ </tr>
+ <tr>
+ <td style="font-size: 10pt" valign="top"><code>basic_path</code></td>
+ <td style="font-size: 10pt"><code>has_leaf()</code></td>
+ <td style="font-size: 10pt"><code>has_filename()</code></td>
+ </tr>
+ <tr>
+ <td style="font-size: 10pt" valign="top"><code>basic_path</code></td>
+ <td style="font-size: 10pt"><code>has_branch_path()</code></td>
+ <td style="font-size: 10pt"><code>has_parent_path()</code></td>
+ </tr>
+ <tr>
+ <td style="font-size: 10pt" valign="top">
+ <code>basic_path</code></td>
+ <td style="font-size: 10pt">
+ <p style="font-size: 10pt"><code>remove_leaf()</code></td>
+ <td style="font-size: 10pt">
+ <p style="font-size: 10pt"><code>remove_filename()</code></td>
+ </tr>
+ <tr>
+ <td style="font-size: 10pt" valign="top">
+ <code>basic_path</code></td>
+ <td style="font-size: 10pt">
+ <code>basic_path( const string_type &amp; str,<br>
+&nbsp; name_check )</code></td>
+ <td style="font-size: 10pt">
+ <i><code>feature removed</code></i></td>
+ </tr>
+ <tr>
+ <td style="font-size: 10pt" valign="top">
+ <code>basic_path</code></td>
+ <td style="font-size: 10pt">
+ <code>basic_path( const string_type::value_type * s,<br>
+&nbsp; name_check )</code></td>
+ <td style="font-size: 10pt">
+ <i><code>feature removed</code></i></td>
+ </tr>
+ <tr>
+ <td style="font-size: 10pt" valign="top">
+ <code>basic_path</code></td>
+ <td style="font-size: 10pt">
+ <code>native_file_string()</code></td>
+ <td style="font-size: 10pt">
+ <code>file_string()</code></td>
+ </tr>
+ <tr>
+ <td style="font-size: 10pt" valign="top">
+ <code>basic_path</code></td>
+ <td style="font-size: 10pt">
+ <code>native_directory_string()</code></td>
+ <td style="font-size: 10pt">
+ <code>directory_string()</code></td>
+ </tr>
+ <tr>
+ <td style="font-size: 10pt" valign="top">
+ <code>basic_path</code></td>
+ <td style="font-size: 10pt">
+ <code>default_name_check_writable()</code></td>
+ <td style="font-size: 10pt">
+ <i><code>feature removed</code></i></td>
+ </tr>
+ <tr>
+ <td style="font-size: 10pt" valign="top">
+ <code>basic_path</code></td>
+ <td style="font-size: 10pt">
+ <code>default_name_check( name_check )</code></td>
+ <td style="font-size: 10pt">
+ <i><code>feature removed</code></i></td>
+ </tr>
+ <tr>
+ <td style="font-size: 10pt" valign="top">
+ <code>basic_path</code></td>
+ <td style="font-size: 10pt">
+ <code>default_name_check()</code></td>
+ <td style="font-size: 10pt">
+ <i><code>feature removed</code></i></td>
+ </tr>
+ <tr>
+ <td style="font-size: 10pt" valign="top">
+ <code>basic_path</code></td>
+ <td style="font-size: 10pt">
+ <code>canonize()</code></td>
+ <td style="font-size: 10pt">
+ <i><code>feature removed</code></i></td>
+ </tr>
+ <tr>
+ <td style="font-size: 10pt" valign="top">
+ <code>basic_path</code></td>
+ <td style="font-size: 10pt">
+ <code>normalize()</code></td>
+ <td style="font-size: 10pt">
+ <i><code>feature removed</code></i></td>
+ </tr>
+ <tr>
+ <td style="font-size: 10pt" valign="top">
+ <code>operations.hpp</code></td>
+ <td style="font-size: 10pt">
+ <code>is_regular( file_status f )</code></td>
+ <td style="font-size: 10pt">
+ <code>is_regular_file( file_status f )</code></td>
+ </tr>
+ <tr>
+ <td style="font-size: 10pt" valign="top">
+ <code>operations.hpp</code></td>
+ <td style="font-size: 10pt">
+ <code>symbolic_link_exists( const path &amp; ph )</code></td>
+ <td style="font-size: 10pt">
+ <i><code>feature removed</code></i></td>
+ </tr>
+ <tr>
+ <td style="font-size: 10pt" valign="top">
+ <code>basic_directory_status</code></td>
+ <td style="font-size: 10pt">
+ <code>filename()</code></td>
+ <td style="font-size: 10pt">
+ <i><code>feature removed, use path().filename() instead</code></i></td>
+ </tr>
+ <tr>
+ <td style="font-size: 10pt" valign="top">
+ <code>basic_directory_status</code></td>
+ <td style="font-size: 10pt">
+ <code>leaf()</code></td>
+ <td style="font-size: 10pt">
+ <i><code>feature removed, use path().filename() instead</code></i></td>
+ </tr>
+ <tr>
+ <td style="font-size: 10pt" valign="top">
+ <code>basic_directory_status</code></td>
+ <td style="font-size: 10pt">
+ <code>string()</code></td>
+ <td style="font-size: 10pt">
+ <i><code>feature removed, use path().string() instead</code></i></td>
+ </tr>
+</table>
+<h2><a name="narrow-only">Restricting library to narrow character paths</a></h2>
+<p>Compilers or standard libraries which do not support wide characters (wchar_t)
+or wide character strings (std::wstring) are detected automatically, and cause
+the library to compile code that is restricted to narrow character paths
+(boost::filesystem::path). Users can force this restriction by defining the
+macro BOOST_FILESYSTEM_NARROW_ONLY. That may be useful for dealing with legacy
+compilers or operating systems.</p>
+<h2><a name="Building">Building</a> the object-library</h2>
+<p>The object-library will be built automatically if you are using the Boost
+build system. See
+Getting Started. It can also be
+built manually using a Jamfile
+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 libs/filesystem/src. 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 automatically detects the current platform,
+and compiles the POSIX or Windows implementation code accordingly. Automatic
+platform detection during object library compilation can be overridden by
+defining either BOOST_POSIX_API or BOOST_WINDOWS_API macros. With the exception of the Cygwin
+environment, there is usually no reason to define these macros, as the
+software development kits supplied with most compilers only support a single
+platform.</p>
+<p>The Cygwin package of tools supports
+traditional Windows usage, but also provides an emulation layer and other tools
+which can be used to make Windows act as Linux (and thus POSIX), and provide the
+Linux look-and-feel. GCC is usually the compiler of choice in this environment,
+as it can be installed via the Cygwin install process. Other compilers can also
+use the Cygwin emulation of POSIX, at least in theory.</p>
+<p>Those wishing to use the Cygwin POSIX emulation layer should define the
+BOOST_POSIX_API macro when compiling bother user programs and the
+Boost.Filesystem's object-library.</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 design requirements and
+design realities were developed during
+extensive discussions on the Boost mailing list, followed by comments on the
+initial implementation. Numerous helpful comments were then received during the
+Formal Review.<p>Participants included
+Aaron Brashears,
+Alan Bellingham,
+Aleksey Gurtovoy,
+Alex Rosenberg,
+Alisdair Meredith,
+Andy Glew,
+Anthony Williams,
+Baptiste Lepilleur,
+Beman Dawes,
+Bill Kempf,
+Bill Seymour,
+Carl Daniel,
+Chris Little,
+Chuck Allison,
+Craig Henderson,
+Dan Nuffer,
+Dan'l Miller,
+Daniel Frey,
+Darin Adler,
+David Abrahams,
+David Held,
+Davlet Panech,
+Dietmar Kuehl,
+Douglas Gregor,
+Dylan Nicholson,
+Ed Brey,
+Eric Jensen,
+Eric Woodruff,
+Fedder Skovgaard,
+Gary Powell,
+Gennaro Prota,
+Geoff Leyland,
+George Heintzelman,
+Giovanni Bajo,
+Glen Knowles,
+Hillel Sims,
+Howard Hinnant,
+Jaap Suter,
+James Dennett,
+Jan Langer,
+Jani Kajala,
+Jason Stewart,
+Jeff Garland,
+Jens Maurer,
+Jesse Jones,
+Jim Hyslop,
+Joel de Guzman,
+Joel Young,
+John Levon,
+John Maddock,
+John Williston,
+Jonathan Caves,
+Jonathan Biggar,
+Jurko,
+Justus Schwartz,
+Keith Burton,
+Ken Hagen,
+Kostya Altukhov,
+Mark Rodgers,
+Martin Schuerch,
+Matt Austern,
+Matthias Troyer,
+Mattias Flodin,
+Michiel Salters,
+Mickael Pointier,
+Misha Bergal,
+Neal Becker,
+Noel Yap,
+Parksie,
+Patrick Hartling, Pavel Vozenilek,
+Pete Becker,
+Peter Dimov,
+Rainer Deyke,
+Rene Rivera,
+Rob Lievaart,
+Rob Stewart,
+Ron Garcia,
+Ross Smith,
+Sashan,
+Steve Robbins,
+Thomas Witt,
+Tom Harris,
+Toon Knapen,
+Victor Wagner,
+Vincent Finn,
+Vladimir Prus, and
+Yitzhak Sapir
+
+<p>A lengthy discussion on the C++ committee's library reflector illuminated the &quot;illusion
+of portability&quot; problem, particularly in postings by PJ Plauger and Pete Becker.</p>
+
+<p>Walter Landry provided much help illuminating symbolic link use cases for
+version 1.31.0.</p>
+
+<h3>Version 1.34 (i18n) acknowledgements</h3>
+
+<p>So many people have contributed comments and bug reports that it isn't any
+longer possible to acknowledge them individually. That said, Peter Dimov and Rob
+Stewart need to be specially thanked for their many constructive criticisms and
+suggestions. Terence
+Wilson and Chris Frey contributed timing programs which helped illuminate
+performance issues.</p>
+
+<h2><a name="Change-history">Change history</a></h2>
+
+<h3>Version 1.37.0</h3>
+
+<ul>
+ <li>Doc fixes: Update release history, add tables of macros and deprecated
+ names.</li>
+ <li>Bug fix: convenience.hpp didn't fully apply BOOST_FILESYSTEM_NO_DEPRECATED
+ to name changes.</li>
+ <li>Bug fix: Ticket #1972 'remove' fixes.</li>
+ <li>Bug fix: Restore deprecated basic_directory_entry names inadvertently
+ removed.</li>
+ <li>Bug fix: Provide deprecated functions has_branch_path and has_leaf,
+ inadvertently omitted from 1.36.0</li>
+ <li>Add workarounds for Codegear/Borland C++ Builder 2009.</li>
+</ul>
+
+<h3>Version 1.36.0 - August 14th, 2008</h3>
+
+<ul>
+ <li>Added stem(), extension(), and replace_extension() member functions to
+ basic_path, based on the basename(), extension(), and change_extension()
+ functions from convenience.hpp.</li>
+ <li>Changed path.hpp function names:<ul>
+ <li>leaf() -&gt; filename().</li>
+ <li>has_leaf() -&gt; has_filename().</li>
+ <li>branch_path() -&gt; parent_path().</li>
+ <li>has_branch_path() -&gt; has_parent_path().</li>
+ <li>remove_leaf() -&gt; remove_filename().</li>
+ </ul>
+ </li>
+ <li>Changed operations.hpp function names:<ul>
+ <li>is_regular() -&gt; is_regular_file().</li>
+ </ul>
+ </li>
+ <li>Bug fix: Add path.cpp #include &lt;cwchar&gt;</li>
+ <li>Cleared path.hpp gcc shadow warnings.</li>
+</ul>
+
+<h3>Version 1.35.0 - March 29th, 2008</h3>
+
+<ul>
+ <li>Diagnostics moved to the separate <a href="../../system/doc/index.html">
+ Boost.System</a> library.</li>
+ <li>current_path() function added to set the current directory path.</li>
+ <li>Test coverage extended.</li>
+ <li>A few minor implementation fixes.</li>
+</ul>
+
+<h3>Version 1.34.1 - July 24th, 2007</h3>
+
+<h3>Version 1.34.0 - May 12th, 2007</h3>
+
+<ul>
+ <li>Internationalization, provided by
+ class templates <i>basic_path</i>, <i>basic_filesystem_error</i>, and <i>
+ basic_directory_iterator</i>.</li>
+ <li>Simplification 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>Rationalization of predicate
+ function design, including the addition of several new functions.</li>
+ <li>Preservation 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 [POSIX-01],
+ the ISO/IEEE Single Unix Standard, with provisions for Windows and other
+ operating systems.</li>
+ <li>New functions status,
+ symlink_status,
+ is_file,
+ is_symlink,
+ create_hard_link,
+ create_symlink, path member and non-member swap, path inserter, path
+ extractor, additional path relational and &quot;/&quot; operator overloads, additional
+ path member template functions taking iterator arguments.</li>
+ <li>More efficient operations 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>file_size() function added.</li>
+ <li>Class path relational operators added.</li>
+ <li>equivalent() function added.</li>
+ <li>create_directory() no longer
+ throws if the directory already exists. A bool is returned, indicating that
+ the directory did not preexist. Similar changes made to
+ create_directories().</li>
+ <li>Docs added 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>current_path() and
+ initial_path() 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 built 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
+ bug when symbolic links to
+ directories are present.</li>
+</ul>
+
+<h3>&nbsp;<br>
+Version 1.30.0 - March 19th, 2003</h3>
+<ul>
+ <li>Initial official Boost version.</li>
+</ul>
+
+<hr>
+<p>Revised
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->28 October, 2008<!--webbot bot="Timestamp" endspan i-checksum="39203" --></p>
+
+<p>&copy; Copyright Beman Dawes, 2002-2005</p>
+<p> Use, modification, and distribution are subject to the Boost Software
+License, Version 1.0. See <a href="http://www.boost.org/LICENSE_1_0.txt">
+www.boost.org/LICENSE_1_0.txt</a></p>
+
+</body>
+
+</html>
\ No newline at end of file

Added: sandbox/filesystem-v3/libs/filesystem/doc/portability_guide.htm
==============================================================================
--- (empty file)
+++ sandbox/filesystem-v3/libs/filesystem/doc/portability_guide.htm 2009-02-01 09:38:12 EST (Sun, 01 Feb 2009)
@@ -0,0 +1,226 @@
+<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/html/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>
+Introduction<br>
+name_check functions<br>
+File and directory name recommendations</p>
+<h2><a name="Introduction">Introduction</a></h2>
+<p>Like any other C++ program which performs I/O operations, there is no
+guarantee that a program using Boost.Filesystem will be portable between
+operating systems. Critical aspects of I/O such as how the operating system
+interprets paths are unspecified by the C and C++ Standards.</p>
+<p>It is not possible to know if a file or directory name will be
+valid (and thus portable) for an unknown operating system. There is always the possibility that an operating system could use
+names which are unusual (numbers less than 4096, for example) or very
+limited in size (maximum of six character names, for example). In other words,
+portability is never absolute; it is always relative to specific operating
+systems or
+file systems.</p>
+<p>It is possible, however, to know in advance if a directory or file name is likely to be valid for a particular
+operating system.&nbsp;It is also possible to construct names which are
+likely to be portable to a large number of modern and legacy operating systems.</p>
+
+<p>Almost all modern operating systems support multiple file systems. At the
+minimum, they support a native file system plus a CD-ROM file system (Generally
+ISO-9669, often with Juliet extensions).</p>
+
+<p>Each file system
+may have its own naming rules. For example, modern versions of Windows support NTFS, FAT, FAT32, and ISO-9660 file systems, among others, and the naming rules
+for those file systems differ. Each file system may also have
+differing rules for overall path validity, such as a maximum length or number of
+sub-directories. Some legacy systems have different rules for directory names
+versus regular file names.</p>
+
+<p>As a result, Boost.Filesystem's <i>name_check</i> functions
+cannot guarantee directory and file name portability. Rather, they are intended to
+give the programmer a &quot;fighting chance&quot; to achieve portability by early
+detection of common naming problems.</p>
+
+<h2><a name="name_check­_functions">name_check functions</a></h2>
+
+<p>A <i>name_check</i> function
+returns true if its argument is valid as a directory and regular file name for a
+particular operating or file system. A number of these functions are provided.</p>
+
+<p>The portable_name function is of particular
+interest because it has been carefully designed to provide wide
+portability yet not overly restrict expressiveness.</p>
+
+<table border="1" cellpadding="5" cellspacing="0">
+ <tr>
+ <td align="center" colspan="2"><b>Library Supplied name_check Functions</b></td>
+ </tr>
+ <tr>
+ <td align="center"><b>Function</b></td>
+ <td align="center"><b>Description</b></td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code><a name="portable_posix_name">portable_posix_name</a>(const
+ std::string&amp;<i> name</i>)</code></td>
+ <td><b>Returns:</b> <i>true</i> if <code>!name.empty() &amp;&amp; name</code> contains only the characters
+ specified in<i> Portable Filename Character Set</i> rules as defined in by
+ POSIX (www.opengroup.org/onlinepubs/007904975/basedefs/xbd_chap03.html).<br>
+ The allowed characters are <code>0-9</code>, <code>a-z</code>, <code>A-Z</code>,
+ <code>'.'</code>, <code>'_'</code>, and <code>'-'</code>.<p><b>Use:</b>
+ applications which must be portable to any POSIX system.</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code><a name="windows_name">windows_name</a>(const
+ std::string&amp;<i> name</i>)</code></td>
+ <td><b>Returns:</b>&nbsp; <i>true</i> if <code>!name.empty() &amp;&amp; name</code> contains
+ only the characters specified by the Windows platform SDK as valid
+ regardless of the file system <code>&amp;&amp; (name</code> is <code>&quot;.&quot;</code> or
+ <code>&quot;..&quot;</code>&nbsp; or does not end with a trailing space or period<code>)</code>.&nbsp;
+ The allowed characters are anything except <code>0x0-0x1F</code>, <code>'&lt;'</code>,
+ <code>'&gt;'</code>, <code>':'</code>, <code>'&quot;'</code>, <code>'/'</code>,
+ <code>'\'</code>, and <code>'|'</code>.<p>
+ <b>Use:</b> applications which must be portable to Windows.</p>
+ <p><b>Note:</b> Reserved device names are not valid as file names, but are
+ not being detected because they are still valid as a path. Specifically,
+ CON, PRN, AUX, CLOCK$, NUL, COM[1-9], LPT[1-9], and these names followed by
+ an extension (for example, NUL.tx7).</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code><a name="portable_name">portable_name</a>(const
+ std::string&amp;<i> name</i>)</code></td>
+ <td><b>Returns:</b> <code>&nbsp;windows_name(name) &amp;&amp; portable_posix_name(name)
+ &amp;&amp; (name</code> is <code>&quot;.&quot;</code> or <code>&quot;..&quot;</code>, and the first character not a period or hyphen<code>)</code>.<p><b>Use:</b> applications which must be portable to a wide variety of
+ modern operating systems, large and small, and to some legacy O/S's. The
+ first character not a period or hyphen restriction is a requirement of
+ several older operating systems.</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code><a name="portable_directory_name">
+ portable_directory_name</a>(const std::string&amp;<i> name</i>)</code></td>
+ <td><b>Returns:</b> <code>portable_name(name) &amp;&amp; (name</code> is <code>&quot;.&quot;</code>
+ or <code>&quot;..&quot;</code>&nbsp; or contains no periods<code>)</code>.<p><b>Use:</b> applications
+ which must be portable to a wide variety of platforms, including OpenVMS.</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code><a name="portable_file_name">
+ portable_file_name</a>(const std::string&amp;<i> name</i>)</code></td>
+ <td><b>Returns:</b> <code>portable_name(name) &amp;&amp; </code>any period is followed by one to three additional
+ non-period characters.<p><b>Use:</b>
+ applications which must be portable to a wide variety of platforms,
+ including OpenVMS and other systems which have a concept of &quot;file extension&quot;
+ but limit its length.</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code><a name="native">native</a>(const
+ std::string&amp;<i> name</i>)</code></td>
+ <td><b>Returns:</b> Implementation defined. Returns <i>
+ true</i> for names considered valid by the operating system's native file
+ systems.<p><b>Note:</b> May return <i>true</i> for some names not considered valid
+ by the operating system under all conditions (particularly on operating systems which support
+ multiple file systems.)</td>
+ </tr>
+</table>
+
+<h2>File and directory name <a name="recommendations">recommendations</a></h2>
+
+<table border="1" cellpadding="5" cellspacing="0">
+
+ <tr>
+ <td align="center" valign="top"><strong>Recommendation</strong></td>
+ <td align="center" valign="top"><strong>Rationale</strong></td>
+ </tr>
+ <tr>
+ <td valign="top">Limit file and directory names to the characters A-Z, a-z, 0-9, period, hyphen, and
+ underscore.<p>Use any of the &quot;portable_&quot; <a href="#name_check­_functions">
+ name check functions</a> to enforce this recommendation.</td>
+ <td valign="top">These are the characters specified by the POSIX standard for portable directory and
+ file names, and are also valid for Windows, Mac, and many other modern file systems.</td>
+ </tr>
+ <tr>
+ <td valign="top">Do not use a period or hyphen as the first
+ character of a name. Do not use period as the last character of a name.<p>
+ Use portable_name,
+ portable_directory_name, or
+ portable_file_name 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
+ portable_directory_name 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
+ portable_file_name to enforce this
+ recommendation.</td>
+ <td valign="top">Requirement for ISO-9660 level 1, OpenVMS filesystem, and
+ other legacy systems. </td>
+ </tr>
+ <tr>
+ <td valign="top">Do not assume names are case sensitive. For example, do not expected a directory to be
+ able to hold separate elements named &quot;Foo&quot; and &quot;foo&quot;. </td>
+ <td valign="top">Some file systems are case insensitive.&nbsp; For example, Windows
+ NTFS is case preserving in the way it stores names, but case insensitive in
+ searching for names (unless running under the POSIX sub-system, it which
+ case it does case sensitive searches). </td>
+ </tr>
+ <tr>
+ <td valign="top">Do not assume names are case insensitive.&nbsp; For example, do not expect a file
+ created with the name of &quot;Foo&quot; to be opened successfully with the name of &quot;foo&quot;.</td>
+ <td valign="top">Some file systems are case sensitive.&nbsp; For example, POSIX.</td>
+ </tr>
+ <tr>
+ <td valign="top">Don't use hyphens in names.</td>
+ <td valign="top">ISO-9660 level 1, and possibly some legacy systems, do not permit
+ hyphens.</td>
+ </tr>
+ <tr>
+ <td valign="top">Limit the length of the string returned by path::string() to
+ 255 characters.&nbsp;
+ Note that ISO 9660 has an explicit directory tree depth limit of 8, although
+ this depth limit is removed by the Juliet extensions.</td>
+ <td valign="top">Some operating systems place limits on the total path length.&nbsp; For example,
+ Windows 2000 limits paths to 260 characters total length.</td>
+ </tr>
+ <tr>
+ <td valign="top">Limit the length of any one name in a path.&nbsp; Pick the specific limit according to
+ the operating systems and or file systems you wish portability to:<br>
+ &nbsp;&nbsp; Not a concern::&nbsp; POSIX, Windows, MAC OS X.<br>
+ &nbsp;&nbsp; 31 characters: Classic Mac OS<br>
+&nbsp;&nbsp; 8 characters + period + 3 characters: ISO 9660 level 1<br>
+&nbsp;&nbsp; 32 characters: ISO 9660 level 2 and 3<br>
+&nbsp;&nbsp; 128 characters (64 if Unicode): ISO 9660 with Juliet extensions</td>
+ <td valign="top">Limiting name length can markedly reduce the expressiveness of file names, yet placing
+ only very high limits on lengths inhibits widest portability.</td>
+ </tr>
+</table>
+
+<hr>
+<p>Revised
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->11 January, 2009<!--webbot bot="Timestamp" endspan i-checksum="39335" --></p>
+
+<p>© Copyright Beman Dawes, 2002, 2003</p>
+<p> Use, modification, and distribution are subject to the Boost Software
+License, Version 1.0. (See accompanying file <a href="../../../LICENSE_1_0.txt">
+LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
+www.boost.org/LICENSE_1_0.txt</a>)</p>
+
+</body>
+
+</html>
\ No newline at end of file

Modified: sandbox/filesystem-v3/libs/filesystem/doc/v3_design.html
==============================================================================
--- sandbox/filesystem-v3/libs/filesystem/doc/v3_design.html (original)
+++ sandbox/filesystem-v3/libs/filesystem/doc/v3_design.html 2009-02-01 09:38:12 EST (Sun, 01 Feb 2009)
@@ -5,7 +5,7 @@
 <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>
+<title>Filesystem V3 Introduction</title>
 <link rel="stylesheet" type="text/css" href="minimal.css">
 </head>
 
@@ -17,7 +17,7 @@
 <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 V3 Prototype Design</font>
+ <font size="7">Boost.Filesystem Version 3 </font>
     </td>
   </tr>
 </table>
@@ -43,6 +43,7 @@
     <a href="#Details">Details</a><br>
     <a href="#Other-changes">Other changes</a><br>
     <a href="#Prototype">Prototype</a><br>
+ Trying the prototype<br>
     <a href="#Acknowledgements">Acknowledgements</a></td>
   </tr>
   <tr>
@@ -58,7 +59,7 @@
 <h2><a name="Introduction">Introduction</a></h2>
 
 <p>During the review of Boost.Filesystem.V2 (Internationalization), Peter Dimov
-suggested that the class basic_path template was unwieldy, and that a single
+suggested that the basic_path 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
@@ -173,13 +174,12 @@
 <p><b>Additional filesystem operations:</b></p>
 
 <ul>
- <li>copy_any() added.</li>
- <li>copy_directory() added.</li>
- <li>copy_symlink() added.</li>
- <li>create_symlink() now available on Windows if supported (i.e. Vista and
- later).</li>
- <li>create_directory_symlink() added.</li>
- <li>read_symlink() added.</li>
+ <li>copy_directory().</li>
+ <li>copy_symlink(). On Windows, requires Vista or later.</li>
+ <li>copy().</li>
+ <li>create_symlink().&nbsp; On Windows, requires Vista or later.</li>
+ <li>create_directory_symlink().&nbsp; On Windows, requires Vista or later.</li>
+ <li>read_symlink().&nbsp; Not supported on Windows.</li>
 </ul>
 
 <h2><a name="Prototype">Prototype</a></h2>
@@ -187,14 +187,31 @@
 <p>Currently incomplete. Not thoroughly tested. Should not be used for
 production work.</p>
 
+<p>The prototype can be viewed at
+<a href="http://svn.boost.org/svn/boost/sandbox/filesystem-v3/">
+http://svn.boost.org/svn/boost/sandbox/filesystem-v3/></p>
+
+<p>There is a (partial) TO DO list at the beginning of
+<a href="
http://svn.boost.org/svn/boost/sandbox/filesystem-v3/boost/filesystem/path.hpp">
+http://svn.boost.org/svn/boost/sandbox/filesystem-v3/boost/filesystem/path.hpp></p>
+
+<h2><a name="Trying-the-prototype">Trying the prototype</a></h2>
+
+<blockquote>
+ <pre>svn export
http://svn.boost.org/svn/boost/trunk filesystem-v3
+rmdir /s /q filesystem-v3/boost/filesystem
+rmdir /s /q filesystem-v3/libs/filesystem
+svn --force co http://svn.boost.org/svn/boost/sandbox/filesystem-v3 filesystem-v3</pre>
+</blockquote>
 <h2><a name="Acknowledgements">Acknowledgements</a></h2>
 
-<p>Walter Landry contributed both the design and implementation of the copy_any,
+<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 -->24 January, 2009<!--webbot bot="Timestamp" endspan i-checksum="39342" --></p>
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->01 February, 2009<!--webbot bot="Timestamp" endspan i-checksum="40404" --></p>
 
 <p>© Copyright Beman Dawes, 2008</p>
 <p> Use, modification, and distribution are subject to the Boost Software

Added: sandbox/filesystem-v3/libs/filesystem/index.html
==============================================================================
--- (empty file)
+++ sandbox/filesystem-v3/libs/filesystem/index.html 2009-02-01 09:38:12 EST (Sun, 01 Feb 2009)
@@ -0,0 +1,14 @@
+<html>
+<head>
+<meta http-equiv="refresh" content="0; URL=doc/index.htm">
+</head>
+<body>
+Automatic redirection failed, please go to
+doc/index.htm.
+<hr>
+<p>&copy; Copyright Beman Dawes, 2003</p>
+<p> Distributed under the Boost Software
+License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
+www.boost.org/LICENSE_1_0.txt</a>)</p>
+</body>
+</html>

Deleted: sandbox/filesystem-v3/libs/filesystem/readme-sandbox-v3.html
==============================================================================
--- sandbox/filesystem-v3/libs/filesystem/readme-sandbox-v3.html 2009-02-01 09:38:12 EST (Sun, 01 Feb 2009)
+++ (empty file)
@@ -1,26 +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 Version 3 in the Sandbox</title>
-</head>
-
-<body>
-
-<h1>Filesystem Version 3 in the Sandbox</h1>
-<p>To experiment with filesystem.v3:</p>
-<ul>
- <li>Subversion export trunk into a temporary directory:
- http://svn.boost.org/svn/boost/trunk>
- <li>From the trunk temporary, delete temporary-root/boost/filesystem and
- temporary-root/libs/filesystem</li>
- <li>Subversion checkout filesystem-v3 from the sandbox:
http://svn.boost.org/svn/boost/sandbox/filesystem-v3>
- <li>Move temporary-root/* to the filesystem-v3-root just checked out.</li>
-</ul>
-
-</body>
-
-</html>


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk