[Project64] Use alloca in log message

This commit is contained in:
zilmar 2016-01-13 05:51:53 +11:00
parent 226a65cc04
commit d6b8fe523e
1 changed files with 12 additions and 52 deletions

View File

@ -1,5 +1,5 @@
#include "stdafx.h" #include "stdafx.h"
#include <windows.h> #include "Platform.h"
#include <stdio.h> #include <stdio.h>
#include <stdarg.h> #include <stdarg.h>
@ -23,11 +23,6 @@ bool CLog::Open( const char * FileName, LOG_OPEN_MODE mode /* = Log_New */)
} }
CPath File(FileName); CPath File(FileName);
if (File.IsRelative())
{
File = CPath(CPath::MODULE_DIRECTORY,FileName);
}
if (m_hLogFile.IsOpen()) if (m_hLogFile.IsOpen())
{ {
m_hLogFile.Close(); m_hLogFile.Close();
@ -42,16 +37,6 @@ bool CLog::Open( const char * FileName, LOG_OPEN_MODE mode /* = Log_New */)
} }
m_FileName = (const char *)File; m_FileName = (const char *)File;
m_hLogFile.Seek(0,mode == Log_Append ? CFile::end : CFile::begin); m_hLogFile.Seek(0,mode == Log_Append ? CFile::end : CFile::begin);
#ifdef _UNICODE
if (m_hLogFile.GetLength() == 0)
{
WORD wUNICODE = 0xFEFF;
m_hLogFile.Write(&wUNICODE, 2);
}
#endif
return true; return true;
} }
@ -75,52 +60,27 @@ void CLog::LogArgs(const char * Message, va_list & args )
{ {
if (!m_hLogFile.IsOpen()) { return; } if (!m_hLogFile.IsOpen()) { return; }
#ifdef _UNICODE
wchar_t* buffer = NULL;
try try
{ {
size_t nlen = _vscprintf(Message, args) + 1;
int nlen = _vscwprintf( Message, args ) // _vscprintf doesn't count char * Msg = (char *)alloca(nlen * sizeof(char));
+ 1; // terminating '\0' Msg[nlen - 1] = 0;
buffer = new wchar_t[nlen]; if (Msg != NULL)
vswprintf( buffer, Message , args ); {
Log(buffer); vsprintf(Msg, Message, args);
delete [] buffer; Log(Msg);
buffer = NULL; }
}
catch(...)
{
Log(L"Invalid message format");
}
if (buffer)
delete [] buffer;
#else
char* buffer = NULL;
try
{
char Msg[800];
_vsnprintf( Msg, sizeof(Msg) - 5, Message, args );
Msg[sizeof(Msg) - 5] = 0;
Log(Msg);
} }
catch(...) catch(...)
{ {
Log("Invalid message format"); Log("Invalid message format");
} }
if (buffer)
{
delete [] buffer;
}
#endif
} }
void CLog::Log( const char * Message ) void CLog::Log( const char * Message )
{ {
if (!m_hLogFile.IsOpen()) { return; } if (!m_hLogFile.IsOpen()) { return; }
m_hLogFile.Write(Message,(uint32_t)strlen(Message)*sizeof(TCHAR)); m_hLogFile.Write(Message,(uint32_t)strlen(Message)*sizeof(char));
if (m_FlushOnWrite) if (m_FlushOnWrite)
{ {
m_hLogFile.Flush(); m_hLogFile.Flush();
@ -148,7 +108,7 @@ void CLog::Log( const char * Message )
uint32_t NextEnter = 0, dwRead = 0; uint32_t NextEnter = 0, dwRead = 0;
do do
{ {
BYTE Data[300]; uint8_t Data[300];
uint32_t dwRead; uint32_t dwRead;
dwRead = m_hLogFile.Read(Data,sizeof(Data)); dwRead = m_hLogFile.Read(Data,sizeof(Data));
@ -189,7 +149,7 @@ void CLog::Log( const char * Message )
if (!m_hLogFile.Write(Data,dwRead)) if (!m_hLogFile.Write(Data,dwRead))
{ {
//BreakPoint(__FILEW__,__LINE__); //BreakPoint(__FILE__,__LINE__);
break; break;
} }