[DEV] add the path creation in the log file when does not exist
This commit is contained in:
parent
7bb072b94c
commit
2b4f3eaed2
77
elog/log.cpp
77
elog/log.cpp
@ -282,11 +282,84 @@ static FILE*& getLogFile() {
|
|||||||
return file;
|
return file;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Copy for ETK FSNODE ... [START]
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
// file browsing ...
|
||||||
|
#include <dirent.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <cerrno>
|
||||||
|
}
|
||||||
|
|
||||||
|
static int32_t FSNODE_LOCAL_mkdir(const char* _path, mode_t _mode) {
|
||||||
|
struct stat st;
|
||||||
|
int32_t status = 0;
|
||||||
|
if (stat(_path, &st) != 0) {
|
||||||
|
/* Directory does not exist. EEXIST for race condition */
|
||||||
|
#ifdef __TARGET_OS__Windows
|
||||||
|
if(0!=mkdir(_path)
|
||||||
|
#else
|
||||||
|
if(0!=mkdir(_path, _mode)
|
||||||
|
#endif
|
||||||
|
&& errno != EEXIST) {
|
||||||
|
status = -1;
|
||||||
|
}
|
||||||
|
} else if (!S_ISDIR(st.st_mode)) {
|
||||||
|
errno = ENOTDIR;
|
||||||
|
status = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return(status);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int32_t FSNODE_LOCAL_mkPath(const char* _path, mode_t _mode) {
|
||||||
|
char *pp;
|
||||||
|
char *sp;
|
||||||
|
int status;
|
||||||
|
char *copypath = strdup(_path);
|
||||||
|
if (nullptr==copypath) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
status = 0;
|
||||||
|
pp = copypath;
|
||||||
|
while (status == 0 && (sp = strchr(pp, '/')) != 0) {
|
||||||
|
if (sp != pp) {
|
||||||
|
/* Neither root nor double slash in path */
|
||||||
|
*sp = '\0';
|
||||||
|
status = FSNODE_LOCAL_mkdir(copypath, _mode);
|
||||||
|
*sp = '/';
|
||||||
|
}
|
||||||
|
pp = sp + 1;
|
||||||
|
}
|
||||||
|
if (status == 0) {
|
||||||
|
status = FSNODE_LOCAL_mkdir(_path, _mode);
|
||||||
|
}
|
||||||
|
free(copypath);
|
||||||
|
return (status);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool FSNODE_LOCAL_exist(const std::string& _path) {
|
||||||
|
struct stat st;
|
||||||
|
int32_t status = 0;
|
||||||
|
if (stat(_path.c_str(), &st) != 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// Copy for ETK FSNODE ... [END]
|
||||||
|
|
||||||
void elog::setLogInFile(const std::string& _filename) {
|
void elog::setLogInFile(const std::string& _filename) {
|
||||||
elog::unsetLogInFile();
|
elog::unsetLogInFile();
|
||||||
ELOG_PRINT("Log in file: '" << _filename << "'");
|
ELOG_PRINT("Log in file: '" << _filename << "'");
|
||||||
g_lock.lock();
|
|
||||||
FILE*& file = getLogFile();
|
FILE*& file = getLogFile();
|
||||||
|
// create path of the file:
|
||||||
|
size_t found=_filename.find_last_of("/\\");
|
||||||
|
std::string path = _filename.substr(0,found);
|
||||||
|
if (FSNODE_LOCAL_exist(path) == false) {
|
||||||
|
FSNODE_LOCAL_mkPath(path.c_str(), 0760);
|
||||||
|
}
|
||||||
|
g_lock.lock();
|
||||||
file = fopen(_filename.c_str(), "w");
|
file = fopen(_filename.c_str(), "w");
|
||||||
g_lock.unlock();
|
g_lock.unlock();
|
||||||
if (file == nullptr) {
|
if (file == nullptr) {
|
||||||
@ -549,7 +622,7 @@ void elog::logChar(int32_t _id, int32_t _level, int32_t _ligne, const char* _fun
|
|||||||
if (file != nullptr) {
|
if (file != nullptr) {
|
||||||
*pointer++ = '\n';
|
*pointer++ = '\n';
|
||||||
*pointer = '\0';
|
*pointer = '\0';
|
||||||
fprintf(file, handle);
|
fprintf(file, "%s", handle);
|
||||||
switch(_level) {
|
switch(_level) {
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user