ReactOS  0.4.15-dev-1177-g6cb3b62
parseerror.c
Go to the documentation of this file.
1 /*
2  * ParseError implementation
3  *
4  * Copyright 2005 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 
22 #define COBJMACROS
23 
24 #include "config.h"
25 
26 #include <stdarg.h>
27 #ifdef HAVE_LIBXML2
28 # include <libxml/parser.h>
29 # include <libxml/xmlerror.h>
30 #endif
31 
32 #include "windef.h"
33 #include "winbase.h"
34 #include "winerror.h"
35 #include "winuser.h"
36 #include "ole2.h"
37 #include "msxml6.h"
38 
39 #include "msxml_private.h"
40 
41 #include "wine/debug.h"
42 
44 
45 typedef struct
46 {
48  IXMLDOMParseError2 IXMLDOMParseError2_iface;
50  LONG code, line, linepos, filepos;
51  BSTR url, reason, srcText;
53 
54 static inline parse_error_t *impl_from_IXMLDOMParseError2( IXMLDOMParseError2 *iface )
55 {
56  return CONTAINING_RECORD(iface, parse_error_t, IXMLDOMParseError2_iface);
57 }
58 
60  IXMLDOMParseError2 *iface,
61  REFIID riid,
62  void** ppvObject )
63 {
65 
66  TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject);
67 
68  if ( IsEqualGUID( riid, &IID_IUnknown ) ||
70  IsEqualGUID( riid, &IID_IXMLDOMParseError ) ||
71  IsEqualGUID( riid, &IID_IXMLDOMParseError2 ) )
72  {
73  *ppvObject = iface;
74  }
75  else if (dispex_query_interface(&This->dispex, riid, ppvObject))
76  {
77  return *ppvObject ? S_OK : E_NOINTERFACE;
78  }
79  else
80  {
81  FIXME("interface %s not implemented\n", debugstr_guid(riid));
82  *ppvObject = NULL;
83  return E_NOINTERFACE;
84  }
85 
86  IXMLDOMParseError2_AddRef( iface );
87 
88  return S_OK;
89 }
90 
92  IXMLDOMParseError2 *iface )
93 {
96  TRACE("(%p)->(%d)\n", This, ref);
97  return ref;
98 }
99 
101  IXMLDOMParseError2 *iface )
102 {
104  ULONG ref = InterlockedDecrement( &This->ref );
105 
106  TRACE("(%p)->(%d)\n", This, ref);
107  if ( ref == 0 )
108  {
109  SysFreeString(This->url);
110  SysFreeString(This->reason);
111  SysFreeString(This->srcText);
112  heap_free( This );
113  }
114 
115  return ref;
116 }
117 
119  IXMLDOMParseError2 *iface,
120  UINT* pctinfo )
121 {
123  return IDispatchEx_GetTypeInfoCount(&This->dispex.IDispatchEx_iface, pctinfo);
124 }
125 
127  IXMLDOMParseError2 *iface,
128  UINT iTInfo,
129  LCID lcid,
130  ITypeInfo** ppTInfo )
131 {
133  return IDispatchEx_GetTypeInfo(&This->dispex.IDispatchEx_iface,
134  iTInfo, lcid, ppTInfo);
135 }
136 
138  IXMLDOMParseError2 *iface,
139  REFIID riid,
140  LPOLESTR* rgszNames,
141  UINT cNames,
142  LCID lcid,
143  DISPID* rgDispId )
144 {
146  return IDispatchEx_GetIDsOfNames(&This->dispex.IDispatchEx_iface,
147  riid, rgszNames, cNames, lcid, rgDispId);
148 }
149 
151  IXMLDOMParseError2 *iface,
152  DISPID dispIdMember,
153  REFIID riid,
154  LCID lcid,
155  WORD wFlags,
156  DISPPARAMS* pDispParams,
157  VARIANT* pVarResult,
158  EXCEPINFO* pExcepInfo,
159  UINT* puArgErr )
160 {
162  return IDispatchEx_Invoke(&This->dispex.IDispatchEx_iface,
163  dispIdMember, riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
164 }
165 
167  IXMLDOMParseError2 *iface,
168  LONG *code )
169 {
171  TRACE("(%p)->(%p)\n", This, code);
172 
173  *code = This->code;
174 
175  if(This->code == 0)
176  return S_FALSE;
177 
178  return S_OK;
179 }
180 
182  IXMLDOMParseError2 *iface,
183  BSTR *url )
184 {
186  FIXME("(%p)->(%p)\n", This, url);
187  return E_NOTIMPL;
188 }
189 
191  IXMLDOMParseError2 *iface,
192  BSTR *reason )
193 {
195  TRACE("(%p)->(%p)\n", This, reason);
196 
197  if(!This->reason)
198  {
199  *reason = NULL;
200  return S_FALSE;
201  }
202  *reason = SysAllocString(This->reason);
203  return S_OK;
204 }
205 
207  IXMLDOMParseError2 *iface,
208  BSTR *srcText )
209 {
211 
212  TRACE("(%p)->(%p)\n", This, srcText);
213 
214  if (!srcText) return E_INVALIDARG;
215 
216  *srcText = SysAllocString(This->srcText);
217 
218  return S_OK;
219 }
220 
222  IXMLDOMParseError2 *iface,
223  LONG *line )
224 {
226 
227  TRACE("(%p)->(%p): stub\n", This, line);
228 
229  if (!line) return E_INVALIDARG;
230 
231  *line = This->line;
232  return S_OK;
233 }
234 
236  IXMLDOMParseError2 *iface,
237  LONG *linepos )
238 {
240 
241  TRACE("(%p)->(%p)\n", This, linepos);
242 
243  if (!linepos) return E_INVALIDARG;
244 
245  *linepos = This->linepos;
246  return S_OK;
247 }
248 
250  IXMLDOMParseError2 *iface,
251  LONG *filepos )
252 {
254  FIXME("(%p)->(%p)\n", This, filepos);
255  return E_NOTIMPL;
256 }
257 
259  IXMLDOMParseError2 *iface,
260  BSTR *xpathexpr)
261 {
263  FIXME("(%p)->(%p)\n", This, xpathexpr);
264  return E_NOTIMPL;
265 }
266 
268  IXMLDOMParseError2 *iface,
269  IXMLDOMParseErrorCollection **allErrors)
270 {
272  FIXME("(%p)->(%p)\n", This, allErrors);
273  return E_NOTIMPL;
274 }
275 
277  IXMLDOMParseError2 *iface,
278  LONG index,
279  BSTR *param)
280 {
282  FIXME("(%p)->(%p)\n", This, param);
283  return E_NOTIMPL;
284 }
285 
287  IXMLDOMParseError2 *iface,
288  LONG *count)
289 {
291  FIXME("(%p)->(%p)\n", This, count);
292  return E_NOTIMPL;
293 }
294 
295 static const struct IXMLDOMParseError2Vtbl XMLDOMParseError2Vtbl =
296 {
315 };
316 
317 static const tid_t parseError_iface_tids[] = {
319  0
320 };
321 
323  NULL,
325  NULL,
327 };
328 
330  LONG line, LONG linepos, LONG filepos )
331 {
333 
334  This = heap_alloc( sizeof(*This) );
335  if ( !This )
336  return NULL;
337 
338  This->IXMLDOMParseError2_iface.lpVtbl = &XMLDOMParseError2Vtbl;
339  This->ref = 1;
340 
341  This->code = code;
342  This->url = url;
343  This->reason = reason;
344  This->srcText = srcText;
345  This->line = line;
346  This->linepos = linepos;
347  This->filepos = filepos;
348 
349  init_dispex(&This->dispex, (IUnknown*)&This->IXMLDOMParseError2_iface, &parseError_dispex);
350 
351  return (IXMLDOMParseError*)&This->IXMLDOMParseError2_iface;
352 }
static HRESULT WINAPI parseError_get_errorXPath(IXMLDOMParseError2 *iface, BSTR *xpathexpr)
Definition: parseerror.c:258
IXMLDOMParseError * create_parseError(LONG code, BSTR url, BSTR reason, BSTR srcText, LONG line, LONG linepos, LONG filepos)
Definition: parseerror.c:329
#define REFIID
Definition: guiddef.h:118
#define E_NOINTERFACE
Definition: winerror.h:2364
IXMLDOMParseError2 IXMLDOMParseError2_iface
Definition: parseerror.c:48
REFIID riid
Definition: precomp.h:44
GLuint GLuint GLsizei count
Definition: gl.h:1545
tid_t
Definition: ieframe.h:311
static ULONG WINAPI parseError_AddRef(IXMLDOMParseError2 *iface)
Definition: parseerror.c:91
static HRESULT WINAPI parseError_get_reason(IXMLDOMParseError2 *iface, BSTR *reason)
Definition: parseerror.c:190
static HRESULT WINAPI parseError_get_errorParametersCount(IXMLDOMParseError2 *iface, LONG *count)
Definition: parseerror.c:286
static parse_error_t * impl_from_IXMLDOMParseError2(IXMLDOMParseError2 *iface)
Definition: parseerror.c:54
static const tid_t parseError_iface_tids[]
Definition: parseerror.c:317
DWORD LCID
Definition: nls.h:13
OLECHAR * BSTR
Definition: compat.h:2041
static HRESULT WINAPI parseError_get_line(IXMLDOMParseError2 *iface, LONG *line)
Definition: parseerror.c:221
static LPOLESTR
Definition: stg_prop.c:27
static HRESULT WINAPI parseError_get_linepos(IXMLDOMParseError2 *iface, LONG *linepos)
Definition: parseerror.c:235
Definition: send.c:48
static const struct IXMLDOMParseError2Vtbl XMLDOMParseError2Vtbl
Definition: parseerror.c:295
static void * heap_alloc(size_t len)
Definition: appwiz.h:65
long LONG
Definition: pedump.c:60
static HRESULT WINAPI parseError_QueryInterface(IXMLDOMParseError2 *iface, REFIID riid, void **ppvObject)
Definition: parseerror.c:59
GLenum GLint ref
Definition: glext.h:6028
#define FIXME(fmt,...)
Definition: debug.h:111
#define S_FALSE
Definition: winerror.h:2357
static HRESULT WINAPI parseError_get_AllErrors(IXMLDOMParseError2 *iface, IXMLDOMParseErrorCollection **allErrors)
Definition: parseerror.c:267
#define E_INVALIDARG
Definition: ddrawi.h:101
static HRESULT WINAPI parseError_get_url(IXMLDOMParseError2 *iface, BSTR *url)
Definition: parseerror.c:181
smooth NULL
Definition: ftsmooth.c:416
static HRESULT WINAPI parseError_get_srcText(IXMLDOMParseError2 *iface, BSTR *srcText)
Definition: parseerror.c:206
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:238
DispatchEx dispex
Definition: parseerror.c:47
Definition: parser.c:48
static HRESULT WINAPI parseError_GetIDsOfNames(IXMLDOMParseError2 *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
Definition: parseerror.c:137
WINE_DEFAULT_DEBUG_CHANNEL(msxml)
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
LONG HRESULT
Definition: typedefs.h:79
static const WCHAR url[]
Definition: encode.c:1432
const GUID IID_IUnknown
GLfloat param
Definition: glext.h:5796
#define WINAPI
Definition: msvc.h:6
unsigned short WORD
Definition: ntddk_ex.h:93
static HRESULT WINAPI parseError_Invoke(IXMLDOMParseError2 *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
Definition: parseerror.c:150
static HRESULT WINAPI parseError_get_errorCode(IXMLDOMParseError2 *iface, LONG *code)
Definition: parseerror.c:166
const GUID IID_IDispatch
static WCHAR reason[MAX_STRING_RESOURCE_LEN]
Definition: object.c:1904
static dispex_static_data_t parseError_dispex
Definition: parseerror.c:322
char line[200]
Definition: main.c:97
#define InterlockedDecrement
Definition: armddk.h:52
REFIID LPVOID * ppvObject
Definition: precomp.h:44
Definition: inflate.c:139
int code
Definition: i386-dis.c:3591
_In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon.h:534
struct stdole::EXCEPINFO EXCEPINFO
static VARIANTARG static DISPID
Definition: ordinal.c:49
#define S_OK
Definition: intsafe.h:51
static ULONG WINAPI parseError_Release(IXMLDOMParseError2 *iface)
Definition: parseerror.c:100
#define InterlockedIncrement
Definition: armddk.h:53
BOOL dispex_query_interface(DispatchEx *This, REFIID riid, void **ppv)
Definition: dispex.c:1656
static HRESULT WINAPI parseError_GetTypeInfo(IXMLDOMParseError2 *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
Definition: parseerror.c:126
#define E_NOTIMPL
Definition: ddrawi.h:99
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
unsigned int UINT
Definition: ndis.h:50
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4112
static HRESULT WINAPI parseError_GetTypeInfoCount(IXMLDOMParseError2 *iface, UINT *pctinfo)
Definition: parseerror.c:118
HRESULT init_dispex(jsdisp_t *dispex, script_ctx_t *ctx, const builtin_info_t *builtin_info, jsdisp_t *prototype)
Definition: dispex.c:919
static HRESULT WINAPI parseError_errorParameters(IXMLDOMParseError2 *iface, LONG index, BSTR *param)
Definition: parseerror.c:276
struct stdole::DISPPARAMS DISPPARAMS
unsigned int ULONG
Definition: retypes.h:1
static HRESULT WINAPI parseError_get_filepos(IXMLDOMParseError2 *iface, LONG *filepos)
Definition: parseerror.c:249
static BOOL heap_free(void *mem)
Definition: appwiz.h:75