Nikolay Sivov : msxml3: Implement IXMLDocument::get_doctype().

Alexandre Julliard julliard at winehq.org
Mon Jan 11 15:59:35 CST 2010


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

Author: Nikolay Sivov <bunglehead at gmail.com>
Date:   Sun Jan 10 22:22:06 2010 +0300

msxml3: Implement IXMLDocument::get_doctype().

---

 dlls/msxml3/tests/xmldoc.c |   10 ++++++++++
 dlls/msxml3/xmldoc.c       |   16 ++++++++++++++--
 2 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/dlls/msxml3/tests/xmldoc.c b/dlls/msxml3/tests/xmldoc.c
index 8a9ae78..5db91f1 100644
--- a/dlls/msxml3/tests/xmldoc.c
+++ b/dlls/msxml3/tests/xmldoc.c
@@ -39,6 +39,7 @@ static void create_xml_file(LPCSTR filename)
 
     static const char data[] =
         "<?xml version=\"1.0\" ?>\n"
+        "<!DOCTYPE BankAccount>\n"
         "<BankAccount>\n"
         "  <Number>1234</Number>\n"
         "  <Name>Captain Ahab</Name>\n"
@@ -125,6 +126,15 @@ static void test_xmldoc(void)
     ok(!lstrcmpW(name, szVersion), "Expected 1.0, got %s\n", wine_dbgstr_w(name));
     SysFreeString(name);
 
+    /* doctype */
+    hr = IXMLDocument_get_doctype(doc, NULL);
+    ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %08x\n", hr);
+
+    hr = IXMLDocument_get_doctype(doc, &name);
+    ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
+    ok(!lstrcmpW(name, szBankAccount), "Expected BANKACCOUNT, got %s\n", wine_dbgstr_w(name));
+    SysFreeString(name);
+
     hr = IXMLDocument_get_root(doc, &element);
     ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
     ok(element != NULL, "Expected non-NULL element\n");
diff --git a/dlls/msxml3/xmldoc.c b/dlls/msxml3/xmldoc.c
index 227afc2..018cf6c 100644
--- a/dlls/msxml3/xmldoc.c
+++ b/dlls/msxml3/xmldoc.c
@@ -451,8 +451,20 @@ static HRESULT WINAPI xmldoc_get_version(IXMLDocument *iface, BSTR *p)
 
 static HRESULT WINAPI xmldoc_get_doctype(IXMLDocument *iface, BSTR *p)
 {
-    FIXME("(%p, %p): stub\n", iface, p);
-    return E_NOTIMPL;
+    xmldoc *This = impl_from_IXMLDocument(iface);
+    xmlDtd *dtd;
+
+    TRACE("(%p, %p)\n", This, p);
+
+    if (!p) return E_INVALIDARG;
+
+    dtd = xmlGetIntSubset(This->xmldoc);
+    if (!dtd) return S_FALSE;
+
+    *p = bstr_from_xmlChar(dtd->name);
+    CharUpperBuffW(*p, SysStringLen(*p));
+
+    return S_OK;
 }
 
 static HRESULT WINAPI xmldoc_get_dtdURl(IXMLDocument *iface, BSTR *p)




More information about the wine-cvs mailing list