~ubuntu-wine/ubuntu/lucid/wine1.2/wine1.2+winepulse

« back to all changes in this revision

Viewing changes to dlls/msxml3/xmldoc.c

  • Committer: Bazaar Package Importer
  • Author(s): Scott Ritchie
  • Date: 2010-02-02 11:15:03 UTC
  • mfrom: (1.1.9 upstream)
  • Revision ID: james.westby@ubuntu.com-20100202111503-w4ayji21ei1ginjr
Tags: 1.1.37-0ubuntu1
* New upstream release
  - A number of fixes in AVI file support.
  - Several MSXML improvements.
  - A few MSI fixes.
  - Various bug fixes.

Show diffs side-by-side

added added

removed removed

Lines of Context:
54
54
    HRESULT error;
55
55
 
56
56
    /* IXMLDocument */
57
 
    IXMLElement *root;
58
57
    xmlDocPtr xmldoc;
59
58
 
60
59
    /* IPersistStream */
198
197
static HRESULT WINAPI xmldoc_get_root(IXMLDocument *iface, IXMLElement **p)
199
198
{
200
199
    xmldoc *This = impl_from_IXMLDocument(iface);
 
200
    xmlNodePtr root;
201
201
 
202
202
    TRACE("(%p, %p)\n", iface, p);
203
203
 
204
204
    if (!p)
205
205
        return E_INVALIDARG;
206
206
 
207
 
    *p = This->root;
208
 
    if (!*p)
 
207
    *p = NULL;
 
208
 
 
209
    if (!(root = xmlDocGetRootElement(This->xmldoc)))
209
210
        return E_FAIL;
210
211
 
211
 
    return S_OK;
 
212
    return XMLElement_create((IUnknown *)This, root, (LPVOID *)p, FALSE);
212
213
}
213
214
 
214
215
static HRESULT WINAPI xmldoc_get_fileSize(IXMLDocument *iface, BSTR *p)
439
440
 
440
441
static HRESULT WINAPI xmldoc_get_version(IXMLDocument *iface, BSTR *p)
441
442
{
442
 
    FIXME("(%p, %p): stub\n", iface, p);
443
 
    return E_NOTIMPL;
 
443
    xmldoc *This = impl_from_IXMLDocument(iface);
 
444
 
 
445
    TRACE("(%p, %p)\n", This, p);
 
446
 
 
447
    if (!p) return E_INVALIDARG;
 
448
    *p = bstr_from_xmlChar(This->xmldoc->version);
 
449
 
 
450
    return S_OK;
444
451
}
445
452
 
446
453
static HRESULT WINAPI xmldoc_get_doctype(IXMLDocument *iface, BSTR *p)
447
454
{
448
 
    FIXME("(%p, %p): stub\n", iface, p);
449
 
    return E_NOTIMPL;
 
455
    xmldoc *This = impl_from_IXMLDocument(iface);
 
456
    xmlDtd *dtd;
 
457
 
 
458
    TRACE("(%p, %p)\n", This, p);
 
459
 
 
460
    if (!p) return E_INVALIDARG;
 
461
 
 
462
    dtd = xmlGetIntSubset(This->xmldoc);
 
463
    if (!dtd) return S_FALSE;
 
464
 
 
465
    *p = bstr_from_xmlChar(dtd->name);
 
466
    CharUpperBuffW(*p, SysStringLen(*p));
 
467
 
 
468
    return S_OK;
450
469
}
451
470
 
452
471
static HRESULT WINAPI xmldoc_get_dtdURl(IXMLDocument *iface, BSTR *p)
501
520
    node->type = type_msxml_to_libxml(V_I4(&vType));
502
521
 
503
522
    /* FIXME: create xmlNodePtr based on vType and var1 */
504
 
    return XMLElement_create((IUnknown *)iface, node, (LPVOID *)ppElem);
 
523
    return XMLElement_create((IUnknown *)iface, node, (LPVOID *)ppElem, TRUE);
505
524
}
506
525
 
507
526
static const struct IXMLDocumentVtbl xmldoc_vtbl =
556
575
static HRESULT WINAPI xmldoc_IPersistStreamInit_GetClassID(
557
576
    IPersistStreamInit *iface, CLSID *classid)
558
577
{
559
 
    FIXME("(%p,%p): stub!\n", iface, classid);
560
 
    return E_NOTIMPL;
 
578
    xmldoc *this = impl_from_IPersistStreamInit(iface);
 
579
    TRACE("(%p,%p)\n", this, classid);
 
580
 
 
581
    if (!classid) return E_POINTER;
 
582
 
 
583
    *classid = CLSID_XMLDocument;
 
584
    return S_OK;
561
585
}
562
586
 
563
587
static HRESULT WINAPI xmldoc_IPersistStreamInit_IsDirty(
581
605
    IPersistStreamInit *iface, LPSTREAM pStm)
582
606
{
583
607
    xmldoc *This = impl_from_IPersistStreamInit(iface);
584
 
    xmlNodePtr xmlnode;
585
608
    HRESULT hr;
586
609
    HGLOBAL hglobal;
587
610
    DWORD read, written, len;
593
616
    if (!pStm)
594
617
        return E_INVALIDARG;
595
618
 
 
619
    /* release previously allocated stream */
 
620
    if (This->stream) IStream_Release(This->stream);
596
621
    hr = CreateStreamOnHGlobal(NULL, TRUE, &This->stream);
597
622
    if (FAILED(hr))
598
623
        return hr;
616
641
    len = GlobalSize(hglobal);
617
642
    ptr = GlobalLock(hglobal);
618
643
    if (len != 0)
 
644
    {
 
645
        xmlFreeDoc(This->xmldoc);
619
646
        This->xmldoc = parse_xml(ptr, len);
 
647
    }
620
648
    GlobalUnlock(hglobal);
621
649
 
622
650
    if (!This->xmldoc)
625
653
        return E_FAIL;
626
654
    }
627
655
 
628
 
    xmlnode = xmlDocGetRootElement(This->xmldoc);
629
 
    return XMLElement_create((IUnknown *)This, xmlnode, (LPVOID *)&This->root);
 
656
    return S_OK;
630
657
}
631
658
 
632
659
static HRESULT WINAPI xmldoc_IPersistStreamInit_Save(
639
666
static HRESULT WINAPI xmldoc_IPersistStreamInit_GetSizeMax(
640
667
    IPersistStreamInit *iface, ULARGE_INTEGER *pcbSize)
641
668
{
642
 
    FIXME("(%p, %p): stub!\n", iface, pcbSize);
 
669
    xmldoc *This = impl_from_IPersistStreamInit(iface);
 
670
    TRACE("(%p, %p)\n", This, pcbSize);
643
671
    return E_NOTIMPL;
644
672
}
645
673
 
646
674
static HRESULT WINAPI xmldoc_IPersistStreamInit_InitNew(
647
675
    IPersistStreamInit *iface)
648
676
{
649
 
    FIXME("(%p): stub!\n", iface);
650
 
    return E_NOTIMPL;
 
677
    xmldoc *This = impl_from_IPersistStreamInit(iface);
 
678
    TRACE("(%p)\n", This);
 
679
    return S_OK;
651
680
}
652
681
 
653
682
static const IPersistStreamInitVtbl xmldoc_IPersistStreamInit_VTable =
677
706
    doc->lpvtblIPersistStreamInit = &xmldoc_IPersistStreamInit_VTable;
678
707
    doc->ref = 1;
679
708
    doc->error = S_OK;
680
 
    doc->root = NULL;
681
709
    doc->xmldoc = NULL;
682
710
    doc->stream = NULL;
683
711