ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

attribute.c
Go to the documentation of this file.
00001 /*
00002  *    DOM Attribute implementation
00003  *
00004  * Copyright 2006 Huw Davies
00005  *
00006  * This library is free software; you can redistribute it and/or
00007  * modify it under the terms of the GNU Lesser General Public
00008  * License as published by the Free Software Foundation; either
00009  * version 2.1 of the License, or (at your option) any later version.
00010  *
00011  * This library is distributed in the hope that it will be useful,
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014  * Lesser General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU Lesser General Public
00017  * License along with this library; if not, write to the Free Software
00018  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
00019  */
00020 
00021 #define COBJMACROS
00022 
00023 #include "config.h"
00024 
00025 #include <stdarg.h>
00026 #include "windef.h"
00027 #include "winbase.h"
00028 #include "winuser.h"
00029 #include "ole2.h"
00030 #include "msxml2.h"
00031 
00032 #include "msxml_private.h"
00033 
00034 #include "wine/debug.h"
00035 
00036 WINE_DEFAULT_DEBUG_CHANNEL(msxml);
00037 
00038 #ifdef HAVE_LIBXML2
00039 
00040 typedef struct _domattr
00041 {
00042     xmlnode node;
00043     const struct IXMLDOMAttributeVtbl *lpVtbl;
00044     LONG ref;
00045 } domattr;
00046 
00047 static inline domattr *impl_from_IXMLDOMAttribute( IXMLDOMAttribute *iface )
00048 {
00049     return (domattr *)((char*)iface - FIELD_OFFSET(domattr, lpVtbl));
00050 }
00051 
00052 static HRESULT WINAPI domattr_QueryInterface(
00053     IXMLDOMAttribute *iface,
00054     REFIID riid,
00055     void** ppvObject )
00056 {
00057     domattr *This = impl_from_IXMLDOMAttribute( iface );
00058     TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject);
00059 
00060     if ( IsEqualGUID( riid, &IID_IXMLDOMAttribute ) ||
00061          IsEqualGUID( riid, &IID_IDispatch ) ||
00062          IsEqualGUID( riid, &IID_IUnknown ) )
00063     {
00064         *ppvObject = iface;
00065     }
00066     else if ( IsEqualGUID( riid, &IID_IXMLDOMNode ) )
00067     {
00068         *ppvObject = IXMLDOMNode_from_impl(&This->node);
00069     }
00070     else
00071     {
00072         FIXME("Unsupported interface %s\n", debugstr_guid(riid));
00073         return E_NOINTERFACE;
00074     }
00075 
00076     IXMLDOMText_AddRef((IUnknown*)*ppvObject);
00077     return S_OK;
00078 }
00079 
00080 static ULONG WINAPI domattr_AddRef(
00081     IXMLDOMAttribute *iface )
00082 {
00083     domattr *This = impl_from_IXMLDOMAttribute( iface );
00084     return InterlockedIncrement( &This->ref );
00085 }
00086 
00087 static ULONG WINAPI domattr_Release(
00088     IXMLDOMAttribute *iface )
00089 {
00090     domattr *This = impl_from_IXMLDOMAttribute( iface );
00091     ULONG ref;
00092 
00093     ref = InterlockedDecrement( &This->ref );
00094     if ( ref == 0 )
00095     {
00096         destroy_xmlnode(&This->node);
00097         heap_free( This );
00098     }
00099 
00100     return ref;
00101 }
00102 
00103 static HRESULT WINAPI domattr_GetTypeInfoCount(
00104     IXMLDOMAttribute *iface,
00105     UINT* pctinfo )
00106 {
00107     domattr *This = impl_from_IXMLDOMAttribute( iface );
00108 
00109     TRACE("(%p)->(%p)\n", This, pctinfo);
00110 
00111     *pctinfo = 1;
00112 
00113     return S_OK;
00114 }
00115 
00116 static HRESULT WINAPI domattr_GetTypeInfo(
00117     IXMLDOMAttribute *iface,
00118     UINT iTInfo, LCID lcid,
00119     ITypeInfo** ppTInfo )
00120 {
00121     domattr *This = impl_from_IXMLDOMAttribute( iface );
00122     HRESULT hr;
00123 
00124     TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
00125 
00126     hr = get_typeinfo(IXMLDOMAttribute_tid, ppTInfo);
00127 
00128     return hr;
00129 }
00130 
00131 static HRESULT WINAPI domattr_GetIDsOfNames(
00132     IXMLDOMAttribute *iface,
00133     REFIID riid, LPOLESTR* rgszNames,
00134     UINT cNames, LCID lcid, DISPID* rgDispId )
00135 {
00136     domattr *This = impl_from_IXMLDOMAttribute( iface );
00137     ITypeInfo *typeinfo;
00138     HRESULT hr;
00139 
00140     TRACE("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
00141           lcid, rgDispId);
00142 
00143     if(!rgszNames || cNames == 0 || !rgDispId)
00144         return E_INVALIDARG;
00145 
00146     hr = get_typeinfo(IXMLDOMAttribute_tid, &typeinfo);
00147     if(SUCCEEDED(hr))
00148     {
00149         hr = ITypeInfo_GetIDsOfNames(typeinfo, rgszNames, cNames, rgDispId);
00150         ITypeInfo_Release(typeinfo);
00151     }
00152 
00153     return hr;
00154 }
00155 
00156 static HRESULT WINAPI domattr_Invoke(
00157     IXMLDOMAttribute *iface,
00158     DISPID dispIdMember, REFIID riid, LCID lcid,
00159     WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult,
00160     EXCEPINFO* pExcepInfo, UINT* puArgErr )
00161 {
00162     domattr *This = impl_from_IXMLDOMAttribute( iface );
00163     ITypeInfo *typeinfo;
00164     HRESULT hr;
00165 
00166     TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
00167           lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
00168 
00169     hr = get_typeinfo(IXMLDOMAttribute_tid, &typeinfo);
00170     if(SUCCEEDED(hr))
00171     {
00172         hr = ITypeInfo_Invoke(typeinfo, &(This->lpVtbl), dispIdMember, wFlags, pDispParams,
00173                 pVarResult, pExcepInfo, puArgErr);
00174         ITypeInfo_Release(typeinfo);
00175     }
00176     return hr;
00177 }
00178 
00179 static HRESULT WINAPI domattr_get_nodeName(
00180     IXMLDOMAttribute *iface,
00181     BSTR* p )
00182 {
00183     domattr *This = impl_from_IXMLDOMAttribute( iface );
00184     return IXMLDOMNode_get_nodeName( IXMLDOMNode_from_impl(&This->node), p );
00185 }
00186 
00187 static HRESULT WINAPI domattr_get_nodeValue(
00188     IXMLDOMAttribute *iface,
00189     VARIANT* var1 )
00190 {
00191     domattr *This = impl_from_IXMLDOMAttribute( iface );
00192     return IXMLDOMNode_get_nodeValue( IXMLDOMNode_from_impl(&This->node), var1 );
00193 }
00194 
00195 static HRESULT WINAPI domattr_put_nodeValue(
00196     IXMLDOMAttribute *iface,
00197     VARIANT var1 )
00198 {
00199     domattr *This = impl_from_IXMLDOMAttribute( iface );
00200     return IXMLDOMNode_put_nodeValue( IXMLDOMNode_from_impl(&This->node), var1 );
00201 }
00202 
00203 static HRESULT WINAPI domattr_get_nodeType(
00204     IXMLDOMAttribute *iface,
00205     DOMNodeType* domNodeType )
00206 {
00207     domattr *This = impl_from_IXMLDOMAttribute( iface );
00208     return IXMLDOMNode_get_nodeType( IXMLDOMNode_from_impl(&This->node), domNodeType );
00209 }
00210 
00211 static HRESULT WINAPI domattr_get_parentNode(
00212     IXMLDOMAttribute *iface,
00213     IXMLDOMNode** parent )
00214 {
00215     domattr *This = impl_from_IXMLDOMAttribute( iface );
00216     TRACE("(%p)->(%p)\n", This, parent);
00217     if (!parent) return E_INVALIDARG;
00218     *parent = NULL;
00219     return S_FALSE;
00220 }
00221 
00222 static HRESULT WINAPI domattr_get_childNodes(
00223     IXMLDOMAttribute *iface,
00224     IXMLDOMNodeList** outList)
00225 {
00226     domattr *This = impl_from_IXMLDOMAttribute( iface );
00227     return IXMLDOMNode_get_childNodes( IXMLDOMNode_from_impl(&This->node), outList );
00228 }
00229 
00230 static HRESULT WINAPI domattr_get_firstChild(
00231     IXMLDOMAttribute *iface,
00232     IXMLDOMNode** domNode)
00233 {
00234     domattr *This = impl_from_IXMLDOMAttribute( iface );
00235     return IXMLDOMNode_get_firstChild( IXMLDOMNode_from_impl(&This->node), domNode );
00236 }
00237 
00238 static HRESULT WINAPI domattr_get_lastChild(
00239     IXMLDOMAttribute *iface,
00240     IXMLDOMNode** domNode)
00241 {
00242     domattr *This = impl_from_IXMLDOMAttribute( iface );
00243     return IXMLDOMNode_get_lastChild( IXMLDOMNode_from_impl(&This->node), domNode );
00244 }
00245 
00246 static HRESULT WINAPI domattr_get_previousSibling(
00247     IXMLDOMAttribute *iface,
00248     IXMLDOMNode** domNode)
00249 {
00250     domattr *This = impl_from_IXMLDOMAttribute( iface );
00251     return IXMLDOMNode_get_previousSibling( IXMLDOMNode_from_impl(&This->node), domNode );
00252 }
00253 
00254 static HRESULT WINAPI domattr_get_nextSibling(
00255     IXMLDOMAttribute *iface,
00256     IXMLDOMNode** domNode)
00257 {
00258     domattr *This = impl_from_IXMLDOMAttribute( iface );
00259     return IXMLDOMNode_get_nextSibling( IXMLDOMNode_from_impl(&This->node), domNode );
00260 }
00261 
00262 static HRESULT WINAPI domattr_get_attributes(
00263     IXMLDOMAttribute *iface,
00264     IXMLDOMNamedNodeMap** attributeMap)
00265 {
00266     domattr *This = impl_from_IXMLDOMAttribute( iface );
00267     return IXMLDOMNode_get_attributes( IXMLDOMNode_from_impl(&This->node), attributeMap );
00268 }
00269 
00270 static HRESULT WINAPI domattr_insertBefore(
00271     IXMLDOMAttribute *iface,
00272     IXMLDOMNode* newNode, VARIANT var1,
00273     IXMLDOMNode** outOldNode)
00274 {
00275     domattr *This = impl_from_IXMLDOMAttribute( iface );
00276     return IXMLDOMNode_insertBefore( IXMLDOMNode_from_impl(&This->node), newNode, var1, outOldNode );
00277 }
00278 
00279 static HRESULT WINAPI domattr_replaceChild(
00280     IXMLDOMAttribute *iface,
00281     IXMLDOMNode* newNode,
00282     IXMLDOMNode* oldNode,
00283     IXMLDOMNode** outOldNode)
00284 {
00285     domattr *This = impl_from_IXMLDOMAttribute( iface );
00286     return IXMLDOMNode_replaceChild( IXMLDOMNode_from_impl(&This->node), newNode, oldNode, outOldNode );
00287 }
00288 
00289 static HRESULT WINAPI domattr_removeChild(
00290     IXMLDOMAttribute *iface,
00291     IXMLDOMNode* domNode, IXMLDOMNode** oldNode)
00292 {
00293     domattr *This = impl_from_IXMLDOMAttribute( iface );
00294     return IXMLDOMNode_removeChild( IXMLDOMNode_from_impl(&This->node), domNode, oldNode );
00295 }
00296 
00297 static HRESULT WINAPI domattr_appendChild(
00298     IXMLDOMAttribute *iface,
00299     IXMLDOMNode* newNode, IXMLDOMNode** outNewNode)
00300 {
00301     domattr *This = impl_from_IXMLDOMAttribute( iface );
00302     return IXMLDOMNode_appendChild( IXMLDOMNode_from_impl(&This->node), newNode, outNewNode );
00303 }
00304 
00305 static HRESULT WINAPI domattr_hasChildNodes(
00306     IXMLDOMAttribute *iface,
00307     VARIANT_BOOL* pbool)
00308 {
00309     domattr *This = impl_from_IXMLDOMAttribute( iface );
00310     return IXMLDOMNode_hasChildNodes( IXMLDOMNode_from_impl(&This->node), pbool );
00311 }
00312 
00313 static HRESULT WINAPI domattr_get_ownerDocument(
00314     IXMLDOMAttribute *iface,
00315     IXMLDOMDocument** domDocument)
00316 {
00317     domattr *This = impl_from_IXMLDOMAttribute( iface );
00318     return IXMLDOMNode_get_ownerDocument( IXMLDOMNode_from_impl(&This->node), domDocument );
00319 }
00320 
00321 static HRESULT WINAPI domattr_cloneNode(
00322     IXMLDOMAttribute *iface,
00323     VARIANT_BOOL pbool, IXMLDOMNode** outNode)
00324 {
00325     domattr *This = impl_from_IXMLDOMAttribute( iface );
00326     return IXMLDOMNode_cloneNode( IXMLDOMNode_from_impl(&This->node), pbool, outNode );
00327 }
00328 
00329 static HRESULT WINAPI domattr_get_nodeTypeString(
00330     IXMLDOMAttribute *iface,
00331     BSTR* p)
00332 {
00333     domattr *This = impl_from_IXMLDOMAttribute( iface );
00334     return IXMLDOMNode_get_nodeTypeString( IXMLDOMNode_from_impl(&This->node), p );
00335 }
00336 
00337 static HRESULT WINAPI domattr_get_text(
00338     IXMLDOMAttribute *iface,
00339     BSTR* p)
00340 {
00341     domattr *This = impl_from_IXMLDOMAttribute( iface );
00342     return IXMLDOMNode_get_text( IXMLDOMNode_from_impl(&This->node), p );
00343 }
00344 
00345 static HRESULT WINAPI domattr_put_text(
00346     IXMLDOMAttribute *iface,
00347     BSTR p)
00348 {
00349     domattr *This = impl_from_IXMLDOMAttribute( iface );
00350     return IXMLDOMNode_put_text( IXMLDOMNode_from_impl(&This->node), p );
00351 }
00352 
00353 static HRESULT WINAPI domattr_get_specified(
00354     IXMLDOMAttribute *iface,
00355     VARIANT_BOOL* pbool)
00356 {
00357     domattr *This = impl_from_IXMLDOMAttribute( iface );
00358     return IXMLDOMNode_get_specified( IXMLDOMNode_from_impl(&This->node), pbool );
00359 }
00360 
00361 static HRESULT WINAPI domattr_get_definition(
00362     IXMLDOMAttribute *iface,
00363     IXMLDOMNode** domNode)
00364 {
00365     domattr *This = impl_from_IXMLDOMAttribute( iface );
00366     return IXMLDOMNode_get_definition( IXMLDOMNode_from_impl(&This->node), domNode );
00367 }
00368 
00369 static HRESULT WINAPI domattr_get_nodeTypedValue(
00370     IXMLDOMAttribute *iface,
00371     VARIANT* var1)
00372 {
00373     domattr *This = impl_from_IXMLDOMAttribute( iface );
00374     return IXMLDOMNode_get_nodeTypedValue( IXMLDOMNode_from_impl(&This->node), var1 );
00375 }
00376 
00377 static HRESULT WINAPI domattr_put_nodeTypedValue(
00378     IXMLDOMAttribute *iface,
00379     VARIANT var1)
00380 {
00381     domattr *This = impl_from_IXMLDOMAttribute( iface );
00382     return IXMLDOMNode_put_nodeTypedValue( IXMLDOMNode_from_impl(&This->node), var1 );
00383 }
00384 
00385 static HRESULT WINAPI domattr_get_dataType(
00386     IXMLDOMAttribute *iface,
00387     VARIANT* var1)
00388 {
00389     domattr *This = impl_from_IXMLDOMAttribute( iface );
00390     return IXMLDOMNode_get_dataType( IXMLDOMNode_from_impl(&This->node), var1 );
00391 }
00392 
00393 static HRESULT WINAPI domattr_put_dataType(
00394     IXMLDOMAttribute *iface,
00395     BSTR p)
00396 {
00397     domattr *This = impl_from_IXMLDOMAttribute( iface );
00398     return IXMLDOMNode_put_dataType( IXMLDOMNode_from_impl(&This->node), p );
00399 }
00400 
00401 static HRESULT WINAPI domattr_get_xml(
00402     IXMLDOMAttribute *iface,
00403     BSTR* p)
00404 {
00405     domattr *This = impl_from_IXMLDOMAttribute( iface );
00406     return IXMLDOMNode_get_xml( IXMLDOMNode_from_impl(&This->node), p );
00407 }
00408 
00409 static HRESULT WINAPI domattr_transformNode(
00410     IXMLDOMAttribute *iface,
00411     IXMLDOMNode* domNode, BSTR* p)
00412 {
00413     domattr *This = impl_from_IXMLDOMAttribute( iface );
00414     return IXMLDOMNode_transformNode( IXMLDOMNode_from_impl(&This->node), domNode, p );
00415 }
00416 
00417 static HRESULT WINAPI domattr_selectNodes(
00418     IXMLDOMAttribute *iface,
00419     BSTR p, IXMLDOMNodeList** outList)
00420 {
00421     domattr *This = impl_from_IXMLDOMAttribute( iface );
00422     return IXMLDOMNode_selectNodes( IXMLDOMNode_from_impl(&This->node), p, outList );
00423 }
00424 
00425 static HRESULT WINAPI domattr_selectSingleNode(
00426     IXMLDOMAttribute *iface,
00427     BSTR p, IXMLDOMNode** outNode)
00428 {
00429     domattr *This = impl_from_IXMLDOMAttribute( iface );
00430     return IXMLDOMNode_selectSingleNode( IXMLDOMNode_from_impl(&This->node), p, outNode );
00431 }
00432 
00433 static HRESULT WINAPI domattr_get_parsed(
00434     IXMLDOMAttribute *iface,
00435     VARIANT_BOOL* pbool)
00436 {
00437     domattr *This = impl_from_IXMLDOMAttribute( iface );
00438     return IXMLDOMNode_get_parsed( IXMLDOMNode_from_impl(&This->node), pbool );
00439 }
00440 
00441 static HRESULT WINAPI domattr_get_namespaceURI(
00442     IXMLDOMAttribute *iface,
00443     BSTR* p)
00444 {
00445     domattr *This = impl_from_IXMLDOMAttribute( iface );
00446     return IXMLDOMNode_get_namespaceURI( IXMLDOMNode_from_impl(&This->node), p );
00447 }
00448 
00449 static HRESULT WINAPI domattr_get_prefix(
00450     IXMLDOMAttribute *iface,
00451     BSTR* p)
00452 {
00453     domattr *This = impl_from_IXMLDOMAttribute( iface );
00454     return IXMLDOMNode_get_prefix( IXMLDOMNode_from_impl(&This->node), p );
00455 }
00456 
00457 static HRESULT WINAPI domattr_get_baseName(
00458     IXMLDOMAttribute *iface,
00459     BSTR* p)
00460 {
00461     domattr *This = impl_from_IXMLDOMAttribute( iface );
00462     return IXMLDOMNode_get_baseName( IXMLDOMNode_from_impl(&This->node), p );
00463 }
00464 
00465 static HRESULT WINAPI domattr_transformNodeToObject(
00466     IXMLDOMAttribute *iface,
00467     IXMLDOMNode* domNode, VARIANT var1)
00468 {
00469     domattr *This = impl_from_IXMLDOMAttribute( iface );
00470     return IXMLDOMNode_transformNodeToObject( IXMLDOMNode_from_impl(&This->node), domNode, var1 );
00471 }
00472 
00473 static HRESULT WINAPI domattr_get_name(
00474     IXMLDOMAttribute *iface,
00475     BSTR *p)
00476 {
00477     /* name property returns the same value as nodeName */
00478     domattr *This = impl_from_IXMLDOMAttribute( iface );
00479     return IXMLDOMNode_get_nodeName( IXMLDOMNode_from_impl(&This->node), p );
00480 }
00481 
00482 static HRESULT WINAPI domattr_get_value(
00483     IXMLDOMAttribute *iface,
00484     VARIANT *var1)
00485 {
00486     domattr *This = impl_from_IXMLDOMAttribute( iface );
00487     return IXMLDOMNode_get_nodeValue( IXMLDOMNode_from_impl(&This->node), var1 );
00488 }
00489 
00490 static HRESULT WINAPI domattr_put_value(
00491     IXMLDOMAttribute *iface,
00492     VARIANT var1)
00493 {
00494     domattr *This = impl_from_IXMLDOMAttribute( iface );
00495     return IXMLDOMNode_put_nodeValue( IXMLDOMNode_from_impl(&This->node), var1 );
00496 }
00497 
00498 static const struct IXMLDOMAttributeVtbl domattr_vtbl =
00499 {
00500     domattr_QueryInterface,
00501     domattr_AddRef,
00502     domattr_Release,
00503     domattr_GetTypeInfoCount,
00504     domattr_GetTypeInfo,
00505     domattr_GetIDsOfNames,
00506     domattr_Invoke,
00507     domattr_get_nodeName,
00508     domattr_get_nodeValue,
00509     domattr_put_nodeValue,
00510     domattr_get_nodeType,
00511     domattr_get_parentNode,
00512     domattr_get_childNodes,
00513     domattr_get_firstChild,
00514     domattr_get_lastChild,
00515     domattr_get_previousSibling,
00516     domattr_get_nextSibling,
00517     domattr_get_attributes,
00518     domattr_insertBefore,
00519     domattr_replaceChild,
00520     domattr_removeChild,
00521     domattr_appendChild,
00522     domattr_hasChildNodes,
00523     domattr_get_ownerDocument,
00524     domattr_cloneNode,
00525     domattr_get_nodeTypeString,
00526     domattr_get_text,
00527     domattr_put_text,
00528     domattr_get_specified,
00529     domattr_get_definition,
00530     domattr_get_nodeTypedValue,
00531     domattr_put_nodeTypedValue,
00532     domattr_get_dataType,
00533     domattr_put_dataType,
00534     domattr_get_xml,
00535     domattr_transformNode,
00536     domattr_selectNodes,
00537     domattr_selectSingleNode,
00538     domattr_get_parsed,
00539     domattr_get_namespaceURI,
00540     domattr_get_prefix,
00541     domattr_get_baseName,
00542     domattr_transformNodeToObject,
00543     domattr_get_name,
00544     domattr_get_value,
00545     domattr_put_value
00546 };
00547 
00548 IUnknown* create_attribute( xmlNodePtr attribute )
00549 {
00550     domattr *This;
00551 
00552     This = heap_alloc( sizeof *This );
00553     if ( !This )
00554         return NULL;
00555 
00556     This->lpVtbl = &domattr_vtbl;
00557     This->ref = 1;
00558 
00559     init_xmlnode(&This->node, attribute, (IUnknown*)&This->lpVtbl, NULL);
00560 
00561     return (IUnknown*) &This->lpVtbl;
00562 }
00563 
00564 #endif

Generated on Sat May 26 2012 04:23:54 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.