blob: a54548319557ec53d0c7957e477e2abed9a738b3 [file] [log] [blame]
Patrick Monnerat7d888f02014-03-04 17:15:23 +01001/**
2*** Additional procedures for ILE/RPG support.
3***
4*** See Copyright for the status of this software.
5***
6*** Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
7**/
8
9#include <sys/types.h>
10
11#include <stdarg.h>
12
13#include "libxml/xmlmemory.h"
Patrick Monnerat02fd1292014-05-05 18:16:22 +020014#include "libxml/xpath.h"
Patrick Monnerat7d888f02014-03-04 17:15:23 +010015#include "libxml/parser.h"
16
17#include "rpgsupport.h"
18
19
20/**
21*** ILE/RPG cannot directly derefence a pointer value an has no macros.
22*** The following additional procedures supply these functions.
23*** In addition, the following code is adjusted for threads control at
24*** compile time via the C macros.
25**/
26
27#define THREADED_VAR(name, type) \
28 type __get_##name(void) { return name; } \
29 void __set_##name(type arg) { name = arg; }
30
31
32THREADED_VAR(xmlFree, xmlFreeFunc)
33
34void
35__call_xmlFree(void * mem)
36
37{
38 xmlFree(mem);
39}
40
41
42THREADED_VAR(xmlMalloc, xmlMallocFunc)
43
44void *
45__call_xmlMalloc(size_t size)
46
47{
48 return xmlMalloc(size);
49}
50
51
52THREADED_VAR(xmlMallocAtomic, xmlMallocFunc)
53
54void *
55__call_xmlMallocAtomic(size_t size)
56
57{
58 return xmlMallocAtomic(size);
59}
60
61
62THREADED_VAR(xmlRealloc, xmlReallocFunc)
63
64void *
65__call_xmlRealloc(void * mem, size_t size)
66
67{
68 return xmlRealloc(mem, size);
69}
70
71
72THREADED_VAR(xmlMemStrdup, xmlStrdupFunc)
73
74char *
75__call_xmlMemStrdup(const char * str)
76
77{
78 return xmlMemStrdup(str);
79}
80
81
82#ifdef LIBXML_DOCB_ENABLED
83THREADED_VAR(docbDefaultSAXHandler, xmlSAXHandlerV1)
84#endif
85
86
87#ifdef LIBXML_HTML_ENABLED
88THREADED_VAR(htmlDefaultSAXHandler, xmlSAXHandlerV1)
89#endif
90
91
92THREADED_VAR(xmlLastError, xmlError)
93
94THREADED_VAR(oldXMLWDcompatibility, int)
95THREADED_VAR(xmlBufferAllocScheme, xmlBufferAllocationScheme)
96THREADED_VAR(xmlDefaultBufferSize, int)
97THREADED_VAR(xmlDefaultSAXHandler, xmlSAXHandlerV1)
98THREADED_VAR(xmlDefaultSAXLocator, xmlSAXLocator)
99THREADED_VAR(xmlDoValidityCheckingDefaultValue, int)
100
101/* No caller to xmlGenericError() because the argument list is unknown. */
102THREADED_VAR(xmlGenericError, xmlGenericErrorFunc)
103
104
105THREADED_VAR(xmlStructuredError, xmlStructuredErrorFunc)
106
107void
108__call_xmlStructuredError(void * userData, xmlErrorPtr error)
109
110{
111 xmlStructuredError(userData, error);
112}
113
114THREADED_VAR(xmlGenericErrorContext, void *)
115THREADED_VAR(xmlStructuredErrorContext, void *)
116THREADED_VAR(xmlGetWarningsDefaultValue, int)
117THREADED_VAR(xmlIndentTreeOutput, int)
118THREADED_VAR(xmlTreeIndentString, const char *)
119THREADED_VAR(xmlKeepBlanksDefaultValue, int)
120THREADED_VAR(xmlLineNumbersDefaultValue, int)
121THREADED_VAR(xmlLoadExtDtdDefaultValue, int)
122THREADED_VAR(xmlParserDebugEntities, int)
123THREADED_VAR(xmlParserVersion, const char *)
124THREADED_VAR(xmlPedanticParserDefaultValue, int)
125THREADED_VAR(xmlSaveNoEmptyTags, int)
126THREADED_VAR(xmlSubstituteEntitiesDefaultValue, int)
127
128
129THREADED_VAR(xmlRegisterNodeDefaultValue, xmlRegisterNodeFunc)
130
131void
132__call_xmlRegisterNodeDefaultValue(xmlNodePtr node)
133
134{
135 xmlRegisterNodeDefaultValue(node);
136}
137
138
139THREADED_VAR(xmlDeregisterNodeDefaultValue, xmlDeregisterNodeFunc)
140
141void
142__call_xmlDeregisterNodeDefaultValue(xmlNodePtr node)
143
144{
145 xmlDeregisterNodeDefaultValue(node);
146}
147
148
149THREADED_VAR(xmlParserInputBufferCreateFilenameValue, xmlParserInputBufferCreateFilenameFunc)
150
151xmlParserInputBufferPtr
152__call_xmlParserInputBufferCreateFilenameValue(const char *URI,
153 xmlCharEncoding enc)
154
155{
156 return xmlParserInputBufferCreateFilenameValue(URI, enc);
157}
158
159
160THREADED_VAR(xmlOutputBufferCreateFilenameValue, xmlOutputBufferCreateFilenameFunc)
161
162xmlOutputBufferPtr
163__call_xmlOutputBufferCreateFilenameValue(const char *URI,
164 xmlCharEncodingHandlerPtr encoder, int compression)
165
166{
167 return xmlOutputBufferCreateFilenameValue(URI, encoder, compression);
168}
169
170
171
172/**
173*** va_list support.
174**/
175
176void
177__xmlVaStart(char * * list, char * lastargaddr, size_t lastargsize)
178
179{
180 list[1] = lastargaddr + lastargsize;
181}
182
183
184void *
185__xmlVaArg(char * * list, void * dest, size_t argsize)
186
187{
188 size_t align;
189
190 if (!argsize)
191 return (void *) NULL;
192
193 for (align = 16; align > argsize; align >>= 1)
194 ;
195
196 align--;
197 list[0] = list[1] + (align - (((size_t) list[0] - 1) & align));
198 list[1] = list[0] + argsize;
199
200 if (dest)
201 memcpy(dest, list[0], argsize);
202
203 return (void *) list[0];
204}
205
206
207void
Patrick Monnerat02fd1292014-05-05 18:16:22 +0200208__xmlVaEnd(char * * list)
Patrick Monnerat7d888f02014-03-04 17:15:23 +0100209
210{
211 /* Nothing to do. */
212}
Patrick Monnerat02fd1292014-05-05 18:16:22 +0200213
214
215#ifdef LIBXML_XPATH_ENABLED
Patrick Monneratbce6a612014-05-06 11:31:16 +0200216
Patrick Monnerat02fd1292014-05-05 18:16:22 +0200217int
218__xmlXPathNodeSetGetLength(xmlNodeSetPtr ns)
219
220{
Patrick Monneratbce6a612014-05-06 11:31:16 +0200221 return xmlXPathNodeSetGetLength(ns);
Patrick Monnerat02fd1292014-05-05 18:16:22 +0200222}
223
224
225xmlNodePtr
226__xmlXPathNodeSetItem(xmlNodeSetPtr ns, int index)
227
228{
Patrick Monneratbce6a612014-05-06 11:31:16 +0200229 return xmlXPathNodeSetItem(ns, index);
Patrick Monnerat02fd1292014-05-05 18:16:22 +0200230}
231
232
233int
234__xmlXPathNodeSetIsEmpty(xmlNodeSetPtr ns)
235
236{
Patrick Monneratbce6a612014-05-06 11:31:16 +0200237 return xmlXPathNodeSetIsEmpty(ns);
Patrick Monnerat02fd1292014-05-05 18:16:22 +0200238}
Patrick Monneratbce6a612014-05-06 11:31:16 +0200239
Patrick Monnerat02fd1292014-05-05 18:16:22 +0200240#endif