ReactOS 0.4.16-dev-2208-g6350669
xmldoc.c File Reference
#include <stdarg.h>
#include <libxml/parser.h>
#include <libxml/xmlerror.h>
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
#include "ole2.h"
#include "msxml6.h"
#include "wininet.h"
#include "winreg.h"
#include "shlwapi.h"
#include "ocidl.h"
#include "wine/debug.h"
#include "msxml_private.h"
Include dependency graph for xmldoc.c:

Go to the source code of this file.

Classes

struct  _xmldoc
 
struct  bsc
 

Macros

#define COBJMACROS
 

Typedefs

typedef struct _xmldoc xmldoc
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (msxml)
 
static xmldocimpl_from_IXMLDocument (IXMLDocument *iface)
 
static xmldocimpl_from_IPersistStreamInit (IPersistStreamInit *iface)
 
static HRESULT WINAPI xmldoc_QueryInterface (IXMLDocument *iface, REFIID riid, void **ppvObject)
 
static ULONG WINAPI xmldoc_AddRef (IXMLDocument *iface)
 
static ULONG WINAPI xmldoc_Release (IXMLDocument *iface)
 
static HRESULT WINAPI xmldoc_GetTypeInfoCount (IXMLDocument *iface, UINT *pctinfo)
 
static HRESULT WINAPI xmldoc_GetTypeInfo (IXMLDocument *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
 
static HRESULT WINAPI xmldoc_GetIDsOfNames (IXMLDocument *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
 
static HRESULT WINAPI xmldoc_Invoke (IXMLDocument *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
 
static HRESULT WINAPI xmldoc_get_root (IXMLDocument *iface, IXMLElement **p)
 
static HRESULT WINAPI xmldoc_get_fileSize (IXMLDocument *iface, BSTR *p)
 
static HRESULT WINAPI xmldoc_put_fileModifiedDate (IXMLDocument *iface, BSTR *p)
 
static HRESULT WINAPI xmldoc_get_fileUpdatedDate (IXMLDocument *iface, BSTR *p)
 
static HRESULT WINAPI xmldoc_get_URL (IXMLDocument *iface, BSTR *p)
 
static HRESULT WINAPI bsc_QueryInterface (IBindStatusCallback *iface, REFIID riid, LPVOID *ppobj)
 
static ULONG WINAPI bsc_AddRef (IBindStatusCallback *iface)
 
static ULONG WINAPI bsc_Release (IBindStatusCallback *iface)
 
static HRESULT WINAPI bsc_OnStartBinding (IBindStatusCallback *iface, DWORD dwReserved, IBinding *pib)
 
static HRESULT WINAPI bsc_GetPriority (IBindStatusCallback *iface, LONG *pnPriority)
 
static HRESULT WINAPI bsc_OnLowResource (IBindStatusCallback *iface, DWORD reserved)
 
static HRESULT WINAPI bsc_OnProgress (IBindStatusCallback *iface, ULONG ulProgress, ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR szStatusText)
 
static HRESULT WINAPI bsc_OnStopBinding (IBindStatusCallback *iface, HRESULT hresult, LPCWSTR szError)
 
static HRESULT WINAPI bsc_GetBindInfo (IBindStatusCallback *iface, DWORD *grfBINDF, BINDINFO *pbindinfo)
 
static HRESULT WINAPI bsc_OnDataAvailable (IBindStatusCallback *iface, DWORD grfBSCF, DWORD dwSize, FORMATETC *pformatetc, STGMEDIUM *pstgmed)
 
static HRESULT WINAPI bsc_OnObjectAvailable (IBindStatusCallback *iface, REFIID riid, IUnknown *punk)
 
static HRESULT WINAPI xmldoc_put_URL (IXMLDocument *iface, BSTR p)
 
static HRESULT WINAPI xmldoc_get_mimeType (IXMLDocument *iface, BSTR *p)
 
static HRESULT WINAPI xmldoc_get_readyState (IXMLDocument *iface, LONG *p)
 
static HRESULT WINAPI xmldoc_get_charset (IXMLDocument *iface, BSTR *p)
 
static HRESULT WINAPI xmldoc_put_charset (IXMLDocument *iface, BSTR p)
 
static HRESULT WINAPI xmldoc_get_version (IXMLDocument *iface, BSTR *p)
 
static HRESULT WINAPI xmldoc_get_doctype (IXMLDocument *iface, BSTR *p)
 
static HRESULT WINAPI xmldoc_get_dtdURl (IXMLDocument *iface, BSTR *p)
 
static xmlElementType type_msxml_to_libxml (LONG type)
 
static HRESULT WINAPI xmldoc_createElement (IXMLDocument *iface, VARIANT vType, VARIANT var1, IXMLElement **ppElem)
 
static HRESULT WINAPI xmldoc_IPersistStreamInit_QueryInterface (IPersistStreamInit *iface, REFIID riid, LPVOID *ppvObj)
 
static ULONG WINAPI xmldoc_IPersistStreamInit_AddRef (IPersistStreamInit *iface)
 
static ULONG WINAPI xmldoc_IPersistStreamInit_Release (IPersistStreamInit *iface)
 
static HRESULT WINAPI xmldoc_IPersistStreamInit_GetClassID (IPersistStreamInit *iface, CLSID *classid)
 
static HRESULT WINAPI xmldoc_IPersistStreamInit_IsDirty (IPersistStreamInit *iface)
 
static xmlDocPtr parse_xml (char *ptr, int len)
 
static HRESULT WINAPI xmldoc_IPersistStreamInit_Load (IPersistStreamInit *iface, LPSTREAM pStm)
 
static HRESULT WINAPI xmldoc_IPersistStreamInit_Save (IPersistStreamInit *iface, LPSTREAM pStm, BOOL fClearDirty)
 
static HRESULT WINAPI xmldoc_IPersistStreamInit_GetSizeMax (IPersistStreamInit *iface, ULARGE_INTEGER *pcbSize)
 
static HRESULT WINAPI xmldoc_IPersistStreamInit_InitNew (IPersistStreamInit *iface)
 
HRESULT XMLDocument_create (LPVOID *ppObj)
 

Variables

static const struct IBindStatusCallbackVtbl bsc_vtbl
 
static bsc xmldoc_bsc = { { &bsc_vtbl } }
 
static const struct IXMLDocumentVtbl xmldoc_vtbl
 
static const IPersistStreamInitVtbl xmldoc_IPersistStreamInit_VTable
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 21 of file xmldoc.c.

Typedef Documentation

◆ xmldoc

Function Documentation

◆ bsc_AddRef()

static ULONG WINAPI bsc_AddRef ( IBindStatusCallback iface)
static

Definition at line 252 of file xmldoc.c.

254{
255 return 2;
256}

◆ bsc_GetBindInfo()

static HRESULT WINAPI bsc_GetBindInfo ( IBindStatusCallback iface,
DWORD grfBINDF,
BINDINFO *  pbindinfo 
)
static

Definition at line 304 of file xmldoc.c.

308{
309 *grfBINDF = BINDF_RESYNCHRONIZE;
310
311 return S_OK;
312}
#define S_OK
Definition: intsafe.h:52

◆ bsc_GetPriority()

static HRESULT WINAPI bsc_GetPriority ( IBindStatusCallback iface,
LONG pnPriority 
)
static

Definition at line 272 of file xmldoc.c.

275{
276 return S_OK;
277}

◆ bsc_OnDataAvailable()

static HRESULT WINAPI bsc_OnDataAvailable ( IBindStatusCallback iface,
DWORD  grfBSCF,
DWORD  dwSize,
FORMATETC *  pformatetc,
STGMEDIUM *  pstgmed 
)
static

Definition at line 314 of file xmldoc.c.

320{
321 return S_OK;
322}

◆ bsc_OnLowResource()

static HRESULT WINAPI bsc_OnLowResource ( IBindStatusCallback iface,
DWORD  reserved 
)
static

Definition at line 279 of file xmldoc.c.

282{
283 return S_OK;
284}

◆ bsc_OnObjectAvailable()

static HRESULT WINAPI bsc_OnObjectAvailable ( IBindStatusCallback iface,
REFIID  riid,
IUnknown punk 
)
static

Definition at line 324 of file xmldoc.c.

328{
329 return S_OK;
330}

◆ bsc_OnProgress()

static HRESULT WINAPI bsc_OnProgress ( IBindStatusCallback iface,
ULONG  ulProgress,
ULONG  ulProgressMax,
ULONG  ulStatusCode,
LPCWSTR  szStatusText 
)
static

Definition at line 286 of file xmldoc.c.

292{
293 return S_OK;
294}

◆ bsc_OnStartBinding()

static HRESULT WINAPI bsc_OnStartBinding ( IBindStatusCallback iface,
DWORD  dwReserved,
IBinding pib 
)
static

Definition at line 264 of file xmldoc.c.

268{
269 return S_OK;
270}

◆ bsc_OnStopBinding()

static HRESULT WINAPI bsc_OnStopBinding ( IBindStatusCallback iface,
HRESULT  hresult,
LPCWSTR  szError 
)
static

Definition at line 296 of file xmldoc.c.

300{
301 return S_OK;
302}

◆ bsc_QueryInterface()

static HRESULT WINAPI bsc_QueryInterface ( IBindStatusCallback iface,
REFIID  riid,
LPVOID ppobj 
)
static

Definition at line 235 of file xmldoc.c.

239{
241 IsEqualGUID(riid, &IID_IBindStatusCallback))
242 {
243 IBindStatusCallback_AddRef( iface );
244 *ppobj = iface;
245 return S_OK;
246 }
247
248 TRACE("interface %s not implemented\n", debugstr_guid(riid));
249 return E_NOINTERFACE;
250}
const GUID IID_IUnknown
REFIID riid
Definition: atlbase.h:39
#define debugstr_guid
Definition: kernel32.h:35
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define TRACE(s)
Definition: solgame.cpp:4
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ bsc_Release()

static ULONG WINAPI bsc_Release ( IBindStatusCallback iface)
static

Definition at line 258 of file xmldoc.c.

260{
261 return 1;
262}

◆ impl_from_IPersistStreamInit()

static xmldoc * impl_from_IPersistStreamInit ( IPersistStreamInit iface)
inlinestatic

◆ impl_from_IXMLDocument()

static xmldoc * impl_from_IXMLDocument ( IXMLDocument *  iface)
inlinestatic

◆ parse_xml()

static xmlDocPtr parse_xml ( char ptr,
int  len 
)
static

Definition at line 587 of file xmldoc.c.

588{
589 return xmlReadMemory(ptr, len, NULL, NULL,
591}
#define NULL
Definition: types.h:112
GLenum GLsizei len
Definition: glext.h:6722
static PVOID ptr
Definition: dispmode.c:27
XMLPUBFUN xmlDocPtr xmlReadMemory(const char *buffer, int size, const char *URL, const char *encoding, int options)
Definition: parser.c:14835
@ XML_PARSE_NOWARNING
Definition: parser.h:1236
@ XML_PARSE_NOBLANKS
Definition: parser.h:1238
@ XML_PARSE_NOERROR
Definition: parser.h:1235

Referenced by xmldoc_IPersistStreamInit_Load().

◆ type_msxml_to_libxml()

static xmlElementType type_msxml_to_libxml ( LONG  type)
static

Definition at line 469 of file xmldoc.c.

470{
471 switch (type)
472 {
473 case XMLELEMTYPE_ELEMENT:
474 return XML_ELEMENT_NODE;
475 case XMLELEMTYPE_TEXT:
476 return XML_TEXT_NODE;
478 return XML_COMMENT_NODE;
480 return XML_DOCUMENT_NODE;
481 case XMLELEMTYPE_DTD:
482 return XML_DTD_NODE;
483 case XMLELEMTYPE_PI:
484 return XML_PI_NODE;
485 default:
486 break;
487 }
488
489 return -1; /* FIXME: what is OTHER in msxml? */
490}
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
MSXML::enum XMLELEMTYPE_DOCUMENT
MSXML::enum XMLELEMTYPE_DTD
MSXML::enum XMLELEMTYPE_TEXT
MSXML::enum XMLELEMTYPE_COMMENT
MSXML::enum XMLELEMTYPE_PI

Referenced by xmldoc_createElement().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( msxml  )

◆ xmldoc_AddRef()

static ULONG WINAPI xmldoc_AddRef ( IXMLDocument *  iface)
static

Definition at line 101 of file xmldoc.c.

102{
105 TRACE("%p, refcount %ld.\n", iface, ref);
106 return ref;
107}
#define InterlockedIncrement
Definition: armddk.h:53
static xmldoc * impl_from_IXMLDocument(IXMLDocument *iface)
Definition: xmldoc.c:62
Definition: send.c:48
uint32_t ULONG
Definition: typedefs.h:59

◆ xmldoc_createElement()

static HRESULT WINAPI xmldoc_createElement ( IXMLDocument *  iface,
VARIANT  vType,
VARIANT  var1,
IXMLElement **  ppElem 
)
static

Definition at line 492 of file xmldoc.c.

494{
495 xmlNodePtr node;
496 static const xmlChar empty[] = "\0";
497
498 TRACE("(%p)->(%s %s %p)\n", iface, debugstr_variant(&vType),
499 debugstr_variant(&var1), ppElem);
500
501 if (!ppElem)
502 return E_INVALIDARG;
503
504 *ppElem = NULL;
505
506 if (V_VT(&vType) != VT_I4)
507 return E_INVALIDARG;
508
509 if(type_msxml_to_libxml(V_I4(&vType)) == -1)
510 return E_NOTIMPL;
511
512 node = xmlNewNode(NULL, empty);
513 node->type = type_msxml_to_libxml(V_I4(&vType));
514
515 /* FIXME: create xmlNodePtr based on vType and var1 */
516 return XMLElement_create(node, (LPVOID *)ppElem, TRUE);
517}
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define TRUE
Definition: types.h:120
static const WCHAR empty[]
Definition: main.c:47
@ VT_I4
Definition: compat.h:2298
static xmlElementType type_msxml_to_libxml(LONG type)
Definition: xmldoc.c:469
static const char * debugstr_variant(const VARIANT *var)
Definition: container.c:46
HRESULT XMLElement_create(xmlNodePtr node, LPVOID *ppObj, BOOL own)
Definition: xmlelem.c:480
#define V_VT(A)
Definition: oleauto.h:211
#define V_I4(A)
Definition: oleauto.h:247
Definition: dlist.c:348
unsigned char xmlChar
Definition: xmlstring.h:28

◆ xmldoc_get_charset()

static HRESULT WINAPI xmldoc_get_charset ( IXMLDocument *  iface,
BSTR p 
)
static

Definition at line 421 of file xmldoc.c.

422{
423 FIXME("(%p, %p): stub\n", iface, p);
424 return E_NOTIMPL;
425}
#define FIXME(fmt,...)
Definition: precomp.h:53
GLfloat GLfloat p
Definition: glext.h:8902

◆ xmldoc_get_doctype()

static HRESULT WINAPI xmldoc_get_doctype ( IXMLDocument *  iface,
BSTR p 
)
static

Definition at line 445 of file xmldoc.c.

446{
448 xmlDtd *dtd;
449
450 TRACE("(%p, %p)\n", This, p);
451
452 if (!p) return E_INVALIDARG;
453
454 dtd = xmlGetIntSubset(This->xmldoc);
455 if (!dtd) return S_FALSE;
456
457 *p = bstr_from_xmlChar(dtd->name);
459
460 return S_OK;
461}
DWORD WINAPI CharUpperBuffW(WCHAR *str, DWORD len)
Definition: string.c:1199
static BSTR bstr_from_xmlChar(const xmlChar *str)
UINT WINAPI SysStringLen(BSTR str)
Definition: oleaut.c:196
#define S_FALSE
Definition: winerror.h:3451

◆ xmldoc_get_dtdURl()

static HRESULT WINAPI xmldoc_get_dtdURl ( IXMLDocument *  iface,
BSTR p 
)
static

Definition at line 463 of file xmldoc.c.

464{
465 FIXME("(%p, %p): stub\n", iface, p);
466 return E_NOTIMPL;
467}

◆ xmldoc_get_fileSize()

static HRESULT WINAPI xmldoc_get_fileSize ( IXMLDocument *  iface,
BSTR p 
)
static

Definition at line 207 of file xmldoc.c.

208{
209 FIXME("(%p, %p): stub\n", iface, p);
210 return E_NOTIMPL;
211}

◆ xmldoc_get_fileUpdatedDate()

static HRESULT WINAPI xmldoc_get_fileUpdatedDate ( IXMLDocument *  iface,
BSTR p 
)
static

Definition at line 219 of file xmldoc.c.

220{
221 FIXME("(%p, %p): stub\n", iface, p);
222 return E_NOTIMPL;
223}

◆ xmldoc_get_mimeType()

static HRESULT WINAPI xmldoc_get_mimeType ( IXMLDocument *  iface,
BSTR p 
)
static

Definition at line 409 of file xmldoc.c.

410{
411 FIXME("(%p, %p): stub\n", iface, p);
412 return E_NOTIMPL;
413}

◆ xmldoc_get_readyState()

static HRESULT WINAPI xmldoc_get_readyState ( IXMLDocument *  iface,
LONG p 
)
static

Definition at line 415 of file xmldoc.c.

416{
417 FIXME("(%p, %p): stub\n", iface, p);
418 return E_NOTIMPL;
419}

◆ xmldoc_get_root()

static HRESULT WINAPI xmldoc_get_root ( IXMLDocument *  iface,
IXMLElement **  p 
)
static

Definition at line 189 of file xmldoc.c.

190{
192 xmlNodePtr root;
193
194 TRACE("(%p, %p)\n", iface, p);
195
196 if (!p)
197 return E_INVALIDARG;
198
199 *p = NULL;
200
201 if (!(root = xmlDocGetRootElement(This->xmldoc)))
202 return E_FAIL;
203
204 return XMLElement_create(root, (LPVOID *)p, FALSE);
205}
struct _root root
#define E_FAIL
Definition: ddrawi.h:102
#define FALSE
Definition: types.h:117

◆ xmldoc_get_URL()

static HRESULT WINAPI xmldoc_get_URL ( IXMLDocument *  iface,
BSTR p 
)
static

Definition at line 225 of file xmldoc.c.

226{
227 FIXME("(%p, %p): stub\n", iface, p);
228 return E_NOTIMPL;
229}

◆ xmldoc_get_version()

static HRESULT WINAPI xmldoc_get_version ( IXMLDocument *  iface,
BSTR p 
)
static

Definition at line 433 of file xmldoc.c.

434{
436
437 TRACE("(%p, %p)\n", This, p);
438
439 if (!p) return E_INVALIDARG;
440 *p = bstr_from_xmlChar(This->xmldoc->version);
441
442 return S_OK;
443}

◆ xmldoc_GetIDsOfNames()

static HRESULT WINAPI xmldoc_GetIDsOfNames ( IXMLDocument *  iface,
REFIID  riid,
LPOLESTR rgszNames,
UINT  cNames,
LCID  lcid,
DISPID rgDispId 
)
static

Definition at line 145 of file xmldoc.c.

148{
150 HRESULT hr;
151
152 TRACE("%p, %s, %p, %u, %lx, %p.\n", iface, debugstr_guid(riid), rgszNames, cNames,
153 lcid, rgDispId);
154
155 if(!rgszNames || cNames == 0 || !rgDispId)
156 return E_INVALIDARG;
157
159 if(SUCCEEDED(hr))
160 {
161 hr = ITypeInfo_GetIDsOfNames(typeinfo, rgszNames, cNames, rgDispId);
162 ITypeInfo_Release(typeinfo);
163 }
164
165 return hr;
166}
HRESULT get_typeinfo(enum type_id tid, ITypeInfo **ret)
Definition: apps.c:124
LCID lcid
Definition: locale.c:5656
#define SUCCEEDED(hr)
Definition: intsafe.h:50
@ IXMLDocument_tid
Definition: msxml_dispex.h:60
HRESULT hr
Definition: shlfolder.c:183

◆ xmldoc_GetTypeInfo()

static HRESULT WINAPI xmldoc_GetTypeInfo ( IXMLDocument *  iface,
UINT  iTInfo,
LCID  lcid,
ITypeInfo **  ppTInfo 
)
static

Definition at line 137 of file xmldoc.c.

139{
140 TRACE("%p, %u, %lx, %p.\n", iface, iTInfo, lcid, ppTInfo);
141
142 return get_typeinfo(IXMLDocument_tid, ppTInfo);
143}

◆ xmldoc_GetTypeInfoCount()

static HRESULT WINAPI xmldoc_GetTypeInfoCount ( IXMLDocument *  iface,
UINT pctinfo 
)
static

Definition at line 126 of file xmldoc.c.

127{
129
130 TRACE("(%p)->(%p)\n", This, pctinfo);
131
132 *pctinfo = 1;
133
134 return S_OK;
135}

◆ xmldoc_Invoke()

static HRESULT WINAPI xmldoc_Invoke ( IXMLDocument *  iface,
DISPID  dispIdMember,
REFIID  riid,
LCID  lcid,
WORD  wFlags,
DISPPARAMS *  pDispParams,
VARIANT pVarResult,
EXCEPINFO *  pExcepInfo,
UINT puArgErr 
)
static

Definition at line 168 of file xmldoc.c.

172{
174 HRESULT hr;
175
176 TRACE("%p, %ld, %s, %lx, %d, %p, %p, %p, %p.\n", iface, dispIdMember, debugstr_guid(riid),
177 lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
178
180 if(SUCCEEDED(hr))
181 {
182 hr = ITypeInfo_Invoke(typeinfo, iface, dispIdMember, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
183 ITypeInfo_Release(typeinfo);
184 }
185
186 return hr;
187}
WINBASEAPI _In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon_undoc.h:337

◆ xmldoc_IPersistStreamInit_AddRef()

static ULONG WINAPI xmldoc_IPersistStreamInit_AddRef ( IPersistStreamInit iface)
static

Definition at line 554 of file xmldoc.c.

556{
558 return IXMLDocument_AddRef(&this->IXMLDocument_iface);
559}
static xmldoc * impl_from_IPersistStreamInit(IPersistStreamInit *iface)
Definition: xmldoc.c:67

◆ xmldoc_IPersistStreamInit_GetClassID()

static HRESULT WINAPI xmldoc_IPersistStreamInit_GetClassID ( IPersistStreamInit iface,
CLSID classid 
)
static

Definition at line 568 of file xmldoc.c.

570{
572 TRACE("(%p,%p)\n", this, classid);
573
574 if (!classid) return E_POINTER;
575
576 *classid = CLSID_XMLDocument;
577 return S_OK;
578}
const struct _GUID CLSID_XMLDocument
#define E_POINTER
Definition: winerror.h:3480

◆ xmldoc_IPersistStreamInit_GetSizeMax()

static HRESULT WINAPI xmldoc_IPersistStreamInit_GetSizeMax ( IPersistStreamInit iface,
ULARGE_INTEGER pcbSize 
)
static

Definition at line 655 of file xmldoc.c.

657{
659 TRACE("(%p, %p)\n", This, pcbSize);
660 return E_NOTIMPL;
661}

◆ xmldoc_IPersistStreamInit_InitNew()

static HRESULT WINAPI xmldoc_IPersistStreamInit_InitNew ( IPersistStreamInit iface)
static

Definition at line 663 of file xmldoc.c.

665{
667 TRACE("(%p)\n", This);
668 return S_OK;
669}

◆ xmldoc_IPersistStreamInit_IsDirty()

static HRESULT WINAPI xmldoc_IPersistStreamInit_IsDirty ( IPersistStreamInit iface)
static

Definition at line 580 of file xmldoc.c.

582{
583 FIXME("(%p): stub!\n", iface);
584 return E_NOTIMPL;
585}

◆ xmldoc_IPersistStreamInit_Load()

static HRESULT WINAPI xmldoc_IPersistStreamInit_Load ( IPersistStreamInit iface,
LPSTREAM  pStm 
)
static

Definition at line 593 of file xmldoc.c.

595{
597 HRESULT hr;
598 HGLOBAL hglobal;
599 DWORD read, written, len;
600 BYTE buf[4096];
601 char *ptr;
602
603 TRACE("(%p, %p)\n", iface, pStm);
604
605 if (!pStm)
606 return E_INVALIDARG;
607
608 /* release previously allocated stream */
609 if (This->stream) IStream_Release(This->stream);
610 hr = CreateStreamOnHGlobal(NULL, TRUE, &This->stream);
611 if (FAILED(hr))
612 return hr;
613
614 do
615 {
616 IStream_Read(pStm, buf, sizeof(buf), &read);
617 hr = IStream_Write(This->stream, buf, read, &written);
618 } while(SUCCEEDED(hr) && written != 0 && read != 0);
619
620 if (FAILED(hr))
621 {
622 ERR("Failed to copy stream\n");
623 return hr;
624 }
625
626 hr = GetHGlobalFromStream(This->stream, &hglobal);
627 if (FAILED(hr))
628 return hr;
629
630 len = GlobalSize(hglobal);
631 ptr = GlobalLock(hglobal);
632 if (len != 0)
633 {
634 xmlFreeDoc(This->xmldoc);
635 This->xmldoc = parse_xml(ptr, len);
636 }
637 GlobalUnlock(hglobal);
638
639 if (!This->xmldoc)
640 {
641 ERR("Failed to parse xml\n");
642 return E_FAIL;
643 }
644
645 return S_OK;
646}
#define read
Definition: acwin.h:96
#define ERR(fmt,...)
Definition: precomp.h:57
static xmlDocPtr parse_xml(char *ptr, int len)
Definition: xmldoc.c:587
HRESULT WINAPI GetHGlobalFromStream(IStream *pstm, HGLOBAL *phglobal)
HRESULT WINAPI CreateStreamOnHGlobal(HGLOBAL hGlobal, BOOL fDeleteOnRelease, LPSTREAM *ppstm)
unsigned long DWORD
Definition: ntddk_ex.h:95
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
Definition: heapmem.c:1190
SIZE_T NTAPI GlobalSize(HGLOBAL hMem)
Definition: heapmem.c:1090
#define FAILED(hr)
Definition: intsafe.h:51
static ERESOURCE GlobalLock
Definition: sys_arch.c:8
unsigned char BYTE
Definition: xxhash.c:193

◆ xmldoc_IPersistStreamInit_QueryInterface()

static HRESULT WINAPI xmldoc_IPersistStreamInit_QueryInterface ( IPersistStreamInit iface,
REFIID  riid,
LPVOID ppvObj 
)
static

Definition at line 547 of file xmldoc.c.

549{
551 return IXMLDocument_QueryInterface(&this->IXMLDocument_iface, riid, ppvObj);
552}

◆ xmldoc_IPersistStreamInit_Release()

static ULONG WINAPI xmldoc_IPersistStreamInit_Release ( IPersistStreamInit iface)
static

Definition at line 561 of file xmldoc.c.

563{
565 return IXMLDocument_Release(&this->IXMLDocument_iface);
566}

◆ xmldoc_IPersistStreamInit_Save()

static HRESULT WINAPI xmldoc_IPersistStreamInit_Save ( IPersistStreamInit iface,
LPSTREAM  pStm,
BOOL  fClearDirty 
)
static

Definition at line 648 of file xmldoc.c.

650{
651 FIXME("(%p, %p, %d): stub!\n", iface, pStm, fClearDirty);
652 return E_NOTIMPL;
653}

◆ xmldoc_put_charset()

static HRESULT WINAPI xmldoc_put_charset ( IXMLDocument *  iface,
BSTR  p 
)
static

Definition at line 427 of file xmldoc.c.

428{
429 FIXME("(%p, %p): stub\n", iface, p);
430 return E_NOTIMPL;
431}

◆ xmldoc_put_fileModifiedDate()

static HRESULT WINAPI xmldoc_put_fileModifiedDate ( IXMLDocument *  iface,
BSTR p 
)
static

Definition at line 213 of file xmldoc.c.

214{
215 FIXME("(%p, %p): stub\n", iface, p);
216 return E_NOTIMPL;
217}

◆ xmldoc_put_URL()

static HRESULT WINAPI xmldoc_put_URL ( IXMLDocument *  iface,
BSTR  p 
)
static

Definition at line 349 of file xmldoc.c.

350{
353 IBindCtx *bctx;
355 IPersistStreamInit *persist;
356 HRESULT hr;
357
358 TRACE("(%p, %s)\n", iface, debugstr_w(p));
359
360 if (!p)
361 return E_INVALIDARG;
362
363 if (!PathIsURLW(p))
364 {
365 WCHAR fullpath[MAX_PATH];
366 DWORD needed = ARRAY_SIZE(url);
367
368 if (!PathSearchAndQualifyW(p, fullpath, ARRAY_SIZE(fullpath)))
369 {
370 ERR("can't find path\n");
371 return E_FAIL;
372 }
373
374 if (FAILED(UrlCreateFromPathW(fullpath, url, &needed, 0)))
375 {
376 ERR("can't create url from path\n");
377 return E_FAIL;
378 }
379
380 p = url;
381 }
382
384 if (FAILED(hr))
385 return hr;
386
388
389 hr = IMoniker_BindToStorage(moniker, bctx, NULL, &IID_IStream, (LPVOID *)&stream);
390 IBindCtx_Release(bctx);
391 IMoniker_Release(moniker);
392 if (FAILED(hr))
393 return hr;
394
395 hr = IXMLDocument_QueryInterface(iface, &IID_IPersistStreamInit, (LPVOID *)&persist);
396 if (FAILED(hr))
397 {
398 IStream_Release(stream);
399 return hr;
400 }
401
402 hr = IPersistStreamInit_Load(persist, stream);
403 IPersistStreamInit_Release(persist);
404 IStream_Release(stream);
405
406 return hr;
407}
#define ARRAY_SIZE(A)
Definition: main.h:20
#define MAX_PATH
Definition: compat.h:34
HRESULT WINAPI UrlCreateFromPathW(const WCHAR *path, WCHAR *url, DWORD *url_len, DWORD reserved)
Definition: path.c:4916
BOOL WINAPI PathSearchAndQualifyW(const WCHAR *path, WCHAR *buffer, UINT length)
Definition: path.c:2348
BOOL WINAPI PathIsURLW(const WCHAR *path)
Definition: path.c:3238
static bsc xmldoc_bsc
Definition: xmldoc.c:347
#define INTERNET_MAX_URL_LENGTH
Definition: session.c:1418
#define debugstr_w
Definition: kernel32.h:32
static const WCHAR url[]
Definition: encode.c:1384
const GUID IID_IPersistStreamInit
IBindStatusCallback IBindStatusCallback_iface
Definition: xmldoc.c:232
Definition: main.c:40
Definition: parse.h:23
HRESULT WINAPI CreateURLMoniker(IMoniker *pmkContext, LPCWSTR szURL, IMoniker **ppmk)
Definition: umon.c:732
HRESULT WINAPI CreateAsyncBindCtx(DWORD reserved, IBindStatusCallback *callback, IEnumFORMATETC *format, IBindCtx **pbind)
Definition: bindctx.c:899
__wchar_t WCHAR
Definition: xmlstorage.h:180

◆ xmldoc_QueryInterface()

static HRESULT WINAPI xmldoc_QueryInterface ( IXMLDocument *  iface,
REFIID  riid,
void **  ppvObject 
)
static

Definition at line 72 of file xmldoc.c.

73{
75
76 TRACE("%p %s %p\n", This, debugstr_guid(riid), ppvObject);
77
80 IsEqualGUID(riid, &IID_IXMLDocument))
81 {
82 *ppvObject = iface;
83 }
86 {
87 *ppvObject = &This->IPersistStreamInit_iface;
88 }
89 else
90 {
91 FIXME("interface %s not implemented\n", debugstr_guid(riid));
92 *ppvObject = NULL;
93 return E_NOINTERFACE;
94 }
95
96 IXMLDocument_AddRef(iface);
97
98 return S_OK;
99}
const GUID IID_IDispatch
const GUID IID_IPersistStream
Definition: proxy.cpp:13

◆ xmldoc_Release()

static ULONG WINAPI xmldoc_Release ( IXMLDocument *  iface)
static

Definition at line 109 of file xmldoc.c.

110{
113
114 TRACE("%p, refcount %ld.\n", iface, ref);
115
116 if (ref == 0)
117 {
118 xmlFreeDoc(This->xmldoc);
119 if (This->stream) IStream_Release(This->stream);
120 free(This);
121 }
122
123 return ref;
124}
#define InterlockedDecrement
Definition: armddk.h:52
#define free
Definition: debug_ros.c:5
long LONG
Definition: pedump.c:60

◆ XMLDocument_create()

HRESULT XMLDocument_create ( LPVOID ppObj)

Definition at line 684 of file xmldoc.c.

685{
686 xmldoc *doc;
687
688 TRACE("(%p)\n", ppObj);
689
690 doc = malloc(sizeof(*doc));
691 if(!doc)
692 return E_OUTOFMEMORY;
693
694 doc->IXMLDocument_iface.lpVtbl = &xmldoc_vtbl;
696 doc->ref = 1;
697 doc->error = S_OK;
698 doc->xmldoc = NULL;
699 doc->stream = NULL;
700
701 *ppObj = &doc->IXMLDocument_iface;
702
703 TRACE("returning iface %p\n", *ppObj);
704 return S_OK;
705}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define malloc
Definition: debug_ros.c:4
static const IPersistStreamInitVtbl xmldoc_IPersistStreamInit_VTable
Definition: xmldoc.c:671
static const struct IXMLDocumentVtbl xmldoc_vtbl
Definition: xmldoc.c:519
xmlDocPtr xmldoc
Definition: xmldoc.c:56
IStream * stream
Definition: xmldoc.c:59
HRESULT error
Definition: xmldoc.c:53
LONG ref
Definition: xmldoc.c:52
IXMLDocument IXMLDocument_iface
Definition: xmldoc.c:50
IPersistStreamInit IPersistStreamInit_iface
Definition: xmldoc.c:51

Variable Documentation

◆ bsc_vtbl

const struct IBindStatusCallbackVtbl bsc_vtbl
static
Initial value:
=
{
}
static ULONG WINAPI bsc_AddRef(IBindStatusCallback *iface)
Definition: xmldoc.c:252
static HRESULT WINAPI bsc_OnStopBinding(IBindStatusCallback *iface, HRESULT hresult, LPCWSTR szError)
Definition: xmldoc.c:296
static HRESULT WINAPI bsc_GetPriority(IBindStatusCallback *iface, LONG *pnPriority)
Definition: xmldoc.c:272
static HRESULT WINAPI bsc_OnObjectAvailable(IBindStatusCallback *iface, REFIID riid, IUnknown *punk)
Definition: xmldoc.c:324
static HRESULT WINAPI bsc_OnProgress(IBindStatusCallback *iface, ULONG ulProgress, ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR szStatusText)
Definition: xmldoc.c:286
static HRESULT WINAPI bsc_OnStartBinding(IBindStatusCallback *iface, DWORD dwReserved, IBinding *pib)
Definition: xmldoc.c:264
static ULONG WINAPI bsc_Release(IBindStatusCallback *iface)
Definition: xmldoc.c:258
static HRESULT WINAPI bsc_GetBindInfo(IBindStatusCallback *iface, DWORD *grfBINDF, BINDINFO *pbindinfo)
Definition: xmldoc.c:304
static HRESULT WINAPI bsc_OnLowResource(IBindStatusCallback *iface, DWORD reserved)
Definition: xmldoc.c:279
static HRESULT WINAPI bsc_QueryInterface(IBindStatusCallback *iface, REFIID riid, LPVOID *ppobj)
Definition: xmldoc.c:235
static HRESULT WINAPI bsc_OnDataAvailable(IBindStatusCallback *iface, DWORD grfBSCF, DWORD dwSize, FORMATETC *pformatetc, STGMEDIUM *pstgmed)
Definition: xmldoc.c:314

Definition at line 332 of file xmldoc.c.

◆ xmldoc_bsc

bsc xmldoc_bsc = { { &bsc_vtbl } }
static

Definition at line 347 of file xmldoc.c.

Referenced by xmldoc_put_URL().

◆ xmldoc_IPersistStreamInit_VTable

const IPersistStreamInitVtbl xmldoc_IPersistStreamInit_VTable
static
Initial value:
=
{
}
static HRESULT WINAPI xmldoc_IPersistStreamInit_IsDirty(IPersistStreamInit *iface)
Definition: xmldoc.c:580
static HRESULT WINAPI xmldoc_IPersistStreamInit_Load(IPersistStreamInit *iface, LPSTREAM pStm)
Definition: xmldoc.c:593
static HRESULT WINAPI xmldoc_IPersistStreamInit_QueryInterface(IPersistStreamInit *iface, REFIID riid, LPVOID *ppvObj)
Definition: xmldoc.c:547
static ULONG WINAPI xmldoc_IPersistStreamInit_AddRef(IPersistStreamInit *iface)
Definition: xmldoc.c:554
static ULONG WINAPI xmldoc_IPersistStreamInit_Release(IPersistStreamInit *iface)
Definition: xmldoc.c:561
static HRESULT WINAPI xmldoc_IPersistStreamInit_InitNew(IPersistStreamInit *iface)
Definition: xmldoc.c:663
static HRESULT WINAPI xmldoc_IPersistStreamInit_GetClassID(IPersistStreamInit *iface, CLSID *classid)
Definition: xmldoc.c:568
static HRESULT WINAPI xmldoc_IPersistStreamInit_Save(IPersistStreamInit *iface, LPSTREAM pStm, BOOL fClearDirty)
Definition: xmldoc.c:648
static HRESULT WINAPI xmldoc_IPersistStreamInit_GetSizeMax(IPersistStreamInit *iface, ULARGE_INTEGER *pcbSize)
Definition: xmldoc.c:655

Definition at line 671 of file xmldoc.c.

Referenced by XMLDocument_create().

◆ xmldoc_vtbl

const struct IXMLDocumentVtbl xmldoc_vtbl
static
Initial value:
=
{
}
static ULONG WINAPI xmldoc_Release(IXMLDocument *iface)
Definition: xmldoc.c:109
static HRESULT WINAPI xmldoc_put_URL(IXMLDocument *iface, BSTR p)
Definition: xmldoc.c:349
static HRESULT WINAPI xmldoc_get_mimeType(IXMLDocument *iface, BSTR *p)
Definition: xmldoc.c:409
static HRESULT WINAPI xmldoc_get_fileUpdatedDate(IXMLDocument *iface, BSTR *p)
Definition: xmldoc.c:219
static HRESULT WINAPI xmldoc_put_fileModifiedDate(IXMLDocument *iface, BSTR *p)
Definition: xmldoc.c:213
static HRESULT WINAPI xmldoc_get_charset(IXMLDocument *iface, BSTR *p)
Definition: xmldoc.c:421
static HRESULT WINAPI xmldoc_get_dtdURl(IXMLDocument *iface, BSTR *p)
Definition: xmldoc.c:463
static HRESULT WINAPI xmldoc_get_fileSize(IXMLDocument *iface, BSTR *p)
Definition: xmldoc.c:207
static HRESULT WINAPI xmldoc_get_version(IXMLDocument *iface, BSTR *p)
Definition: xmldoc.c:433
static HRESULT WINAPI xmldoc_QueryInterface(IXMLDocument *iface, REFIID riid, void **ppvObject)
Definition: xmldoc.c:72
static ULONG WINAPI xmldoc_AddRef(IXMLDocument *iface)
Definition: xmldoc.c:101
static HRESULT WINAPI xmldoc_GetTypeInfo(IXMLDocument *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
Definition: xmldoc.c:137
static HRESULT WINAPI xmldoc_GetTypeInfoCount(IXMLDocument *iface, UINT *pctinfo)
Definition: xmldoc.c:126
static HRESULT WINAPI xmldoc_get_readyState(IXMLDocument *iface, LONG *p)
Definition: xmldoc.c:415
static HRESULT WINAPI xmldoc_GetIDsOfNames(IXMLDocument *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
Definition: xmldoc.c:145
static HRESULT WINAPI xmldoc_get_doctype(IXMLDocument *iface, BSTR *p)
Definition: xmldoc.c:445
static HRESULT WINAPI xmldoc_get_root(IXMLDocument *iface, IXMLElement **p)
Definition: xmldoc.c:189
static HRESULT WINAPI xmldoc_get_URL(IXMLDocument *iface, BSTR *p)
Definition: xmldoc.c:225
static HRESULT WINAPI xmldoc_Invoke(IXMLDocument *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
Definition: xmldoc.c:168
static HRESULT WINAPI xmldoc_put_charset(IXMLDocument *iface, BSTR p)
Definition: xmldoc.c:427
static HRESULT WINAPI xmldoc_createElement(IXMLDocument *iface, VARIANT vType, VARIANT var1, IXMLElement **ppElem)
Definition: xmldoc.c:492

Definition at line 519 of file xmldoc.c.

Referenced by XMLDocument_create().