[PATCH] msxml3: put_output accepts DOMDocument destination

Jefferson Carpenter jeffersoncarpenter2 at gmail.com
Sun Apr 14 16:51:44 CDT 2019


Is there a way for me to close a patch from my end, or do you have to do that?

On Sun, Apr 14, 2019 at 7:29 AM Nikolay Sivov <nsivov at codeweavers.com> wrote:
>
> 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