ole32: Don't store file size in FileLockBytesImpl.
Vincent Povirk
madewokherd at gmail.com
Tue May 27 14:17:44 CDT 2014
-------------- next part --------------
From 82fab17662539092ba4fa77960d9cdec6960c23d Mon Sep 17 00:00:00 2001
From: Vincent Povirk <vincent at codeweavers.com>
Date: Tue, 27 May 2014 14:14:45 -0500
Subject: [PATCH] ole32: Don't store file size in FileLockBytesImpl.
If we have other writers, they may change the size.
---
dlls/ole32/filelockbytes.c | 22 +++-------------------
1 file changed, 3 insertions(+), 19 deletions(-)
diff --git a/dlls/ole32/filelockbytes.c b/dlls/ole32/filelockbytes.c
index 6ebfdbc..52c1d26 100644
--- a/dlls/ole32/filelockbytes.c
+++ b/dlls/ole32/filelockbytes.c
@@ -49,7 +49,6 @@ typedef struct FileLockBytesImpl
{
ILockBytes ILockBytes_iface;
LONG ref;
- ULARGE_INTEGER filesize;
HANDLE hfile;
DWORD flProtect;
LPWSTR pwcsName;
@@ -108,8 +107,6 @@ HRESULT FileLockBytesImpl_Construct(HANDLE hFile, DWORD openFlags, LPCWSTR pwcsN
This->ILockBytes_iface.lpVtbl = &FileLockBytesImpl_Vtbl;
This->ref = 1;
This->hfile = hFile;
- This->filesize.u.LowPart = GetFileSize(This->hfile,
- &This->filesize.u.HighPart);
This->flProtect = GetProtectMode(openFlags);
if(pwcsName) {
@@ -129,8 +126,6 @@ HRESULT FileLockBytesImpl_Construct(HANDLE hFile, DWORD openFlags, LPCWSTR pwcsN
else
This->pwcsName = NULL;
- TRACE("file len %u\n", This->filesize.u.LowPart);
-
*pLockBytes = &This->ILockBytes_iface;
return S_OK;
@@ -248,15 +243,12 @@ static HRESULT WINAPI FileLockBytesImpl_WriteAt(
ULONG* pcbWritten) /* [out] */
{
FileLockBytesImpl* This = impl_from_ILockBytes(iface);
- ULARGE_INTEGER size_needed;
ULONG bytes_left = cb;
const BYTE *writePtr = pv;
BOOL ret;
LARGE_INTEGER offset;
ULONG cbWritten;
- size_needed.QuadPart = ulOffset.QuadPart + cb;
-
TRACE("(%p)-> %i %p %i %p\n",This, ulOffset.u.LowPart, pv, cb, pcbWritten);
/* verify a sane environment */
@@ -268,11 +260,6 @@ static HRESULT WINAPI FileLockBytesImpl_WriteAt(
if (pcbWritten)
*pcbWritten = 0;
- if (size_needed.QuadPart > This->filesize.QuadPart)
- {
- ILockBytes_SetSize(iface, size_needed);
- }
-
offset.QuadPart = ulOffset.QuadPart;
ret = SetFilePointerEx(This->hfile, offset, NULL, FILE_BEGIN);
@@ -315,10 +302,7 @@ static HRESULT WINAPI FileLockBytesImpl_SetSize(ILockBytes* iface, ULARGE_INTEGE
HRESULT hr = S_OK;
LARGE_INTEGER newpos;
- if (This->filesize.QuadPart == newSize.QuadPart)
- return hr;
-
- TRACE("from %u to %u\n", This->filesize.u.LowPart, newSize.u.LowPart);
+ TRACE("new size %u\n", newSize.u.LowPart);
newpos.QuadPart = newSize.QuadPart;
if (SetFilePointerEx(This->hfile, newpos, NULL, FILE_BEGIN))
@@ -326,7 +310,6 @@ static HRESULT WINAPI FileLockBytesImpl_SetSize(ILockBytes* iface, ULARGE_INTEGE
SetEndOfFile(This->hfile);
}
- This->filesize = newSize;
return hr;
}
@@ -411,7 +394,8 @@ static HRESULT WINAPI FileLockBytesImpl_Stat(ILockBytes* iface,
pstatstg->pwcsName = NULL;
pstatstg->type = STGTY_LOCKBYTES;
- pstatstg->cbSize = This->filesize;
+
+ pstatstg->cbSize.u.LowPart = GetFileSize(This->hfile, &pstatstg->cbSize.u.HighPart);
/* FIXME: If the implementation is exported, we'll need to set other fields. */
return S_OK;
--
1.8.3.2
More information about the wine-patches
mailing list