ReactOS  0.4.15-dev-3745-g356babc
pi.c
Go to the documentation of this file.
1 /*
2  * DOM processing instruction node implementation
3  *
4  * Copyright 2006 Huw Davies
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 "config.h"
24 
25 #include <stdarg.h>
26 #ifdef HAVE_LIBXML2
27 # include <libxml/parser.h>
28 # include <libxml/xmlerror.h>
29 #endif
30 
31 #include "windef.h"
32 #include "winbase.h"
33 #include "winuser.h"
34 #include "ole2.h"
35 #include "msxml6.h"
36 
37 #include "msxml_private.h"
38 
39 #include "wine/debug.h"
40 
41 #ifdef HAVE_LIBXML2
42 
44 
45 typedef struct _dom_pi
46 {
47  xmlnode node;
48  IXMLDOMProcessingInstruction IXMLDOMProcessingInstruction_iface;
49  LONG ref;
50 } dom_pi;
51 
52 static const struct nodemap_funcs dom_pi_attr_map;
53 
54 static const tid_t dompi_se_tids[] = {
57  NULL_tid
58 };
59 
60 static inline dom_pi *impl_from_IXMLDOMProcessingInstruction( IXMLDOMProcessingInstruction *iface )
61 {
62  return CONTAINING_RECORD(iface, dom_pi, IXMLDOMProcessingInstruction_iface);
63 }
64 
65 static HRESULT WINAPI dom_pi_QueryInterface(
67  REFIID riid,
68  void** ppvObject )
69 {
70  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
71  TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject);
72 
73  if ( IsEqualGUID( riid, &IID_IXMLDOMProcessingInstruction ) ||
74  IsEqualGUID( riid, &IID_IXMLDOMNode ) ||
77  {
78  *ppvObject = iface;
79  }
80  else if(node_query_interface(&This->node, riid, ppvObject))
81  {
82  return *ppvObject ? S_OK : E_NOINTERFACE;
83  }
84  else if(IsEqualGUID( riid, &IID_ISupportErrorInfo ))
85  {
86  return node_create_supporterrorinfo(dompi_se_tids, ppvObject);
87  }
88  else
89  {
90  TRACE("Unsupported interface %s\n", debugstr_guid(riid));
91  *ppvObject = NULL;
92  return E_NOINTERFACE;
93  }
94 
95  IUnknown_AddRef((IUnknown*)*ppvObject);
96  return S_OK;
97 }
98 
99 static ULONG WINAPI dom_pi_AddRef(
101 {
102  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
103  ULONG ref = InterlockedIncrement( &This->ref );
104  TRACE("(%p)->(%d)\n", This, ref);
105  return ref;
106 }
107 
108 static ULONG WINAPI dom_pi_Release(
110 {
111  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
112  ULONG ref = InterlockedDecrement( &This->ref );
113 
114  TRACE("(%p)->(%d)\n", This, ref);
115  if ( ref == 0 )
116  {
117  destroy_xmlnode(&This->node);
118  heap_free( This );
119  }
120 
121  return ref;
122 }
123 
124 static HRESULT WINAPI dom_pi_GetTypeInfoCount(
126  UINT* pctinfo )
127 {
128  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
129  return IDispatchEx_GetTypeInfoCount(&This->node.dispex.IDispatchEx_iface, pctinfo);
130 }
131 
132 static HRESULT WINAPI dom_pi_GetTypeInfo(
134  UINT iTInfo, LCID lcid,
135  ITypeInfo** ppTInfo )
136 {
137  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
138  return IDispatchEx_GetTypeInfo(&This->node.dispex.IDispatchEx_iface,
139  iTInfo, lcid, ppTInfo);
140 }
141 
142 static HRESULT WINAPI dom_pi_GetIDsOfNames(
144  REFIID riid, LPOLESTR* rgszNames,
145  UINT cNames, LCID lcid, DISPID* rgDispId )
146 {
147  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
148  return IDispatchEx_GetIDsOfNames(&This->node.dispex.IDispatchEx_iface,
149  riid, rgszNames, cNames, lcid, rgDispId);
150 }
151 
152 static HRESULT WINAPI dom_pi_Invoke(
154  DISPID dispIdMember, REFIID riid, LCID lcid,
155  WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult,
156  EXCEPINFO* pExcepInfo, UINT* puArgErr )
157 {
158  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
159  return IDispatchEx_Invoke(&This->node.dispex.IDispatchEx_iface,
160  dispIdMember, riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
161 }
162 
163 static HRESULT WINAPI dom_pi_get_nodeName(
165  BSTR* p )
166 {
167  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
168 
169  TRACE("(%p)->(%p)\n", This, p);
170 
171  return node_get_nodeName(&This->node, p);
172 }
173 
174 static HRESULT WINAPI dom_pi_get_nodeValue(
176  VARIANT* value)
177 {
178  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
179 
180  TRACE("(%p)->(%p)\n", This, value);
181 
182  return node_get_content(&This->node, value);
183 }
184 
185 static HRESULT WINAPI dom_pi_put_nodeValue(
187  VARIANT value)
188 {
189  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
190  BSTR target;
191  HRESULT hr;
192 
193  TRACE("(%p)->(%s)\n", This, debugstr_variant(&value));
194 
195  /* Cannot set data to a PI node whose target is 'xml' */
196  hr = IXMLDOMProcessingInstruction_get_nodeName(iface, &target);
197  if(hr == S_OK)
198  {
199  static const WCHAR xmlW[] = {'x','m','l',0};
200  if(!strcmpW(target, xmlW))
201  {
203  return E_FAIL;
204  }
205 
207  }
208 
209  return node_put_value(&This->node, &value);
210 }
211 
212 static HRESULT WINAPI dom_pi_get_nodeType(
214  DOMNodeType* domNodeType )
215 {
216  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
217 
218  TRACE("(%p)->(%p)\n", This, domNodeType);
219 
220  *domNodeType = NODE_PROCESSING_INSTRUCTION;
221  return S_OK;
222 }
223 
224 static HRESULT WINAPI dom_pi_get_parentNode(
226  IXMLDOMNode** parent )
227 {
228  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
229 
230  TRACE("(%p)->(%p)\n", This, parent);
231 
232  return node_get_parent(&This->node, parent);
233 }
234 
235 static HRESULT WINAPI dom_pi_get_childNodes(
237  IXMLDOMNodeList** outList)
238 {
239  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
240 
241  TRACE("(%p)->(%p)\n", This, outList);
242 
243  return node_get_child_nodes(&This->node, outList);
244 }
245 
246 static HRESULT WINAPI dom_pi_get_firstChild(
248  IXMLDOMNode** domNode)
249 {
250  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
251 
252  TRACE("(%p)->(%p)\n", This, domNode);
253 
254  return return_null_node(domNode);
255 }
256 
257 static HRESULT WINAPI dom_pi_get_lastChild(
259  IXMLDOMNode** domNode)
260 {
261  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
262 
263  TRACE("(%p)->(%p)\n", This, domNode);
264 
265  return return_null_node(domNode);
266 }
267 
268 static HRESULT WINAPI dom_pi_get_previousSibling(
270  IXMLDOMNode** domNode)
271 {
272  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
273 
274  TRACE("(%p)->(%p)\n", This, domNode);
275 
276  return node_get_previous_sibling(&This->node, domNode);
277 }
278 
279 static HRESULT WINAPI dom_pi_get_nextSibling(
281  IXMLDOMNode** domNode)
282 {
283  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
284 
285  TRACE("(%p)->(%p)\n", This, domNode);
286 
287  return node_get_next_sibling(&This->node, domNode);
288 }
289 
290 static HRESULT WINAPI dom_pi_get_attributes(
293 {
294  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
295  static const WCHAR xmlW[] = {'x','m','l',0};
296  HRESULT hr;
297  BSTR name;
298 
299  TRACE("(%p)->(%p)\n", This, map);
300 
301  if (!map) return E_INVALIDARG;
302 
303  *map = NULL;
304 
305  hr = node_get_nodeName(&This->node, &name);
306  if (hr != S_OK) return hr;
307 
308  if (!strcmpW(name, xmlW))
309  {
310  FIXME("created dummy map for <?xml ?>\n");
311  *map = create_nodemap(This->node.node, &dom_pi_attr_map);
313  return S_OK;
314  }
315 
317 
318  return S_FALSE;
319 }
320 
321 static HRESULT WINAPI dom_pi_insertBefore(
323  IXMLDOMNode* newNode, VARIANT refChild,
324  IXMLDOMNode** outOldNode)
325 {
326  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
327 
328  FIXME("(%p)->(%p %s %p) needs test\n", This, newNode, debugstr_variant(&refChild), outOldNode);
329 
330  return node_insert_before(&This->node, newNode, &refChild, outOldNode);
331 }
332 
333 static HRESULT WINAPI dom_pi_replaceChild(
335  IXMLDOMNode* newNode,
336  IXMLDOMNode* oldNode,
337  IXMLDOMNode** outOldNode)
338 {
339  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
340 
341  FIXME("(%p)->(%p %p %p) needs test\n", This, newNode, oldNode, outOldNode);
342 
343  return node_replace_child(&This->node, newNode, oldNode, outOldNode);
344 }
345 
346 static HRESULT WINAPI dom_pi_removeChild(
348  IXMLDOMNode *child, IXMLDOMNode **oldChild)
349 {
350  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
351  TRACE("(%p)->(%p %p)\n", This, child, oldChild);
352  return node_remove_child(&This->node, child, oldChild);
353 }
354 
355 static HRESULT WINAPI dom_pi_appendChild(
357  IXMLDOMNode *child, IXMLDOMNode **outChild)
358 {
359  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
360  TRACE("(%p)->(%p %p)\n", This, child, outChild);
361  return node_append_child(&This->node, child, outChild);
362 }
363 
364 static HRESULT WINAPI dom_pi_hasChildNodes(
366  VARIANT_BOOL *ret)
367 {
368  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
369  TRACE("(%p)->(%p)\n", This, ret);
370  return node_has_childnodes(&This->node, ret);
371 }
372 
373 static HRESULT WINAPI dom_pi_get_ownerDocument(
375  IXMLDOMDocument **doc)
376 {
377  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
378  TRACE("(%p)->(%p)\n", This, doc);
379  return node_get_owner_doc(&This->node, doc);
380 }
381 
382 static HRESULT WINAPI dom_pi_cloneNode(
384  VARIANT_BOOL deep, IXMLDOMNode** outNode)
385 {
386  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
387  TRACE("(%p)->(%d %p)\n", This, deep, outNode);
388  return node_clone( &This->node, deep, outNode );
389 }
390 
391 static HRESULT WINAPI dom_pi_get_nodeTypeString(
393  BSTR* p)
394 {
395  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
396  static const WCHAR processinginstructionW[] =
397  {'p','r','o','c','e','s','s','i','n','g','i','n','s','t','r','u','c','t','i','o','n',0};
398 
399  TRACE("(%p)->(%p)\n", This, p);
400 
401  return return_bstr(processinginstructionW, p);
402 }
403 
404 static HRESULT WINAPI dom_pi_get_text(
406  BSTR* p)
407 {
408  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
409  TRACE("(%p)->(%p)\n", This, p);
410  return node_get_text(&This->node, p);
411 }
412 
413 static HRESULT WINAPI dom_pi_put_text(
415  BSTR p)
416 {
417  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
418  TRACE("(%p)->(%s)\n", This, debugstr_w(p));
419  return node_put_text( &This->node, p );
420 }
421 
422 static HRESULT WINAPI dom_pi_get_specified(
424  VARIANT_BOOL* isSpecified)
425 {
426  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
427  FIXME("(%p)->(%p) stub!\n", This, isSpecified);
428  *isSpecified = VARIANT_TRUE;
429  return S_OK;
430 }
431 
432 static HRESULT WINAPI dom_pi_get_definition(
434  IXMLDOMNode** definitionNode)
435 {
436  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
437  FIXME("(%p)->(%p)\n", This, definitionNode);
438  return E_NOTIMPL;
439 }
440 
441 static HRESULT WINAPI dom_pi_get_nodeTypedValue(
443  VARIANT* v)
444 {
445  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
446  TRACE("(%p)->(%p)\n", This, v);
447  return node_get_content(&This->node, v);
448 }
449 
450 static HRESULT WINAPI dom_pi_put_nodeTypedValue(
452  VARIANT typedValue)
453 {
454  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
455  FIXME("(%p)->(%s)\n", This, debugstr_variant(&typedValue));
456  return E_NOTIMPL;
457 }
458 
459 static HRESULT WINAPI dom_pi_get_dataType(
461  VARIANT* typename)
462 {
463  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
464  TRACE("(%p)->(%p)\n", This, typename);
465  return return_null_var( typename );
466 }
467 
468 static HRESULT WINAPI dom_pi_put_dataType(
470  BSTR p)
471 {
472  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
473 
474  TRACE("(%p)->(%s)\n", This, debugstr_w(p));
475 
476  if(!p)
477  return E_INVALIDARG;
478 
479  return E_FAIL;
480 }
481 
482 static HRESULT WINAPI dom_pi_get_xml(
484  BSTR* p)
485 {
486  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
487 
488  TRACE("(%p)->(%p)\n", This, p);
489 
490  return node_get_xml(&This->node, FALSE, p);
491 }
492 
493 static HRESULT WINAPI dom_pi_transformNode(
495  IXMLDOMNode *node, BSTR *p)
496 {
497  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
498  TRACE("(%p)->(%p %p)\n", This, node, p);
499  return node_transform_node(&This->node, node, p);
500 }
501 
502 static HRESULT WINAPI dom_pi_selectNodes(
504  BSTR p, IXMLDOMNodeList** outList)
505 {
506  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
507  TRACE("(%p)->(%s %p)\n", This, debugstr_w(p), outList);
508  return node_select_nodes(&This->node, p, outList);
509 }
510 
511 static HRESULT WINAPI dom_pi_selectSingleNode(
513  BSTR p, IXMLDOMNode** outNode)
514 {
515  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
516  TRACE("(%p)->(%s %p)\n", This, debugstr_w(p), outNode);
517  return node_select_singlenode(&This->node, p, outNode);
518 }
519 
520 static HRESULT WINAPI dom_pi_get_parsed(
522  VARIANT_BOOL* isParsed)
523 {
524  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
525  FIXME("(%p)->(%p) stub!\n", This, isParsed);
526  *isParsed = VARIANT_TRUE;
527  return S_OK;
528 }
529 
530 static HRESULT WINAPI dom_pi_get_namespaceURI(
532  BSTR* p)
533 {
534  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
535  TRACE("(%p)->(%p)\n", This, p);
536  return node_get_namespaceURI(&This->node, p);
537 }
538 
539 static HRESULT WINAPI dom_pi_get_prefix(
541  BSTR* prefix)
542 {
543  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
544  TRACE("(%p)->(%p)\n", This, prefix);
545  return return_null_bstr( prefix );
546 }
547 
548 static HRESULT WINAPI dom_pi_get_baseName(
550  BSTR* name)
551 {
552  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
553  TRACE("(%p)->(%p)\n", This, name);
554  return node_get_base_name( &This->node, name );
555 }
556 
557 static HRESULT WINAPI dom_pi_transformNodeToObject(
559  IXMLDOMNode* domNode, VARIANT var1)
560 {
561  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
562  FIXME("(%p)->(%p %s)\n", This, domNode, debugstr_variant(&var1));
563  return E_NOTIMPL;
564 }
565 
566 static HRESULT WINAPI dom_pi_get_target(
568  BSTR *p)
569 {
570  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
571 
572  TRACE("(%p)->(%p)\n", This, p);
573 
574  /* target returns the same value as nodeName property */
575  return node_get_nodeName(&This->node, p);
576 }
577 
578 static HRESULT WINAPI dom_pi_get_data(
580  BSTR *p)
581 {
582  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
583  HRESULT hr;
584  VARIANT ret;
585 
586  TRACE("(%p)->(%p)\n", This, p);
587 
588  if(!p)
589  return E_INVALIDARG;
590 
591  hr = IXMLDOMProcessingInstruction_get_nodeValue( iface, &ret );
592  if(hr == S_OK)
593  {
594  *p = V_BSTR(&ret);
595  }
596 
597  return hr;
598 }
599 
600 static HRESULT WINAPI dom_pi_put_data(
602  BSTR data)
603 {
604  dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
605  BSTR target;
606  HRESULT hr;
607 
608  TRACE("(%p)->(%s)\n", This, debugstr_w(data) );
609 
610  /* cannot set data to a PI node whose target is 'xml' */
611  hr = IXMLDOMProcessingInstruction_get_nodeName(iface, &target);
612  if(hr == S_OK)
613  {
614  static const WCHAR xmlW[] = {'x','m','l',0};
615  if(!strcmpW(target, xmlW))
616  {
618  return E_FAIL;
619  }
620 
622  }
623 
624  return node_set_content(&This->node, data);
625 }
626 
627 static const struct IXMLDOMProcessingInstructionVtbl dom_pi_vtbl =
628 {
629  dom_pi_QueryInterface,
630  dom_pi_AddRef,
631  dom_pi_Release,
632  dom_pi_GetTypeInfoCount,
633  dom_pi_GetTypeInfo,
634  dom_pi_GetIDsOfNames,
635  dom_pi_Invoke,
636  dom_pi_get_nodeName,
637  dom_pi_get_nodeValue,
638  dom_pi_put_nodeValue,
639  dom_pi_get_nodeType,
640  dom_pi_get_parentNode,
641  dom_pi_get_childNodes,
642  dom_pi_get_firstChild,
643  dom_pi_get_lastChild,
644  dom_pi_get_previousSibling,
645  dom_pi_get_nextSibling,
646  dom_pi_get_attributes,
647  dom_pi_insertBefore,
648  dom_pi_replaceChild,
649  dom_pi_removeChild,
650  dom_pi_appendChild,
651  dom_pi_hasChildNodes,
652  dom_pi_get_ownerDocument,
653  dom_pi_cloneNode,
654  dom_pi_get_nodeTypeString,
655  dom_pi_get_text,
656  dom_pi_put_text,
657  dom_pi_get_specified,
658  dom_pi_get_definition,
659  dom_pi_get_nodeTypedValue,
660  dom_pi_put_nodeTypedValue,
661  dom_pi_get_dataType,
662  dom_pi_put_dataType,
663  dom_pi_get_xml,
664  dom_pi_transformNode,
665  dom_pi_selectNodes,
666  dom_pi_selectSingleNode,
667  dom_pi_get_parsed,
668  dom_pi_get_namespaceURI,
669  dom_pi_get_prefix,
670  dom_pi_get_baseName,
671  dom_pi_transformNodeToObject,
672 
673  dom_pi_get_target,
674  dom_pi_get_data,
675  dom_pi_put_data
676 };
677 
678 static HRESULT dom_pi_get_qualified_item(const xmlNodePtr node, BSTR name, BSTR uri,
679  IXMLDOMNode **item)
680 {
681  FIXME("(%p)->(%s %s %p): stub\n", node, debugstr_w(name), debugstr_w(uri), item);
682  return E_NOTIMPL;
683 }
684 
685 static HRESULT dom_pi_get_named_item(const xmlNodePtr node, BSTR name, IXMLDOMNode **item)
686 {
687  FIXME("(%p)->(%s %p): stub\n", node, debugstr_w(name), item );
688  if (item)
689  *item = NULL;
690  return S_FALSE;
691 }
692 
693 static HRESULT dom_pi_set_named_item(xmlNodePtr node, IXMLDOMNode *newItem, IXMLDOMNode **namedItem)
694 {
695  FIXME("(%p)->(%p %p): stub\n", node, newItem, namedItem );
696  return E_NOTIMPL;
697 }
698 
699 static HRESULT dom_pi_remove_qualified_item(xmlNodePtr node, BSTR name, BSTR uri, IXMLDOMNode **item)
700 {
701  FIXME("(%p)->(%s %s %p): stub\n", node, debugstr_w(name), debugstr_w(uri), item);
702  return E_NOTIMPL;
703 }
704 
705 static HRESULT dom_pi_remove_named_item(xmlNodePtr node, BSTR name, IXMLDOMNode **item)
706 {
707  FIXME("(%p)->(%s %p): stub\n", node, debugstr_w(name), item);
708  return E_NOTIMPL;
709 }
710 
711 static HRESULT dom_pi_get_item(const xmlNodePtr node, LONG index, IXMLDOMNode **item)
712 {
713  FIXME("(%p)->(%d %p): stub\n", node, index, item);
714  return E_NOTIMPL;
715 }
716 
717 static HRESULT dom_pi_get_length(const xmlNodePtr node, LONG *length)
718 {
719  FIXME("(%p)->(%p): stub\n", node, length);
720 
721  *length = 0;
722  return S_OK;
723 }
724 
725 static HRESULT dom_pi_next_node(const xmlNodePtr node, LONG *iter, IXMLDOMNode **nextNode)
726 {
727  FIXME("(%p)->(%d %p): stub\n", node, *iter, nextNode);
728  return E_NOTIMPL;
729 }
730 
731 static const struct nodemap_funcs dom_pi_attr_map = {
732  dom_pi_get_named_item,
733  dom_pi_set_named_item,
734  dom_pi_remove_named_item,
735  dom_pi_get_item,
736  dom_pi_get_length,
737  dom_pi_get_qualified_item,
738  dom_pi_remove_qualified_item,
739  dom_pi_next_node
740 };
741 
742 static const tid_t dompi_iface_tids[] = {
744  0
745 };
746 
747 static dispex_static_data_t dompi_dispex = {
748  NULL,
750  NULL,
751  dompi_iface_tids
752 };
753 
754 IUnknown* create_pi( xmlNodePtr pi )
755 {
756  dom_pi *This;
757 
758  This = heap_alloc( sizeof *This );
759  if ( !This )
760  return NULL;
761 
762  This->IXMLDOMProcessingInstruction_iface.lpVtbl = &dom_pi_vtbl;
763  This->ref = 1;
764 
765  init_xmlnode(&This->node, pi, (IXMLDOMNode*)&This->IXMLDOMProcessingInstruction_iface, &dompi_dispex);
766 
767  return (IUnknown*)&This->IXMLDOMProcessingInstruction_iface;
768 }
769 
770 #endif
static HRESULT return_bstr(const WCHAR *value, BSTR *p)
Definition: pdh_main.c:93
#define REFIID
Definition: guiddef.h:118
#define E_NOINTERFACE
Definition: winerror.h:2364
HRESULT hr
Definition: shlfolder.c:183
const char * uri
Definition: sec_mgr.c:1588
REFIID riid
Definition: precomp.h:44
tid_t
Definition: ieframe.h:311
DWORD LCID
Definition: nls.h:13
OLECHAR * BSTR
Definition: compat.h:2152
static LPOLESTR
Definition: stg_prop.c:27
#define E_FAIL
Definition: ddrawi.h:102
short VARIANT_BOOL
Definition: compat.h:2149
Definition: send.c:48
static HWND child
Definition: cursoricon.c:298
static void * heap_alloc(size_t len)
Definition: appwiz.h:65
struct node node
#define FALSE
Definition: types.h:117
long LONG
Definition: pedump.c:60
#define debugstr_w
Definition: kernel32.h:32
GLenum GLint ref
Definition: glext.h:6028
#define FIXME(fmt,...)
Definition: debug.h:111
GLenum GLuint GLenum GLsizei length
Definition: glext.h:5579
#define S_FALSE
Definition: winerror.h:2357
#define E_INVALIDARG
Definition: ddrawi.h:101
static HRESULT return_null_node(IXMLDOMNode **p)
static const WCHAR xmlW[]
Definition: mxnamespace.c:61
GLuint index
Definition: glext.h:6031
#define debugstr_guid
Definition: kernel32.h:35
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
#define TRACE(s)
Definition: solgame.cpp:4
r parent
Definition: btrfs.c:2944
__wchar_t WCHAR
Definition: xmlstorage.h:180
static refpint_t pi[]
Definition: server.c:96
LONG HRESULT
Definition: typedefs.h:79
const GUID IID_IUnknown
#define WINAPI
Definition: msvc.h:6
unsigned short WORD
Definition: ntddk_ex.h:93
Definition: _map.h:44
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
Definition: tree.h:489
const GUID IID_IDispatch
int ret
static HRESULT return_null_bstr(BSTR *p)
#define InterlockedDecrement
Definition: armddk.h:52
REFIID LPVOID * ppvObject
Definition: precomp.h:44
#define V_BSTR(A)
Definition: oleauto.h:226
_In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon.h:531
struct stdole::EXCEPINFO EXCEPINFO
static const char * debugstr_variant(const VARIANT *var)
Definition: container.c:46
static VARIANTARG static DISPID
Definition: ordinal.c:49
#define S_OK
Definition: intsafe.h:52
#define InterlockedIncrement
Definition: armddk.h:53
static ATOM item
Definition: dde.c:856
const GLdouble * v
Definition: gl.h:2040
#define E_NOTIMPL
Definition: ddrawi.h:99
static HRESULT return_null_var(VARIANT *p)
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
unsigned int UINT
Definition: ndis.h:50
#define NULL
Definition: types.h:112
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4112
Definition: name.c:38
WINE_UNICODE_INLINE int strcmpW(const WCHAR *str1, const WCHAR *str2)
Definition: unicode.h:229
struct stdole::DISPPARAMS DISPPARAMS
unsigned int ULONG
Definition: retypes.h:1
GLenum target
Definition: glext.h:7315
__MSXML_DOMNODETYPE_DEFINED enum tagDOMNodeType DOMNodeType
GLfloat GLfloat p
Definition: glext.h:8902
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
static BOOL heap_free(void *mem)
Definition: appwiz.h:75
Definition: dlist.c:348
GLuint const GLchar * name
Definition: glext.h:6031