[3/5] msxml3: getPrefix() should check all pushed contexts as well
Nikolay Sivov
nsivov at codeweavers.com
Sun Apr 22 15:14:00 CDT 2012
getPrefix() should check all pushed contexts as well
-------------- next part --------------
>From 35d370413250453971e32d7358a03f88e0c40c46 Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <nsivov at codeweavers.com>
Date: Sun, 22 Apr 2012 23:37:47 +0400
Subject: [PATCH 3/5] 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);
--
1.5.6.5
More information about the wine-patches
mailing list