65 lines
1.5 KiB
C++
65 lines
1.5 KiB
C++
#include "StdAfx.h"
|
|
#if defined(CHECK_LATEST_DATA_FILES)
|
|
#include "CheckLatestFiles.h"
|
|
#include "resource.h"
|
|
|
|
static struct SCHECKFILELIST
|
|
{
|
|
LPCSTR szFileName;
|
|
DWORD dwCRC32;
|
|
ULONGLONG ullSize;
|
|
} s_astCRC32FileList[] = {
|
|
#include "CRC32_inc.h"
|
|
{ NULL, 0 }
|
|
};
|
|
|
|
static bool gs_bQuit = false;
|
|
|
|
bool CheckLatestFiles_PollEvent( void )
|
|
{
|
|
return gs_bQuit;
|
|
}
|
|
|
|
// µ¥ÀÌŸ ÆÄÀÏ CRC32 °ª °Ë»çÇϱâ
|
|
bool CheckFileCRC32( LPCSTR szFileName, DWORD dwCRC32 )
|
|
{
|
|
char szMessage[256];
|
|
|
|
if (_access( szFileName, 4 ) != 0) {
|
|
_snprintf(szMessage, sizeof(szMessage)/sizeof(szMessage[0])-1, ApplicationStringTable_GetStringz(IDS_ERR_CANNOT_READ_FILE, "ERR_CANNOT_READ_FILE"), szFileName);
|
|
ApplicationSetErrorString(szMessage);
|
|
return false;
|
|
}
|
|
DWORD dwLocalCRC32 = GetFileCRC32(szFileName);
|
|
|
|
if (dwCRC32 != dwLocalCRC32) {
|
|
_snprintf(szMessage, sizeof(szMessage)/sizeof(szMessage[0])-1, ApplicationStringTable_GetStringz(IDS_ERR_NOT_LATEST_FILE, "ERR_NOT_LATEST_FILE"), szFileName);
|
|
ApplicationSetErrorString(szMessage);
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
UINT CALLBACK CheckLatestFilesEntry(void * pThis)
|
|
{
|
|
::Sleep( 500 );
|
|
for( int i=0; s_astCRC32FileList[i].szFileName != NULL; i++ ) {
|
|
if (false == CheckFileCRC32(s_astCRC32FileList[i].szFileName, s_astCRC32FileList[i].dwCRC32)) {
|
|
gs_bQuit = true;
|
|
break;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
bool CheckLatestFiles( void )
|
|
{
|
|
unsigned int uThreadID = 0;
|
|
|
|
HANDLE hThread = (HANDLE) _beginthreadex(NULL, 0, CheckLatestFilesEntry, NULL, 0, &uThreadID);
|
|
::SetThreadPriority(hThread, THREAD_PRIORITY_LOWEST);
|
|
return true;
|
|
}
|
|
#endif
|