Michael Stefaniuc : dsound: Move the QI implementation from IDirectSoundFullDuplex to IUnknown.

Alexandre Julliard julliard at winehq.org
Thu Aug 16 15:26:11 CDT 2012


Module: wine
Branch: master
Commit: b522dc66f7a089de37d8ac037ad1ceb11ab15a75
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=b522dc66f7a089de37d8ac037ad1ceb11ab15a75

Author: Michael Stefaniuc <mstefani at redhat.de>
Date:   Thu Aug 16 01:52:16 2012 +0200

dsound: Move the QI implementation from IDirectSoundFullDuplex to IUnknown.

---

 dlls/dsound/duplex.c |   63 ++++++++++++++++++++++++-------------------------
 1 files changed, 31 insertions(+), 32 deletions(-)

diff --git a/dlls/dsound/duplex.c b/dlls/dsound/duplex.c
index 5e57bbd..a2bc726 100644
--- a/dlls/dsound/duplex.c
+++ b/dlls/dsound/duplex.c
@@ -79,8 +79,30 @@ static inline IDirectSoundFullDuplexImpl *impl_from_IUnknown(IUnknown *iface)
 static HRESULT WINAPI IUnknownImpl_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
 {
     IDirectSoundFullDuplexImpl *This = impl_from_IUnknown(iface);
+
     TRACE("(%p,%s,%p)\n", This, debugstr_guid(riid), ppv);
-    return IDirectSoundFullDuplex_QueryInterface(&This->IDirectSoundFullDuplex_iface, riid, ppv);
+
+    if (!ppv) {
+        WARN("invalid parameter\n");
+        return E_INVALIDARG;
+    }
+
+    if (IsEqualIID(riid, &IID_IUnknown)) {
+        IUnknown_AddRef(&This->IUnknown_iface);
+        *ppv = &This->IUnknown_iface;
+        return S_OK;
+    } else if (IsEqualIID(riid, &IID_IDirectSoundFullDuplex)) {
+        IDirectSoundFullDuplex_AddRef(&This->IDirectSoundFullDuplex_iface);
+        *ppv = &This->IDirectSoundFullDuplex_iface;
+        return S_OK;
+    } else if (This->ds8_unk && (IsEqualIID(riid, &IID_IDirectSound) ||
+                                 IsEqualIID(riid, &IID_IDirectSound8)))
+        return IUnknown_QueryInterface(This->ds8_unk, riid, ppv);
+    else if (This->dsc8_unk && IsEqualIID(riid, &IID_IDirectSoundCapture))
+        return IUnknown_QueryInterface(This->dsc8_unk, riid, ppv);
+
+    *ppv = NULL;
+    return E_NOINTERFACE;
 }
 
 static ULONG WINAPI IUnknownImpl_AddRef(IUnknown *iface)
@@ -122,6 +144,14 @@ static inline IDirectSoundFullDuplexImpl *impl_from_IDirectSoundFullDuplex(IDire
     return CONTAINING_RECORD(iface, IDirectSoundFullDuplexImpl, IDirectSoundFullDuplex_iface);
 }
 
+static HRESULT WINAPI IDirectSoundFullDuplexImpl_QueryInterface(IDirectSoundFullDuplex *iface,
+        REFIID riid, void **ppv)
+{
+    IDirectSoundFullDuplexImpl *This = impl_from_IDirectSoundFullDuplex(iface);
+    TRACE("(%p,%s,%p)\n", This, debugstr_guid(riid), ppv);
+    return IUnknown_QueryInterface(&This->IUnknown_iface, riid, ppv);
+}
+
 static ULONG WINAPI IDirectSoundFullDuplexImpl_AddRef(IDirectSoundFullDuplex *iface)
 {
     IDirectSoundFullDuplexImpl *This = impl_from_IDirectSoundFullDuplex(iface);
@@ -134,37 +164,6 @@ static ULONG WINAPI IDirectSoundFullDuplexImpl_AddRef(IDirectSoundFullDuplex *if
     return ref;
 }
 
-static HRESULT WINAPI IDirectSoundFullDuplexImpl_QueryInterface(IDirectSoundFullDuplex *iface,
-        REFIID riid, void **ppv)
-{
-    IDirectSoundFullDuplexImpl *This = impl_from_IDirectSoundFullDuplex(iface);
-    TRACE("(%p,%s,%p)\n", This, debugstr_guid(riid), ppv);
-
-    if (ppv == NULL) {
-	WARN("invalid parameter\n");
-	return E_INVALIDARG;
-    }
-
-    *ppv = NULL;
-
-    if (IsEqualIID(riid, &IID_IUnknown)) {
-        IUnknown_AddRef(&This->IUnknown_iface);
-        *ppv = &This->IUnknown_iface;
-        return S_OK;
-    } else if (IsEqualIID(riid, &IID_IDirectSoundFullDuplex)) {
-        IDirectSoundFullDuplexImpl_AddRef(iface);
-        *ppv = &This->IDirectSoundFullDuplex_iface;
-        return S_OK;
-    } else if (This->ds8_unk && (IsEqualIID(riid, &IID_IDirectSound) ||
-                                 IsEqualIID(riid, &IID_IDirectSound8))) {
-        return IUnknown_QueryInterface(This->ds8_unk, riid, ppv);
-    } else if (This->dsc8_unk && IsEqualIID(riid, &IID_IDirectSoundCapture)) {
-        return IUnknown_QueryInterface(This->dsc8_unk, riid, ppv);
-    }
-
-    return E_NOINTERFACE;
-}
-
 static ULONG WINAPI IDirectSoundFullDuplexImpl_Release(IDirectSoundFullDuplex *iface)
 {
     IDirectSoundFullDuplexImpl *This = impl_from_IDirectSoundFullDuplex(iface);




More information about the wine-cvs mailing list