// Unpacking the file here, save the result in a temporary file
m_strTempFileName = pszFileNameInit;
- if (!FileTransform::Unpacking(infoUnpacker, m_strTempFileName, sToFindUnpacker))
+ if (!FileTransform::Unpacking(infoUnpacker, &m_unpackerSubcode, m_strTempFileName, sToFindUnpacker))
{
InitNew(); // leave crystal editor in valid, empty state
return FileLoadResult::FRESULT_ERROR_UNPACK;
}
- m_unpackerSubcode = infoUnpacker->m_subcode;
// we use the same unpacker for both files, so it must be defined after first file
ASSERT(infoUnpacker->m_PluginOrPredifferMode != PLUGIN_MODE::PLUGIN_AUTO);
// we need an unpacker/packer, at least a "do nothing" one
ASSERT(infoUnpacker != nullptr);
// repack the file here, overwrite the temporary file we did save in
- String csTempFileName = sIntermediateFilename;
- infoUnpacker->m_subcode = m_unpackerSubcode;
- if (!FileTransform::Packing(csTempFileName, *infoUnpacker))
+ bSaveSuccess = FileTransform::Packing(sIntermediateFilename, pszFileName, *infoUnpacker, m_unpackerSubcode);
+ try
{
- try
- {
- TFile(sIntermediateFilename).remove();
- }
- catch (Exception& e)
- {
- LogErrorStringUTF8(e.displayText());
- }
- // returns now, don't overwrite the original file
- return SAVE_PACK_FAILED;
+ TFile(sIntermediateFilename).remove();
}
- // the temp filename may have changed during packing
- if (csTempFileName != sIntermediateFilename)
+ catch (Exception& e)
{
- try
- {
- TFile(sIntermediateFilename).remove();
- }
- catch (Exception& e)
- {
- LogErrorStringUTF8(e.displayText());
- }
- sIntermediateFilename = csTempFileName;
+ LogErrorStringUTF8(e.displayText());
}
-
- // Write tempfile over original file
- try
+ if (!bSaveSuccess)
{
- TFile file1(sIntermediateFilename);
- file1.copyTo(pszFileName);
- file1.remove();
- if (bClearModifiedFlag)
- {
- SetModified(false);
- m_nSyncPosition = m_nUndoPosition;
- }
- bSaveSuccess = true;
-
- // remember revision number on save
- m_dwRevisionNumberOnSave = m_dwCurrentRevisionNumber;
-
- // redraw line revision marks
- UpdateViews (nullptr, nullptr, UPDATE_FLAGSONLY);
+ // returns now, don't overwrite the original file
+ return SAVE_PACK_FAILED;
}
- catch (Exception& e)
+
+ if (bClearModifiedFlag)
{
- LogErrorStringUTF8(e.displayText());
+ SetModified(false);
+ m_nSyncPosition = m_nUndoPosition;
}
+
+ // remember revision number on save
+ m_dwRevisionNumberOnSave = m_dwCurrentRevisionNumber;
+
+ // redraw line revision marks
+ UpdateViews (nullptr, nullptr, UPDATE_FLAGSONLY);
}
else
{