|
|
//
// FILELIST.C
//
#include "sigverif.h"
LPTSTR MyStrStr(LPTSTR lpString, LPTSTR lpSubString) { if (!lpString || !lpSubString) { return NULL; }
//return (_tcsstr(lpString, lpSubString));
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(void) { LPFILENODE lpFileNode;
while(g_App.lpFileList) { lpFileNode = g_App.lpFileList->next; DestroyFileNode(g_App.lpFileList); g_App.lpFileList = lpFileNode; }
g_App.lpFileLast = NULL; g_App.dwFiles = 0; g_App.dwSigned = 0; g_App.dwUnsigned = 0; }
LPFILENODE CreateFileNode(LPTSTR lpDirectory, LPTSTR lpFileName) { LPFILENODE lpFileNode; TCHAR szDirName[MAX_PATH]; FILETIME ftLocalTime; WIN32_FILE_ATTRIBUTE_DATA faData; BOOL bRet; GetCurrentDirectory(MAX_PATH, szDirName); CharLowerBuff(szDirName, lstrlen(szDirName));
lpFileNode = (LPFILENODE) MALLOC(sizeof(FILENODE));
if (lpFileNode) { lpFileNode->lpFileName = (LPTSTR) MALLOC((lstrlen(lpFileName) + 1) * sizeof(TCHAR));
if (!lpFileNode->lpFileName) { goto clean0; } lstrcpy(lpFileNode->lpFileName, lpFileName); CharLowerBuff(lpFileNode->lpFileName, lstrlen(lpFileNode->lpFileName)); if (lpDirectory) { lpFileNode->lpDirName = (LPTSTR) MALLOC((lstrlen(lpDirectory) + 1) * sizeof(TCHAR)); if (!lpFileNode->lpDirName) { goto clean0; } lstrcpy(lpFileNode->lpDirName, lpDirectory); CharLowerBuff(lpFileNode->lpDirName, lstrlen(lpFileNode->lpDirName)); } else { lpFileNode->lpDirName = (LPTSTR) MALLOC((lstrlen(szDirName) + 1) * sizeof(TCHAR));
if (!lpFileNode->lpDirName) { goto clean0; } lstrcpy(lpFileNode->lpDirName, szDirName); CharLowerBuff(lpFileNode->lpDirName, lstrlen(lpFileNode->lpDirName)); } if (lpDirectory) SetCurrentDirectory(lpDirectory); ZeroMemory(&faData, sizeof(WIN32_FILE_ATTRIBUTE_DATA)); bRet = GetFileAttributesEx(lpFileName, GetFileExInfoStandard, &faData); if (bRet) { // Store away the last access time for logging purposes.
FileTimeToLocalFileTime(&faData.ftLastWriteTime, &ftLocalTime); FileTimeToSystemTime(&ftLocalTime, &lpFileNode->LastModified); } } if (lpDirectory) SetCurrentDirectory(szDirName);
return lpFileNode;
clean0:
//
// 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
// reutnr NULL.
//
if (lpFileNode) { if (lpFileNode->lpFileName) { FREE(lpFileNode->lpFileName); }
if (lpFileNode->lpDirName) { FREE(lpFileNode->lpDirName); }
FREE(lpFileNode); }
return NULL; }
|