Jacek Caban : mshtml: Reimplement get_node_obj using vtbl comparison.

Alexandre Julliard julliard at winehq.org
Thu Jun 28 13:55:18 CDT 2012


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Jun 28 11:22:12 2012 +0200

mshtml: Reimplement get_node_obj using vtbl comparison.

---

 dlls/mshtml/htmlnode.c |   32 +++++++++-----------------------
 1 files changed, 9 insertions(+), 23 deletions(-)

diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c
index 46061a6..3951494 100644
--- a/dlls/mshtml/htmlnode.c
+++ b/dlls/mshtml/htmlnode.c
@@ -883,6 +883,15 @@ static const IHTMLDOMNodeVtbl HTMLDOMNodeVtbl = {
     HTMLDOMNode_get_nextSibling
 };
 
+static HTMLDOMNode *get_node_obj(HTMLDocumentNode *This, IUnknown *iface)
+{
+    IHTMLDOMNode *node;
+    HRESULT hres;
+
+    hres = IUnknown_QueryInterface(iface, &IID_IHTMLDOMNode, (void**)&node);
+    return hres == S_OK && node->lpVtbl == &HTMLDOMNodeVtbl ? impl_from_IHTMLDOMNode(node) : NULL;
+}
+
 static inline HTMLDOMNode *impl_from_IHTMLDOMNode2(IHTMLDOMNode2 *iface)
 {
     return CONTAINING_RECORD(iface, HTMLDOMNode, IHTMLDOMNode2_iface);
@@ -1117,29 +1126,6 @@ HRESULT get_node(HTMLDocumentNode *This, nsIDOMNode *nsnode, BOOL create, HTMLDO
     return create_node(This, nsnode, ret);
 }
 
-/*
- * FIXME
- * We should use better way for getting node object (like private interface)
- * or avoid it at all.
- */
-static HTMLDOMNode *get_node_obj(HTMLDocumentNode *This, IUnknown *iface)
-{
-    HTMLDOMNode *iter = This->nodes;
-    IHTMLDOMNode *node;
-
-    IUnknown_QueryInterface(iface, &IID_IHTMLDOMNode, (void**)&node);
-
-    while(iter) {
-        if(&iter->IHTMLDOMNode_iface == node)
-            return iter;
-        iter = iter->next;
-    }
-
-    FIXME("Not found %p\n", iface);
-    IHTMLDOMNode_Release(node);
-    return NULL;
-}
-
 void release_nodes(HTMLDocumentNode *This)
 {
     HTMLDOMNode *iter, *next;




More information about the wine-cvs mailing list