Piotr Caban : msxml3: Reorganize ISAXXMLReader_parse function.
Alexandre Julliard
julliard at winehq.org
Thu Jul 24 06:57:42 CDT 2008
Module: wine
Branch: master
Commit: 194bae3b60a2c4bb8ef4831a36b146a3b67e5455
URL: http://source.winehq.org/git/wine.git/?a=commit;h=194bae3b60a2c4bb8ef4831a36b146a3b67e5455
Author: Piotr Caban <piotr.caban at gmail.com>
Date: Wed Jul 23 16:38:50 2008 +0200
msxml3: Reorganize ISAXXMLReader_parse function.
---
dlls/msxml3/saxreader.c | 74 +++++++++++++++++++++++++++++-----------------
1 files changed, 47 insertions(+), 27 deletions(-)
diff --git a/dlls/msxml3/saxreader.c b/dlls/msxml3/saxreader.c
index f0d1ef5..d0afcf5 100644
--- a/dlls/msxml3/saxreader.c
+++ b/dlls/msxml3/saxreader.c
@@ -1039,52 +1039,72 @@ static HRESULT WINAPI isaxxmlreader_parse(
xmlChar *data = NULL;
HRESULT hr;
- FIXME("(%p) semi-stub\n", This);
+ TRACE("(%p)\n", This);
hr = SAXLocator_create(This, &locator);
if(FAILED(hr))
return E_FAIL;
+ locator->pParserCtxt = xmlNewParserCtxt();
+ if(!locator->pParserCtxt)
+ {
+ ISAXLocator_Release((ISAXLocator*)&locator->lpSAXLocatorVtbl);
+ return E_FAIL;
+ }
+
+ locator->pParserCtxt->sax = &locator->saxreader->sax;
+ locator->pParserCtxt->userData = locator;
+
hr = S_OK;
switch(V_VT(&varInput))
{
case VT_BSTR:
- locator->pParserCtxt = xmlNewParserCtxt();
- if(!locator->pParserCtxt)
- {
- hr = E_FAIL;
- break;
- }
data = xmlChar_from_wchar(V_BSTR(&varInput));
xmlSetupParserForBuffer(locator->pParserCtxt, data, NULL);
-
- locator->pParserCtxt->sax = &locator->saxreader->sax;
- locator->pParserCtxt->userData = locator;
-
- if(xmlParseDocument(locator->pParserCtxt)) hr = E_FAIL;
- else hr = locator->ret;
break;
case VT_ARRAY|VT_UI1:
- locator->pParserCtxt = xmlNewParserCtxt();
- if(!locator->pParserCtxt)
- {
- hr = E_FAIL;
- break;
- }
-
hr = SafeArrayAccessData(V_ARRAY(&varInput), (void**)&data);
if(hr != S_OK) break;
xmlSetupParserForBuffer(locator->pParserCtxt, data, NULL);
SafeArrayUnaccessData(V_ARRAY(&varInput));
-
- locator->pParserCtxt->sax = &locator->saxreader->sax;
- locator->pParserCtxt->userData = locator;
-
- if(xmlParseDocument(locator->pParserCtxt)) hr = E_FAIL;
- else hr = locator->ret;
break;
+ case VT_UNKNOWN:
+ case VT_DISPATCH: {
+ IPersistStream *persistStream;
+ IStream *stream;
+ IXMLDOMDocument *xmlDoc;
+
+ if(IUnknown_QueryInterface(V_UNKNOWN(&varInput),
+ &IID_IPersistStream, (void**)&persistStream) == S_OK)
+ {
+ IPersistStream_Release(persistStream);
+ hr = E_NOTIMPL;
+ break;
+ }
+ if(IUnknown_QueryInterface(V_UNKNOWN(&varInput),
+ &IID_IStream, (void**)&stream) == S_OK)
+ {
+ IStream_Release(stream);
+ hr = E_NOTIMPL;
+ break;
+ }
+ if(IUnknown_QueryInterface(V_UNKNOWN(&varInput),
+ &IID_IXMLDOMDocument, (void**)&xmlDoc) == S_OK)
+ {
+ IXMLDOMDocument_Release(xmlDoc);
+ hr = E_NOTIMPL;
+ break;
+ }
+ }
default:
- hr = E_NOTIMPL;
+ WARN("vt %d not implemented\n", V_VT(&varInput));
+ hr = E_INVALIDARG;
+ }
+
+ if(hr == S_OK)
+ {
+ if(xmlParseDocument(locator->pParserCtxt)) hr = E_FAIL;
+ else hr = locator->ret;
}
if(locator->pParserCtxt)
More information about the wine-cvs
mailing list