diff --git a/Source/Common/FileClass.cpp b/Source/Common/FileClass.cpp index f3e72d194..1fbf80cfa 100644 --- a/Source/Common/FileClass.cpp +++ b/Source/Common/FileClass.cpp @@ -222,7 +222,9 @@ bool CFile::Flush() return ::FlushFileBuffers(m_hFile) != 0; #else - return fflush((FILE *)m_hFile) == 0; + fflush((FILE *)m_hFile); + fsync(fileno((FILE *)m_hFile)); + return true; #endif } diff --git a/Source/Common/LogClass.cpp b/Source/Common/LogClass.cpp index 417f3866c..972e6e8c4 100644 --- a/Source/Common/LogClass.cpp +++ b/Source/Common/LogClass.cpp @@ -7,7 +7,8 @@ CLog::CLog (void ) : m_FlushOnWrite(false), m_TruncateFileLog(true), m_MaxFileSize(MAX_FILE_SIZE), - m_FileChangeSize(0) + m_FileChangeSize(0), + m_FileSize(0) { } @@ -37,6 +38,7 @@ bool CLog::Open( const char * FileName, LOG_OPEN_MODE mode /* = Log_New */) } m_FileName = (const char *)File; m_hLogFile.Seek(0,mode == Log_Append ? CFile::end : CFile::begin); + m_FileSize = mode == Log_Append ? m_hLogFile.GetLength() : 0; return true; } @@ -80,23 +82,25 @@ void CLog::LogArgs(const char * Message, va_list & args ) void CLog::Log( const char * Message ) { if (!m_hLogFile.IsOpen()) { return; } - m_hLogFile.Write(Message,(uint32_t)strlen(Message)*sizeof(char)); + uint32_t message_len = strlen(Message); + m_hLogFile.Write(Message, message_len); if (m_FlushOnWrite) { m_hLogFile.Flush(); } - if (m_TruncateFileLog) + m_FileSize += message_len; + if (m_TruncateFileLog && m_FileSize > m_MaxFileSize) { // check file size - uint32_t FileSize = m_hLogFile.GetLength(); + m_FileSize = m_hLogFile.GetLength(); // if larger then max size then - if (FileSize > m_MaxFileSize) + if (m_FileSize > m_MaxFileSize) { if (!m_FlushOnWrite) { m_hLogFile.Flush(); - FileSize = m_hLogFile.GetLength(); + m_FileSize = m_hLogFile.GetLength(); } uint32_t end = m_hLogFile.SeekToEnd(); @@ -160,6 +164,7 @@ void CLog::Log( const char * Message ) //clean up m_hLogFile.SetEndOfFile(); m_hLogFile.Flush(); + m_FileSize = m_hLogFile.GetLength(); } // end if } } diff --git a/Source/Common/LogClass.h b/Source/Common/LogClass.h index 2dc57af26..e3be05222 100644 --- a/Source/Common/LogClass.h +++ b/Source/Common/LogClass.h @@ -43,6 +43,7 @@ private: bool m_FlushOnWrite; std::string m_FileName; bool m_TruncateFileLog; + uint32_t m_FileSize; uint32_t m_MaxFileSize; uint32_t m_FileChangeSize; };