[DEV] Correction of the relative files

This commit is contained in:
Edouard DUPIN 2013-04-02 21:45:09 +02:00
parent 28d5740bf5
commit 070a4a3f99
2 changed files with 45 additions and 6 deletions

View File

@ -39,6 +39,7 @@ extern "C" {
// zip file of the apk file for Android ==> set to zip file apk access
static etk::UString s_fileAPK = "";
static etk::UString baseApplName = "ewolNoName";
static etk::UString baseRunPath = "/";
#if defined(__TARGET_OS__Android)
static etk::UString baseFolderHome = "/sdcard/"; // home folder
static etk::UString baseFolderData = "assets/"; // program Data
@ -113,6 +114,8 @@ void etk::SetBaseFolderCache(const char * folder)
void etk::InitDefaultFolder(const char * applName)
{
baseApplName = applName;
char cCurrentPath[FILENAME_MAX];
char * basicPath = getenv("HOME");
if (NULL == basicPath) {
TK_ERROR("ERROR while trying to get the path of the home folder");
@ -124,12 +127,23 @@ void etk::InitDefaultFolder(const char * applName)
} else {
baseFolderHome = basicPath;
}
if (!getcwd(cCurrentPath, FILENAME_MAX)) {
baseRunPath = ".";
} else {
cCurrentPath[FILENAME_MAX - 1] = '\0';
if (cCurrentPath[0] == '/') {
baseRunPath = cCurrentPath+1;
} else {
baseRunPath = cCurrentPath;
}
}
TK_DBG_MODE("Find Basic running PATH : \"" << baseRunPath << "\"");
#ifndef __TARGET_OS__Android
#ifdef MODE_RELEASE
baseFolderData = "/usr/share/";
#else
char cCurrentPath[FILENAME_MAX];
if (!getcwd(cCurrentPath, FILENAME_MAX)) {
baseFolderData = ".";
} else {
@ -168,6 +182,10 @@ etk::UString etk::GetUserHomeFolder(void)
return baseFolderHome;
}
etk::UString etk::GetUserRunFolder(void)
{
return baseRunPath;
}
#ifdef __TARGET_OS__Android
@ -393,7 +411,7 @@ void etk::FSNode::PrivateSetName(etk::UString& newName)
destFilename = newName;
}
bool isRoofFolder = false;
bool isRootFolder = false;
#ifdef __TARGET_OS__Windows
for (char iii='a' ; iii<='z' ; iii++) {
char tmpVal[10];
@ -402,17 +420,17 @@ void etk::FSNode::PrivateSetName(etk::UString& newName)
sprintf(tmpValMaj, "%c:/", iii+'A'-'a');
if( true == destFilename.StartWith(tmpVal)
|| true == destFilename.StartWith(tmpValMaj)) {
isRoofFolder = true;
isRootFolder = true;
break;
}
}
#else
isRoofFolder = destFilename.StartWith('/');
isRootFolder = destFilename.StartWith('/');
#endif
if (true == destFilename.StartWith(baseFolderHome) ) {
destFilename.Remove(0, baseFolderHome.Size());
m_type = etk::FSN_TYPE_HOME;
} else if(true == isRoofFolder) {
} else if(true == isRootFolder) {
#ifdef __TARGET_OS__Windows
destFilename.Remove(0, 3);
#else
@ -423,10 +441,18 @@ void etk::FSNode::PrivateSetName(etk::UString& newName)
|| true == destFilename.StartWith("root:") ) {
destFilename.Remove(0, 5);
m_type = etk::FSN_TYPE_DIRECT;
if(true == destFilename.StartWith("~")) {
destFilename.Remove(0, 1);
m_type = etk::FSN_TYPE_HOME;
}
} else if( true == destFilename.StartWith("DIRECT:")
|| true == destFilename.StartWith("direct:") ) {
destFilename.Remove(0, 7);
m_type = etk::FSN_TYPE_DIRECT;
if(true == destFilename.StartWith("~")) {
destFilename.Remove(0, 1);
m_type = etk::FSN_TYPE_HOME;
}
} else if( true == destFilename.StartWith("DATA:")
|| true == destFilename.StartWith("data:") ) {
destFilename.Remove(0, 5);
@ -450,10 +476,22 @@ void etk::FSNode::PrivateSetName(etk::UString& newName)
|| true == destFilename.StartWith("home:") ) {
destFilename.Remove(0, 5);
m_type = etk::FSN_TYPE_HOME;
} else {
if(true == destFilename.StartWith("~")) {
destFilename.Remove(0, 1);
}
} /*else if(true == destFilename.StartWith(baseRunPath)) {
destFilename.Remove(0, baseRunPath.Size());
m_type = etk::FSN_TYPE_RELATIF;
} */else {
// nothing to remove
//Other type is Relative :
m_type = etk::FSN_TYPE_RELATIF;
// we force to have the correct name : (can generate many problem otherwise ...
etk::UString tmpName = etk::GetUserRunFolder() + "/" + destFilename;
destFilename = tmpName;
m_type = etk::FSN_TYPE_DIRECT;
}
m_userFileName = destFilename;
TK_DBG_MODE("3 : parse done : [" << m_type << "]->\"" << m_userFileName << "\"");

View File

@ -215,6 +215,7 @@ namespace etk
void SetBaseFolderCache(const char * folder);
void InitDefaultFolder(const char * applName);
etk::UString GetUserHomeFolder(void);
etk::UString GetUserRunFolder(void);
namespace theme
{