1 | /**
|
---|
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"
|
---|
14 | #include "libxml/xpath.h"
|
---|
15 | #include "libxml/parser.h"
|
---|
16 | #include "libxml/HTMLparser.h"
|
---|
17 |
|
---|
18 | #include "rpgsupport.h"
|
---|
19 |
|
---|
20 |
|
---|
21 | /**
|
---|
22 | *** ILE/RPG cannot directly dereference a pointer and has no macros.
|
---|
23 | *** The following additional procedures supply these functions.
|
---|
24 | *** In addition, the following code is adjusted for threads control at
|
---|
25 | *** compile time via the C macros.
|
---|
26 | **/
|
---|
27 |
|
---|
28 | #define THREADED_VAR(name, type) \
|
---|
29 | type __get_##name(void) { return name; } \
|
---|
30 | void __set_##name(type arg) { name = arg; }
|
---|
31 |
|
---|
32 |
|
---|
33 | THREADED_VAR(xmlFree, xmlFreeFunc)
|
---|
34 |
|
---|
35 | void
|
---|
36 | __call_xmlFree(void * mem)
|
---|
37 |
|
---|
38 | {
|
---|
39 | xmlFree(mem);
|
---|
40 | }
|
---|
41 |
|
---|
42 |
|
---|
43 | THREADED_VAR(xmlMalloc, xmlMallocFunc)
|
---|
44 |
|
---|
45 | void *
|
---|
46 | __call_xmlMalloc(size_t size)
|
---|
47 |
|
---|
48 | {
|
---|
49 | return xmlMalloc(size);
|
---|
50 | }
|
---|
51 |
|
---|
52 |
|
---|
53 | THREADED_VAR(xmlMallocAtomic, xmlMallocFunc)
|
---|
54 |
|
---|
55 | void *
|
---|
56 | __call_xmlMallocAtomic(size_t size)
|
---|
57 |
|
---|
58 | {
|
---|
59 | return xmlMallocAtomic(size);
|
---|
60 | }
|
---|
61 |
|
---|
62 |
|
---|
63 | THREADED_VAR(xmlRealloc, xmlReallocFunc)
|
---|
64 |
|
---|
65 | void *
|
---|
66 | __call_xmlRealloc(void * mem, size_t size)
|
---|
67 |
|
---|
68 | {
|
---|
69 | return xmlRealloc(mem, size);
|
---|
70 | }
|
---|
71 |
|
---|
72 |
|
---|
73 | THREADED_VAR(xmlMemStrdup, xmlStrdupFunc)
|
---|
74 |
|
---|
75 | char *
|
---|
76 | __call_xmlMemStrdup(const char * str)
|
---|
77 |
|
---|
78 | {
|
---|
79 | return xmlMemStrdup(str);
|
---|
80 | }
|
---|
81 |
|
---|
82 |
|
---|
83 | #ifdef LIBXML_DOCB_ENABLED
|
---|
84 | THREADED_VAR(docbDefaultSAXHandler, xmlSAXHandlerV1)
|
---|
85 | #endif
|
---|
86 |
|
---|
87 |
|
---|
88 | #ifdef LIBXML_HTML_ENABLED
|
---|
89 | THREADED_VAR(htmlDefaultSAXHandler, xmlSAXHandlerV1)
|
---|
90 | #endif
|
---|
91 |
|
---|
92 |
|
---|
93 | THREADED_VAR(xmlLastError, xmlError)
|
---|
94 |
|
---|
95 | THREADED_VAR(oldXMLWDcompatibility, int)
|
---|
96 | THREADED_VAR(xmlBufferAllocScheme, xmlBufferAllocationScheme)
|
---|
97 | THREADED_VAR(xmlDefaultBufferSize, int)
|
---|
98 | THREADED_VAR(xmlDefaultSAXHandler, xmlSAXHandlerV1)
|
---|
99 | THREADED_VAR(xmlDefaultSAXLocator, xmlSAXLocator)
|
---|
100 | THREADED_VAR(xmlDoValidityCheckingDefaultValue, int)
|
---|
101 |
|
---|
102 | /* No caller to xmlGenericError() because the argument list is unknown. */
|
---|
103 | THREADED_VAR(xmlGenericError, xmlGenericErrorFunc)
|
---|
104 |
|
---|
105 |
|
---|
106 | THREADED_VAR(xmlStructuredError, xmlStructuredErrorFunc)
|
---|
107 |
|
---|
108 | void
|
---|
109 | __call_xmlStructuredError(void * userData, xmlErrorPtr error)
|
---|
110 |
|
---|
111 | {
|
---|
112 | xmlStructuredError(userData, error);
|
---|
113 | }
|
---|
114 |
|
---|
115 | THREADED_VAR(xmlGenericErrorContext, void *)
|
---|
116 | THREADED_VAR(xmlStructuredErrorContext, void *)
|
---|
117 | THREADED_VAR(xmlGetWarningsDefaultValue, int)
|
---|
118 | THREADED_VAR(xmlIndentTreeOutput, int)
|
---|
119 | THREADED_VAR(xmlTreeIndentString, const char *)
|
---|
120 | THREADED_VAR(xmlKeepBlanksDefaultValue, int)
|
---|
121 | THREADED_VAR(xmlLineNumbersDefaultValue, int)
|
---|
122 | THREADED_VAR(xmlLoadExtDtdDefaultValue, int)
|
---|
123 | THREADED_VAR(xmlParserDebugEntities, int)
|
---|
124 | THREADED_VAR(xmlParserVersion, const char *)
|
---|
125 | THREADED_VAR(xmlPedanticParserDefaultValue, int)
|
---|
126 | THREADED_VAR(xmlSaveNoEmptyTags, int)
|
---|
127 | THREADED_VAR(xmlSubstituteEntitiesDefaultValue, int)
|
---|
128 |
|
---|
129 |
|
---|
130 | THREADED_VAR(xmlRegisterNodeDefaultValue, xmlRegisterNodeFunc)
|
---|
131 |
|
---|
132 | void
|
---|
133 | __call_xmlRegisterNodeDefaultValue(xmlNodePtr node)
|
---|
134 |
|
---|
135 | {
|
---|
136 | xmlRegisterNodeDefaultValue(node);
|
---|
137 | }
|
---|
138 |
|
---|
139 |
|
---|
140 | THREADED_VAR(xmlDeregisterNodeDefaultValue, xmlDeregisterNodeFunc)
|
---|
141 |
|
---|
142 | void
|
---|
143 | __call_xmlDeregisterNodeDefaultValue(xmlNodePtr node)
|
---|
144 |
|
---|
145 | {
|
---|
146 | xmlDeregisterNodeDefaultValue(node);
|
---|
147 | }
|
---|
148 |
|
---|
149 |
|
---|
150 | THREADED_VAR(xmlParserInputBufferCreateFilenameValue, xmlParserInputBufferCreateFilenameFunc)
|
---|
151 |
|
---|
152 | xmlParserInputBufferPtr
|
---|
153 | __call_xmlParserInputBufferCreateFilenameValue(const char *URI,
|
---|
154 | xmlCharEncoding enc)
|
---|
155 |
|
---|
156 | {
|
---|
157 | return xmlParserInputBufferCreateFilenameValue(URI, enc);
|
---|
158 | }
|
---|
159 |
|
---|
160 |
|
---|
161 | THREADED_VAR(xmlOutputBufferCreateFilenameValue, xmlOutputBufferCreateFilenameFunc)
|
---|
162 |
|
---|
163 | xmlOutputBufferPtr
|
---|
164 | __call_xmlOutputBufferCreateFilenameValue(const char *URI,
|
---|
165 | xmlCharEncodingHandlerPtr encoder, int compression)
|
---|
166 |
|
---|
167 | {
|
---|
168 | return xmlOutputBufferCreateFilenameValue(URI, encoder, compression);
|
---|
169 | }
|
---|
170 |
|
---|
171 |
|
---|
172 |
|
---|
173 | /**
|
---|
174 | *** va_list support.
|
---|
175 | **/
|
---|
176 |
|
---|
177 | void
|
---|
178 | __xmlVaStart(char * * list, char * lastargaddr, size_t lastargsize)
|
---|
179 |
|
---|
180 | {
|
---|
181 | list[1] = lastargaddr + lastargsize;
|
---|
182 | }
|
---|
183 |
|
---|
184 |
|
---|
185 | void *
|
---|
186 | __xmlVaArg(char * * list, void * dest, size_t argsize)
|
---|
187 |
|
---|
188 | {
|
---|
189 | size_t align;
|
---|
190 |
|
---|
191 | if (!argsize)
|
---|
192 | return (void *) NULL;
|
---|
193 |
|
---|
194 | for (align = 16; align > argsize; align >>= 1)
|
---|
195 | ;
|
---|
196 |
|
---|
197 | align--;
|
---|
198 | list[0] = list[1] + (align - (((size_t) list[0] - 1) & align));
|
---|
199 | list[1] = list[0] + argsize;
|
---|
200 |
|
---|
201 | if (dest)
|
---|
202 | memcpy(dest, list[0], argsize);
|
---|
203 |
|
---|
204 | return (void *) list[0];
|
---|
205 | }
|
---|
206 |
|
---|
207 |
|
---|
208 | void
|
---|
209 | __xmlVaEnd(char * * list)
|
---|
210 |
|
---|
211 | {
|
---|
212 | /* Nothing to do. */
|
---|
213 | }
|
---|
214 |
|
---|
215 |
|
---|
216 | #ifdef LIBXML_XPATH_ENABLED
|
---|
217 |
|
---|
218 | int
|
---|
219 | __xmlXPathNodeSetGetLength(const xmlNodeSet * ns)
|
---|
220 |
|
---|
221 | {
|
---|
222 | return xmlXPathNodeSetGetLength(ns);
|
---|
223 | }
|
---|
224 |
|
---|
225 |
|
---|
226 | xmlNodePtr
|
---|
227 | __xmlXPathNodeSetItem(const xmlNodeSet * ns, int index)
|
---|
228 |
|
---|
229 | {
|
---|
230 | return xmlXPathNodeSetItem(ns, index);
|
---|
231 | }
|
---|
232 |
|
---|
233 |
|
---|
234 | int
|
---|
235 | __xmlXPathNodeSetIsEmpty(const xmlNodeSet * ns)
|
---|
236 |
|
---|
237 | {
|
---|
238 | return xmlXPathNodeSetIsEmpty(ns);
|
---|
239 | }
|
---|
240 |
|
---|
241 | #endif
|
---|
242 |
|
---|
243 |
|
---|
244 | #ifdef LIBXML_HTML_ENABLED
|
---|
245 |
|
---|
246 | const char *
|
---|
247 | __htmlDefaultSubelement(const htmlElemDesc * elt)
|
---|
248 |
|
---|
249 | {
|
---|
250 | return htmlDefaultSubelement(elt);
|
---|
251 | }
|
---|
252 |
|
---|
253 |
|
---|
254 | int
|
---|
255 | __htmlElementAllowedHereDesc(const htmlElemDesc * parent,
|
---|
256 | const htmlElemDesc * elt)
|
---|
257 |
|
---|
258 | {
|
---|
259 | return htmlElementAllowedHereDesc(parent, elt);
|
---|
260 | }
|
---|
261 |
|
---|
262 |
|
---|
263 | const char * *
|
---|
264 | __htmlRequiredAttrs(const htmlElemDesc * elt)
|
---|
265 |
|
---|
266 | {
|
---|
267 | return htmlRequiredAttrs(elt);
|
---|
268 | }
|
---|
269 |
|
---|
270 | #endif
|
---|