X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=reactos%2Ftools%2Frbuild%2FXML.cpp;fp=reactos%2Ftools%2Frbuild%2FXML.cpp;h=96547562496242155df92f9673258828e4be9eea;hp=a9723c3a9e4878f2762f834cf81a1ee95702e381;hb=b5fbf004805f5f48b0c1cd83e47b29fe29d21b20;hpb=2142e2dfaf9d54f9ba14d83a17a97294a694993e diff --git a/reactos/tools/rbuild/XML.cpp b/reactos/tools/rbuild/XML.cpp index a9723c3a9e4..96547562496 100644 --- a/reactos/tools/rbuild/XML.cpp +++ b/reactos/tools/rbuild/XML.cpp @@ -172,21 +172,27 @@ Path::RelativeFromWorkingDirectory () string Path::RelativeFromWorkingDirectory ( const string& path ) { - vector vwork, vpath, vout; - Path::Split ( vwork, working_directory, true ); + return Path::RelativeFromDirectory ( path, working_directory ); +} + +string +Path::RelativeFromDirectory ( const string& path, const string& base_directory ) +{ + vector vbase, vpath, vout; + Path::Split ( vbase, base_directory, true ); Path::Split ( vpath, path, true ); #ifdef WIN32 // this squirreliness is b/c win32 has drive letters and *nix doesn't... // not possible to do relative across different drive letters - if ( vwork[0] != vpath[0] ) + if ( vbase[0] != vpath[0] ) return path; #endif size_t i = 0; - while ( i < vwork.size() && i < vpath.size() && vwork[i] == vpath[i] ) + while ( i < vbase.size() && i < vpath.size() && vbase[i] == vpath[i] ) ++i; - if ( i < vwork.size() ) + if ( i < vbase.size() ) { - // path goes above our working directory, we will need some ..'s + // path goes above our base directory, we will need some ..'s for ( size_t j = 0; j < i; j++ ) vout.push_back ( ".." ); }