[PATCH 5/7] avifil32: Merge IPersistFile into the WAVFile object.

Michael Stefaniuc mstefani at redhat.de
Mon Mar 3 15:08:05 CST 2014


---
 dlls/avifil32/wavfile.c | 68 ++++++++++++++++++-------------------------------
 1 file changed, 25 insertions(+), 43 deletions(-)

diff --git a/dlls/avifil32/wavfile.c b/dlls/avifil32/wavfile.c
index 8ea63c9..e2c66cb 100644
--- a/dlls/avifil32/wavfile.c
+++ b/dlls/avifil32/wavfile.c
@@ -167,14 +167,6 @@ static const struct IAVIStreamVtbl iwavst = {
 
 typedef struct _IAVIFileImpl IAVIFileImpl;
 
-typedef struct _IPersistFileImpl {
-  /* IUnknown stuff */
-  const IPersistFileVtbl *lpVtbl;
-
-  /* IPersistFile stuff */
-  IAVIFileImpl     *paf;
-} IPersistFileImpl;
-
 typedef struct _IAVIStreamImpl {
   /* IUnknown stuff */
   const IAVIStreamVtbl *lpVtbl;
@@ -185,12 +177,12 @@ typedef struct _IAVIStreamImpl {
 
 struct _IAVIFileImpl {
   IAVIFile          IAVIFile_iface;
+  IPersistFile      IPersistFile_iface;
   IUnknown          IUnknown_inner;
   IUnknown          *outer_unk;
   LONG              ref;
 
   /* IAVIFile, IAVIStream stuff... */
-  IPersistFileImpl  iPersistFile;
   IAVIStreamImpl    iAVIStream;
 
   AVIFILEINFOW      fInfo;
@@ -234,7 +226,7 @@ static HRESULT WINAPI IUnknown_fnQueryInterface(IUnknown *iface, REFIID riid, vo
     else if (IsEqualGUID(&IID_IAVIStream, riid))
         *ret_iface = &This->iAVIStream;
     else if (IsEqualGUID(&IID_IPersistFile, riid))
-        *ret_iface = &This->iPersistFile;
+        *ret_iface = &This->IPersistFile_iface;
     else {
         WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ret_iface);
         *ret_iface = NULL;
@@ -306,7 +298,7 @@ HRESULT AVIFILE_CreateWAVFile(IUnknown *outer_unk, REFIID riid, void **ret_iface
 
   pfile->IUnknown_inner.lpVtbl = &unk_vtbl;
   pfile->IAVIFile_iface.lpVtbl = &iwavft;
-  pfile->iPersistFile.lpVtbl   = &iwavpft;
+  pfile->IPersistFile_iface.lpVtbl = &iwavpft;
   pfile->iAVIStream.lpVtbl     = &iwavst;
   pfile->ref = 1;
   if (outer_unk)
@@ -314,7 +306,6 @@ HRESULT AVIFILE_CreateWAVFile(IUnknown *outer_unk, REFIID riid, void **ret_iface
   else
     pfile->outer_unk = &pfile->IUnknown_inner;
 
-  pfile->iPersistFile.paf = pfile;
   pfile->iAVIStream.paf   = pfile;
 
   hr = IUnknown_QueryInterface(&pfile->IUnknown_inner, riid, ret_iface);
@@ -540,32 +531,31 @@ static HRESULT WINAPI IAVIFile_fnDeleteStream(IAVIFile *iface, DWORD fccType, LO
 
 /***********************************************************************/
 
-static HRESULT WINAPI IPersistFile_fnQueryInterface(IPersistFile *iface,
-						    REFIID refiid, LPVOID *obj)
+static inline IAVIFileImpl *impl_from_IPersistFile(IPersistFile *iface)
 {
-  IPersistFileImpl *This = (IPersistFileImpl *)iface;
+    return CONTAINING_RECORD(iface, IAVIFileImpl, IPersistFile_iface);
+}
 
-  assert(This->paf != NULL);
+static HRESULT WINAPI IPersistFile_fnQueryInterface(IPersistFile *iface, REFIID riid,
+        void **ret_iface)
+{
+    IAVIFileImpl *This = impl_from_IPersistFile(iface);
 
-  return IAVIFile_QueryInterface((PAVIFILE)This->paf, refiid, obj);
+    return IUnknown_QueryInterface(This->outer_unk, riid, ret_iface);
 }
 
 static ULONG   WINAPI IPersistFile_fnAddRef(IPersistFile *iface)
 {
-  IPersistFileImpl *This = (IPersistFileImpl *)iface;
-
-  assert(This->paf != NULL);
+    IAVIFileImpl *This = impl_from_IPersistFile(iface);
 
-  return IAVIFile_AddRef((PAVIFILE)This->paf);
+    return IUnknown_AddRef(This->outer_unk);
 }
 
 static ULONG   WINAPI IPersistFile_fnRelease(IPersistFile *iface)
 {
-  IPersistFileImpl *This = (IPersistFileImpl *)iface;
-
-  assert(This->paf != NULL);
+    IAVIFileImpl *This = impl_from_IPersistFile(iface);
 
-  return IAVIFile_Release((PAVIFILE)This->paf);
+    return IUnknown_Release(This->outer_unk);
 }
 
 static HRESULT WINAPI IPersistFile_fnGetClassID(IPersistFile *iface,
@@ -583,20 +573,16 @@ static HRESULT WINAPI IPersistFile_fnGetClassID(IPersistFile *iface,
 
 static HRESULT WINAPI IPersistFile_fnIsDirty(IPersistFile *iface)
 {
-  IPersistFileImpl *This = (IPersistFileImpl *)iface;
+    IAVIFileImpl *This = impl_from_IPersistFile(iface);
 
-  TRACE("(%p)\n", iface);
+    TRACE("(%p)\n", iface);
 
-  assert(This->paf != NULL);
-
-  return (This->paf->fDirty ? S_OK : S_FALSE);
+    return (This->fDirty ? S_OK : S_FALSE);
 }
 
-static HRESULT WINAPI IPersistFile_fnLoad(IPersistFile *iface,
-					  LPCOLESTR pszFileName, DWORD dwMode)
+static HRESULT WINAPI IPersistFile_fnLoad(IPersistFile *iface, LPCOLESTR pszFileName, DWORD dwMode)
 {
-  IAVIFileImpl *This = ((IPersistFileImpl*)iface)->paf;
-
+  IAVIFileImpl *This = impl_from_IPersistFile(iface);
   WCHAR wszStreamFmt[50];
   INT   len;
 
@@ -606,7 +592,6 @@ static HRESULT WINAPI IPersistFile_fnLoad(IPersistFile *iface,
   if (pszFileName == NULL)
     return AVIERR_BADPARAM;
 
-  assert(This != NULL);
   if (This->hmmio != NULL)
     return AVIERR_ERROR; /* No reuse of this object for another file! */
 
@@ -678,10 +663,9 @@ static HRESULT WINAPI IPersistFile_fnSaveCompleted(IPersistFile *iface,
   return AVIERR_OK;
 }
 
-static HRESULT WINAPI IPersistFile_fnGetCurFile(IPersistFile *iface,
-						LPOLESTR *ppszFileName)
+static HRESULT WINAPI IPersistFile_fnGetCurFile(IPersistFile *iface, LPOLESTR *ppszFileName)
 {
-  IPersistFileImpl *This = (IPersistFileImpl *)iface;
+  IAVIFileImpl *This = impl_from_IPersistFile(iface);
 
   TRACE("(%p,%p)\n", iface, ppszFileName);
 
@@ -690,16 +674,14 @@ static HRESULT WINAPI IPersistFile_fnGetCurFile(IPersistFile *iface,
 
   *ppszFileName = NULL;
 
-  assert(This->paf != NULL);
-
-  if (This->paf->szFileName != NULL) {
-    int len = lstrlenW(This->paf->szFileName) + 1;
+  if (This->szFileName) {
+    int len = lstrlenW(This->szFileName) + 1;
 
     *ppszFileName = CoTaskMemAlloc(len * sizeof(WCHAR));
     if (*ppszFileName == NULL)
       return AVIERR_MEMORY;
 
-    strcpyW(*ppszFileName, This->paf->szFileName);
+    strcpyW(*ppszFileName, This->szFileName);
   }
 
   return AVIERR_OK;
-- 
1.8.3.1



More information about the wine-patches mailing list