X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fmisc%2Fsg_path.cxx;h=542eb8f60fa13fba5cda1c0b2faf7b96fac5b680;hb=0bf579cf27afcab6c718cb0227ceb8b6af76d9fa;hp=f18543a7bc172f3a31b24271c88ac1a8876df27d;hpb=1dac4b2dc1c4f855eeb2dfa702cb5d79ecd667b7;p=simgear.git diff --git a/simgear/misc/sg_path.cxx b/simgear/misc/sg_path.cxx index f18543a7..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; } @@ -105,8 +126,8 @@ void SGPath::concat( const string& p ) { // Get the file part of the path (everything after the last path sep) -string SGPath::file() { - int index = path.rfind(SG_PATH_SEP); +string SGPath::file() const { + int index = path.rfind(sgDirPathSep); if (index >= 0) { return path.substr(index + 1); } else { @@ -116,8 +137,8 @@ string SGPath::file() { // get the directory part of the path. -string SGPath::dir() { - int index = path.rfind(SG_PATH_SEP); +string SGPath::dir() const { + int index = path.rfind(sgDirPathSep); if (index >= 0) { return path.substr(0, index); } else { @@ -126,7 +147,7 @@ string SGPath::dir() { } // get the base part of the path (everything but the extension.) -string SGPath::base() { +string SGPath::base() const { int index = path.rfind("."); if (index >= 0) { return path.substr(0, index); @@ -136,7 +157,7 @@ string SGPath::base() { } // get the extention (everything after the final ".") -string SGPath::extension() { +string SGPath::extension() const { int index = path.rfind("."); if (index >= 0) { return path.substr(index + 1); @@ -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; +}