Nikolay Sivov : msxml3: getPrefix() should check all pushed contexts as well.

Alexandre Julliard julliard at winehq.org
Mon Apr 23 13:41:37 CDT 2012


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Sun Apr 22 23:37:47 2012 +0400

msxml3: getPrefix() should check all pushed contexts as well.

---

 dlls/msxml3/mxnamespace.c  |   25 +++++++++++++------------
 dlls/msxml3/tests/domdoc.c |    9 ---------
 2 files changed, 13 insertions(+), 21 deletions(-)

diff --git a/dlls/msxml3/mxnamespace.c b/dlls/msxml3/mxnamespace.c
index f7d4eb6..7ec3f6e 100644
--- a/dlls/msxml3/mxnamespace.c
+++ b/dlls/msxml3/mxnamespace.c
@@ -144,16 +144,20 @@ static HRESULT get_declared_prefix_idx(const struct nscontext *ctxt, LONG index,
 }
 
 /* returned stored pointer, caller needs to copy it */
-static HRESULT get_declared_prefix_uri(const struct nscontext *ctxt, const WCHAR *uri, BSTR *prefix)
+static HRESULT get_declared_prefix_uri(const struct list *ctxts, const WCHAR *uri, BSTR *prefix)
 {
-    int i;
+    struct nscontext *ctxt;
 
-    for (i = 0; i < ctxt->count; i++)
-        if (!strcmpW(ctxt->ns[i].uri, uri))
-        {
-            *prefix = ctxt->ns[i].prefix;
-            return S_OK;
-        }
+    LIST_FOR_EACH_ENTRY(ctxt, ctxts, struct nscontext, entry)
+    {
+        int i;
+        for (i = 0; i < ctxt->count; i++)
+            if (!strcmpW(ctxt->ns[i].uri, uri))
+            {
+                *prefix = ctxt->ns[i].prefix;
+                return S_OK;
+            }
+    }
 
     *prefix = NULL;
     return E_FAIL;
@@ -321,7 +325,6 @@ static HRESULT WINAPI namespacemanager_getPrefix(IMXNamespaceManager *iface,
     const WCHAR *uri, LONG index, WCHAR *prefix, int *prefix_len)
 {
     namespacemanager *This = impl_from_IMXNamespaceManager( iface );
-    struct nscontext *ctxt;
     HRESULT hr;
     BSTR prfx;
 
@@ -329,9 +332,7 @@ static HRESULT WINAPI namespacemanager_getPrefix(IMXNamespaceManager *iface,
 
     if (!uri || !*uri || !prefix_len) return E_INVALIDARG;
 
-    ctxt = LIST_ENTRY(list_head(&This->ctxts), struct nscontext, entry);
-
-    hr = get_declared_prefix_uri(ctxt, uri, &prfx);
+    hr = get_declared_prefix_uri(&This->ctxts, uri, &prfx);
     if (hr == S_OK)
     {
         /* TODO: figure out what index argument is for */
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index ccc2c64..d50a22e 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -10741,12 +10741,9 @@ todo_wine {
     len = 100;
     buffW[0] = 0x1;
     hr = IMXNamespaceManager_getPrefix(nsmgr, _bstr_("ns1 uri"), 0, buffW, &len);
-todo_wine
     EXPECT_HR(hr, S_OK);
-    if (hr == S_OK) {
     ok(!lstrcmpW(buffW, _bstr_("ns1")), "got %s\n", wine_dbgstr_w(buffW));
     ok(len == 3, "got %d\n", len);
-    }
 
     hr = IMXNamespaceManager_declarePrefix(nsmgr, _bstr_("ns2"), _bstr_("ns2 uri"));
     EXPECT_HR(hr, S_OK);
@@ -10766,22 +10763,16 @@ todo_wine
     len = 100;
     buffW[0] = 0x1;
     hr = IMXNamespaceManager_getPrefix(nsmgr, _bstr_("ns2 uri"), 0, buffW, &len);
-todo_wine
     EXPECT_HR(hr, S_OK);
-    if (hr == S_OK) {
     ok(!lstrcmpW(buffW, _bstr_("ns2")), "got %s\n", wine_dbgstr_w(buffW));
     ok(len == 3, "got %d\n", len);
-    }
 
     len = 100;
     buffW[0] = 0x1;
     hr = IMXNamespaceManager_getPrefix(nsmgr, _bstr_("ns1 uri"), 0, buffW, &len);
-todo_wine
     EXPECT_HR(hr, S_OK);
-    if (hr == S_OK) {
     ok(!lstrcmpW(buffW, _bstr_("ns1")), "got %s\n", wine_dbgstr_w(buffW));
     ok(len == 3, "got %d\n", len);
-    }
 
     hr = IMXNamespaceManager_popContext(nsmgr);
     EXPECT_HR(hr, S_OK);




More information about the wine-cvs mailing list