Index: src/libchcore/TSubTaskCopyMove.cpp =================================================================== diff -u -N -ra0de3c317cb73a42ed4efbdf29b3a87243b03df4 -rc0d9a798f9fbbeda239b84721ed864f9727e1ddc --- src/libchcore/TSubTaskCopyMove.cpp (.../TSubTaskCopyMove.cpp) (revision a0de3c317cb73a42ed4efbdf29b3a87243b03df4) +++ src/libchcore/TSubTaskCopyMove.cpp (.../TSubTaskCopyMove.cpp) (revision c0d9a798f9fbbeda239b84721ed864f9727e1ddc) @@ -61,7 +61,6 @@ TBufferSizes tBufferSizes; TOverlappedMemoryPoolPtr spMemoryPool; // buffer handling bool bOnlyCreate = false; // flag from configuration - skips real copying - only create - bool bProcessed = false; // has the element been processed ? (false if skipped) }; /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -142,7 +141,6 @@ // create a buffer of size m_nBufferSize CUSTOM_COPY_PARAMS ccp; - ccp.bProcessed = false; ccp.bOnlyCreate = GetTaskPropValue(rConfig); // remove changes in buffer sizes to avoid re-creation later @@ -225,15 +223,21 @@ { // start copying/moving file ccp.spSrcFile = spFileInfo; - ccp.bProcessed = false; // copy data eResult = CustomCopyFileFB(spFeedbackHandler, &ccp); - if(eResult != TSubTaskBase::eSubResult_Continue) + if (eResult == TSubTaskBase::eSubResult_SkipFile) + { + spFileInfo->MarkAsProcessed(false); + AdjustProcessedSizeForSkip(spFileInfo); + + eResult = TSubTaskBase::eSubResult_Continue; + } + else if(eResult != TSubTaskBase::eSubResult_Continue) return eResult; + else + spFileInfo->MarkAsProcessed(true); - spFileInfo->MarkAsProcessed(ccp.bProcessed); - // if moving - delete file (only if config flag is set) if(bMove && spFileInfo->IsProcessed() && !GetTaskPropValue(rConfig)) { @@ -354,12 +358,9 @@ TFilesystemFileFeedbackWrapperPtr spSrcFileWrapper(std::make_shared(fileSrc, spFeedbackHandler, GetContext().GetLogFileData(), rThreadController, spFilesystem)); TFilesystemFileFeedbackWrapperPtr spDstFileWrapper(std::make_shared(fileDst, spFeedbackHandler, GetContext().GetLogFileData(), rThreadController, spFilesystem)); - bool bSkip = false; - TSubTaskBase::ESubOperationResult eResult = OpenSrcAndDstFilesFB(*spSrcFileWrapper, *spDstFileWrapper, pData, bSkip); + TSubTaskBase::ESubOperationResult eResult = OpenSrcAndDstFilesFB(*spSrcFileWrapper, *spDstFileWrapper, pData); if(eResult != TSubTaskBase::eSubResult_Continue) return eResult; - else if(bSkip) - return TSubTaskBase::eSubResult_Continue; // recreate buffer if needed AdjustBufferIfNeeded(pData->spMemoryPool, pData->tBufferSizes); @@ -380,7 +381,7 @@ TOverlappedReaderWriterFB tReaderWriter(spSrcFileWrapper, pData->spSrcFile, spDstFileWrapper, m_spSubTaskStats, m_spLog->GetLogFileData(), pData->spMemoryPool, ullNextReadPos, dwCurrentBufferSize); - eResult = tReaderWriter.Start(rThreadController.GetKillThreadHandle(), pData->bProcessed); + eResult = tReaderWriter.Start(rThreadController.GetKillThreadHandle()); return eResult; } @@ -391,12 +392,10 @@ } TSubTaskCopyMove::ESubOperationResult TSubTaskCopyMove::OpenSrcAndDstFilesFB(TFilesystemFileFeedbackWrapper& rSrcFile, TFilesystemFileFeedbackWrapper& rDstFile, - CUSTOM_COPY_PARAMS* pData, bool& bSkip) + CUSTOM_COPY_PARAMS* pData) { IFilesystemPtr spFilesystem = GetContext().GetLocalFilesystem(); - bSkip = false; - // first open the source file and handle any failures ESubOperationResult eResult = eSubResult_Continue; @@ -408,14 +407,9 @@ file_size_t fsOldSize = pData->spSrcFile->GetLength64(); file_size_t fsNewSize = 0; - eResult = rSrcFile.GetFileSize(fsNewSize, bSkip); + eResult = rSrcFile.GetFileSize(fsNewSize); if(eResult != eSubResult_Continue) return eResult; - else if(bSkip) - { - pData->bProcessed = false; - return eSubResult_Continue; - } if(fsNewSize != fsOldSize) { @@ -430,14 +424,9 @@ bool bDstFileFreshlyCreated = rDstFile.IsFreshlyCreated(); file_size_t fsDstFileSize = 0; - eResult = rDstFile.GetFileSize(fsDstFileSize, bSkip); + eResult = rDstFile.GetFileSize(fsDstFileSize); if(eResult != eSubResult_Continue) return eResult; - else if(bSkip) - { - pData->bProcessed = false; - return eSubResult_Continue; - } // try to resume if possible bool bCanSilentResume = false; @@ -453,14 +442,9 @@ if(!bCanSilentResume && !bDstFileFreshlyCreated && fsDstFileSize > 0) { bool bShouldAppend = false; - eResult = rDstFile.HandleFileAlreadyExistsFB(pData->spSrcFile, bShouldAppend, bSkip); + eResult = rDstFile.HandleFileAlreadyExistsFB(pData->spSrcFile, bShouldAppend); if(eResult != eSubResult_Continue) return eResult; - else if(bSkip) - { - pData->bProcessed = false; - return eSubResult_Continue; - } if(bShouldAppend) ullSeekTo = std::min(fsDstFileSize, fsNewSize); @@ -499,14 +483,9 @@ if(!bDstFileFreshlyCreated) { // if destination file was opened (as opposed to newly created) - eResult = rDstFile.TruncateFileFB(fsMoveTo, bSkip); + eResult = rDstFile.TruncateFileFB(fsMoveTo); if(eResult != TSubTaskBase::eSubResult_Continue) return eResult; - else if(bSkip) - { - pData->bProcessed = false; - return TSubTaskBase::eSubResult_Continue; - } } // at this point user already decided that he want to write data into destination file;