[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 <windows.h>
#include "Platform.h"
#include <stdio.h>
#include <stdarg.h>
@ -23,11 +23,6 @@ bool CLog::Open( const char * FileName, LOG_OPEN_MODE mode /* = Log_New */)
}
CPath File(FileName);
if (File.IsRelative())
{
File = CPath(CPath::MODULE_DIRECTORY,FileName);
}
if (m_hLogFile.IsOpen())
{
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_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;
}
@ -75,52 +60,27 @@ void CLog::LogArgs(const char * Message, va_list & args )
{
if (!m_hLogFile.IsOpen()) { return; }
#ifdef _UNICODE
wchar_t* buffer = NULL;
try
{
int nlen = _vscwprintf( Message, args ) // _vscprintf doesn't count
+ 1; // terminating '\0'
buffer = new wchar_t[nlen];
vswprintf( buffer, Message , args );
Log(buffer);
delete [] buffer;
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);
size_t nlen = _vscprintf(Message, args) + 1;
char * Msg = (char *)alloca(nlen * sizeof(char));
Msg[nlen - 1] = 0;
if (Msg != NULL)
{
vsprintf(Msg, Message, args);
Log(Msg);
}
}
catch(...)
{
Log("Invalid message format");
}
if (buffer)
{
delete [] buffer;
}
#endif
}
void CLog::Log( const char * Message )
{
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)
{
m_hLogFile.Flush();
@ -148,7 +108,7 @@ void CLog::Log( const char * Message )
uint32_t NextEnter = 0, dwRead = 0;
do
{
BYTE Data[300];
uint8_t Data[300];
uint32_t dwRead;
dwRead = m_hLogFile.Read(Data,sizeof(Data));
@ -189,7 +149,7 @@ void CLog::Log( const char * Message )
if (!m_hLogFile.Write(Data,dwRead))
{
//BreakPoint(__FILEW__,__LINE__);
//BreakPoint(__FILE__,__LINE__);
break;
}