Add missing return value checks. Finally fix bug #1526

svn path=/trunk/; revision=23138
This commit is contained in:
Saveliy Tretiakov 2006-07-18 12:19:07 +00:00
parent 6a97df1eec
commit ba51348c89

View file

@ -30,11 +30,15 @@ BOOL LogfInitializeNew(PLOGFILE LogFile)
LogFile->Header.NextRecord = 1; LogFile->Header.NextRecord = 1;
LogFile->Header.Signature = LOGFILE_SIGNATURE; LogFile->Header.Signature = LOGFILE_SIGNATURE;
WriteFile(LogFile->hFile, if(!WriteFile(LogFile->hFile,
&LogFile->Header, &LogFile->Header,
sizeof(FILE_HEADER), sizeof(FILE_HEADER),
&dwWritten, &dwWritten,
NULL); NULL))
{
DPRINT1("WriteFile failed:%d!\n", GetLastError());
return FALSE;
}
EofRec.Ones = 0x11111111; EofRec.Ones = 0x11111111;
EofRec.Twos = 0x22222222; EofRec.Twos = 0x22222222;
@ -47,9 +51,21 @@ BOOL LogfInitializeNew(PLOGFILE LogFile)
EofRec.StartOffset = LogFile->Header.FirstRecordOffset; EofRec.StartOffset = LogFile->Header.FirstRecordOffset;
EofRec.EndOffset = LogFile->Header.EofOffset; EofRec.EndOffset = LogFile->Header.EofOffset;
WriteFile(LogFile->hFile, &EofRec, sizeof(EOF_RECORD), &dwWritten, NULL); if(!WriteFile(LogFile->hFile,
&EofRec,
sizeof(EOF_RECORD),
&dwWritten,
NULL))
{
DPRINT1("WriteFile failed:%d!\n", GetLastError());
return FALSE;
}
FlushFileBuffers(LogFile->hFile); if(!FlushFileBuffers(LogFile->hFile))
{
DPRINT1("FlushFileBuffers failed:%d!\n", GetLastError());
return FALSE;
}
return TRUE; return TRUE;
} }
@ -62,11 +78,21 @@ BOOL LogfInitializeExisting(PLOGFILE LogFile)
PDWORD pdwRecSize2; PDWORD pdwRecSize2;
PEVENTLOGRECORD RecBuf; PEVENTLOGRECORD RecBuf;
SetFilePointer(LogFile->hFile, 0, NULL, FILE_BEGIN); if(SetFilePointer(LogFile->hFile, 0, NULL, FILE_BEGIN) ==
ReadFile(LogFile->hFile, INVALID_SET_FILE_POINTER)
{
DPRINT1("SetFilePointer failed! %d\n", GetLastError());
return FALSE;
}
if(!ReadFile(LogFile->hFile,
&LogFile->Header, &LogFile->Header,
sizeof(FILE_HEADER), sizeof(FILE_HEADER),
&dwRead, NULL); &dwRead, NULL))
{
DPRINT1("ReadFile failed! %d\n", GetLastError());
return FALSE;
}
if(dwRead != sizeof(FILE_HEADER)) if(dwRead != sizeof(FILE_HEADER))
{ {
@ -104,20 +130,34 @@ BOOL LogfInitializeExisting(PLOGFILE LogFile)
NULL, NULL,
FILE_CURRENT); FILE_CURRENT);
ReadFile(LogFile->hFile, if(dwFilePointer == INVALID_SET_FILE_POINTER)
{
DPRINT1("SetFilePointer failed! %d\n", GetLastError());
return FALSE;
}
if(!ReadFile(LogFile->hFile,
&dwRecSize, &dwRecSize,
sizeof(dwRecSize), sizeof(dwRecSize),
&dwRead, &dwRead,
NULL); NULL))
{
DPRINT1("ReadFile failed! %d\n", GetLastError());
return FALSE;
}
if(dwRead != sizeof(dwRecSize)) if(dwRead != sizeof(dwRecSize))
break; break;
ReadFile(LogFile->hFile, if(!ReadFile(LogFile->hFile,
&dwRecSign, &dwRecSign,
sizeof(dwRecSign), sizeof(dwRecSign),
&dwRead, &dwRead,
NULL); NULL))
{
DPRINT1("ReadFile() failed! %d\n", GetLastError());
return FALSE;
}
if(dwRead != sizeof(dwRecSize)) if(dwRead != sizeof(dwRecSize))
break; break;
@ -129,13 +169,33 @@ BOOL LogfInitializeExisting(PLOGFILE LogFile)
break; break;
} }
SetFilePointer(LogFile->hFile, -((LONG)sizeof(DWORD)*2), NULL, FILE_CURRENT); if(SetFilePointer(LogFile->hFile,
-((LONG)sizeof(DWORD)*2),
NULL,
FILE_CURRENT) == INVALID_SET_FILE_POINTER)
{
DPRINT1("SetFilePointer() failed! %d", GetLastError());
return FALSE;
}
RecBuf = (PEVENTLOGRECORD) HeapAlloc(MyHeap, 0, dwRecSize); RecBuf = (PEVENTLOGRECORD) HeapAlloc(MyHeap, 0, dwRecSize);
ReadFile(LogFile->hFile,
if(!RecBuf)
{
DPRINT1("Can't allocate heap!\n");
return FALSE;
}
if(!ReadFile(LogFile->hFile,
RecBuf, RecBuf,
dwRecSize, dwRecSize,
&dwRead, &dwRead,
NULL); NULL))
{
DPRINT1("ReadFile() failed! %d\n", GetLastError());
HeapFree(MyHeap, 0, RecBuf);
return FALSE;
}
if(dwRead != dwRecSize) if(dwRead != dwRecSize)
{ {
@ -146,7 +206,7 @@ BOOL LogfInitializeExisting(PLOGFILE LogFile)
pdwRecSize2 = (PDWORD)(((PBYTE)RecBuf)+dwRecSize-4); pdwRecSize2 = (PDWORD)(((PBYTE)RecBuf)+dwRecSize-4);
if(*pdwRecSize2 != dwRecSize) if(*pdwRecSize2 != dwRecSize)
{ {
DPRINT("EventLog: Invalid size2 of record %d (%x) in %s\n", DPRINT1("Invalid size2 of record %d (%x) in %s\n",
dwRecordsNumber, dwRecordsNumber,
*pdwRecSize2, *pdwRecSize2,
LogFile->LogName); LogFile->LogName);
@ -158,6 +218,7 @@ BOOL LogfInitializeExisting(PLOGFILE LogFile)
if(!LogfAddOffsetInformation(LogFile, RecBuf->RecordNumber, dwFilePointer)) if(!LogfAddOffsetInformation(LogFile, RecBuf->RecordNumber, dwFilePointer))
{ {
DPRINT1("LogfAddOffsetInformation() failed!\n");
HeapFree(MyHeap, 0, RecBuf); HeapFree(MyHeap, 0, RecBuf);
return FALSE; return FALSE;
} }
@ -168,13 +229,28 @@ BOOL LogfInitializeExisting(PLOGFILE LogFile)
LogFile->Header.NextRecord = dwRecordsNumber+1; LogFile->Header.NextRecord = dwRecordsNumber+1;
LogFile->Header.OldestRecord = dwRecordsNumber ? 1 : 0; //FIXME LogFile->Header.OldestRecord = dwRecordsNumber ? 1 : 0; //FIXME
SetFilePointer(LogFile->hFile, 0, 0, FILE_CURRENT); if(!SetFilePointer(LogFile->hFile, 0, NULL, FILE_CURRENT) ==
WriteFile(LogFile->hFile, INVALID_SET_FILE_POINTER)
{
DPRINT1("SetFilePointer() failed! %d\n", GetLastError());
return FALSE;
}
if(!WriteFile(LogFile->hFile,
&LogFile->Header, &LogFile->Header,
sizeof(FILE_HEADER), sizeof(FILE_HEADER),
&dwRead, &dwRead,
NULL); NULL))
FlushFileBuffers(LogFile->hFile); {
DPRINT1("WriteFile failed! %d\n", GetLastError());
return FALSE;
}
if(!FlushFileBuffers(LogFile->hFile))
{
DPRINT1("FlushFileBuffers failed! %d\n", GetLastError());
return FALSE;
}
return TRUE; return TRUE;
} }
@ -190,7 +266,7 @@ PLOGFILE LogfCreate(WCHAR *LogName,
sizeof(LOGFILE)); sizeof(LOGFILE));
if(!LogFile) if(!LogFile)
{ {
DbgPrint("EventLog: Can't allocate heap\n"); DPRINT1("Can't allocate heap!\n");
return NULL; return NULL;
} }
@ -205,51 +281,43 @@ PLOGFILE LogfCreate(WCHAR *LogName,
if(LogFile->hFile == INVALID_HANDLE_VALUE) if(LogFile->hFile == INVALID_HANDLE_VALUE)
{ {
DPRINT("Can't create file %S.\n", FileName); DPRINT1("Can't create file %S.\n", FileName);
HeapFree(MyHeap, 0, LogFile); HeapFree(MyHeap, 0, LogFile);
return NULL; return NULL;
} }
bCreateNew = GetLastError() == ERROR_ALREADY_EXISTS ? FALSE : TRUE; bCreateNew = (GetLastError() == ERROR_ALREADY_EXISTS) ? FALSE : TRUE;
LogFile->LogName = HeapAlloc(MyHeap, LogFile->LogName = HeapAlloc(MyHeap,
HEAP_ZERO_MEMORY, HEAP_ZERO_MEMORY,
(lstrlenW(LogName)+1)*sizeof(WCHAR)); (lstrlenW(LogName)+1)*sizeof(WCHAR));
if(LogFile->LogName)
lstrcpyW(LogFile->LogName, LogName); if(LogFile->LogName) lstrcpyW(LogFile->LogName, LogName);
else else
{ {
DPRINT("EventLog: Can't allocate heap\n"); DPRINT1("Can't allocate heap\n");
HeapFree(MyHeap, 0, LogFile); HeapFree(MyHeap, 0, LogFile);
return NULL; return NULL;
} }
LogFile->FileName = HeapAlloc(MyHeap, LogFile->FileName = HeapAlloc(MyHeap,
HEAP_ZERO_MEMORY, HEAP_ZERO_MEMORY,
(lstrlenW(FileName)+1)*sizeof(WCHAR)); (lstrlenW(FileName)+1)*sizeof(WCHAR));
if(LogFile->FileName)
lstrcpyW(LogFile->FileName, FileName); if(LogFile->FileName) lstrcpyW(LogFile->FileName, FileName);
else else
{ {
DPRINT("EventLog: Can't allocate heap\n"); DPRINT1("Can't allocate heap\n");
HeapFree(MyHeap, 0, LogFile->LogName); goto fail;
HeapFree(MyHeap, 0, LogFile);
return NULL;
} }
LogFile->OffsetInfo = (PEVENT_OFFSET_INFO) LogFile->OffsetInfo = (PEVENT_OFFSET_INFO)
HeapAlloc(MyHeap, HeapAlloc(MyHeap, HEAP_ZERO_MEMORY, sizeof(EVENT_OFFSET_INFO)*64);
HEAP_ZERO_MEMORY,
sizeof(EVENT_OFFSET_INFO)*64);
if(!LogFile->OffsetInfo) if(!LogFile->OffsetInfo)
{ {
DPRINT("EventLog: Can't allocate heap\n"); DPRINT1("Can't allocate heap\n");
HeapFree(MyHeap, 0, LogFile->FileName); goto fail;
HeapFree(MyHeap, 0, LogFile->LogName);
HeapFree(MyHeap, 0, LogFile);
return NULL;
} }
LogFile->OffsetInfoSize = 64; LogFile->OffsetInfoSize = 64;
@ -258,18 +326,21 @@ PLOGFILE LogfCreate(WCHAR *LogName,
bResult = LogfInitializeNew(LogFile); bResult = LogfInitializeNew(LogFile);
else bResult = LogfInitializeExisting(LogFile); else bResult = LogfInitializeExisting(LogFile);
if(!bResult) if(!bResult) goto fail;
{
HeapFree(MyHeap, 0, LogFile->OffsetInfo);
HeapFree(MyHeap, 0, LogFile->FileName);
HeapFree(MyHeap, 0, LogFile->LogName);
HeapFree(MyHeap, 0, LogFile);
return NULL;
}
InitializeCriticalSection(&LogFile->cs); InitializeCriticalSection(&LogFile->cs);
LogfListAddItem(LogFile); LogfListAddItem(LogFile);
return LogFile; return LogFile;
fail:
if(LogFile)
{
if(LogFile->OffsetInfo) HeapFree(MyHeap, 0, LogFile->OffsetInfo);
if(LogFile->FileName) HeapFree(MyHeap, 0, LogFile->FileName);
if(LogFile->LogName) HeapFree(MyHeap, 0, LogFile->LogName);
HeapFree(MyHeap, 0, LogFile);
}
return NULL;
} }
VOID LogfClose(PLOGFILE LogFile) VOID LogfClose(PLOGFILE LogFile)
@ -445,8 +516,21 @@ BOOL LogfReadEvent(PLOGFILE LogFile,
return FALSE; return FALSE;
} }
SetFilePointer(LogFile->hFile, dwOffset, NULL, FILE_BEGIN); if(SetFilePointer(LogFile->hFile, dwOffset, NULL, FILE_BEGIN)
ReadFile(LogFile->hFile, &dwRecSize, sizeof(DWORD), &dwRead, NULL); == INVALID_SET_FILE_POINTER)
{
DPRINT1("SetFilePointer() failed! %d\n", GetLastError());
LeaveCriticalSection(&LogFile->cs);
return FALSE;
}
if(!ReadFile(LogFile->hFile, &dwRecSize, sizeof(DWORD), &dwRead, NULL))
{
DPRINT1("ReadFile() failed! %d\n", GetLastError());
LeaveCriticalSection(&LogFile->cs);
return FALSE;
}
if(dwRecSize > BufSize) if(dwRecSize > BufSize)
{ {
*BytesRead = 0; *BytesRead = 0;
@ -456,12 +540,23 @@ BOOL LogfReadEvent(PLOGFILE LogFile,
return FALSE; return FALSE;
} }
SetFilePointer(LogFile->hFile, if(SetFilePointer(LogFile->hFile,
-((LONG)sizeof(DWORD)), -((LONG)sizeof(DWORD)),
NULL, NULL,
FILE_CURRENT); FILE_CURRENT) == INVALID_SET_FILE_POINTER)
{
DPRINT1("SetFilePointer() failed! %d\n", GetLastError());
LeaveCriticalSection(&LogFile->cs);
return FALSE;
}
if(!ReadFile(LogFile->hFile, Buffer, dwRecSize, &dwRead, NULL))
{
DPRINT1("ReadFile() failed! %d\n", GetLastError());
LeaveCriticalSection(&LogFile->cs);
return FALSE;
}
ReadFile(LogFile->hFile, Buffer, dwRecSize, &dwRead, NULL);
dwBufferUsage+=dwRead; dwBufferUsage+=dwRead;
while(dwBufferUsage<BufSize) while(dwBufferUsage<BufSize)
@ -473,20 +568,43 @@ BOOL LogfReadEvent(PLOGFILE LogFile,
dwOffset = LogfOffsetByNumber(LogFile, dwRecNum); dwOffset = LogfOffsetByNumber(LogFile, dwRecNum);
if(!dwOffset) break; if(!dwOffset) break;
SetFilePointer(LogFile->hFile, dwOffset, NULL, FILE_BEGIN); if(SetFilePointer(LogFile->hFile, dwOffset, NULL, FILE_BEGIN)
ReadFile(LogFile->hFile, &dwRecSize, sizeof(DWORD), &dwRead, NULL); == INVALID_SET_FILE_POINTER)
{
DPRINT1("SetFilePointer() failed! %d\n", GetLastError());
LeaveCriticalSection(&LogFile->cs);
return FALSE;
}
if(!ReadFile(LogFile->hFile, &dwRecSize, sizeof(DWORD), &dwRead, NULL))
{
DPRINT1("ReadFile() failed! %d\n", GetLastError());
LeaveCriticalSection(&LogFile->cs);
return FALSE;
}
if(dwBufferUsage+dwRecSize>BufSize)break; if(dwBufferUsage+dwRecSize>BufSize)break;
SetFilePointer(LogFile->hFile, if(SetFilePointer(LogFile->hFile,
-((LONG)sizeof(DWORD)), -((LONG)sizeof(DWORD)),
NULL, NULL,
FILE_CURRENT); FILE_CURRENT) == INVALID_SET_FILE_POINTER)
{
DPRINT1("SetFilePointer() failed! %d\n", GetLastError());
LeaveCriticalSection(&LogFile->cs);
return FALSE;
}
ReadFile(LogFile->hFile, if(!ReadFile(LogFile->hFile,
Buffer+dwBufferUsage, Buffer+dwBufferUsage,
dwRecSize, dwRecSize,
&dwRead, &dwRead,
NULL); NULL))
{
DPRINT1("ReadFile() failed! %d\n", GetLastError());
LeaveCriticalSection(&LogFile->cs);
return FALSE;
}
dwBufferUsage+=dwRead; dwBufferUsage+=dwRead;
} }
@ -503,7 +621,6 @@ BOOL LogfWriteData(PLOGFILE LogFile,
DWORD dwWritten; DWORD dwWritten;
SYSTEMTIME st; SYSTEMTIME st;
EOF_RECORD EofRec; EOF_RECORD EofRec;
BOOL bResult;
if(!Buffer) if(!Buffer)
{ {
@ -515,11 +632,18 @@ BOOL LogfWriteData(PLOGFILE LogFile,
EnterCriticalSection(&LogFile->cs); EnterCriticalSection(&LogFile->cs);
SetFilePointer(LogFile->hFile, LogFile->Header.EofOffset, NULL, FILE_BEGIN); if(SetFilePointer(LogFile->hFile,
WriteFile(LogFile->hFile, Buffer, BufSize, &dwWritten, NULL); LogFile->Header.EofOffset,
NULL, FILE_BEGIN) == INVALID_SET_FILE_POINTER)
if(BufSize != dwWritten)
{ {
DPRINT1("SetFilePointer() failed! %d\n", GetLastError());
LeaveCriticalSection(&LogFile->cs);
return FALSE;
}
if(!WriteFile(LogFile->hFile, Buffer, BufSize, &dwWritten, NULL))
{
DPRINT1("WriteFile() failed! %d\n", GetLastError());
LeaveCriticalSection(&LogFile->cs); LeaveCriticalSection(&LogFile->cs);
return FALSE; return FALSE;
} }
@ -549,24 +673,41 @@ BOOL LogfWriteData(PLOGFILE LogFile,
EofRec.StartOffset = LogFile->Header.FirstRecordOffset; EofRec.StartOffset = LogFile->Header.FirstRecordOffset;
EofRec.EndOffset = LogFile->Header.EofOffset; EofRec.EndOffset = LogFile->Header.EofOffset;
WriteFile(LogFile->hFile, &EofRec, sizeof(EOF_RECORD), &dwWritten, NULL); if(!WriteFile(LogFile->hFile,
&EofRec,
sizeof(EOF_RECORD),
&dwWritten, NULL))
{
DPRINT1("WriteFile() failed! %d\n", GetLastError());
LeaveCriticalSection(&LogFile->cs);
return FALSE;
}
SetFilePointer(LogFile->hFile, 0, NULL, FILE_BEGIN); if(SetFilePointer(LogFile->hFile, 0, NULL, FILE_BEGIN)
bResult = WriteFile(LogFile->hFile, == INVALID_SET_FILE_POINTER)
{
DPRINT1("SetFilePointer() failed! %d\n", GetLastError());
LeaveCriticalSection(&LogFile->cs);
return FALSE;
}
if(!WriteFile(LogFile->hFile,
&LogFile->Header, &LogFile->Header,
sizeof(FILE_HEADER), sizeof(FILE_HEADER),
&dwWritten, &dwWritten,
NULL); NULL))
if(!bResult)
{ {
DPRINT("WriteFile failed! LastError = %d\n", GetLastError()); DPRINT1("WriteFile failed! LastError = %d\n", GetLastError());
LeaveCriticalSection(&LogFile->cs); LeaveCriticalSection(&LogFile->cs);
return FALSE; return FALSE;
} }
if(!FlushFileBuffers(LogFile->hFile)) if(!FlushFileBuffers(LogFile->hFile))
DPRINT("FlushFileBuffers() failed!\n"); {
LeaveCriticalSection(&LogFile->cs);
DPRINT1("FlushFileBuffers() failed! %d\n", GetLastError());
return FALSE;
}
LeaveCriticalSection(&LogFile->cs); LeaveCriticalSection(&LogFile->cs);
return TRUE; return TRUE;
@ -603,7 +744,7 @@ BOOL LogfAddOffsetInformation(PLOGFILE LogFile,
sizeof(EVENT_OFFSET_INFO)); sizeof(EVENT_OFFSET_INFO));
if(!NewOffsetInfo) if(!NewOffsetInfo)
{ {
DbgPrint("EventLog: Can't reallocate heap.\n"); DPRINT1("Can't reallocate heap.\n");
return FALSE; return FALSE;
} }