|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r80094 - trunk/tools/build/v2/engine
From: jurko.gospodnetic_at_[hidden]
Date: 2012-08-20 08:48:10
Author: jurko
Date: 2012-08-20 08:48:09 EDT (Mon, 20 Aug 2012)
New Revision: 80094
URL: http://svn.boost.org/trac/boost/changeset/80094
Log:
Internal Boost Jam cleanup - internal ShortPathToLongPath() function renamed to canonicWindowsPath() and commented better, related normalize_path() function commented better as well.
Text files modified:
trunk/tools/build/v2/engine/pathsys.h | 2
trunk/tools/build/v2/engine/pathunix.c | 65 ++++++++++++++++++++++++++++-----------
2 files changed, 47 insertions(+), 20 deletions(-)
Modified: trunk/tools/build/v2/engine/pathsys.h
==============================================================================
--- trunk/tools/build/v2/engine/pathsys.h (original)
+++ trunk/tools/build/v2/engine/pathsys.h 2012-08-20 08:48:09 EDT (Mon, 20 Aug 2012)
@@ -62,7 +62,7 @@
* call to do a potentially expensive path conversion requiring access to the
* actual underlying file system.
*/
-void path_register_key( OBJECT * path );
+void path_register_key( OBJECT * canonic_path );
#ifdef USE_PATHUNIX
/* Returns a static pointer to the system dependent path to the temporary
Modified: trunk/tools/build/v2/engine/pathunix.c
==============================================================================
--- trunk/tools/build/v2/engine/pathunix.c (original)
+++ trunk/tools/build/v2/engine/pathunix.c 2012-08-20 08:48:09 EDT (Mon, 20 Aug 2012)
@@ -258,18 +258,25 @@
/*
- * ShortPathToLongPath() - convert a given path into its long format
+ * canonicWindowsPath() - convert a given path into its canonic/long format
*
- * In the process, automatically registers long paths for all of the parent
- * folders on the path, if they have not already been registered.
+ * Appends the canonic path to the end of the given 'string' object.
+ *
+ * FIXME: This function is still work-in-progress as it originally did not
+ * necessarily return the canonic path format (could return slightly different
+ * results for certain equivalent path strings) and could accept paths pointing
+ * to non-existing file system entities as well.
+ *
+ * Caches results internally, automatically caching any parent paths it has to
+ * convert to their canonic format in the process.
*
* Prerequisites:
- * - Path to given in normalized form, i.e. all of its folder separators have
- * already been converted into '\\'.
- * - path_key_cache path/key mapping cache object has already been initialized.
+ * - path given in normalized form, i.e. all of its folder separators have
+ * already been converted into '\\'
+ * - path_key_cache path/key mapping cache object already initialized
*/
-static void ShortPathToLongPath( char const * const path, int const path_length,
+static void canonicWindowsPath( char const * const path, int const path_length,
string * const out )
{
char const * last_element;
@@ -317,9 +324,8 @@
path_key_cache, dir_obj, &found );
if ( !found )
{
- /* dir is already normalized. */
result->path = dir_obj;
- ShortPathToLongPath( dir, dir_length, out );
+ canonicWindowsPath( dir, dir_length, out );
result->key = object_new( out->value );
}
else
@@ -354,6 +360,27 @@
}
+/*
+ * normalize_path() - 'normalizes' the given path for the path-key mapping
+ *
+ * The resulting string has nothing to do with 'normalized paths' as used in
+ * Boost Jam build scripts and the built-in NORMALIZE_PATH rule. It is intended
+ * to be used solely as an intermediate step when mapping an arbitrary path to
+ * its canonical representation.
+ *
+ * When choosing the intermediate string the important things are for it to be
+ * inexpensive to calculate and any two paths having different canonical
+ * representations also need to have different calculated intermediate string
+ * representations. Any implemented additional rules serve only to simplify
+ * constructing the canonical path representation from the calculated
+ * intermediate string.
+ *
+ * Implemented returned path rules:
+ * - use backslashes as path separators
+ * - lowercase only (since all Windows file systems are case insensitive)
+ * - trim trailing path separator except in case of a root path, i.e. 'X:\'
+ */
+
static void normalize_path( string * path )
{
char * s;
@@ -367,7 +394,7 @@
static path_key_entry * path_key( OBJECT * const path,
- int const known_to_be_long )
+ int const known_to_be_canonic )
{
path_key_entry * result;
int found;
@@ -395,16 +422,16 @@
if ( !found || nresult == result )
{
nresult->path = normalized;
- if ( known_to_be_long )
+ if ( known_to_be_canonic )
nresult->key = object_copy( path );
else
{
- string long_path[ 1 ];
- string_new( long_path );
- ShortPathToLongPath( object_str( normalized ), normalized_size,
- long_path );
- nresult->key = object_new( long_path->value );
- string_free( long_path );
+ string canonic_path[ 1 ];
+ string_new( canonic_path );
+ canonicWindowsPath( object_str( normalized ), normalized_size,
+ canonic_path );
+ nresult->key = object_new( canonic_path->value );
+ string_free( canonic_path );
}
}
else
@@ -420,9 +447,9 @@
}
-void path_register_key( OBJECT * long_path )
+void path_register_key( OBJECT * canonic_path )
{
- path_key( long_path, 1 );
+ path_key( canonic_path, 1 );
}
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