X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fmisc%2Fsg_path.cxx;h=542eb8f60fa13fba5cda1c0b2faf7b96fac5b680;hb=0bf579cf27afcab6c718cb0227ceb8b6af76d9fa;hp=dc9be8eb627350b7e06b6c5e03bc5255f940d73a;hpb=b63464d23982dda01458fbe4b411e878a4feeea8;p=simgear.git diff --git a/simgear/misc/sg_path.cxx b/simgear/misc/sg_path.cxx index dc9be8eb..542eb8f6 100644 --- a/simgear/misc/sg_path.cxx +++ b/simgear/misc/sg_path.cxx @@ -23,12 +23,33 @@ // $Id$ +#include + #include #include #include "sg_path.hxx" +/** + * define directory path separators + */ + +#if defined( macintosh ) +static const char sgDirPathSep = ':'; +static const char sgDirPathSepBad = '/'; +#else +static const char sgDirPathSep = '/'; +static const char sgDirPathSepBad = ':'; +#endif + +#if defined( WIN32 ) +static const char sgSearchPathSep = ';'; +#else +static const char sgSearchPathSep = ':'; +#endif + + // If Unix, replace all ":" with "/". If MacOS, replace all "/" with // ":" it should go without saying that neither of these characters // should be used in file or directory names. In windoze, allow the @@ -44,8 +65,8 @@ SGPath::fix() continue; } #endif - if ( path[i] == SG_BAD_PATH_SEP ) { - path[i] = SG_PATH_SEP; + if ( path[i] == sgDirPathSepBad ) { + path[i] = sgDirPathSep; } } } @@ -83,8 +104,8 @@ void SGPath::append( const string& p ) { if ( path.size() == 0 ) { path = p; } else { - if ( p[0] != SG_PATH_SEP ) { - path += SG_PATH_SEP; + if ( p[0] != sgDirPathSep ) { + path += sgDirPathSep; } path += p; } @@ -106,7 +127,7 @@ void SGPath::concat( const string& p ) { // Get the file part of the path (everything after the last path sep) string SGPath::file() const { - int index = path.rfind(SG_PATH_SEP); + int index = path.rfind(sgDirPathSep); if (index >= 0) { return path.substr(index + 1); } else { @@ -117,7 +138,7 @@ string SGPath::file() const { // get the directory part of the path. string SGPath::dir() const { - int index = path.rfind(SG_PATH_SEP); + int index = path.rfind(sgDirPathSep); if (index >= 0) { return path.substr(0, index); } else { @@ -153,3 +174,25 @@ bool SGPath::exists() const { fclose(fp); return true; } + + +string_list sgPathSplit( const string &search_path ) { + string tmp = search_path; + string_list result; + result.clear(); + + bool done = false; + + while ( !done ) { + int index = tmp.find(sgSearchPathSep); + if (index >= 0) { + result.push_back( tmp.substr(0, index) ); + tmp = tmp.substr( index + 1 ); + } else { + result.push_back( tmp ); + done = true; + } + } + + return result; +}