ReactOS 0.4.16-dev-2207-geb15453
xmldoc.c
Go to the documentation of this file.
1/*
2 * XML Document implementation
3 *
4 * Copyright 2007 James Hawkins
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 */
20
21#define COBJMACROS
22
23#include <stdarg.h>
24#include <libxml/parser.h>
25#include <libxml/xmlerror.h>
26
27#include "windef.h"
28#include "winbase.h"
29#include "winuser.h"
30#include "ole2.h"
31#include "msxml6.h"
32#include "wininet.h"
33#include "winreg.h"
34#include "shlwapi.h"
35#include "ocidl.h"
36
37#include "wine/debug.h"
38
39#include "msxml_private.h"
40
42
43/* FIXME: IXMLDocument needs to implement
44 * - IXMLError
45 * - IPersistMoniker
46 */
47
48typedef struct _xmldoc
49{
50 IXMLDocument IXMLDocument_iface;
54
55 /* IXMLDocument */
56 xmlDocPtr xmldoc;
57
58 /* IPersistStream */
61
62static inline xmldoc *impl_from_IXMLDocument(IXMLDocument *iface)
63{
64 return CONTAINING_RECORD(iface, xmldoc, IXMLDocument_iface);
65}
66
68{
69 return CONTAINING_RECORD(iface, xmldoc, IPersistStreamInit_iface);
70}
71
72static HRESULT WINAPI xmldoc_QueryInterface(IXMLDocument *iface, REFIID riid, void** ppvObject)
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}
100
101static ULONG WINAPI xmldoc_AddRef(IXMLDocument *iface)
102{
105 TRACE("%p, refcount %ld.\n", iface, ref);
106 return ref;
107}
108
109static ULONG WINAPI xmldoc_Release(IXMLDocument *iface)
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}
125
126static HRESULT WINAPI xmldoc_GetTypeInfoCount(IXMLDocument *iface, UINT* pctinfo)
127{
129
130 TRACE("(%p)->(%p)\n", This, pctinfo);
131
132 *pctinfo = 1;
133
134 return S_OK;
135}
136
137static HRESULT WINAPI xmldoc_GetTypeInfo(IXMLDocument *iface, UINT iTInfo,
138 LCID lcid, ITypeInfo** ppTInfo)
139{
140 TRACE("%p, %u, %lx, %p.\n", iface, iTInfo, lcid, ppTInfo);
141
142 return get_typeinfo(IXMLDocument_tid, ppTInfo);
143}
144
145static HRESULT WINAPI xmldoc_GetIDsOfNames(IXMLDocument *iface, REFIID riid,
146 LPOLESTR* rgszNames, UINT cNames,
147 LCID lcid, DISPID* rgDispId)
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}
167
168static HRESULT WINAPI xmldoc_Invoke(IXMLDocument *iface, DISPID dispIdMember,
170 DISPPARAMS* pDispParams, VARIANT* pVarResult,
171 EXCEPINFO* pExcepInfo, UINT* puArgErr)
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}
188
189static HRESULT WINAPI xmldoc_get_root(IXMLDocument *iface, IXMLElement **p)
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}
206
207static HRESULT WINAPI xmldoc_get_fileSize(IXMLDocument *iface, BSTR *p)
208{
209 FIXME("(%p, %p): stub\n", iface, p);
210 return E_NOTIMPL;
211}
212
213static HRESULT WINAPI xmldoc_put_fileModifiedDate(IXMLDocument *iface, BSTR *p)
214{
215 FIXME("(%p, %p): stub\n", iface, p);
216 return E_NOTIMPL;
217}
218
219static HRESULT WINAPI xmldoc_get_fileUpdatedDate(IXMLDocument *iface, BSTR *p)
220{
221 FIXME("(%p, %p): stub\n", iface, p);
222 return E_NOTIMPL;
223}
224
225static HRESULT WINAPI xmldoc_get_URL(IXMLDocument *iface, BSTR *p)
226{
227 FIXME("(%p, %p): stub\n", iface, p);
228 return E_NOTIMPL;
229}
230
231typedef struct {
233} bsc;
234
236 IBindStatusCallback *iface,
237 REFIID riid,
238 LPVOID *ppobj )
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}
251
253 IBindStatusCallback *iface )
254{
255 return 2;
256}
257
259 IBindStatusCallback *iface )
260{
261 return 1;
262}
263
265 IBindStatusCallback* iface,
267 IBinding* pib)
268{
269 return S_OK;
270}
271
273 IBindStatusCallback* iface,
274 LONG* pnPriority)
275{
276 return S_OK;
277}
278
280 IBindStatusCallback* iface,
282{
283 return S_OK;
284}
285
287 IBindStatusCallback* iface,
288 ULONG ulProgress,
289 ULONG ulProgressMax,
290 ULONG ulStatusCode,
291 LPCWSTR szStatusText)
292{
293 return S_OK;
294}
295
297 IBindStatusCallback* iface,
298 HRESULT hresult,
299 LPCWSTR szError)
300{
301 return S_OK;
302}
303
305 IBindStatusCallback* iface,
306 DWORD* grfBINDF,
307 BINDINFO* pbindinfo)
308{
309 *grfBINDF = BINDF_RESYNCHRONIZE;
310
311 return S_OK;
312}
313
315 IBindStatusCallback* iface,
316 DWORD grfBSCF,
318 FORMATETC* pformatetc,
319 STGMEDIUM* pstgmed)
320{
321 return S_OK;
322}
323
325 IBindStatusCallback* iface,
326 REFIID riid,
327 IUnknown* punk)
328{
329 return S_OK;
330}
331
332static const struct IBindStatusCallbackVtbl bsc_vtbl =
333{
345};
346
347static bsc xmldoc_bsc = { { &bsc_vtbl } };
348
349static HRESULT WINAPI xmldoc_put_URL(IXMLDocument *iface, BSTR p)
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}
408
409static HRESULT WINAPI xmldoc_get_mimeType(IXMLDocument *iface, BSTR *p)
410{
411 FIXME("(%p, %p): stub\n", iface, p);
412 return E_NOTIMPL;
413}
414
415static HRESULT WINAPI xmldoc_get_readyState(IXMLDocument *iface, LONG *p)
416{
417 FIXME("(%p, %p): stub\n", iface, p);
418 return E_NOTIMPL;
419}
420
421static HRESULT WINAPI xmldoc_get_charset(IXMLDocument *iface, BSTR *p)
422{
423 FIXME("(%p, %p): stub\n", iface, p);
424 return E_NOTIMPL;
425}
426
427static HRESULT WINAPI xmldoc_put_charset(IXMLDocument *iface, BSTR p)
428{
429 FIXME("(%p, %p): stub\n", iface, p);
430 return E_NOTIMPL;
431}
432
433static HRESULT WINAPI xmldoc_get_version(IXMLDocument *iface, BSTR *p)
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}
444
445static HRESULT WINAPI xmldoc_get_doctype(IXMLDocument *iface, BSTR *p)
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}
462
463static HRESULT WINAPI xmldoc_get_dtdURl(IXMLDocument *iface, BSTR *p)
464{
465 FIXME("(%p, %p): stub\n", iface, p);
466 return E_NOTIMPL;
467}
468
469static xmlElementType type_msxml_to_libxml(LONG type)
470{
471 switch (type)
472 {
473 case XMLELEMTYPE_ELEMENT:
474 return XML_ELEMENT_NODE;
475 case XMLELEMTYPE_TEXT:
476 return XML_TEXT_NODE;
477 case XMLELEMTYPE_COMMENT:
478 return XML_COMMENT_NODE;
479 case XMLELEMTYPE_DOCUMENT:
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}
491
492static HRESULT WINAPI xmldoc_createElement(IXMLDocument *iface, VARIANT vType,
493 VARIANT var1, IXMLElement **ppElem)
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}
518
519static const struct IXMLDocumentVtbl xmldoc_vtbl =
520{
542};
543
544/************************************************************************
545 * xmldoc implementation of IPersistStreamInit.
546 */
548 IPersistStreamInit *iface, REFIID riid, LPVOID *ppvObj)
549{
551 return IXMLDocument_QueryInterface(&this->IXMLDocument_iface, riid, ppvObj);
552}
553
555 IPersistStreamInit *iface)
556{
558 return IXMLDocument_AddRef(&this->IXMLDocument_iface);
559}
560
562 IPersistStreamInit *iface)
563{
565 return IXMLDocument_Release(&this->IXMLDocument_iface);
566}
567
569 IPersistStreamInit *iface, CLSID *classid)
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}
579
581 IPersistStreamInit *iface)
582{
583 FIXME("(%p): stub!\n", iface);
584 return E_NOTIMPL;
585}
586
587static xmlDocPtr parse_xml(char *ptr, int len)
588{
589 return xmlReadMemory(ptr, len, NULL, NULL,
591}
592
594 IPersistStreamInit *iface, LPSTREAM pStm)
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}
647
649 IPersistStreamInit *iface, LPSTREAM pStm, BOOL fClearDirty)
650{
651 FIXME("(%p, %p, %d): stub!\n", iface, pStm, fClearDirty);
652 return E_NOTIMPL;
653}
654
656 IPersistStreamInit *iface, ULARGE_INTEGER *pcbSize)
657{
659 TRACE("(%p, %p)\n", This, pcbSize);
660 return E_NOTIMPL;
661}
662
664 IPersistStreamInit *iface)
665{
667 TRACE("(%p)\n", This);
668 return S_OK;
669}
670
671static const IPersistStreamInitVtbl xmldoc_IPersistStreamInit_VTable =
672{
682};
683
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 read
Definition: acwin.h:96
HRESULT get_typeinfo(enum type_id tid, ITypeInfo **ret)
Definition: apps.c:124
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define ARRAY_SIZE(A)
Definition: main.h:20
#define FIXME(fmt,...)
Definition: precomp.h:53
#define ERR(fmt,...)
Definition: precomp.h:57
const GUID IID_IUnknown
struct _root root
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static const WCHAR empty[]
Definition: main.c:47
OLECHAR * BSTR
Definition: compat.h:2293
#define MAX_PATH
Definition: compat.h:34
@ VT_I4
Definition: compat.h:2298
LCID lcid
Definition: locale.c:5656
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
DWORD WINAPI CharUpperBuffW(WCHAR *str, DWORD len)
Definition: string.c:1199
static bsc xmldoc_bsc
Definition: xmldoc.c:347
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 ULONG WINAPI xmldoc_Release(IXMLDocument *iface)
Definition: xmldoc.c:109
struct _xmldoc xmldoc
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 xmlElementType type_msxml_to_libxml(LONG type)
Definition: xmldoc.c:469
static HRESULT WINAPI xmldoc_IPersistStreamInit_QueryInterface(IPersistStreamInit *iface, REFIID riid, LPVOID *ppvObj)
Definition: xmldoc.c:547
static ULONG WINAPI bsc_AddRef(IBindStatusCallback *iface)
Definition: xmldoc.c:252
static HRESULT WINAPI xmldoc_put_fileModifiedDate(IXMLDocument *iface, BSTR *p)
Definition: xmldoc.c:213
static ULONG WINAPI xmldoc_IPersistStreamInit_AddRef(IPersistStreamInit *iface)
Definition: xmldoc.c:554
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 xmldoc_get_charset(IXMLDocument *iface, BSTR *p)
Definition: xmldoc.c:421
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 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 const IPersistStreamInitVtbl xmldoc_IPersistStreamInit_VTable
Definition: xmldoc.c:671
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 xmldoc_GetTypeInfo(IXMLDocument *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
Definition: xmldoc.c:137
static HRESULT WINAPI bsc_GetBindInfo(IBindStatusCallback *iface, DWORD *grfBINDF, BINDINFO *pbindinfo)
Definition: xmldoc.c:304
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 xmldoc * impl_from_IXMLDocument(IXMLDocument *iface)
Definition: xmldoc.c:62
static xmldoc * impl_from_IPersistStreamInit(IPersistStreamInit *iface)
Definition: xmldoc.c:67
static HRESULT WINAPI xmldoc_GetIDsOfNames(IXMLDocument *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
Definition: xmldoc.c:145
HRESULT XMLDocument_create(LPVOID *ppObj)
Definition: xmldoc.c:684
static HRESULT WINAPI bsc_OnLowResource(IBindStatusCallback *iface, DWORD reserved)
Definition: xmldoc.c:279
static HRESULT WINAPI xmldoc_get_doctype(IXMLDocument *iface, BSTR *p)
Definition: xmldoc.c:445
static const struct IBindStatusCallbackVtbl bsc_vtbl
Definition: xmldoc.c:332
static const struct IXMLDocumentVtbl xmldoc_vtbl
Definition: xmldoc.c:519
static ULONG WINAPI xmldoc_IPersistStreamInit_Release(IPersistStreamInit *iface)
Definition: xmldoc.c:561
static HRESULT WINAPI xmldoc_get_root(IXMLDocument *iface, IXMLElement **p)
Definition: xmldoc.c:189
static xmlDocPtr parse_xml(char *ptr, int len)
Definition: xmldoc.c:587
static HRESULT WINAPI xmldoc_get_URL(IXMLDocument *iface, BSTR *p)
Definition: xmldoc.c:225
static HRESULT WINAPI xmldoc_IPersistStreamInit_InitNew(IPersistStreamInit *iface)
Definition: xmldoc.c:663
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 bsc_QueryInterface(IBindStatusCallback *iface, REFIID riid, LPVOID *ppobj)
Definition: xmldoc.c:235
static HRESULT WINAPI xmldoc_IPersistStreamInit_GetClassID(IPersistStreamInit *iface, CLSID *classid)
Definition: xmldoc.c:568
static HRESULT WINAPI bsc_OnDataAvailable(IBindStatusCallback *iface, DWORD grfBSCF, DWORD dwSize, FORMATETC *pformatetc, STGMEDIUM *pstgmed)
Definition: xmldoc.c:314
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
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
HRESULT WINAPI GetHGlobalFromStream(IStream *pstm, HGLOBAL *phglobal)
HRESULT WINAPI CreateStreamOnHGlobal(HGLOBAL hGlobal, BOOL fDeleteOnRelease, LPSTREAM *ppstm)
#define INTERNET_MAX_URL_LENGTH
Definition: session.c:1418
r reserved
Definition: btrfs.c:3006
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLfloat GLfloat p
Definition: glext.h:8902
GLenum GLsizei len
Definition: glext.h:6722
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
Definition: heapmem.c:1190
SIZE_T NTAPI GlobalSize(HGLOBAL hMem)
Definition: heapmem.c:1090
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
static ERESOURCE GlobalLock
Definition: sys_arch.c:8
#define debugstr_guid
Definition: kernel32.h:35
#define debugstr_w
Definition: kernel32.h:32
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
static PVOID ptr
Definition: dispmode.c:27
static const WCHAR url[]
Definition: encode.c:1384
static const char * debugstr_variant(const VARIANT *var)
Definition: container.c:46
static LPOLESTR
Definition: stg_prop.c:27
static VARIANTARG static DISPID
Definition: ordinal.c:49
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
Definition: mswsock.h:95
const struct _GUID CLSID_XMLDocument
@ IXMLDocument_tid
Definition: msxml_dispex.h:60
static BSTR bstr_from_xmlChar(const xmlChar *str)
HRESULT XMLElement_create(xmlNodePtr node, LPVOID *ppObj, BOOL own)
Definition: xmlelem.c:480
unsigned int UINT
Definition: ndis.h:50
interface IStream * LPSTREAM
Definition: objfwd.h:10
UINT WINAPI SysStringLen(BSTR str)
Definition: oleaut.c:196
#define V_VT(A)
Definition: oleauto.h:211
#define V_I4(A)
Definition: oleauto.h:247
const GUID IID_IDispatch
const GUID IID_IPersistStreamInit
long LONG
Definition: pedump.c:60
const GUID IID_IPersistStream
Definition: proxy.cpp:13
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
_In_opt_ IUnknown * punk
Definition: shlwapi.h:158
DWORD LCID
Definition: nls.h:13
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
HRESULT hr
Definition: shlfolder.c:183
#define TRACE(s)
Definition: solgame.cpp:4
Definition: xmldoc.c:49
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
Definition: xmldoc.c:231
IBindStatusCallback IBindStatusCallback_iface
Definition: xmldoc.c:232
Definition: main.c:40
Definition: send.c:48
Definition: parse.h:23
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
HRESULT WINAPI CreateURLMoniker(IMoniker *pmkContext, LPCWSTR szURL, IMoniker **ppmk)
Definition: umon.c:732
Definition: dlist.c:348
HRESULT WINAPI CreateAsyncBindCtx(DWORD reserved, IBindStatusCallback *callback, IEnumFORMATETC *format, IBindCtx **pbind)
Definition: bindctx.c:899
WINBASEAPI _In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon_undoc.h:337
#define WINAPI
Definition: msvc.h:6
#define S_FALSE
Definition: winerror.h:3451
#define E_NOINTERFACE
Definition: winerror.h:3479
#define E_POINTER
Definition: winerror.h:3480
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
__wchar_t WCHAR
Definition: xmlstorage.h:180
unsigned char xmlChar
Definition: xmlstring.h:28
unsigned char BYTE
Definition: xxhash.c:193