Module: wine Branch: master Commit: 5b533d82d2de543a1624ecbda77e2d1a7ea370dd URL: http://source.winehq.org/git/wine.git/?a=commit;h=5b533d82d2de543a1624ecbda7...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Tue Dec 13 00:43:24 2011 +0300
ole32: 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; }
/***********************************************************************