bool WINAPI SFileFlushArchive(HANDLE hMpq) { TMPQArchive * ha = (TMPQArchive *)hMpq; int nResultError = ERROR_SUCCESS; int nError; // Do nothing if 'hMpq' is bad parameter if (!IsValidMpqHandle(ha)) { SetLastError(ERROR_INVALID_HANDLE); return false; } // If the archive has been changed, update the changes on the disk drive. // Save listfile (if created), attributes (if created) and also save MPQ tables. if (ha->dwFlags & MPQ_FLAG_CHANGED) { nError = SListFileSaveToMpq(ha); if (nError != ERROR_SUCCESS) nResultError = nError; nError = SAttrFileSaveToMpq(ha); if (nError != ERROR_SUCCESS) nResultError = nError; nError = SaveMPQTables(ha); if (nError != ERROR_SUCCESS) nResultError = nError; } // Return the error if (nResultError != ERROR_SUCCESS) SetLastError(nResultError); return (nResultError == ERROR_SUCCESS); }
bool WINAPI SFileFlushArchive(HANDLE hMpq) { TMPQArchive * ha = (TMPQArchive *)hMpq; int nResultError = ERROR_SUCCESS; int nError; // Do nothing if 'hMpq' is bad parameter if(!IsValidMpqHandle(hMpq)) { SetLastError(ERROR_INVALID_HANDLE); return false; } // Indicate that we are saving MPQ internal structures ha->dwFlags |= MPQ_FLAG_SAVING_TABLES; // If the (listfile) has been invalidated, save it if(ha->dwFlags & MPQ_FLAG_LISTFILE_INVALID) { nError = SListFileSaveToMpq(ha); if(nError != ERROR_SUCCESS) nResultError = nError; } // If the (attributes) has been invalidated, save it if(ha->dwFlags & MPQ_FLAG_ATTRIBUTES_INVALID) { nError = SAttrFileSaveToMpq(ha); if(nError != ERROR_SUCCESS) nResultError = nError; } // Save HET table, BET table, hash table, block table, hi-block table if(ha->dwFlags & MPQ_FLAG_CHANGED) { nError = SaveMPQTables(ha); if(nError != ERROR_SUCCESS) nResultError = nError; } // We are no longer saving internal MPQ structures ha->dwFlags &= ~MPQ_FLAG_SAVING_TABLES; // Return the error if(nResultError != ERROR_SUCCESS) SetLastError(nResultError); return (nResultError == ERROR_SUCCESS); }
bool WINAPI SFileFlushArchive(HANDLE hMpq) { TMPQArchive * ha = (TMPQArchive *)hMpq; int nResultError = ERROR_SUCCESS; int nError; // Do nothing if 'hMpq' is bad parameter if(!IsValidMpqHandle(ha)) { SetLastError(ERROR_INVALID_HANDLE); return false; } // If the (listfile) has been invalidated, save it if(ha->dwFlags & MPQ_FLAG_INV_LISTFILE) { nError = SListFileSaveToMpq(ha); if(nError != ERROR_SUCCESS) nResultError = nError; } // If the (attributes) has been invalidated, save it if(ha->dwFlags & MPQ_FLAG_INV_ATTRIBUTES) { nError = SAttrFileSaveToMpq(ha); if(nError != ERROR_SUCCESS) nResultError = nError; } // Save HET table, BET table, hash table, block table, hi-block table if(ha->dwFlags & MPQ_FLAG_CHANGED) { nError = SaveMPQTables(ha); if(nError != ERROR_SUCCESS) nResultError = nError; } // Return the error if(nResultError != ERROR_SUCCESS) SetLastError(nResultError); return (nResultError == ERROR_SUCCESS); }
bool WINAPI SFileFlushArchive(HANDLE hMpq) { TMPQArchive * ha; int nResultError = ERROR_SUCCESS; int nError; // Do nothing if 'hMpq' is bad parameter if((ha = IsValidMpqHandle(hMpq)) == NULL) { SetLastError(ERROR_INVALID_HANDLE); return false; } // Only if the MPQ was changed if(ha->dwFlags & MPQ_FLAG_CHANGED) { // Indicate that we are saving MPQ internal structures ha->dwFlags |= MPQ_FLAG_SAVING_TABLES; // Defragment the file table. This will allow us to put the internal files to the end DefragmentFileTable(ha); // // Create each internal file // Note that the (signature) file is usually before (listfile) in the file table // if(ha->dwFlags & MPQ_FLAG_SIGNATURE_NEW) { nError = SSignFileCreate(ha); if(nError != ERROR_SUCCESS) nResultError = nError; } if(ha->dwFlags & MPQ_FLAG_LISTFILE_NEW) { nError = SListFileSaveToMpq(ha); if(nError != ERROR_SUCCESS) nResultError = nError; } if(ha->dwFlags & MPQ_FLAG_ATTRIBUTES_NEW) { nError = SAttrFileSaveToMpq(ha); if(nError != ERROR_SUCCESS) nResultError = nError; } // Save HET table, BET table, hash table, block table, hi-block table if(ha->dwFlags & MPQ_FLAG_CHANGED) { // Rebuild the HET table if(ha->pHetTable != NULL) RebuildHetTable(ha); // Save all MPQ tables first nError = SaveMPQTables(ha); if(nError != ERROR_SUCCESS) nResultError = nError; // If the archive has weak signature, we need to finish it if(ha->dwFileFlags3 != 0) { nError = SSignFileFinish(ha); if(nError != ERROR_SUCCESS) nResultError = nError; } } // We are no longer saving internal MPQ structures ha->dwFlags &= ~MPQ_FLAG_SAVING_TABLES; } // Return the error if(nResultError != ERROR_SUCCESS) SetLastError(nResultError); return (nResultError == ERROR_SUCCESS); }