|
|
//
// FILELIST.C
//
#include "sigverif.h"
LPTSTR MyStrStr( LPTSTR lpString, LPTSTR lpSubString ) { if (!lpString || !lpSubString) { return NULL; }
return (StrStrI(lpString, lpSubString)); }
void InsertFileNodeIntoList( LPFILENODE lpFileNode ) { LPFILENODE lpTempNode = g_App.lpFileList; LPFILENODE lpPrevNode = NULL; INT iRet;
if (!lpFileNode) { return; }
if (!g_App.lpFileList) { //
// Initialize the global file lists
//
g_App.lpFileList = lpFileNode; g_App.lpFileLast = lpFileNode; } else { for(lpTempNode=g_App.lpFileList;lpTempNode;lpTempNode=lpTempNode->next) { //
// Insert items sorted by directory and then filename
//
iRet = lstrcmp(lpTempNode->lpDirName, lpFileNode->lpDirName); if (iRet == 0) { //
// If the directory names match, key off the filename
//
iRet = lstrcmp(lpTempNode->lpFileName, lpFileNode->lpFileName); }
if (iRet >= 0) { if (!lpPrevNode) { //
// Insert at the head of the list
//
lpFileNode->next = lpTempNode; g_App.lpFileList = lpFileNode; return; } else { //
// Inserting between lpPrevNode and lpTempNode
//
lpFileNode->next = lpTempNode; lpPrevNode->next = lpFileNode; return; } }
lpPrevNode = lpTempNode; }
//
// There were no matches, so insert this item at the end of the list
//
g_App.lpFileLast->next = lpFileNode; g_App.lpFileLast = lpFileNode; } }
BOOL IsFileAlreadyInList( LPTSTR lpDirName, LPTSTR lpFileName ) { LPFILENODE lpFileNode;
CharLowerBuff(lpDirName, lstrlen(lpDirName)); CharLowerBuff(lpFileName, lstrlen(lpFileName));
for(lpFileNode=g_App.lpFileList;lpFileNode;lpFileNode=lpFileNode->next) {
if (!lstrcmp(lpFileNode->lpFileName, lpFileName) && !lstrcmp(lpFileNode->lpDirName, lpDirName)) { return TRUE; } }
return FALSE; }
//
// Free all the memory allocated in a single File Node.
//
void DestroyFileNode( LPFILENODE lpFileNode ) { if (!lpFileNode) { return; }
if (lpFileNode->lpFileName) { FREE(lpFileNode->lpFileName); }
if (lpFileNode->lpDirName) { FREE(lpFileNode->lpDirName); }
if (lpFileNode->lpVersion) { FREE(lpFileNode->lpVersion); }
if (lpFileNode->lpCatalog) { FREE(lpFileNode->lpCatalog); }
if (lpFileNode->lpSignedBy) { FREE(lpFileNode->lpSignedBy); }
if (lpFileNode->lpTypeName) { FREE(lpFileNode->lpTypeName); }
if (lpFileNode) { FREE(lpFileNode); lpFileNode = NULL; } }
//
// Free all the memory allocated in the g_App.lpFileList.
//
void DestroyFileList( BOOL bClear ) { LPFILENODE lpFileNode;
while(g_App.lpFileList) {
lpFileNode = g_App.lpFileList->next; DestroyFileNode(g_App.lpFileList); g_App.lpFileList = lpFileNode; }
g_App.lpFileLast = NULL;
if (bClear) { g_App.dwFiles = 0; g_App.dwSigned = 0; g_App.dwUnsigned = 0; } }
LPFILENODE CreateFileNode( LPTSTR lpDirectory, LPTSTR lpFileName ) { DWORD Err = ERROR_SUCCESS; LPFILENODE lpFileNode; TCHAR szDirName[MAX_PATH]; TCHAR szFullPathName[MAX_PATH]; FILETIME ftLocalTime; WIN32_FILE_ATTRIBUTE_DATA faData; BOOL bRet; ULONG BufCbSize; lpFileNode = (LPFILENODE) MALLOC(sizeof(FILENODE));
if (!lpFileNode) { Err = ERROR_NOT_ENOUGH_MEMORY; goto clean0; }
BufCbSize = (lstrlen(lpFileName) + 1) * sizeof(TCHAR); lpFileNode->lpFileName = (LPTSTR)MALLOC(BufCbSize);
if (!lpFileNode->lpFileName) { Err = ERROR_NOT_ENOUGH_MEMORY; goto clean0; } StringCbCopy(lpFileNode->lpFileName, BufCbSize, lpFileName); CharLowerBuff(lpFileNode->lpFileName, lstrlen(lpFileNode->lpFileName));
if (lpDirectory) {
BufCbSize = (lstrlen(lpDirectory) + 1) * sizeof(TCHAR); lpFileNode->lpDirName = (LPTSTR)MALLOC(BufCbSize); if (!lpFileNode->lpDirName) { Err = ERROR_NOT_ENOUGH_MEMORY; goto clean0; } StringCbCopy(lpFileNode->lpDirName, BufCbSize, lpDirectory); CharLowerBuff(lpFileNode->lpDirName, lstrlen(lpFileNode->lpDirName)); } else {
if (GetCurrentDirectory(cA(szDirName), szDirName) == 0) { Err = GetLastError(); goto clean0; }
CharLowerBuff(szDirName, lstrlen(szDirName));
BufCbSize = (lstrlen(szDirName) + 1) * sizeof(TCHAR); lpFileNode->lpDirName = (LPTSTR)MALLOC(BufCbSize);
if (!lpFileNode->lpDirName) { Err = ERROR_NOT_ENOUGH_MEMORY; goto clean0; } StringCbCopy(lpFileNode->lpDirName, BufCbSize, szDirName); CharLowerBuff(lpFileNode->lpDirName, lstrlen(lpFileNode->lpDirName)); }
//
// Store away the last access time for logging purposes.
//
if (SUCCEEDED(StringCchCopy(szFullPathName, cA(szFullPathName), lpFileNode->lpDirName)) && pSetupConcatenatePaths(szFullPathName, lpFileName, cA(szFullPathName), NULL)) { ZeroMemory(&faData, sizeof(WIN32_FILE_ATTRIBUTE_DATA));
bRet = GetFileAttributesEx(szFullPathName, GetFileExInfoStandard, &faData); if (bRet) { FileTimeToLocalFileTime(&faData.ftLastWriteTime, &ftLocalTime); FileTimeToSystemTime(&ftLocalTime, &lpFileNode->LastModified); } }
clean0:
if (Err != ERROR_SUCCESS) { //
// If we get here then we weren't able to allocate all of the memory needed
// for this structure, so free up any memory we were able to allocate and
// reutrn NULL.
//
if (lpFileNode) { if (lpFileNode->lpFileName) { FREE(lpFileNode->lpFileName); } if (lpFileNode->lpDirName) { FREE(lpFileNode->lpDirName); } FREE(lpFileNode); }
lpFileNode = NULL; }
SetLastError(Err); return lpFileNode; }
|