BOOL UpdateProgressBar (__int64 byteOffset) { return UpdateProgressBarProc (byteOffset); }
void __cdecl ExtractAllFilesThread (void *hwndDlg) { int fileNo; BOOL bSuccess = FALSE; char packageFile [TC_MAX_PATH]; InvalidateRect (GetDlgItem (GetParent (hwndDlg), IDD_INSTL_DLG), NULL, TRUE); ClearLogWindow (hwndDlg); GetModuleFileName (NULL, packageFile, sizeof (packageFile)); if (!(bSuccess = SelfExtractInMemory (packageFile))) goto eaf_end; if (mkfulldir (DestExtractPath, TRUE) != 0) { if (mkfulldir (DestExtractPath, FALSE) != 0) { wchar_t szTmp[TC_MAX_PATH]; handleWin32Error (hwndDlg); wsprintfW (szTmp, GetString ("CANT_CREATE_FOLDER"), DestExtractPath); MessageBoxW (hwndDlg, szTmp, lpszTitle, MB_ICONHAND); bSuccess = FALSE; goto eaf_end; } } for (fileNo = 0; fileNo < NBR_COMPRESSED_FILES; fileNo++) { char fileName [TC_MAX_PATH] = {0}; char filePath [TC_MAX_PATH] = {0}; // Filename strncpy (fileName, Decompressed_Files[fileNo].fileName, Decompressed_Files[fileNo].fileNameLength); fileName [Decompressed_Files[fileNo].fileNameLength] = 0; strcpy (filePath, DestExtractPath); strcat (filePath, fileName); StatusMessageParam (hwndDlg, "EXTRACTING_VERB", filePath); // Write the file if (!SaveBufferToFile ( Decompressed_Files[fileNo].fileContent, filePath, Decompressed_Files[fileNo].fileLength, FALSE)) { wchar_t szTmp[512]; _snwprintf (szTmp, sizeof (szTmp) / 2, GetString ("CANNOT_WRITE_FILE_X"), filePath); MessageBoxW (hwndDlg, szTmp, lpszTitle, MB_ICONERROR | MB_SETFOREGROUND | MB_TOPMOST); bSuccess = FALSE; goto eaf_end; } UpdateProgressBarProc ((int) (100 * ((float) fileNo / NBR_COMPRESSED_FILES))); } eaf_end: FreeAllFileBuffers(); if (bSuccess) PostMessage (MainDlg, TC_APPMSG_EXTRACTION_SUCCESS, 0, 0); else PostMessage (MainDlg, TC_APPMSG_EXTRACTION_FAILURE, 0, 0); }