>From e302d2d5063f42a15be6e0e197f42d47743c4374 Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <nsivov@codeweavers.com>
Date: Tue, 13 Dec 2011 00:43:24 +0300
Subject: [PATCH 2/4] Simplify stream creation, remove redundant comments

---
 dlls/ole32/hglobalstream.c |  175 +++++++++++---------------------------------
 1 files changed, 42 insertions(+), 133 deletions(-)

diff --git a/dlls/ole32/hglobalstream.c b/dlls/ole32/hglobalstream.c
index 860fd03..ce0f34c 100644
--- a/dlls/ole32/hglobalstream.c
+++ b/dlls/ole32/hglobalstream.c
@@ -74,46 +74,6 @@ static inline HGLOBALStreamImpl *impl_from_IStream(IStream *iface)
   return CONTAINING_RECORD(iface, HGLOBALStreamImpl, IStream_iface);
 }
 
-/***
- * This is the destructor of the HGLOBALStreamImpl class.
- *
- * This method will clean-up all the resources used-up by the given HGLOBALStreamImpl
- * class. The pointer passed-in to this function will be freed and will not
- * be valid anymore.
- */
-static void HGLOBALStreamImpl_Destroy(HGLOBALStreamImpl* This)
-{
-  TRACE("(%p)\n", This);
-
-  /*
-   * Release the HGlobal if the constructor asked for that.
-   */
-  if (This->deleteOnRelease)
-  {
-    GlobalFree(This->supportHandle);
-    This->supportHandle=0;
-  }
-
-  /*
-   * Finally, free the memory used-up by the class.
-   */
-  HeapFree(GetProcessHeap(), 0, This);
-}
-
-/***
- * This implements the IUnknown method AddRef for this
- * class
- */
-static ULONG WINAPI HGLOBALStreamImpl_AddRef(IStream* iface)
-{
-  HGLOBALStreamImpl* This = impl_from_IStream(iface);
-  return InterlockedIncrement(&This->ref);
-}
-
-/***
- * This implements the IUnknown method QueryInterface for this
- * class
- */
 static HRESULT WINAPI HGLOBALStreamImpl_QueryInterface(
 		  IStream*     iface,
 		  REFIID         riid,	      /* [in] */
@@ -121,20 +81,11 @@ static HRESULT WINAPI HGLOBALStreamImpl_QueryInterface(
 {
   HGLOBALStreamImpl* This = impl_from_IStream(iface);
 
-  /*
-   * Perform a sanity check on the parameters.
-   */
   if (ppvObject==0)
     return E_INVALIDARG;
 
-  /*
-   * Initialize the return parameter.
-   */
   *ppvObject = 0;
 
-  /*
-   * Compare the riid with the interface IDs implemented by this object.
-   */
   if (IsEqualIID(&IID_IUnknown, riid) ||
       IsEqualIID(&IID_ISequentialStream, riid) ||
       IsEqualIID(&IID_IStream, riid))
@@ -142,25 +93,20 @@ static HRESULT WINAPI HGLOBALStreamImpl_QueryInterface(
     *ppvObject = This;
   }
 
-  /*
-   * Check that we obtained an interface.
-   */
   if ((*ppvObject)==0)
     return E_NOINTERFACE;
 
-  /*
-   * Query Interface always increases the reference count by one when it is
-   * successful
-   */
-  HGLOBALStreamImpl_AddRef(iface);
+  IStream_AddRef(iface);
 
   return S_OK;
 }
 
-/***
- * This implements the IUnknown method Release for this
- * class
- */
+static ULONG WINAPI HGLOBALStreamImpl_AddRef(IStream* iface)
+{
+  HGLOBALStreamImpl* This = impl_from_IStream(iface);
+  return InterlockedIncrement(&This->ref);
+}
+
 static ULONG WINAPI HGLOBALStreamImpl_Release(
 		IStream* iface)
 {
@@ -168,7 +114,15 @@ static ULONG WINAPI HGLOBALStreamImpl_Release(
   ULONG ref = InterlockedDecrement(&This->ref);
 
   if (!ref)
-    HGLOBALStreamImpl_Destroy(This);
+  {
+    if (This->deleteOnRelease)
+    {
+      GlobalFree(This->supportHandle);
+      This->supportHandle = NULL;
+    }
+
+    HeapFree(GetProcessHeap(), 0, This);
+  }
 
   return ref;
 }
@@ -598,14 +552,11 @@ static HRESULT WINAPI HGLOBALStreamImpl_Clone(
   hr = CreateStreamOnHGlobal(This->supportHandle, FALSE, ppstm);
   if(FAILED(hr))
     return hr;
-  offset.QuadPart=(LONGLONG)This->currentPosition.QuadPart;
-  HGLOBALStreamImpl_Seek(*ppstm,offset,STREAM_SEEK_SET,&dummy);
+  offset.QuadPart = (LONGLONG)This->currentPosition.QuadPart;
+  IStream_Seek(*ppstm, offset, STREAM_SEEK_SET, &dummy);
   return S_OK;
 }
 
-/*
- * Virtual function table for the HGLOBALStreamImpl class.
- */
 static const IStreamVtbl HGLOBALStreamImplVtbl =
 {
     HGLOBALStreamImpl_QueryInterface,
@@ -624,62 +575,6 @@ static const IStreamVtbl HGLOBALStreamImplVtbl =
     HGLOBALStreamImpl_Clone
 };
 
-/******************************************************************************
-** HGLOBALStreamImpl implementation
-*/
-
-/***
- * This is the constructor for the HGLOBALStreamImpl class.
- *
- * Params:
- *    hGlobal          - Handle that will support the stream. can be NULL.
- *    fDeleteOnRelease - Flag set to TRUE if the HGLOBAL will be released
- *                       when the IStream object is destroyed.
- */
-static HGLOBALStreamImpl* HGLOBALStreamImpl_Construct(
-		HGLOBAL  hGlobal,
-		BOOL     fDeleteOnRelease)
-{
-  HGLOBALStreamImpl* This;
-
-  This = HeapAlloc(GetProcessHeap(), 0, sizeof(HGLOBALStreamImpl));
-  if (This)
-  {
-    This->IStream_iface.lpVtbl = &HGLOBALStreamImplVtbl;
-    This->ref = 0;
-
-    /*
-     * Initialize the support.
-     */
-    This->supportHandle = hGlobal;
-    This->deleteOnRelease = fDeleteOnRelease;
-
-    /*
-     * This method will allocate a handle if one is not supplied.
-     */
-    if (!This->supportHandle)
-    {
-      This->supportHandle = GlobalAlloc(GMEM_MOVEABLE | GMEM_NODISCARD |
-					     GMEM_SHARE, 0);
-    }
-
-    /*
-     * Start the stream at the beginning.
-     */
-    This->currentPosition.u.HighPart = 0;
-    This->currentPosition.u.LowPart = 0;
-
-    /*
-     * Initialize the size of the stream to the size of the handle.
-     */
-    This->streamSize.u.HighPart = 0;
-    This->streamSize.u.LowPart = GlobalSize(This->supportHandle);
-  }
-
-  return This;
-}
-
-
 /***********************************************************************
  *           CreateStreamOnHGlobal     [OLE32.@]
  */
@@ -688,22 +583,36 @@ HRESULT WINAPI CreateStreamOnHGlobal(
 		BOOL      fDeleteOnRelease,
 		LPSTREAM* ppstm)
 {
-  HGLOBALStreamImpl* newStream;
+  HGLOBALStreamImpl* This;
 
   if (!ppstm)
     return E_INVALIDARG;
 
-  newStream = HGLOBALStreamImpl_Construct(hGlobal,
-					  fDeleteOnRelease);
+  This = HeapAlloc(GetProcessHeap(), 0, sizeof(HGLOBALStreamImpl));
+  if (!This) return E_OUTOFMEMORY;
 
-  if (newStream!=NULL)
-  {
-    return IUnknown_QueryInterface((IUnknown*)newStream,
-				   &IID_IStream,
-				   (void**)ppstm);
-  }
+  This->IStream_iface.lpVtbl = &HGLOBALStreamImplVtbl;
+  This->ref = 1;
+
+  /* initialize the support */
+  This->supportHandle = hGlobal;
+  This->deleteOnRelease = fDeleteOnRelease;
+
+  /* allocate a handle if one is not supplied */
+  if (!This->supportHandle)
+    This->supportHandle = GlobalAlloc(GMEM_MOVEABLE|GMEM_NODISCARD|GMEM_SHARE, 0);
 
-  return E_OUTOFMEMORY;
+  /* start at the beginning */
+  This->currentPosition.u.HighPart = 0;
+  This->currentPosition.u.LowPart = 0;
+
+  /* initialize the size of the stream to the size of the handle */
+  This->streamSize.u.HighPart = 0;
+  This->streamSize.u.LowPart = GlobalSize(This->supportHandle);
+
+  *ppstm = &This->IStream_iface;
+
+  return S_OK;
 }
 
 /***********************************************************************
-- 
1.5.6.5


