shlwapi: Use iface instead of vtbl pointers in ISHFileStream.

Michael Stefaniuc mstefani at redhat.de
Mon Nov 29 17:03:34 CST 2010


---
 dlls/shlwapi/istream.c |   37 +++++++++++++++++++++----------------
 1 files changed, 21 insertions(+), 16 deletions(-)

diff --git a/dlls/shlwapi/istream.c b/dlls/shlwapi/istream.c
index 1d11c37..3395209 100644
--- a/dlls/shlwapi/istream.c
+++ b/dlls/shlwapi/istream.c
@@ -42,7 +42,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell);
 /* Layout of ISHFileStream object */
 typedef struct
 {
-  const IStreamVtbl *lpVtbl;
+  IStream  IStream_iface;
   LONG     ref;
   HANDLE   hFile;
   DWORD    dwMode;
@@ -51,6 +51,11 @@ typedef struct
   DWORD    grfStateBits;
 } ISHFileStream;
 
+static inline ISHFileStream *impl_from_IStream(IStream *iface)
+{
+  return CONTAINING_RECORD(iface, ISHFileStream, IStream_iface);
+}
+
 static HRESULT WINAPI IStream_fnCommit(IStream*,DWORD);
 
 
@@ -59,7 +64,7 @@ static HRESULT WINAPI IStream_fnCommit(IStream*,DWORD);
 */
 static HRESULT WINAPI IStream_fnQueryInterface(IStream *iface, REFIID riid, LPVOID *ppvObj)
 {
-  ISHFileStream *This = (ISHFileStream *)iface;
+  ISHFileStream *This = impl_from_IStream(iface);
 
   TRACE("(%p,%s,%p)\n", This, debugstr_guid(riid), ppvObj);
 
@@ -80,7 +85,7 @@ static HRESULT WINAPI IStream_fnQueryInterface(IStream *iface, REFIID riid, LPVO
 */
 static ULONG WINAPI IStream_fnAddRef(IStream *iface)
 {
-  ISHFileStream *This = (ISHFileStream *)iface;
+  ISHFileStream *This = impl_from_IStream(iface);
   ULONG refCount = InterlockedIncrement(&This->ref);
   
   TRACE("(%p)->(ref before=%u)\n",This, refCount - 1);
@@ -93,7 +98,7 @@ static ULONG WINAPI IStream_fnAddRef(IStream *iface)
 */
 static ULONG WINAPI IStream_fnRelease(IStream *iface)
 {
-  ISHFileStream *This = (ISHFileStream *)iface;
+  ISHFileStream *This = impl_from_IStream(iface);
   ULONG refCount = InterlockedDecrement(&This->ref); 
 
   TRACE("(%p)->(ref before=%u)\n",This, refCount + 1);
@@ -114,7 +119,7 @@ static ULONG WINAPI IStream_fnRelease(IStream *iface)
  */
 static HRESULT WINAPI IStream_fnRead(IStream *iface, void* pv, ULONG cb, ULONG* pcbRead)
 {
-  ISHFileStream *This = (ISHFileStream *)iface;
+  ISHFileStream *This = impl_from_IStream(iface);
   DWORD dwRead = 0;
 
   TRACE("(%p,%p,0x%08x,%p)\n", This, pv, cb, pcbRead);
@@ -134,7 +139,7 @@ static HRESULT WINAPI IStream_fnRead(IStream *iface, void* pv, ULONG cb, ULONG*
  */
 static HRESULT WINAPI IStream_fnWrite(IStream *iface, const void* pv, ULONG cb, ULONG* pcbWritten)
 {
-  ISHFileStream *This = (ISHFileStream *)iface;
+  ISHFileStream *This = impl_from_IStream(iface);
   DWORD dwWritten = 0;
 
   TRACE("(%p,%p,0x%08x,%p)\n", This, pv, cb, pcbWritten);
@@ -162,7 +167,7 @@ static HRESULT WINAPI IStream_fnWrite(IStream *iface, const void* pv, ULONG cb,
 static HRESULT WINAPI IStream_fnSeek(IStream *iface, LARGE_INTEGER dlibMove,
                                      DWORD dwOrigin, ULARGE_INTEGER* pNewPos)
 {
-  ISHFileStream *This = (ISHFileStream *)iface;
+  ISHFileStream *This = impl_from_IStream(iface);
   DWORD dwPos;
 
   TRACE("(%p,%d,%d,%p)\n", This, dlibMove.u.LowPart, dwOrigin, pNewPos);
@@ -185,7 +190,7 @@ static HRESULT WINAPI IStream_fnSeek(IStream *iface, LARGE_INTEGER dlibMove,
  */
 static HRESULT WINAPI IStream_fnSetSize(IStream *iface, ULARGE_INTEGER libNewSize)
 {
-  ISHFileStream *This = (ISHFileStream *)iface;
+  ISHFileStream *This = impl_from_IStream(iface);
 
   TRACE("(%p,%d)\n", This, libNewSize.u.LowPart);
 
@@ -205,7 +210,7 @@ static HRESULT WINAPI IStream_fnSetSize(IStream *iface, ULARGE_INTEGER libNewSiz
 static HRESULT WINAPI IStream_fnCopyTo(IStream *iface, IStream* pstm, ULARGE_INTEGER cb,
                                        ULARGE_INTEGER* pcbRead, ULARGE_INTEGER* pcbWritten)
 {
-  ISHFileStream *This = (ISHFileStream *)iface;
+  ISHFileStream *This = impl_from_IStream(iface);
   char copyBuff[1024];
   ULONGLONG ulSize;
   HRESULT hRet = S_OK;
@@ -254,7 +259,7 @@ static HRESULT WINAPI IStream_fnCopyTo(IStream *iface, IStream* pstm, ULARGE_INT
  */
 static HRESULT WINAPI IStream_fnCommit(IStream *iface, DWORD grfCommitFlags)
 {
-  ISHFileStream *This = (ISHFileStream *)iface;
+  ISHFileStream *This = impl_from_IStream(iface);
 
   TRACE("(%p,%d)\n", This, grfCommitFlags);
   /* Currently unbuffered: This function is not needed */
@@ -266,7 +271,7 @@ static HRESULT WINAPI IStream_fnCommit(IStream *iface, DWORD grfCommitFlags)
  */
 static HRESULT WINAPI IStream_fnRevert(IStream *iface)
 {
-  ISHFileStream *This = (ISHFileStream *)iface;
+  ISHFileStream *This = impl_from_IStream(iface);
 
   TRACE("(%p)\n", This);
   return E_NOTIMPL;
@@ -278,7 +283,7 @@ static HRESULT WINAPI IStream_fnRevert(IStream *iface)
 static HRESULT WINAPI IStream_fnLockUnlockRegion(IStream *iface, ULARGE_INTEGER libOffset,
                                                  ULARGE_INTEGER cb, DWORD dwLockType)
 {
-  ISHFileStream *This = (ISHFileStream *)iface;
+  ISHFileStream *This = impl_from_IStream(iface);
   TRACE("(%p,%d,%d,%d)\n", This, libOffset.u.LowPart, cb.u.LowPart, dwLockType);
   return E_NOTIMPL;
 }
@@ -289,7 +294,7 @@ static HRESULT WINAPI IStream_fnLockUnlockRegion(IStream *iface, ULARGE_INTEGER
 static HRESULT WINAPI IStream_fnStat(IStream *iface, STATSTG* lpStat,
                                      DWORD grfStatFlag)
 {
-  ISHFileStream *This = (ISHFileStream *)iface;
+  ISHFileStream *This = impl_from_IStream(iface);
   BY_HANDLE_FILE_INFORMATION fi;
   HRESULT hRet = S_OK;
 
@@ -326,7 +331,7 @@ static HRESULT WINAPI IStream_fnStat(IStream *iface, STATSTG* lpStat,
  */
 static HRESULT WINAPI IStream_fnClone(IStream *iface, IStream** ppstm)
 {
-  ISHFileStream *This = (ISHFileStream *)iface;
+  ISHFileStream *This = impl_from_IStream(iface);
 
   TRACE("(%p)\n",This);
   if (ppstm)
@@ -365,7 +370,7 @@ static IStream *IStream_Create(LPCWSTR lpszPath, HANDLE hFile, DWORD dwMode)
 
  if (fileStream)
  {
-   fileStream->lpVtbl = &SHLWAPI_fsVTable;
+   fileStream->IStream_iface.lpVtbl = &SHLWAPI_fsVTable;
    fileStream->ref = 1;
    fileStream->hFile = hFile;
    fileStream->dwMode = dwMode;
@@ -374,7 +379,7 @@ static IStream *IStream_Create(LPCWSTR lpszPath, HANDLE hFile, DWORD dwMode)
    fileStream->grfStateBits = 0; /* FIXME */
  }
  TRACE ("Returning %p\n", fileStream);
- return (IStream *)fileStream;
+ return &fileStream->IStream_iface;
 }
 
 /*************************************************************************
-- 
1.7.3.2



More information about the wine-patches mailing list