Index: src/libchcore/TLocalFilesystem.cpp
===================================================================
diff -u -N -r3c343f2e7aa0d489706136e78f2f56cdd5d417a9 -rb75259a9158d8b46d747e20ab4960dd002adb4b1
--- src/libchcore/TLocalFilesystem.cpp	(.../TLocalFilesystem.cpp)	(revision 3c343f2e7aa0d489706136e78f2f56cdd5d417a9)
+++ src/libchcore/TLocalFilesystem.cpp	(.../TLocalFilesystem.cpp)	(revision b75259a9158d8b46d747e20ab4960dd002adb4b1)
@@ -40,6 +40,7 @@
 #include "TFileTime.h"
 #include "TOverlappedDataBuffer.h"
 #include "RoundingFunctions.h"
+#include <atltrace.h>
 
 BEGIN_CHCORE_NAMESPACE
 
@@ -458,7 +459,8 @@
 	if (!IsOpen())
 		THROW_CORE_EXCEPTION(eErr_InternalProblem);
 
-	if (!::ReadFileEx(m_hFile, rBuffer.GetBufferPtr(), rBuffer.GetRequestedDataSize(), &rBuffer, OverlappedReadCompleted))
+	ATLTRACE(_T("Reading %lu bytes\n"), rBuffer.GetRequestedDataSize());
+	if(!::ReadFileEx(m_hFile, rBuffer.GetBufferPtr(), rBuffer.GetRequestedDataSize(), &rBuffer, OverlappedReadCompleted))
 	{
 		DWORD dwLastError = GetLastError();
 		switch(dwLastError)
@@ -494,6 +496,7 @@
 	if (m_bNoBuffering && rBuffer.IsLastPart())
 		dwToWrite = RoundUp<DWORD>(dwToWrite, MaxSectorSize);
 
+	ATLTRACE(_T("Writing %lu bytes\n"), dwToWrite);
 	if (!::WriteFileEx(m_hFile, rBuffer.GetBufferPtr(), dwToWrite, &rBuffer, OverlappedWriteCompleted))
 	{
 		if (GetLastError() == ERROR_IO_PENDING)
@@ -511,9 +514,11 @@
 
 	if (m_bNoBuffering && rBuffer.IsLastPart())
 	{
-		DWORD dwToWrite = boost::numeric_cast<DWORD>(rBuffer.GetBytesTransferred());
+		DWORD dwToWrite = boost::numeric_cast<DWORD>(rBuffer.GetRealDataSize());
 		DWORD dwReallyWritten = RoundUp<DWORD>(dwToWrite, MaxSectorSize);
 
+		ATLTRACE(_T("Finalize file - size diff: written: %I64u, required: %I64u\n"), dwReallyWritten, dwToWrite);
+
 		if (dwToWrite != dwReallyWritten)
 		{
 			unsigned long long ullNewFileSize = rBuffer.GetFilePosition() + dwToWrite;	// new size
@@ -522,6 +527,7 @@
 				return false;
 
 			//seek
+			ATLTRACE(_T("Truncating file to %I64u bytes\n"), ullNewFileSize);
 			if (!SetFilePointer(ullNewFileSize, FILE_BEGIN))
 				return false;