blob: 835b1cd9ec8f6b831555ad5ff55f181e49cef64c [file] [log] [blame]
#include "Path.h"
#include "String.h"
void Replace(STRING str, char oldValue, char newValue)
{
int len = String::StrLen(str);
for ( int i = 0; i < len; i++)
if ( oldValue == *(i + str) ) *(i + str) = newValue;
}
STRING Path::Combine(STRING path1, STRING path2)
{
//check that path1 ends with PATH_SEPARATOR
//if not - append it
UINT path1Length = String::StrLen(path1);
UINT path2Length = String::StrLen(path2);
bool appendPathSeparator = ( *PATH_SEPARATOR != *(path1 + path1Length - 1));
STRING result = (STRING)System::SafeAllocMemory(path1Length + path2Length + 2);
if ( 0 == result )
return 0;
String::StrCpy(result, path1);
if ( appendPathSeparator )
{
String::StrCat(result,PATH_SEPARATOR);
}
STRING tmpPath2 = String::StrDup(path2);
//replace other system's path separators with current
#ifdef WINDOWS
Replace(tmpPath2,*PATH_SEPARATOR_NIX_A, *PATH_SEPARATOR);
#else
Replace(tmpPath2, *PATH_SEPARATOR_WIN_A, *PATH_SEPARATOR);
#endif
String::StrCat(result, tmpPath2);
System::SafeFreeMemory(tmpPath2);
return result;
}
STRING Path::GetFileFolder(STRING filePath)
{
UINT len = String::StrLen(filePath);
while( len-- > 1)
if ( *PATH_SEPARATOR == *(filePath + len - 1) )
break;
if ( 0 != len )
{
STRING result = (STRING)System::SafeAllocMemory(len + 1);
String::StrNCpy(result, filePath, len);
return result;
}
else
return 0;
}
bool Path::IsDirectory(STRING path)
{
if ( 0 == path)
return 0;
UINT len = String::StrLen(path);
return (*PATH_SEPARATOR == *(path + len - 1) );
}
STRING Path::GetFileDirectory(STRING filePath){
if ( 0 == filePath )
return 0;
if ( IsDirectory(filePath) )
return String::StrDup(filePath);
else {
UINT lastDelimiterIndx = String::LastIndexOf(PATH_SEPARATOR, filePath);
if ( lastDelimiterIndx == -1)
return 0;
STRING directory = (STRING)System::SafeAllocMemory(lastDelimiterIndx + 2 ); //+1 for ending 0, +1 for path_separator
String::StrNCpy(directory,filePath, lastDelimiterIndx + 1);
return directory;
}
}