From af502d236e8c743291918e78df562551511910d1 Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Sun, 10 Jan 2010 22:22:06 +0300 Subject: [PATCH] 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 8a9ae7881b7..5db91f1d630 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[] = "\n" + "\n" "\n" " 1234\n" " Captain Ahab\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 227afc2e349..018cf6c173d 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)