Module: wine Branch: master Commit: 92539672956dadd441a4d65f4103d0a7a4b57af8 URL: http://source.winehq.org/git/wine.git/?a=commit;h=92539672956dadd441a4d65f41...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Sun Aug 21 21:30:58 2011 +0400
msxml3/mxnamespace: Add IMXNamespaceManager stub.
---
dlls/msxml3/Makefile.in | 1 + dlls/msxml3/factory.c | 7 ++ dlls/msxml3/msxml_private.h | 1 + dlls/msxml3/mxnamespace.c | 211 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 220 insertions(+), 0 deletions(-)
diff --git a/dlls/msxml3/Makefile.in b/dlls/msxml3/Makefile.in index e7223bb..889ef64 100644 --- a/dlls/msxml3/Makefile.in +++ b/dlls/msxml3/Makefile.in @@ -19,6 +19,7 @@ C_SRCS = \ factory.c \ httprequest.c \ main.c \ + mxnamespace.c \ mxwriter.c \ node.c \ nodelist.c \ diff --git a/dlls/msxml3/factory.c b/dlls/msxml3/factory.c index d3d2692..9ea1bb4 100644 --- a/dlls/msxml3/factory.c +++ b/dlls/msxml3/factory.c @@ -224,6 +224,7 @@ static ClassFactory saxreadcf = { { &ClassFactoryVtbl }, SAXXMLReader_create }; static ClassFactory httpreqcf = { { &ClassFactoryVtbl }, XMLHTTPRequest_create }; static ClassFactory xsltemplatecf = { { &ClassFactoryVtbl }, XSLTemplate_create }; static ClassFactory mxwritercf = { { &ClassFactoryVtbl }, MXWriter_create }; +static ClassFactory mxnsmanagercf = { {&ClassFactoryVtbl }, MXNamespaceManager_create };
/****************************************************************** * DllGetClassObject (MSXML3.@) @@ -295,6 +296,12 @@ HRESULT WINAPI DllGetClassObject( REFCLSID rclsid, REFIID riid, void **ppv ) { cf = &mxwritercf.IClassFactory_iface; } + else if( IsEqualCLSID( rclsid, &CLSID_MXNamespaceManager ) || + IsEqualCLSID( rclsid, &CLSID_MXNamespaceManager40 ) || + IsEqualCLSID( rclsid, &CLSID_MXNamespaceManager60 ) ) + { + cf = &mxnsmanagercf.IClassFactory_iface; + }
if ( !cf ) return CLASS_E_CLASSNOTAVAILABLE; diff --git a/dlls/msxml3/msxml_private.h b/dlls/msxml3/msxml_private.h index bf65a89..0027324 100644 --- a/dlls/msxml3/msxml_private.h +++ b/dlls/msxml3/msxml_private.h @@ -435,6 +435,7 @@ extern HRESULT SAXXMLReader_create(IUnknown*, void**) DECLSPEC_HIDDEN; extern HRESULT XMLHTTPRequest_create(IUnknown*, void **) DECLSPEC_HIDDEN; extern HRESULT XSLTemplate_create(IUnknown*, void**) DECLSPEC_HIDDEN; extern HRESULT MXWriter_create(IUnknown*,void**) DECLSPEC_HIDDEN; +extern HRESULT MXNamespaceManager_create(IUnknown*,void**) DECLSPEC_HIDDEN;
static inline const CLSID* DOMDocument_version(MSXML_VERSION v) { diff --git a/dlls/msxml3/mxnamespace.c b/dlls/msxml3/mxnamespace.c new file mode 100644 index 0000000..2119e4f --- /dev/null +++ b/dlls/msxml3/mxnamespace.c @@ -0,0 +1,211 @@ +/* + * IMXNamespaceManager implementation + * + * Copyright 2011 Nikolay Sivov for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#define COBJMACROS +#define NONAMELESSUNION + +#include "config.h" + +#include <stdarg.h> +#ifdef HAVE_LIBXML2 +# include <libxml/parser.h> +# include <libxml/xmlerror.h> +# include <libxml/encoding.h> +#endif + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "ole2.h" +#include "msxml6.h" + +#include "msxml_private.h" + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(msxml); + +typedef struct +{ + IMXNamespaceManager IMXNamespaceManager_iface; + LONG ref; +} namespacemanager; + +static inline namespacemanager *impl_from_IMXNamespaceManager( IMXNamespaceManager *iface ) +{ + return CONTAINING_RECORD(iface, namespacemanager, IMXNamespaceManager_iface); +} + +static HRESULT WINAPI namespacemanager_QueryInterface(IMXNamespaceManager *iface, REFIID riid, void **ppvObject) +{ + namespacemanager *This = impl_from_IMXNamespaceManager( iface ); + TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject); + + if ( IsEqualGUID( riid, &IID_IMXNamespaceManager) || + IsEqualGUID( riid, &IID_IUnknown) ) + { + *ppvObject = iface; + } + else + { + TRACE("Unsupported interface %s\n", debugstr_guid(riid)); + *ppvObject = NULL; + return E_NOINTERFACE; + } + + IMXNamespaceManager_AddRef( iface ); + + return S_OK; +} + +static ULONG WINAPI namespacemanager_AddRef(IMXNamespaceManager *iface) +{ + namespacemanager *This = impl_from_IMXNamespaceManager( iface ); + ULONG ref = InterlockedIncrement( &This->ref ); + TRACE("(%p)->(%u)\n", This, ref ); + return ref; +} + +static ULONG WINAPI namespacemanager_Release(IMXNamespaceManager *iface) +{ + namespacemanager *This = impl_from_IMXNamespaceManager( iface ); + ULONG ref = InterlockedDecrement( &This->ref ); + + TRACE("(%p)->(%u)\n", This, ref ); + + if ( ref == 0 ) + heap_free( This ); + + return ref; +} + +static HRESULT WINAPI namespacemanager_putAllowOverride(IMXNamespaceManager *iface, + VARIANT_BOOL override) +{ + namespacemanager *This = impl_from_IMXNamespaceManager( iface ); + FIXME("(%p)->(%d): stub\n", This, override ); + return E_NOTIMPL; +} + +static HRESULT WINAPI namespacemanager_getAllowOverride(IMXNamespaceManager *iface, + VARIANT_BOOL *override) +{ + namespacemanager *This = impl_from_IMXNamespaceManager( iface ); + FIXME("(%p)->(%p): stub\n", This, override ); + return E_NOTIMPL; +} + +static HRESULT WINAPI namespacemanager_reset(IMXNamespaceManager *iface) +{ + namespacemanager *This = impl_from_IMXNamespaceManager( iface ); + FIXME("(%p): stub\n", This ); + return E_NOTIMPL; +} + +static HRESULT WINAPI namespacemanager_pushContext(IMXNamespaceManager *iface) +{ + namespacemanager *This = impl_from_IMXNamespaceManager( iface ); + FIXME("(%p): stub\n", This ); + return E_NOTIMPL; +} + +static HRESULT WINAPI namespacemanager_pushNodeContext(IMXNamespaceManager *iface, + IXMLDOMNode *node, VARIANT_BOOL deep) +{ + namespacemanager *This = impl_from_IMXNamespaceManager( iface ); + FIXME("(%p)->(%p %d): stub\n", This, node, deep ); + return E_NOTIMPL; +} + +static HRESULT WINAPI namespacemanager_popContext(IMXNamespaceManager *iface) +{ + namespacemanager *This = impl_from_IMXNamespaceManager( iface ); + FIXME("(%p): stub\n", This ); + return E_NOTIMPL; +} + +static HRESULT WINAPI namespacemanager_declarePrefix(IMXNamespaceManager *iface, + const WCHAR *prefix, const WCHAR *namespaceURI) +{ + namespacemanager *This = impl_from_IMXNamespaceManager( iface ); + FIXME("(%p)->(%s %s): stub\n", This, debugstr_w(prefix), debugstr_w(namespaceURI)); + return E_NOTIMPL; +} + +static HRESULT WINAPI namespacemanager_getDeclaredPrefix(IMXNamespaceManager *iface, + LONG index, WCHAR *prefix, int *prefix_len) +{ + namespacemanager *This = impl_from_IMXNamespaceManager( iface ); + FIXME("(%p)->(%d %p %p): stub\n", This, index, prefix, prefix_len); + return E_NOTIMPL; +} + +static HRESULT WINAPI namespacemanager_getPrefix(IMXNamespaceManager *iface, + const WCHAR *uri, LONG index, WCHAR *prefix, int *prefix_len) +{ + namespacemanager *This = impl_from_IMXNamespaceManager( iface ); + FIXME("(%p)->(%s %d %p %p): stub\n", This, debugstr_w(uri), index, prefix, prefix_len); + return E_NOTIMPL; +} + +static HRESULT WINAPI namespacemanager_getURI(IMXNamespaceManager *iface, + const WCHAR *prefix, IXMLDOMNode *node, WCHAR *uri, int *uri_len) +{ + namespacemanager *This = impl_from_IMXNamespaceManager( iface ); + FIXME("(%p)->(%s %p %p %p): stub\n", This, debugstr_w(prefix), node, uri, uri_len); + return E_NOTIMPL; +} + +static const struct IMXNamespaceManagerVtbl MXNamespaceManagerVtbl = +{ + namespacemanager_QueryInterface, + namespacemanager_AddRef, + namespacemanager_Release, + namespacemanager_putAllowOverride, + namespacemanager_getAllowOverride, + namespacemanager_reset, + namespacemanager_pushContext, + namespacemanager_pushNodeContext, + namespacemanager_popContext, + namespacemanager_declarePrefix, + namespacemanager_getDeclaredPrefix, + namespacemanager_getPrefix, + namespacemanager_getURI +}; + +HRESULT MXNamespaceManager_create(IUnknown *outer, void **obj) +{ + namespacemanager *ns; + + TRACE("(%p, %p)\n", outer, obj); + + ns = heap_alloc( sizeof (*ns) ); + if( !ns ) + return E_OUTOFMEMORY; + + ns->IMXNamespaceManager_iface.lpVtbl = &MXNamespaceManagerVtbl; + ns->ref = 1; + + *obj = &ns->IMXNamespaceManager_iface; + + TRACE("returning iface %p\n", *obj); + + return S_OK; +}