ReactOS  0.4.15-dev-3745-g356babc
attribute.c
Go to the documentation of this file.
1 /*
2  * DOM Attribute 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 # include <libxml/HTMLtree.h>
30 #endif
31 
32 #include "windef.h"
33 #include "winbase.h"
34 #include "winuser.h"
35 #include "ole2.h"
36 #include "msxml6.h"
37 
38 #include "msxml_private.h"
39 
40 #include "wine/debug.h"
41 
42 #ifdef HAVE_LIBXML2
43 
45 
46 static const xmlChar xmlns[] = "xmlns";
47 
48 typedef struct _domattr
49 {
50  xmlnode node;
51  IXMLDOMAttribute IXMLDOMAttribute_iface;
52  LONG ref;
53  BOOL floating;
54 } domattr;
55 
56 static const tid_t domattr_se_tids[] = {
59  NULL_tid
60 };
61 
62 static inline domattr *impl_from_IXMLDOMAttribute( IXMLDOMAttribute *iface )
63 {
64  return CONTAINING_RECORD(iface, domattr, IXMLDOMAttribute_iface);
65 }
66 
67 static HRESULT WINAPI domattr_QueryInterface(
68  IXMLDOMAttribute *iface,
69  REFIID riid,
70  void** ppvObject )
71 {
72  domattr *This = impl_from_IXMLDOMAttribute( iface );
73  TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject);
74 
75  if ( IsEqualGUID( riid, &IID_IXMLDOMAttribute ) ||
76  IsEqualGUID( riid, &IID_IXMLDOMNode ) ||
79  {
80  *ppvObject = iface;
81  }
82  else if(node_query_interface(&This->node, riid, ppvObject))
83  {
84  return *ppvObject ? S_OK : E_NOINTERFACE;
85  }
86  else if(IsEqualGUID( riid, &IID_ISupportErrorInfo ))
87  {
88  return node_create_supporterrorinfo(domattr_se_tids, ppvObject);
89  }
90  else
91  {
92  TRACE("Unsupported interface %s\n", debugstr_guid(riid));
93  *ppvObject = NULL;
94  return E_NOINTERFACE;
95  }
96 
97  IXMLDOMAttribute_AddRef(iface);
98  return S_OK;
99 }
100 
101 static ULONG WINAPI domattr_AddRef(
102  IXMLDOMAttribute *iface )
103 {
104  domattr *This = impl_from_IXMLDOMAttribute( iface );
105  ULONG ref = InterlockedIncrement( &This->ref );
106  TRACE("(%p)->(%d)\n", This, ref);
107  return ref;
108 }
109 
110 static ULONG WINAPI domattr_Release(
111  IXMLDOMAttribute *iface )
112 {
113  domattr *This = impl_from_IXMLDOMAttribute( iface );
114  ULONG ref = InterlockedDecrement( &This->ref );
115 
116  TRACE("(%p)->(%d)\n", This, ref);
117  if ( ref == 0 )
118  {
119  destroy_xmlnode(&This->node);
120  if ( This->floating )
121  {
122  xmlFreeNs( This->node.node->ns );
123  xmlFreeNode( This->node.node );
124  }
125  heap_free( This );
126  }
127 
128  return ref;
129 }
130 
131 static HRESULT WINAPI domattr_GetTypeInfoCount(
132  IXMLDOMAttribute *iface,
133  UINT* pctinfo )
134 {
135  domattr *This = impl_from_IXMLDOMAttribute( iface );
136  return IDispatchEx_GetTypeInfoCount(&This->node.dispex.IDispatchEx_iface, pctinfo);
137 }
138 
139 static HRESULT WINAPI domattr_GetTypeInfo(
140  IXMLDOMAttribute *iface,
141  UINT iTInfo, LCID lcid,
142  ITypeInfo** ppTInfo )
143 {
144  domattr *This = impl_from_IXMLDOMAttribute( iface );
145  return IDispatchEx_GetTypeInfo(&This->node.dispex.IDispatchEx_iface,
146  iTInfo, lcid, ppTInfo);
147 }
148 
149 static HRESULT WINAPI domattr_GetIDsOfNames(
150  IXMLDOMAttribute *iface,
151  REFIID riid, LPOLESTR* rgszNames,
152  UINT cNames, LCID lcid, DISPID* rgDispId )
153 {
154  domattr *This = impl_from_IXMLDOMAttribute( iface );
155  return IDispatchEx_GetIDsOfNames(&This->node.dispex.IDispatchEx_iface,
156  riid, rgszNames, cNames, lcid, rgDispId);
157 }
158 
159 static HRESULT WINAPI domattr_Invoke(
160  IXMLDOMAttribute *iface,
161  DISPID dispIdMember, REFIID riid, LCID lcid,
162  WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult,
163  EXCEPINFO* pExcepInfo, UINT* puArgErr )
164 {
165  domattr *This = impl_from_IXMLDOMAttribute( iface );
166  return IDispatchEx_Invoke(&This->node.dispex.IDispatchEx_iface,
167  dispIdMember, riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
168 }
169 
170 static HRESULT WINAPI domattr_get_nodeName(
171  IXMLDOMAttribute *iface,
172  BSTR* p )
173 {
174  domattr *This = impl_from_IXMLDOMAttribute( iface );
175 
176  TRACE("(%p)->(%p)\n", This, p);
177 
178  return node_get_nodeName(&This->node, p);
179 }
180 
181 static HRESULT WINAPI domattr_get_nodeValue(
182  IXMLDOMAttribute *iface,
183  VARIANT* value)
184 {
185  domattr *This = impl_from_IXMLDOMAttribute( iface );
186 
187  TRACE("(%p)->(%p)\n", This, value);
188 
189  return node_get_content(&This->node, value);
190 }
191 
192 static HRESULT WINAPI domattr_put_nodeValue(
193  IXMLDOMAttribute *iface,
194  VARIANT value)
195 {
196  domattr *This = impl_from_IXMLDOMAttribute( iface );
197 
198  TRACE("(%p)->(%s)\n", This, debugstr_variant(&value));
199 
200  return node_put_value_escaped(&This->node, &value);
201 }
202 
203 static HRESULT WINAPI domattr_get_nodeType(
204  IXMLDOMAttribute *iface,
205  DOMNodeType* domNodeType )
206 {
207  domattr *This = impl_from_IXMLDOMAttribute( iface );
208 
209  TRACE("(%p)->(%p)\n", This, domNodeType);
210 
211  *domNodeType = NODE_ATTRIBUTE;
212  return S_OK;
213 }
214 
215 static HRESULT WINAPI domattr_get_parentNode(
216  IXMLDOMAttribute *iface,
217  IXMLDOMNode** parent )
218 {
219  domattr *This = impl_from_IXMLDOMAttribute( iface );
220  TRACE("(%p)->(%p)\n", This, parent);
221  if (!parent) return E_INVALIDARG;
222  *parent = NULL;
223  return S_FALSE;
224 }
225 
226 static HRESULT WINAPI domattr_get_childNodes(
227  IXMLDOMAttribute *iface,
228  IXMLDOMNodeList** outList)
229 {
230  domattr *This = impl_from_IXMLDOMAttribute( iface );
231 
232  TRACE("(%p)->(%p)\n", This, outList);
233 
234  return node_get_child_nodes(&This->node, outList);
235 }
236 
237 static HRESULT WINAPI domattr_get_firstChild(
238  IXMLDOMAttribute *iface,
239  IXMLDOMNode** domNode)
240 {
241  domattr *This = impl_from_IXMLDOMAttribute( iface );
242 
243  TRACE("(%p)->(%p)\n", This, domNode);
244 
245  return node_get_first_child(&This->node, domNode);
246 }
247 
248 static HRESULT WINAPI domattr_get_lastChild(
249  IXMLDOMAttribute *iface,
250  IXMLDOMNode** domNode)
251 {
252  domattr *This = impl_from_IXMLDOMAttribute( iface );
253 
254  TRACE("(%p)->(%p)\n", This, domNode);
255 
256  return node_get_last_child(&This->node, domNode);
257 }
258 
259 static HRESULT WINAPI domattr_get_previousSibling(
260  IXMLDOMAttribute *iface,
261  IXMLDOMNode** domNode)
262 {
263  domattr *This = impl_from_IXMLDOMAttribute( iface );
264 
265  TRACE("(%p)->(%p)\n", This, domNode);
266 
267  return return_null_node(domNode);
268 }
269 
270 static HRESULT WINAPI domattr_get_nextSibling(
271  IXMLDOMAttribute *iface,
272  IXMLDOMNode** domNode)
273 {
274  domattr *This = impl_from_IXMLDOMAttribute( iface );
275 
276  TRACE("(%p)->(%p)\n", This, domNode);
277 
278  return return_null_node(domNode);
279 }
280 
281 static HRESULT WINAPI domattr_get_attributes(
282  IXMLDOMAttribute *iface,
283  IXMLDOMNamedNodeMap** attributeMap)
284 {
285  domattr *This = impl_from_IXMLDOMAttribute( iface );
286 
287  TRACE("(%p)->(%p)\n", This, attributeMap);
288 
289  return return_null_ptr((void**)attributeMap);
290 }
291 
292 static HRESULT WINAPI domattr_insertBefore(
293  IXMLDOMAttribute *iface,
294  IXMLDOMNode* newNode, VARIANT refChild,
295  IXMLDOMNode** old_node)
296 {
297  domattr *This = impl_from_IXMLDOMAttribute( iface );
299  HRESULT hr;
300 
301  FIXME("(%p)->(%p %s %p) needs test\n", This, newNode, debugstr_variant(&refChild), old_node);
302 
303  if (!newNode) return E_INVALIDARG;
304 
305  hr = IXMLDOMNode_get_nodeType(newNode, &type);
306  if (hr != S_OK) return hr;
307 
308  TRACE("new node type %d\n", type);
309  switch (type)
310  {
311  case NODE_ATTRIBUTE:
312  case NODE_CDATA_SECTION:
313  case NODE_COMMENT:
314  case NODE_ELEMENT:
316  if (old_node) *old_node = NULL;
317  return E_FAIL;
318  default:
319  return node_insert_before(&This->node, newNode, &refChild, old_node);
320  }
321 }
322 
323 static HRESULT WINAPI domattr_replaceChild(
324  IXMLDOMAttribute *iface,
325  IXMLDOMNode* newNode,
326  IXMLDOMNode* oldNode,
327  IXMLDOMNode** outOldNode)
328 {
329  domattr *This = impl_from_IXMLDOMAttribute( iface );
330 
331  FIXME("(%p)->(%p %p %p) needs tests\n", This, newNode, oldNode, outOldNode);
332 
333  return node_replace_child(&This->node, newNode, oldNode, outOldNode);
334 }
335 
336 static HRESULT WINAPI domattr_removeChild(
337  IXMLDOMAttribute *iface,
338  IXMLDOMNode *child, IXMLDOMNode **oldChild)
339 {
340  domattr *This = impl_from_IXMLDOMAttribute( iface );
341  TRACE("(%p)->(%p %p)\n", This, child, oldChild);
342  return node_remove_child(&This->node, child, oldChild);
343 }
344 
345 static HRESULT WINAPI domattr_appendChild(
346  IXMLDOMAttribute *iface,
347  IXMLDOMNode *child, IXMLDOMNode **outChild)
348 {
349  domattr *This = impl_from_IXMLDOMAttribute( iface );
350  TRACE("(%p)->(%p %p)\n", This, child, outChild);
351  return node_append_child(&This->node, child, outChild);
352 }
353 
354 static HRESULT WINAPI domattr_hasChildNodes(
355  IXMLDOMAttribute *iface,
356  VARIANT_BOOL *ret)
357 {
358  domattr *This = impl_from_IXMLDOMAttribute( iface );
359  TRACE("(%p)->(%p)\n", This, ret);
360  return node_has_childnodes(&This->node, ret);
361 }
362 
363 static HRESULT WINAPI domattr_get_ownerDocument(
364  IXMLDOMAttribute *iface,
365  IXMLDOMDocument **doc)
366 {
367  domattr *This = impl_from_IXMLDOMAttribute( iface );
368  TRACE("(%p)->(%p)\n", This, doc);
369  return node_get_owner_doc(&This->node, doc);
370 }
371 
372 static HRESULT WINAPI domattr_cloneNode(
373  IXMLDOMAttribute *iface,
374  VARIANT_BOOL deep, IXMLDOMNode** outNode)
375 {
376  domattr *This = impl_from_IXMLDOMAttribute( iface );
377  TRACE("(%p)->(%d %p)\n", This, deep, outNode);
378  return node_clone( &This->node, deep, outNode );
379 }
380 
381 static HRESULT WINAPI domattr_get_nodeTypeString(
382  IXMLDOMAttribute *iface,
383  BSTR* p)
384 {
385  domattr *This = impl_from_IXMLDOMAttribute( iface );
386  static const WCHAR attributeW[] = {'a','t','t','r','i','b','u','t','e',0};
387 
388  TRACE("(%p)->(%p)\n", This, p);
389 
390  return return_bstr(attributeW, p);
391 }
392 
393 static HRESULT WINAPI domattr_get_text(
394  IXMLDOMAttribute *iface,
395  BSTR* p)
396 {
397  domattr *This = impl_from_IXMLDOMAttribute( iface );
398  TRACE("(%p)->(%p)\n", This, p);
399  return node_get_text(&This->node, p);
400 }
401 
402 static HRESULT WINAPI domattr_put_text(
403  IXMLDOMAttribute *iface,
404  BSTR p)
405 {
406  domattr *This = impl_from_IXMLDOMAttribute( iface );
407  TRACE("(%p)->(%s)\n", This, debugstr_w(p));
408  return node_put_text( &This->node, p );
409 }
410 
411 static HRESULT WINAPI domattr_get_specified(
412  IXMLDOMAttribute *iface,
413  VARIANT_BOOL* isSpecified)
414 {
415  domattr *This = impl_from_IXMLDOMAttribute( iface );
416  FIXME("(%p)->(%p) stub!\n", This, isSpecified);
417  *isSpecified = VARIANT_TRUE;
418  return S_OK;
419 }
420 
421 static HRESULT WINAPI domattr_get_definition(
422  IXMLDOMAttribute *iface,
423  IXMLDOMNode** definitionNode)
424 {
425  domattr *This = impl_from_IXMLDOMAttribute( iface );
426  FIXME("(%p)->(%p)\n", This, definitionNode);
427  return E_NOTIMPL;
428 }
429 
430 static HRESULT WINAPI domattr_get_nodeTypedValue(
431  IXMLDOMAttribute *iface,
432  VARIANT* value)
433 {
434  domattr *This = impl_from_IXMLDOMAttribute( iface );
435  IXMLDOMDocument *doc;
436  HRESULT hr;
437 
438  TRACE("(%p)->(%p)\n", This, value);
439 
440  hr = IXMLDOMAttribute_get_ownerDocument(iface, &doc);
441  if (hr == S_OK)
442  {
443  IXMLDOMDocument3 *doc3;
444 
445  hr = IXMLDOMDocument_QueryInterface(doc, &IID_IXMLDOMDocument3, (void**)&doc3);
446  IXMLDOMDocument_Release(doc);
447 
448  if (hr == S_OK)
449  {
450  VARIANT schemas;
451 
452  hr = IXMLDOMDocument3_get_schemas(doc3, &schemas);
453  IXMLDOMDocument3_Release(doc3);
454 
455  if (hr != S_OK)
456  return IXMLDOMAttribute_get_value(iface, value);
457  else
458  {
459  FIXME("need to query schema for attribute type\n");
460  VariantClear(&schemas);
461  }
462  }
463  }
464 
465  return return_null_var(value);
466 }
467 
468 static HRESULT WINAPI domattr_put_nodeTypedValue(
469  IXMLDOMAttribute *iface,
470  VARIANT typedValue)
471 {
472  domattr *This = impl_from_IXMLDOMAttribute( iface );
473  FIXME("(%p)->(%s)\n", This, debugstr_variant(&typedValue));
474  return E_NOTIMPL;
475 }
476 
477 static HRESULT WINAPI domattr_get_dataType(
478  IXMLDOMAttribute *iface,
479  VARIANT* typename)
480 {
481  domattr *This = impl_from_IXMLDOMAttribute( iface );
482  TRACE("(%p)->(%p)\n", This, typename);
483  return return_null_var( typename );
484 }
485 
486 static HRESULT WINAPI domattr_put_dataType(
487  IXMLDOMAttribute *iface,
488  BSTR p)
489 {
490  domattr *This = impl_from_IXMLDOMAttribute( iface );
491 
492  FIXME("(%p)->(%s)\n", This, debugstr_w(p));
493 
494  if(!p)
495  return E_INVALIDARG;
496 
497  return E_FAIL;
498 }
499 
500 static HRESULT WINAPI domattr_get_xml(
501  IXMLDOMAttribute *iface,
502  BSTR* p)
503 {
504  domattr *This = impl_from_IXMLDOMAttribute( iface );
505 
506  TRACE("(%p)->(%p)\n", This, p);
507 
508  return node_get_xml(&This->node, FALSE, p);
509 }
510 
511 static HRESULT WINAPI domattr_transformNode(
512  IXMLDOMAttribute *iface,
513  IXMLDOMNode *node, BSTR *p)
514 {
515  domattr *This = impl_from_IXMLDOMAttribute( iface );
516  TRACE("(%p)->(%p %p)\n", This, node, p);
517  return node_transform_node(&This->node, node, p);
518 }
519 
520 static HRESULT WINAPI domattr_selectNodes(
521  IXMLDOMAttribute *iface,
522  BSTR p, IXMLDOMNodeList** outList)
523 {
524  domattr *This = impl_from_IXMLDOMAttribute( iface );
525  TRACE("(%p)->(%s %p)\n", This, debugstr_w(p), outList);
526  return node_select_nodes(&This->node, p, outList);
527 }
528 
529 static HRESULT WINAPI domattr_selectSingleNode(
530  IXMLDOMAttribute *iface,
531  BSTR p, IXMLDOMNode** outNode)
532 {
533  domattr *This = impl_from_IXMLDOMAttribute( iface );
534  TRACE("(%p)->(%s %p)\n", This, debugstr_w(p), outNode);
535  return node_select_singlenode(&This->node, p, outNode);
536 }
537 
538 static HRESULT WINAPI domattr_get_parsed(
539  IXMLDOMAttribute *iface,
540  VARIANT_BOOL* isParsed)
541 {
542  domattr *This = impl_from_IXMLDOMAttribute( iface );
543  FIXME("(%p)->(%p) stub!\n", This, isParsed);
544  *isParsed = VARIANT_TRUE;
545  return S_OK;
546 }
547 
548 static HRESULT WINAPI domattr_get_namespaceURI(
549  IXMLDOMAttribute *iface,
550  BSTR* p)
551 {
552  static const WCHAR w3xmlns[] = { 'h','t','t','p',':','/','/', 'w','w','w','.','w','3','.',
553  'o','r','g','/','2','0','0','0','/','x','m','l','n','s','/',0 };
554  domattr *This = impl_from_IXMLDOMAttribute( iface );
555  xmlNsPtr ns = This->node.node->ns;
556 
557  TRACE("(%p)->(%p)\n", This, p);
558 
559  if (!p)
560  return E_INVALIDARG;
561 
562  *p = NULL;
563 
564  if (ns)
565  {
566  /* special case for default namespace definition */
567  if (xmlStrEqual(This->node.node->name, xmlns))
568  *p = bstr_from_xmlChar(xmlns);
569  else if (xmlStrEqual(ns->prefix, xmlns))
570  {
571  if (xmldoc_version(This->node.node->doc) == MSXML6)
572  *p = SysAllocString(w3xmlns);
573  else
574  *p = SysAllocStringLen(NULL, 0);
575  }
576  else if (ns->href)
577  *p = bstr_from_xmlChar(ns->href);
578  }
579 
580  TRACE("uri: %s\n", debugstr_w(*p));
581 
582  return *p ? S_OK : S_FALSE;
583 }
584 
585 static HRESULT WINAPI domattr_get_prefix(
586  IXMLDOMAttribute *iface,
587  BSTR* prefix)
588 {
589  domattr *This = impl_from_IXMLDOMAttribute( iface );
590  xmlNsPtr ns = This->node.node->ns;
591 
592  TRACE("(%p)->(%p)\n", This, prefix);
593 
594  if (!prefix) return E_INVALIDARG;
595 
596  *prefix = NULL;
597 
598  if (ns)
599  {
600  /* special case for default namespace definition */
601  if (xmlStrEqual(This->node.node->name, xmlns))
602  *prefix = bstr_from_xmlChar(xmlns);
603  else if (ns->prefix)
604  *prefix = bstr_from_xmlChar(ns->prefix);
605  }
606 
607  TRACE("prefix: %s\n", debugstr_w(*prefix));
608 
609  return *prefix ? S_OK : S_FALSE;
610 }
611 
612 static HRESULT WINAPI domattr_get_baseName(
613  IXMLDOMAttribute *iface,
614  BSTR* name)
615 {
616  domattr *This = impl_from_IXMLDOMAttribute( iface );
617  TRACE("(%p)->(%p)\n", This, name);
618  return node_get_base_name( &This->node, name );
619 }
620 
621 static HRESULT WINAPI domattr_transformNodeToObject(
622  IXMLDOMAttribute *iface,
623  IXMLDOMNode* domNode, VARIANT var1)
624 {
625  domattr *This = impl_from_IXMLDOMAttribute( iface );
626  FIXME("(%p)->(%p %s)\n", This, domNode, debugstr_variant(&var1));
627  return E_NOTIMPL;
628 }
629 
630 static HRESULT WINAPI domattr_get_name(
631  IXMLDOMAttribute *iface,
632  BSTR *p)
633 {
634  domattr *This = impl_from_IXMLDOMAttribute( iface );
635 
636  TRACE("(%p)->(%p)\n", This, p);
637 
638  return node_get_nodeName(&This->node, p);
639 }
640 
641 static HRESULT WINAPI domattr_get_value(
642  IXMLDOMAttribute *iface,
643  VARIANT *value)
644 {
645  domattr *This = impl_from_IXMLDOMAttribute( iface );
646 
647  TRACE("(%p)->(%p)\n", This, value);
648 
649  return node_get_content(&This->node, value);
650 }
651 
652 static HRESULT WINAPI domattr_put_value(
653  IXMLDOMAttribute *iface,
654  VARIANT value)
655 {
656  domattr *This = impl_from_IXMLDOMAttribute( iface );
657 
658  TRACE("(%p)->(%s)\n", This, debugstr_variant(&value));
659 
660  return node_put_value_escaped(&This->node, &value);
661 }
662 
663 static const struct IXMLDOMAttributeVtbl domattr_vtbl =
664 {
665  domattr_QueryInterface,
666  domattr_AddRef,
667  domattr_Release,
668  domattr_GetTypeInfoCount,
669  domattr_GetTypeInfo,
670  domattr_GetIDsOfNames,
671  domattr_Invoke,
672  domattr_get_nodeName,
673  domattr_get_nodeValue,
674  domattr_put_nodeValue,
675  domattr_get_nodeType,
676  domattr_get_parentNode,
677  domattr_get_childNodes,
678  domattr_get_firstChild,
679  domattr_get_lastChild,
680  domattr_get_previousSibling,
681  domattr_get_nextSibling,
682  domattr_get_attributes,
683  domattr_insertBefore,
684  domattr_replaceChild,
685  domattr_removeChild,
686  domattr_appendChild,
687  domattr_hasChildNodes,
688  domattr_get_ownerDocument,
689  domattr_cloneNode,
690  domattr_get_nodeTypeString,
691  domattr_get_text,
692  domattr_put_text,
693  domattr_get_specified,
694  domattr_get_definition,
695  domattr_get_nodeTypedValue,
696  domattr_put_nodeTypedValue,
697  domattr_get_dataType,
698  domattr_put_dataType,
699  domattr_get_xml,
700  domattr_transformNode,
701  domattr_selectNodes,
702  domattr_selectSingleNode,
703  domattr_get_parsed,
704  domattr_get_namespaceURI,
705  domattr_get_prefix,
706  domattr_get_baseName,
707  domattr_transformNodeToObject,
708  domattr_get_name,
709  domattr_get_value,
710  domattr_put_value
711 };
712 
713 static const tid_t domattr_iface_tids[] = {
715  0
716 };
717 
718 static dispex_static_data_t domattr_dispex = {
719  NULL,
721  NULL,
722  domattr_iface_tids
723 };
724 
725 IUnknown* create_attribute( xmlNodePtr attribute, BOOL floating )
726 {
727  domattr *This;
728 
729  This = heap_alloc( sizeof *This );
730  if ( !This )
731  return NULL;
732 
733  This->IXMLDOMAttribute_iface.lpVtbl = &domattr_vtbl;
734  This->ref = 1;
735  This->floating = floating;
736 
737  init_xmlnode(&This->node, attribute, (IXMLDOMNode*)&This->IXMLDOMAttribute_iface, &domattr_dispex);
738 
739  return (IUnknown*)&This->IXMLDOMAttribute_iface;
740 }
741 
742 #endif
XMLPUBFUN void XMLCALL xmlFreeNs(xmlNsPtr cur)
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
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
Definition: oleaut.c:339
REFIID riid
Definition: precomp.h:44
Definition: tree.h:389
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
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
#define debugstr_w
Definition: kernel32.h:32
static HRESULT return_null_ptr(void **p)
GLenum GLint ref
Definition: glext.h:6028
#define FIXME(fmt,...)
Definition: debug.h:111
#define S_FALSE
Definition: winerror.h:2357
#define E_INVALIDARG
Definition: ddrawi.h:101
static HRESULT return_null_node(IXMLDOMNode **p)
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:238
#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
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: tree.h:489
const GUID IID_IDispatch
int ret
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
Definition: variant.c:648
Definition: mxnamespace.c:44
#define InterlockedDecrement
Definition: armddk.h:52
unsigned char xmlChar
Definition: xmlstring.h:28
REFIID LPVOID * ppvObject
Definition: precomp.h:44
BSTR prefix
Definition: mxnamespace.c:46
_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
#define E_NOTIMPL
Definition: ddrawi.h:99
static HRESULT return_null_var(VARIANT *p)
unsigned int UINT
Definition: ndis.h:50
#define NULL
Definition: types.h:112
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4112
XMLPUBFUN void XMLCALL xmlFreeNode(xmlNodePtr cur)
Definition: name.c:38
struct stdole::DISPPARAMS DISPPARAMS
unsigned int ULONG
Definition: retypes.h:1
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
__MSXML_DOMNODETYPE_DEFINED enum tagDOMNodeType DOMNodeType
XMLPUBFUN int XMLCALL xmlStrEqual(const xmlChar *str1, const xmlChar *str2)
Definition: xmlstring.c:159
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