[DEV] update interface for FSNode for relative file
This commit is contained in:
parent
6a3d2d129e
commit
6bec5ddccb
14
etk/log.cpp
14
etk/log.cpp
@ -16,13 +16,12 @@
|
|||||||
|
|
||||||
#include <etk/logIOs.h>
|
#include <etk/logIOs.h>
|
||||||
|
|
||||||
/*
|
#if defined(__TARGET_OS__Linux) && defined(DEBUG)
|
||||||
#if defined(__TARGET_OS__Linux) && DEBUG_LEVEL > 2
|
|
||||||
#include <execinfo.h>
|
#include <execinfo.h>
|
||||||
#include <cxxabi.h>
|
#include <cxxabi.h>
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
#define MAX_DEPTH (256)
|
#define MAX_DEPTH (256)
|
||||||
void etk::displayBacktrace(bool _breakAtEnd) {
|
static void displayBacktrace(bool _breakAtEnd) {
|
||||||
// retrieve call-stack
|
// retrieve call-stack
|
||||||
void * trace[MAX_DEPTH];
|
void * trace[MAX_DEPTH];
|
||||||
int stack_depth = backtrace(trace, MAX_DEPTH);
|
int stack_depth = backtrace(trace, MAX_DEPTH);
|
||||||
@ -50,13 +49,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
void etk::displayBacktrace(bool _breakAtEnd) {
|
static void displayBacktrace(bool _breakAtEnd) {
|
||||||
#if DEBUG_LEVEL > 2
|
#ifdef DEBUG
|
||||||
assert(false);
|
assert(false);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
*/
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
#define DEFAULT_LOG_LEVEL etk::log::logLevelInfo
|
#define DEFAULT_LOG_LEVEL etk::log::logLevelInfo
|
||||||
#define DEFAULT_LOG_COLOR true
|
#define DEFAULT_LOG_COLOR true
|
||||||
@ -380,6 +379,9 @@ void etk::log::logChar(int32_t _id, int32_t _level, int32_t _ligne, const char*
|
|||||||
std::cout << handle << std::endl;
|
std::cout << handle << std::endl;
|
||||||
#endif
|
#endif
|
||||||
g_lock.unlock();
|
g_lock.unlock();
|
||||||
|
if (_level == logLevelCritical) {
|
||||||
|
displayBacktrace(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -29,12 +29,9 @@ extern "C" {
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#define TK_DBG_MODE TK_VERBOSE
|
#define TK_DBG_MODE TK_VERBOSE
|
||||||
//#define TK_DBG_MODE TK_DEBUG
|
//#define TK_DBG_MODE TK_DEBUG
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
std::string etk::simplifyPath(std::string _input) {
|
std::string etk::simplifyPath(std::string _input) {
|
||||||
// step 1 : for windows change \ in /:
|
// step 1 : for windows change \ in /:
|
||||||
TK_DBG_MODE("Siplify(1) : \"" << _input << "\"");
|
TK_DBG_MODE("Siplify(1) : \"" << _input << "\"");
|
||||||
@ -114,6 +111,7 @@ std::string etk::simplifyPath(std::string _input) {
|
|||||||
static std::string s_fileAPK = "";
|
static std::string s_fileAPK = "";
|
||||||
static std::string baseApplName = "ewolNoName";
|
static std::string baseApplName = "ewolNoName";
|
||||||
static std::string baseRunPath = "/";
|
static std::string baseRunPath = "/";
|
||||||
|
static std::string baseRunPathInHome = "/";
|
||||||
#if defined(__TARGET_OS__Android)
|
#if defined(__TARGET_OS__Android)
|
||||||
static std::string baseFolderHome = "/sdcard/"; // home folder
|
static std::string baseFolderHome = "/sdcard/"; // home folder
|
||||||
static std::string baseFolderData = "assets/"; // program Data
|
static std::string baseFolderData = "assets/"; // program Data
|
||||||
@ -284,15 +282,22 @@ void etk::initDefaultFolder(const char* _applName) {
|
|||||||
}
|
}
|
||||||
if (!getcwd(cCurrentPath, FILENAME_MAX)) {
|
if (!getcwd(cCurrentPath, FILENAME_MAX)) {
|
||||||
baseRunPath = ".";
|
baseRunPath = ".";
|
||||||
|
baseRunPathInHome = ".";
|
||||||
} else {
|
} else {
|
||||||
cCurrentPath[FILENAME_MAX - 1] = '\0';
|
cCurrentPath[FILENAME_MAX - 1] = '\0';
|
||||||
if (cCurrentPath[0] == '/') {
|
if (cCurrentPath[0] == '/') {
|
||||||
baseRunPath = cCurrentPath+1;
|
|
||||||
} else {
|
|
||||||
baseRunPath = cCurrentPath;
|
baseRunPath = cCurrentPath;
|
||||||
|
} else {
|
||||||
|
baseRunPath = std::string("/") + cCurrentPath;
|
||||||
}
|
}
|
||||||
|
if (start_with(baseRunPath, baseFolderHome) == true) {
|
||||||
|
baseRunPathInHome = std::string(baseRunPath, baseFolderHome.size());
|
||||||
|
} else {
|
||||||
|
baseRunPathInHome = baseRunPath;
|
||||||
}
|
}
|
||||||
TK_DBG_MODE("Find Basic running PATH : \"" << baseRunPath << "\"");
|
|
||||||
|
}
|
||||||
|
TK_DBG_MODE("Find Basic running PATH : '" << baseRunPath << "'");
|
||||||
|
|
||||||
#ifndef __TARGET_OS__Android
|
#ifndef __TARGET_OS__Android
|
||||||
std::string binaryPath = getApplicationPath();
|
std::string binaryPath = getApplicationPath();
|
||||||
@ -355,6 +360,8 @@ void etk::initDefaultFolder(const char* _applName) {
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
TK_INFO("baseRunPath : '" << baseRunPath << "'");
|
||||||
|
TK_INFO("baseRunPathInHome : ~|HOME: + '" << baseRunPathInHome << "'");
|
||||||
TK_INFO("baseFolderHome : '" << baseFolderHome << "'");
|
TK_INFO("baseFolderHome : '" << baseFolderHome << "'");
|
||||||
TK_INFO("baseFolderData : '" << baseFolderData << "'");
|
TK_INFO("baseFolderData : '" << baseFolderData << "'");
|
||||||
TK_INFO("baseFolderDataUser : '" << baseFolderDataUser << "'");
|
TK_INFO("baseFolderDataUser : '" << baseFolderDataUser << "'");
|
||||||
@ -564,11 +571,98 @@ void etk::FSNode::privateSetName(const std::string& _newName) {
|
|||||||
#else
|
#else
|
||||||
isRootFolder = destFilename[0] == '/';
|
isRootFolder = destFilename[0] == '/';
|
||||||
#endif
|
#endif
|
||||||
if (true == start_with(destFilename, baseFolderHome) ) {
|
if( start_with(destFilename, "ROOT:") == true
|
||||||
|
|| start_with(destFilename, "root:") == true ) {
|
||||||
|
TK_DBG_MODE(" ==> detect root 2 ");
|
||||||
|
destFilename.erase(0, 5);
|
||||||
|
m_type = etk::FSN_TYPE_DIRECT;
|
||||||
|
if(start_with(destFilename, "~") == true) {
|
||||||
|
destFilename.erase(0, 1);
|
||||||
|
m_type = etk::FSN_TYPE_HOME;
|
||||||
|
}
|
||||||
|
} else if( start_with(destFilename, "DIRECT:") == true
|
||||||
|
|| start_with(destFilename, "direct:") == true ) {
|
||||||
|
TK_DBG_MODE(" ==> detect direct");
|
||||||
|
destFilename.erase(0, 7);
|
||||||
|
m_type = etk::FSN_TYPE_DIRECT;
|
||||||
|
if(start_with(destFilename, "~") == true) {
|
||||||
|
destFilename.erase(0, 1);
|
||||||
|
m_type = etk::FSN_TYPE_HOME;
|
||||||
|
}
|
||||||
|
} else if( start_with(destFilename, "DATA:") == true
|
||||||
|
|| start_with(destFilename, "data:") == true ) {
|
||||||
|
TK_DBG_MODE(" ==> detect data");
|
||||||
|
destFilename.erase(0, 5);
|
||||||
|
m_type = etk::FSN_TYPE_DATA;
|
||||||
|
} else if( start_with(destFilename, "USERDATA:") == true
|
||||||
|
|| start_with(destFilename, "userdata:") == true ) {
|
||||||
|
TK_DBG_MODE(" ==> detect User-data");
|
||||||
|
destFilename.erase(0, 9);
|
||||||
|
m_type = etk::FSN_TYPE_USER_DATA;
|
||||||
|
} else if( start_with(destFilename, "CACHE:") == true
|
||||||
|
|| start_with(destFilename, "cache:") == true ) {
|
||||||
|
TK_DBG_MODE(" ==> detect Cache");
|
||||||
|
destFilename.erase(0, 6);
|
||||||
|
m_type = etk::FSN_TYPE_CACHE;
|
||||||
|
} else if( start_with(destFilename, "THEME:") == true
|
||||||
|
|| start_with(destFilename, "theme:") == true ) {
|
||||||
|
TK_DBG_MODE(" ==> detect theme");
|
||||||
|
destFilename.erase(0, 6);
|
||||||
|
m_type = etk::FSN_TYPE_THEME;
|
||||||
|
} else if(start_with(destFilename, "./") == true) {
|
||||||
|
TK_DBG_MODE(" ==> detect relatif 1");
|
||||||
|
destFilename.erase(0, 2);
|
||||||
|
while (destFilename.size()>0 && destFilename[0] == '/') {
|
||||||
|
destFilename.erase(0, 1);
|
||||||
|
}
|
||||||
|
m_type = etk::FSN_TYPE_RELATIF;
|
||||||
|
} else if( start_with(destFilename, "REL:") == true
|
||||||
|
|| start_with(destFilename, "rel:") == true ) {
|
||||||
|
TK_DBG_MODE(" ==> detect relatif 2");
|
||||||
|
destFilename.erase(0, 4);
|
||||||
|
while (destFilename.size()>0 && destFilename[0] == '/') {
|
||||||
|
destFilename.erase(0, 1);
|
||||||
|
}
|
||||||
|
m_type = etk::FSN_TYPE_RELATIF;
|
||||||
|
} else if(start_with(destFilename, baseRunPath) == true) {
|
||||||
|
TK_DBG_MODE(" ==> detect relatif 3");
|
||||||
|
destFilename.erase(0, baseRunPath.size());
|
||||||
|
while (destFilename.size()>0 && destFilename[0] == '/') {
|
||||||
|
destFilename.erase(0, 1);
|
||||||
|
}
|
||||||
|
m_type = etk::FSN_TYPE_RELATIF;
|
||||||
|
} else if (( baseRunPath != baseRunPathInHome
|
||||||
|
&& ( start_with(destFilename, "~" + baseRunPathInHome) == true
|
||||||
|
|| start_with(destFilename, "HOME:" + baseRunPathInHome) == true
|
||||||
|
|| start_with(destFilename, "home:" + baseRunPathInHome) == true ) ) ) {
|
||||||
|
TK_DBG_MODE(" ==> detect relatif 4");
|
||||||
|
if (start_with(destFilename, "~" + baseRunPathInHome) == true) {
|
||||||
|
destFilename.erase(0, 1);
|
||||||
|
} else {
|
||||||
|
destFilename.erase(0, 5);
|
||||||
|
}
|
||||||
|
destFilename.erase(0, baseRunPathInHome.size());
|
||||||
|
while (destFilename.size()>0 && destFilename[0] == '/') {
|
||||||
|
destFilename.erase(0, 1);
|
||||||
|
}
|
||||||
|
m_type = etk::FSN_TYPE_RELATIF;
|
||||||
|
} else if(start_with(destFilename, "~")) {
|
||||||
|
TK_DBG_MODE(" ==> detect home 2");
|
||||||
|
destFilename.erase(0, 1);
|
||||||
|
m_type = etk::FSN_TYPE_HOME;
|
||||||
|
} else if( start_with(destFilename, "HOME:") == true
|
||||||
|
|| start_with(destFilename, "home:") == true ) {
|
||||||
|
TK_DBG_MODE(" ==> detect home 3");
|
||||||
|
destFilename.erase(0, 5);
|
||||||
|
m_type = etk::FSN_TYPE_HOME;
|
||||||
|
if(start_with(destFilename, "~") == true) {
|
||||||
|
destFilename.erase(0, 1);
|
||||||
|
}
|
||||||
|
} else if (start_with(destFilename, baseFolderHome) == true) {
|
||||||
TK_DBG_MODE(" ==> detect home");
|
TK_DBG_MODE(" ==> detect home");
|
||||||
destFilename.erase(0, baseFolderHome.size());
|
destFilename.erase(0, baseFolderHome.size());
|
||||||
m_type = etk::FSN_TYPE_HOME;
|
m_type = etk::FSN_TYPE_HOME;
|
||||||
} else if(true == isRootFolder) {
|
} else if(isRootFolder == true) {
|
||||||
TK_DBG_MODE(" ==> detect root");
|
TK_DBG_MODE(" ==> detect root");
|
||||||
#ifdef __TARGET_OS__Windows
|
#ifdef __TARGET_OS__Windows
|
||||||
destFilename.erase(0, 3);
|
destFilename.erase(0, 3);
|
||||||
@ -576,70 +670,11 @@ void etk::FSNode::privateSetName(const std::string& _newName) {
|
|||||||
destFilename.erase(0, 1);
|
destFilename.erase(0, 1);
|
||||||
#endif
|
#endif
|
||||||
m_type = etk::FSN_TYPE_DIRECT;
|
m_type = etk::FSN_TYPE_DIRECT;
|
||||||
} else if( true == start_with(destFilename, "ROOT:")
|
} else {
|
||||||
|| true == start_with(destFilename, "root:") ) {
|
|
||||||
TK_DBG_MODE(" ==> detect root 2 ");
|
|
||||||
destFilename.erase(0, 5);
|
|
||||||
m_type = etk::FSN_TYPE_DIRECT;
|
|
||||||
if(true == start_with(destFilename, "~")) {
|
|
||||||
destFilename.erase(0, 1);
|
|
||||||
m_type = etk::FSN_TYPE_HOME;
|
|
||||||
}
|
|
||||||
} else if( true == start_with(destFilename, "DIRECT:")
|
|
||||||
|| true == start_with(destFilename, "direct:") ) {
|
|
||||||
TK_DBG_MODE(" ==> detect direct");
|
|
||||||
destFilename.erase(0, 7);
|
|
||||||
m_type = etk::FSN_TYPE_DIRECT;
|
|
||||||
if(true == start_with(destFilename, "~")) {
|
|
||||||
destFilename.erase(0, 1);
|
|
||||||
m_type = etk::FSN_TYPE_HOME;
|
|
||||||
}
|
|
||||||
} else if( true == start_with(destFilename, "DATA:")
|
|
||||||
|| true == start_with(destFilename, "data:") ) {
|
|
||||||
TK_DBG_MODE(" ==> detect data");
|
|
||||||
destFilename.erase(0, 5);
|
|
||||||
m_type = etk::FSN_TYPE_DATA;
|
|
||||||
} else if( true == start_with(destFilename, "USERDATA:")
|
|
||||||
|| true == start_with(destFilename, "userdata:") ) {
|
|
||||||
TK_DBG_MODE(" ==> detect User-data");
|
|
||||||
destFilename.erase(0, 9);
|
|
||||||
m_type = etk::FSN_TYPE_USER_DATA;
|
|
||||||
} else if( true == start_with(destFilename, "CACHE:")
|
|
||||||
|| true == start_with(destFilename, "cache:") ) {
|
|
||||||
TK_DBG_MODE(" ==> detect Cach");
|
|
||||||
destFilename.erase(0, 6);
|
|
||||||
m_type = etk::FSN_TYPE_CACHE;
|
|
||||||
} else if( true == start_with(destFilename, "THEME:")
|
|
||||||
|| true == start_with(destFilename, "theme:") ) {
|
|
||||||
TK_DBG_MODE(" ==> detect theme");
|
|
||||||
destFilename.erase(0, 6);
|
|
||||||
m_type = etk::FSN_TYPE_THEME;
|
|
||||||
} else if(true == start_with(destFilename, "~")) {
|
|
||||||
TK_DBG_MODE(" ==> detect home 2");
|
|
||||||
destFilename.erase(0, 1);
|
|
||||||
m_type = etk::FSN_TYPE_HOME;
|
|
||||||
} else if( true == start_with(destFilename, "HOME:")
|
|
||||||
|| true == start_with(destFilename, "home:") ) {
|
|
||||||
TK_DBG_MODE(" ==> detect home 3");
|
|
||||||
destFilename.erase(0, 5);
|
|
||||||
m_type = etk::FSN_TYPE_HOME;
|
|
||||||
if(true == start_with(destFilename, "~")) {
|
|
||||||
destFilename.erase(0, 1);
|
|
||||||
}
|
|
||||||
} /*else if(true == destFilename.StartWith(baseRunPath)) {
|
|
||||||
destFilename.Remove(0, baseRunPath.Size());
|
|
||||||
m_type = etk::FSN_TYPE_RELATIF;
|
|
||||||
} */else {
|
|
||||||
TK_DBG_MODE(" ==> detect other");
|
TK_DBG_MODE(" ==> detect other");
|
||||||
// nothing to remove
|
// nothing to remove
|
||||||
//Other type is Relative :
|
//Other type is Relative :
|
||||||
m_type = etk::FSN_TYPE_RELATIF;
|
m_type = etk::FSN_TYPE_RELATIF;
|
||||||
|
|
||||||
// we force to have the correct name : (can generate many problem otherwise ...
|
|
||||||
std::string tmpName = etk::getUserRunFolder() + "/" + destFilename;
|
|
||||||
destFilename = tmpName;
|
|
||||||
m_type = etk::FSN_TYPE_DIRECT;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
m_userFileName = destFilename;
|
m_userFileName = destFilename;
|
||||||
TK_DBG_MODE("3 : parse done : [" << m_type << "]->\"" << m_userFileName << "\"");
|
TK_DBG_MODE("3 : parse done : [" << m_type << "]->\"" << m_userFileName << "\"");
|
||||||
@ -701,7 +736,7 @@ void etk::FSNode::generateFileSystemPath(void) {
|
|||||||
}
|
}
|
||||||
cCurrentPath[FILENAME_MAX - 1] = '\0';
|
cCurrentPath[FILENAME_MAX - 1] = '\0';
|
||||||
m_systemFileName = cCurrentPath;
|
m_systemFileName = cCurrentPath;
|
||||||
m_systemFileName += "/";
|
//m_systemFileName += "/";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case etk::FSN_TYPE_HOME:
|
case etk::FSN_TYPE_HOME:
|
||||||
@ -766,7 +801,13 @@ void etk::FSNode::generateFileSystemPath(void) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (m_userFileName != "") {
|
||||||
|
if ( m_systemFileName.size()>0
|
||||||
|
&& m_systemFileName[m_systemFileName.size()-1] != '/') {
|
||||||
|
m_systemFileName += '/';
|
||||||
|
}
|
||||||
m_systemFileName += m_userFileName;
|
m_systemFileName += m_userFileName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -898,7 +939,7 @@ std::string etk::FSNode::getName(void) const {
|
|||||||
output = "/";
|
output = "/";
|
||||||
break;
|
break;
|
||||||
case etk::FSN_TYPE_RELATIF:
|
case etk::FSN_TYPE_RELATIF:
|
||||||
output = "";
|
output = "REL:";
|
||||||
break;
|
break;
|
||||||
case etk::FSN_TYPE_HOME:
|
case etk::FSN_TYPE_HOME:
|
||||||
output = "~";
|
output = "~";
|
||||||
@ -970,7 +1011,7 @@ std::string etk::FSNode::getRelativeFolder(void) const {
|
|||||||
TK_DBG_MODE(" ==> : " << std::string(tmppp, 0, lastPos+1) );
|
TK_DBG_MODE(" ==> : " << std::string(tmppp, 0, lastPos+1) );
|
||||||
return std::string(tmppp, 0, lastPos+1);
|
return std::string(tmppp, 0, lastPos+1);
|
||||||
}
|
}
|
||||||
TK_DBG_MODE(" ==> : \"\"" );
|
TK_DBG_MODE(" ==> : ''" );
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
std::u32string etk::FSNode::getURelativeFolder(void) const {
|
std::u32string etk::FSNode::getURelativeFolder(void) const {
|
||||||
|
Loading…
Reference in New Issue
Block a user