[PATCH 2/3] avifil32: Clean up the IClassFactory creation.

Michael Stefaniuc mstefani at redhat.de
Tue Jul 12 03:07:16 CDT 2016


Also move it to avoid forward declarations of the IClassFactory methods.

Signed-off-by: Michael Stefaniuc <mstefani at redhat.de>
---
 dlls/avifil32/factory.c | 68 +++++++++++++++++++++----------------------------
 1 file changed, 29 insertions(+), 39 deletions(-)

diff --git a/dlls/avifil32/factory.c b/dlls/avifil32/factory.c
index aa0c44e..8ada02b 100644
--- a/dlls/avifil32/factory.c
+++ b/dlls/avifil32/factory.c
@@ -41,20 +41,6 @@ HMODULE AVIFILE_hModule   = NULL;
 static BOOL    AVIFILE_bLocked;
 static UINT    AVIFILE_uUseCount;
 
-static HRESULT WINAPI IClassFactory_fnQueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj);
-static ULONG   WINAPI IClassFactory_fnAddRef(LPCLASSFACTORY iface);
-static ULONG   WINAPI IClassFactory_fnRelease(LPCLASSFACTORY iface);
-static HRESULT WINAPI IClassFactory_fnCreateInstance(LPCLASSFACTORY iface,LPUNKNOWN pOuter,REFIID riid,LPVOID *ppobj);
-static HRESULT WINAPI IClassFactory_fnLockServer(LPCLASSFACTORY iface,BOOL dolock);
-
-static const IClassFactoryVtbl iclassfact = {
-  IClassFactory_fnQueryInterface,
-  IClassFactory_fnAddRef,
-  IClassFactory_fnRelease,
-  IClassFactory_fnCreateInstance,
-  IClassFactory_fnLockServer
-};
-
 typedef struct
 {
   IClassFactory IClassFactory_iface;
@@ -67,31 +53,6 @@ static inline IClassFactoryImpl *impl_from_IClassFactory(IClassFactory *iface)
   return CONTAINING_RECORD(iface, IClassFactoryImpl, IClassFactory_iface);
 }
 
-static HRESULT AVIFILE_CreateClassFactory(const CLSID *pclsid, const IID *riid,
-					  LPVOID *ppv)
-{
-  IClassFactoryImpl *pClassFactory = NULL;
-  HRESULT            hr;
-
-  *ppv = NULL;
-
-  pClassFactory = HeapAlloc(GetProcessHeap(), 0, sizeof(*pClassFactory));
-  if (pClassFactory == NULL)
-    return E_OUTOFMEMORY;
-
-  pClassFactory->IClassFactory_iface.lpVtbl = &iclassfact;
-  pClassFactory->ref = 0;
-  pClassFactory->clsid     = *pclsid;
-
-  hr = IClassFactory_QueryInterface(&pClassFactory->IClassFactory_iface, riid, ppv);
-  if (FAILED(hr)) {
-    HeapFree(GetProcessHeap(), 0, pClassFactory);
-    *ppv = NULL;
-  }
-
-  return hr;
-}
-
 static HRESULT WINAPI IClassFactory_fnQueryInterface(LPCLASSFACTORY iface,
 						     REFIID riid,LPVOID *ppobj)
 {
@@ -170,6 +131,35 @@ static HRESULT WINAPI IClassFactory_fnLockServer(LPCLASSFACTORY iface,BOOL doloc
   return S_OK;
 }
 
+static const IClassFactoryVtbl iclassfact = {
+    IClassFactory_fnQueryInterface,
+    IClassFactory_fnAddRef,
+    IClassFactory_fnRelease,
+    IClassFactory_fnCreateInstance,
+    IClassFactory_fnLockServer
+};
+
+static HRESULT AVIFILE_CreateClassFactory(const CLSID *clsid, const IID *riid, void **ppv)
+{
+    IClassFactoryImpl *cf;
+    HRESULT hr;
+
+    *ppv = NULL;
+
+    cf = HeapAlloc(GetProcessHeap(), 0, sizeof(*cf));
+    if (!cf)
+        return E_OUTOFMEMORY;
+
+    cf->IClassFactory_iface.lpVtbl = &iclassfact;
+    cf->ref = 1;
+    cf->clsid = *clsid;
+
+    hr = IClassFactory_QueryInterface(&cf->IClassFactory_iface, riid, ppv);
+    IClassFactory_Release(&cf->IClassFactory_iface);
+
+    return hr;
+}
+
 LPCWSTR AVIFILE_BasenameW(LPCWSTR szPath)
 {
 #define SLASH(w) ((w) == '/' || (w) == '\\')
-- 
2.5.5



More information about the wine-patches mailing list