Vincent Povirk : ole32: Flush before returning from any storage API call that writes.

Alexandre Julliard julliard at winehq.org
Thu Aug 26 11:42:06 CDT 2010


Module: wine
Branch: master
Commit: 101de22a1a09643c43cd01e281a9fdf926b03535
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=101de22a1a09643c43cd01e281a9fdf926b03535

Author: Vincent Povirk <vincent at codeweavers.com>
Date:   Wed Aug 25 14:55:21 2010 -0500

ole32: Flush before returning from any storage API call that writes.

---

 dlls/ole32/stg_stream.c |    7 +++++++
 dlls/ole32/storage32.c  |   12 ++++++++++--
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/dlls/ole32/stg_stream.c b/dlls/ole32/stg_stream.c
index 1fdb963..b09ba5b 100644
--- a/dlls/ole32/stg_stream.c
+++ b/dlls/ole32/stg_stream.c
@@ -295,6 +295,9 @@ static HRESULT WINAPI StgStreamImpl_Write(
    */
   This->currentPosition.u.LowPart += *pcbWritten;
 
+  if (SUCCEEDED(res))
+    res = StorageBaseImpl_Flush(This->parentStorage);
+
   TRACE("<-- S_OK, written %u\n", *pcbWritten);
   return res;
 }
@@ -417,6 +420,10 @@ static HRESULT WINAPI StgStreamImpl_SetSize(
   }
 
   hr = StorageBaseImpl_StreamSetSize(This->parentStorage, This->dirEntry, libNewSize);
+
+  if (SUCCEEDED(hr))
+    hr = StorageBaseImpl_Flush(This->parentStorage);
+
   return hr;
 }
 
diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c
index 185b8b0..21cac58 100644
--- a/dlls/ole32/storage32.c
+++ b/dlls/ole32/storage32.c
@@ -856,7 +856,7 @@ static HRESULT WINAPI StorageBaseImpl_RenameElement(
     return STG_E_FILENOTFOUND;
   }
 
-  return S_OK;
+  return StorageBaseImpl_Flush(This);
 }
 
 /************************************************************************
@@ -1011,7 +1011,7 @@ static HRESULT WINAPI StorageBaseImpl_CreateStream(
     return STG_E_INSUFFICIENTMEMORY;
   }
 
-  return S_OK;
+  return StorageBaseImpl_Flush(This);
 }
 
 /************************************************************************
@@ -1047,6 +1047,9 @@ static HRESULT WINAPI StorageBaseImpl_SetClass(
                                          &currentEntry);
   }
 
+  if (SUCCEEDED(hRes))
+    hRes = StorageBaseImpl_Flush(This);
+
   return hRes;
 }
 
@@ -1203,6 +1206,8 @@ static HRESULT WINAPI StorageBaseImpl_CreateStorage(
     return hr;
   }
 
+  if (SUCCEEDED(hr))
+    hr = StorageBaseImpl_Flush(This);
 
   return S_OK;
 }
@@ -1916,6 +1921,9 @@ static HRESULT WINAPI StorageBaseImpl_DestroyElement(
   if (SUCCEEDED(hr))
     StorageBaseImpl_DestroyDirEntry(This, entryToDeleteRef);
 
+  if (SUCCEEDED(hr))
+    hr = StorageBaseImpl_Flush(This);
+
   return hr;
 }
 




More information about the wine-cvs mailing list