Index: src/libchcore/TFakeFilesystemFile.cpp =================================================================== diff -u -N -r27c262eb9cae55720e10f4886af6b5a82cb94fe9 -r479ad4e8f81a68cbf6d1623cd9b1f3342d8cfdcc --- src/libchcore/TFakeFilesystemFile.cpp (.../TFakeFilesystemFile.cpp) (revision 27c262eb9cae55720e10f4886af6b5a82cb94fe9) +++ src/libchcore/TFakeFilesystemFile.cpp (.../TFakeFilesystemFile.cpp) (revision 479ad4e8f81a68cbf6d1623cd9b1f3342d8cfdcc) @@ -22,6 +22,7 @@ #include "ErrorCodes.h" #include "TFakeFilesystem.h" #include +#include "RoundingFunctions.h" namespace { @@ -57,11 +58,11 @@ delete pApcInfo; } - TFakeFilesystemFile::TFakeFilesystemFile(const TSmartPath& pathFile, TFakeFilesystem* pFilesystem) : + TFakeFilesystemFile::TFakeFilesystemFile(const TSmartPath& pathFile, bool bNoBuffering, TFakeFilesystem* pFilesystem) : m_pathFile(pathFile), m_pFilesystem(pFilesystem), m_bIsOpen(false), - m_bNoBuffering(false), + m_bNoBuffering(bNoBuffering), m_bModeReading(true) { if (!pFilesystem || pathFile.IsEmpty()) @@ -201,8 +202,14 @@ return true; } - bool TFakeFilesystemFile::Truncate(long long llNewSize) + file_size_t TFakeFilesystemFile::GetSeekPositionForResume(file_size_t fsLastAvailablePosition) { + file_size_t fsMove = (m_bNoBuffering ? RoundDown(fsLastAvailablePosition, MaxSectorSize) : fsLastAvailablePosition); + return fsMove; + } + + bool TFakeFilesystemFile::Truncate(file_size_t fsNewSize) + { if (!IsOpen()) THROW_CORE_EXCEPTION(eErr_InternalProblem); @@ -211,11 +218,11 @@ if (!spFileDesc) return false; - spFileDesc->GetFileInfo().SetLength64(llNewSize); + spFileDesc->GetFileInfo().SetLength64(fsNewSize); return true; } - bool TFakeFilesystemFile::OpenExistingForWriting(bool bNoBuffering) + bool TFakeFilesystemFile::OpenExistingForWriting() { TFakeFileDescriptionPtr spFileDesc = m_pFilesystem->FindFileByLocation(m_pathFile); if (!spFileDesc) @@ -224,13 +231,12 @@ Close(); m_bIsOpen = true; - m_bNoBuffering = bNoBuffering; m_bModeReading = false; return true; } - bool TFakeFilesystemFile::CreateNewForWriting(bool bNoBuffering) + bool TFakeFilesystemFile::CreateNewForWriting() { TFakeFileDescriptionPtr spFileDesc = m_pFilesystem->FindFileByLocation(m_pathFile); if(!spFileDesc) @@ -251,13 +257,12 @@ Close(); m_bIsOpen = true; - m_bNoBuffering = bNoBuffering; m_bModeReading = false; return true; } - bool TFakeFilesystemFile::OpenExistingForReading(bool bNoBuffering) + bool TFakeFilesystemFile::OpenExistingForReading() { TFakeFileDescriptionPtr spFileDesc = m_pFilesystem->FindFileByLocation(m_pathFile); if (!spFileDesc) @@ -266,7 +271,6 @@ Close(); m_bIsOpen = true; - m_bNoBuffering = bNoBuffering; m_bModeReading = true; return true;