#479: avoid issues due to trailing path separators

Cut trailing separators when converting from string to sgpath.
Also, SGPath::fix does NOT replace ":". It only replaces "\" with "/",
so the "i!=1" check for Windows made no sense (rule #9: never believe
a source code comment).
This commit is contained in:
ThorstenB 2011-12-18 17:04:31 +01:00
parent b261836f71
commit 54db2e0ab1
2 changed files with 12 additions and 14 deletions

View File

@ -1,5 +1,5 @@
/** \file debug_types.h
* Define the various logging classes and prioritiess
* Define the various logging classes and priorities
*/
/**
@ -30,7 +30,7 @@ typedef enum {
SG_AI = 0x00080000,
SG_ENVIRONMENT = 0x00100000,
SG_SOUND = 0x00200000,
SG_UNDEFD = 0x00400000, // For range checkingng
SG_UNDEFD = 0x00400000, // For range checking
SG_ALL = 0xFFFFFFFF
} sgDebugClass;

View File

@ -53,22 +53,20 @@ static const char sgSearchPathSep = ':';
#endif
// If Unix, replace all ":" with "/". In windoze, allow the
// second character to be a ":" for things like c:\foo\bar
// For windows, replace "\" by "/".
void
SGPath::fix()
{
for ( string::size_type i = 0; i < path.size(); ++i ) {
#if defined( WIN32 )
// for windoze, don't replace the ":" for the second character
if ( i == 1 ) {
continue;
}
#endif
if ( path[i] == sgDirPathSepBad ) {
path[i] = sgDirPathSep;
string::size_type sz = path.size();
for ( string::size_type i = 0; i < sz; ++i ) {
if ( path[i] == sgDirPathSepBad ) {
path[i] = sgDirPathSep;
}
}
// drop trailing "/"
while ((sz>1)&&(path[sz-1]==sgDirPathSep))
{
path.resize(--sz);
}
}