/*
* PROJECT: ReactOS simple TCP/IP services
* LICENSE: GPL - See COPYING in the top level directory
- * FILE: /base/services/tcpsvcs/log.c
+ * FILE: base/services/tcpsvcs/log.c
* PURPOSE: Logging functionality for the service
* COPYRIGHT: Copyright 2008 Ged Murphy <gedmurphy@reactos.org>
*
#define DEBUG
static LPWSTR lpEventSource = L"tcpsvcs";
-static LPCWSTR lpLogFileName = L"C:\\tcpsvcs_log.log";
+static WCHAR szLogFileName[MAX_PATH];
static HANDLE hLogFile = NULL;
static OVERLAPPED olWrite;
static BOOL
OpenLogFile()
{
- hLogFile = CreateFileW(lpLogFileName,
+ hLogFile = CreateFileW(szLogFileName,
GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
UINT flags)
{
LPWSTR lpFullMsg = NULL;
- DWORD msgLen;
+ SIZE_T msgLen;
msgLen = wcslen(lpMsg) + 1;
if (flags & LOG_ERROR)
{
- LPVOID lpSysMsg;
+ LPWSTR lpSysMsg;
DWORD eMsgLen;
eMsgLen = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
errNum,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
- (LPTSTR)&lpSysMsg,
+ (LPWSTR)&lpSysMsg,
0,
NULL);
}
}
+ /* Make sure the length in bytes doesn't overflow a DWORD */
+ msgLen = wcslen(lpFullMsg);
+ if (msgLen > (MAXDWORD / sizeof(WCHAR)))
+ {
+ RaiseException(EXCEPTION_INT_OVERFLOW, 0, 0, NULL);
+ }
+
if (lpFullMsg)
{
DWORD bytesWritten;
bRet = WriteFile(hLogFile,
lpFullMsg,
- wcslen(lpFullMsg) * sizeof(WCHAR),
+ (DWORD)msgLen * sizeof(WCHAR),
&bytesWritten,
&olWrite);
if (!bRet)
#ifdef DEBUG
BOOL bRet = FALSE;
+ if (!GetEnvironmentVariableW(L"SystemDrive", szLogFileName, ARRAYSIZE(szLogFileName)))
+ {
+ StringCchCopyW(szLogFileName, ARRAYSIZE(szLogFileName), L"C:");
+ }
+ StringCchCatW(szLogFileName, ARRAYSIZE(szLogFileName), L"\\tcpsvcs_log.log");
+
ZeroMemory(&olWrite, sizeof(OVERLAPPED));
olWrite.Offset = 0xFFFFFFFF;
olWrite.OffsetHigh = 0xFFFFFFFF;
olWrite.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
if (olWrite.hEvent)
{
- DeleteFileW(lpLogFileName);
+ DeleteFileW(szLogFileName);
if (OpenLogFile())
{