[PATCH] msxml3: put_output accepts DOMDocument destination
Nikolay Sivov
nsivov at codeweavers.com
Sun Apr 14 02:29:17 CDT 2019
Hi, Jefferson. Please see comments below.
> @@ -344,10 +355,10 @@ static HRESULT write_output_buffer(mxwriter *writer, const WCHAR *data, int len)
>
> if (!avail)
> {
> - IStream_Write(writer->dest, buff->data, buff->written, &written);
> + IStream_Write(writer->dest_stream, buff->data, buff->written, &written);
> buff->written = 0;
> if (src_len >= buff->allocated)
> - IStream_Write(writer->dest, data, src_len, &written);
> + IStream_Write(writer->dest_stream, data, src_len, &written);
> else if (src_len)
> {
> memcpy(buff->data, data, src_len);
> @@ -371,7 +382,7 @@ static HRESULT write_output_buffer(mxwriter *writer, const WCHAR *data, int len)
> /* drain what we go so far */
> if (buff->written)
> {
> - IStream_Write(writer->dest, buff->data, buff->written, &written);
> + IStream_Write(writer->dest_stream, buff->data, buff->written, &written);
> buff->written = 0;
> avail = buff->allocated;
> }
I don't think this is a way to deal with that case. When writer output
is set to DOM document what will probably happen
is a complete tree created and accumulated during SAX calls, and then
cloned back to said document on endDocument(). That means we'll simply
have to skip over any writing call, both for existing stream or BSTR
path, and create nodes instead.
> + case VT_DISPATCH:
> + {
> + IXMLDOMDocument *doc;
> + hr = IUnknown_QueryInterface(V_DISPATCH(&dest), &IID_IXMLDOMDocument, (void**)&doc);
> + if (hr == S_OK)
> + {
> + This->dest_type = MXWriterDestDocument;
> + This->dest_document = doc;
> + break;
> + }
> + FIXME("unhandled interface type for VT_DISPATCH destination\n");
> + return E_NOTIMPL;
> + }
It's impossible to tell if this is correct without tests, e.g.
VT_UNKNOWN could also be passed with document pointer, it's valid in
VARIANT sense.
So please, if you're interested in working on this, first submit some
tests and ideally a bug report, if you can tell which application is
affected.
More information about the wine-devel
mailing list