bool CLog::Init(const char* path) { CSingleLock waitLock(critSec); if (!m_file) { // g_settings.m_logFolder is initialized in the CSettings constructor // and changed in CApplication::Create() CStdString strLogFile, strLogFileOld; strLogFile.Format("%sxbmc.log", path); strLogFileOld.Format("%sxbmc.old.log", path); struct stat64 info; if (stat64_utf8(strLogFileOld.c_str(),&info) == 0 && remove_utf8(strLogFileOld.c_str()) != 0) return false; if (stat64_utf8(strLogFile.c_str(),&info) == 0 && rename_utf8(strLogFile.c_str(),strLogFileOld.c_str()) != 0) return false; m_file = fopen64_utf8(strLogFile.c_str(),"wb"); } if (m_file) { unsigned char BOM[3] = {0xEF, 0xBB, 0xBF}; fwrite(BOM, sizeof(BOM), 1, m_file); } return m_file != NULL; }
bool CLog::Init(const char* path) { CSingleLock waitLock(critSec); if (!m_file) { // g_advancedSettings.m_logFolder is initialized in the CSettings constructor // and changed in CApplication::Create() CStdString strLogFile, strLogFileOld; strLogFile.Format("%sxbmc.log", path); strLogFileOld.Format("%sxbmc.old.log", path); #if defined(TARGET_WINDOWS) // the appdata folder might be redirected to an unc share // convert smb to unc path that stat and fopen can handle it strLogFile = CWIN32Util::SmbToUnc(strLogFile); strLogFileOld = CWIN32Util::SmbToUnc(strLogFileOld); #endif struct stat64 info; if (stat64_utf8(strLogFileOld.c_str(),&info) == 0 && remove_utf8(strLogFileOld.c_str()) != 0) return false; if (stat64_utf8(strLogFile.c_str(),&info) == 0 && rename_utf8(strLogFile.c_str(),strLogFileOld.c_str()) != 0) return false; m_file = fopen64_utf8(strLogFile.c_str(),"wb"); } if (m_file) { unsigned char BOM[3] = {0xEF, 0xBB, 0xBF}; fwrite(BOM, sizeof(BOM), 1, m_file); } return m_file != NULL; }