winecfg: Update Portuguese translation.
[wine/testsucceed.git] / dlls / msxml3 / parseerror.c
blob4b0dc57f5087c325305fbf5a33ed12efe7b0a7fa
1 /*
2 * ParseError implementation
4 * Copyright 2005 Huw Davies
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.
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.
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
22 #define COBJMACROS
24 #include "config.h"
26 #include <stdarg.h>
27 #include <assert.h>
28 #include "windef.h"
29 #include "winbase.h"
30 #include "winerror.h"
31 #include "winuser.h"
32 #include "ole2.h"
33 #include "msxml2.h"
35 #include "msxml_private.h"
37 #include "wine/debug.h"
39 WINE_DEFAULT_DEBUG_CHANNEL(msxml);
41 typedef struct
43 const struct IXMLDOMParseErrorVtbl *lpVtbl;
44 LONG ref;
45 LONG code, line, linepos, filepos;
46 BSTR url, reason, srcText;
47 } parse_error_t;
49 static inline parse_error_t *impl_from_IXMLDOMParseError( IXMLDOMParseError *iface )
51 return (parse_error_t *)((char*)iface - FIELD_OFFSET(parse_error_t, lpVtbl));
54 static HRESULT WINAPI parseError_QueryInterface(
55 IXMLDOMParseError *iface,
56 REFIID riid,
57 void** ppvObject )
59 TRACE("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppvObject);
61 if ( IsEqualGUID( riid, &IID_IUnknown ) ||
62 IsEqualGUID( riid, &IID_IDispatch ) ||
63 IsEqualGUID( riid, &IID_IXMLDOMParseError ) )
65 *ppvObject = iface;
67 else
69 FIXME("interface %s not implemented\n", debugstr_guid(riid));
70 return E_NOINTERFACE;
73 IXMLDOMParseError_AddRef( iface );
75 return S_OK;
78 static ULONG WINAPI parseError_AddRef(
79 IXMLDOMParseError *iface )
81 parse_error_t *This = impl_from_IXMLDOMParseError( iface );
82 ULONG ref = InterlockedIncrement( &This->ref );
83 TRACE("(%p) ref now %d\n", This, ref);
84 return ref;
87 static ULONG WINAPI parseError_Release(
88 IXMLDOMParseError *iface )
90 parse_error_t *This = impl_from_IXMLDOMParseError( iface );
91 ULONG ref;
93 ref = InterlockedDecrement( &This->ref );
94 TRACE("(%p) ref now %d\n", This, ref);
95 if ( ref == 0 )
97 SysFreeString(This->url);
98 SysFreeString(This->reason);
99 SysFreeString(This->srcText);
100 heap_free( This );
103 return ref;
106 static HRESULT WINAPI parseError_GetTypeInfoCount(
107 IXMLDOMParseError *iface,
108 UINT* pctinfo )
110 parse_error_t *This = impl_from_IXMLDOMParseError( iface );
112 TRACE("(%p)->(%p)\n", This, pctinfo);
114 *pctinfo = 1;
116 return S_OK;
119 static HRESULT WINAPI parseError_GetTypeInfo(
120 IXMLDOMParseError *iface,
121 UINT iTInfo,
122 LCID lcid,
123 ITypeInfo** ppTInfo )
125 parse_error_t *This = impl_from_IXMLDOMParseError( iface );
126 HRESULT hr;
128 TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
130 hr = get_typeinfo(IXMLDOMParseError_tid, ppTInfo);
132 return hr;
135 static HRESULT WINAPI parseError_GetIDsOfNames(
136 IXMLDOMParseError *iface,
137 REFIID riid,
138 LPOLESTR* rgszNames,
139 UINT cNames,
140 LCID lcid,
141 DISPID* rgDispId )
143 parse_error_t *This = impl_from_IXMLDOMParseError( iface );
144 ITypeInfo *typeinfo;
145 HRESULT hr;
147 TRACE("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
148 lcid, rgDispId);
150 if(!rgszNames || cNames == 0 || !rgDispId)
151 return E_INVALIDARG;
153 hr = get_typeinfo(IXMLDOMParseError_tid, &typeinfo);
154 if(SUCCEEDED(hr))
156 hr = ITypeInfo_GetIDsOfNames(typeinfo, rgszNames, cNames, rgDispId);
157 ITypeInfo_Release(typeinfo);
160 return hr;
163 static HRESULT WINAPI parseError_Invoke(
164 IXMLDOMParseError *iface,
165 DISPID dispIdMember,
166 REFIID riid,
167 LCID lcid,
168 WORD wFlags,
169 DISPPARAMS* pDispParams,
170 VARIANT* pVarResult,
171 EXCEPINFO* pExcepInfo,
172 UINT* puArgErr )
174 parse_error_t *This = impl_from_IXMLDOMParseError( iface );
175 ITypeInfo *typeinfo;
176 HRESULT hr;
178 TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
179 lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
181 hr = get_typeinfo(IXMLDOMParseError_tid, &typeinfo);
182 if(SUCCEEDED(hr))
184 hr = ITypeInfo_Invoke(typeinfo, &(This->lpVtbl), dispIdMember, wFlags, pDispParams,
185 pVarResult, pExcepInfo, puArgErr);
186 ITypeInfo_Release(typeinfo);
189 return hr;
192 static HRESULT WINAPI parseError_get_errorCode(
193 IXMLDOMParseError *iface,
194 LONG *code )
196 parse_error_t *This = impl_from_IXMLDOMParseError( iface );
197 TRACE("(%p)->(%p)\n", This, code);
199 *code = This->code;
201 if(This->code == 0)
202 return S_FALSE;
204 return S_OK;
207 static HRESULT WINAPI parseError_get_url(
208 IXMLDOMParseError *iface,
209 BSTR *url )
211 parse_error_t *This = impl_from_IXMLDOMParseError( iface );
212 FIXME("(%p)->(%p)\n", This, url);
213 return E_NOTIMPL;
216 static HRESULT WINAPI parseError_get_reason(
217 IXMLDOMParseError *iface,
218 BSTR *reason )
220 parse_error_t *This = impl_from_IXMLDOMParseError( iface );
221 TRACE("(%p)->(%p)\n", This, reason);
223 if(!This->reason)
225 *reason = NULL;
226 return S_FALSE;
228 *reason = SysAllocString(This->reason);
229 return S_OK;
232 static HRESULT WINAPI parseError_get_srcText(
233 IXMLDOMParseError *iface,
234 BSTR *srcText )
236 parse_error_t *This = impl_from_IXMLDOMParseError( iface );
237 FIXME("(%p)->(%p)\n", This, srcText);
238 return E_NOTIMPL;
241 static HRESULT WINAPI parseError_get_line(
242 IXMLDOMParseError *iface,
243 LONG *line )
245 parse_error_t *This = impl_from_IXMLDOMParseError( iface );
246 FIXME("(%p)->(%p)\n", This, line);
247 return E_NOTIMPL;
250 static HRESULT WINAPI parseError_get_linepos(
251 IXMLDOMParseError *iface,
252 LONG *linepos )
254 parse_error_t *This = impl_from_IXMLDOMParseError( iface );
255 FIXME("(%p)->(%p)\n", This, linepos);
256 return E_NOTIMPL;
259 static HRESULT WINAPI parseError_get_filepos(
260 IXMLDOMParseError *iface,
261 LONG *filepos )
263 parse_error_t *This = impl_from_IXMLDOMParseError( iface );
264 FIXME("(%p)->(%p)\n", This, filepos);
265 return E_NOTIMPL;
268 static const struct IXMLDOMParseErrorVtbl parseError_vtbl =
270 parseError_QueryInterface,
271 parseError_AddRef,
272 parseError_Release,
273 parseError_GetTypeInfoCount,
274 parseError_GetTypeInfo,
275 parseError_GetIDsOfNames,
276 parseError_Invoke,
277 parseError_get_errorCode,
278 parseError_get_url,
279 parseError_get_reason,
280 parseError_get_srcText,
281 parseError_get_line,
282 parseError_get_linepos,
283 parseError_get_filepos
286 IXMLDOMParseError *create_parseError( LONG code, BSTR url, BSTR reason, BSTR srcText,
287 LONG line, LONG linepos, LONG filepos )
289 parse_error_t *This;
291 This = heap_alloc( sizeof(*This) );
292 if ( !This )
293 return NULL;
295 This->lpVtbl = &parseError_vtbl;
296 This->ref = 1;
298 This->code = code;
299 This->url = url;
300 This->reason = reason;
301 This->srcText = srcText;
302 This->line = line;
303 This->linepos = linepos;
304 This->filepos = filepos;
306 return (IXMLDOMParseError*) &This->lpVtbl;