Frederic Bouvier:
Fix a problem where the directory being created is made relative when in fact it's absolute. It also tightens things a bit on the Windows side. Erik: Make the section that splits up the directory in a lists of parent directories a standalone function.
This commit is contained in:
parent
bedbe3caad
commit
9289cfdde9
@ -197,25 +197,14 @@ bool SGPath::exists() const {
|
||||
void SGPath::create_dir( mode_t mode ) {
|
||||
string_list dirlist = sgPathSplit(dir());
|
||||
string path = dirlist[0];
|
||||
string_list path_elements;
|
||||
string element;
|
||||
while ( path.size() ) {
|
||||
size_t p = path.find( sgDirPathSep );
|
||||
if ( p != string::npos ) {
|
||||
element = path.substr( 0, p );
|
||||
path.erase( 0, p + 1 );
|
||||
} else {
|
||||
element = path;
|
||||
path = "";
|
||||
}
|
||||
if ( element.size() )
|
||||
path_elements.push_back( element );
|
||||
}
|
||||
string_list path_elements = sgPathBranchSplit(path);
|
||||
bool absolute = !path.empty() && path[0] == sgDirPathSep;
|
||||
|
||||
int i = 1;
|
||||
SGPath dir = path_elements[0];
|
||||
#ifdef WIN32
|
||||
if ( path_elements.size() >= 2 ) {
|
||||
SGPath dir = absolute ? string( 1, sgDirPathSep ) : "";
|
||||
dir.concat( path_elements[0] );
|
||||
#ifdef _MSC_VER
|
||||
if ( dir.str().find(':') != string::npos && path_elements.size() >= 2 ) {
|
||||
dir.append( path_elements[1] );
|
||||
i = 2;
|
||||
}
|
||||
@ -241,6 +230,25 @@ void SGPath::create_dir( mode_t mode ) {
|
||||
}
|
||||
}
|
||||
|
||||
string_list sgPathBranchSplit( const string &dirpath ) {
|
||||
string_list path_elements;
|
||||
string element, path = dirpath;
|
||||
while ( path.size() ) {
|
||||
size_t p = path.find( sgDirPathSep );
|
||||
if ( p != string::npos ) {
|
||||
element = path.substr( 0, p );
|
||||
path.erase( 0, p + 1 );
|
||||
} else {
|
||||
element = path;
|
||||
path = "";
|
||||
}
|
||||
if ( element.size() )
|
||||
path_elements.push_back( element );
|
||||
}
|
||||
return path_elements;
|
||||
}
|
||||
|
||||
|
||||
string_list sgPathSplit( const string &search_path ) {
|
||||
string tmp = search_path;
|
||||
string_list result;
|
||||
|
@ -120,12 +120,14 @@ public:
|
||||
*/
|
||||
string extension() const;
|
||||
|
||||
/** Get the path string
|
||||
/**
|
||||
* Get the path string
|
||||
* @return path string
|
||||
*/
|
||||
string str() const { return path; }
|
||||
|
||||
/** Get the path string
|
||||
/**
|
||||
* Get the path string
|
||||
* @return path in "C" string (ptr to char array) form.
|
||||
*/
|
||||
const char* c_str() { return path.c_str(); }
|
||||
@ -148,6 +150,11 @@ private:
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Split a directory string into a list of it's parent directories.
|
||||
*/
|
||||
string_list sgPathBranchSplit( const string &path );
|
||||
|
||||
/**
|
||||
* Split a directory search path into a vector of individual paths
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user