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 derefence 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
THREADED_VAR(xmlFree,xmlFreeFunc)33 THREADED_VAR(xmlFree, xmlFreeFunc)
34
35 void
36 __call_xmlFree(void * mem)
37
38 {
39 xmlFree(mem);
40 }
41
42
THREADED_VAR(xmlMalloc,xmlMallocFunc)43 THREADED_VAR(xmlMalloc, xmlMallocFunc)
44
45 void *
46 __call_xmlMalloc(size_t size)
47
48 {
49 return xmlMalloc(size);
50 }
51
52
THREADED_VAR(xmlMallocAtomic,xmlMallocFunc)53 THREADED_VAR(xmlMallocAtomic, xmlMallocFunc)
54
55 void *
56 __call_xmlMallocAtomic(size_t size)
57
58 {
59 return xmlMallocAtomic(size);
60 }
61
62
THREADED_VAR(xmlRealloc,xmlReallocFunc)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
THREADED_VAR(xmlMemStrdup,xmlStrdupFunc)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
THREADED_VAR(docbDefaultSAXHandler,xmlSAXHandlerV1)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
THREADED_VAR(xmlGenericErrorContext,void *)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
THREADED_VAR(xmlDeregisterNodeDefaultValue,xmlDeregisterNodeFunc)140 THREADED_VAR(xmlDeregisterNodeDefaultValue, xmlDeregisterNodeFunc)
141
142 void
143 __call_xmlDeregisterNodeDefaultValue(xmlNodePtr node)
144
145 {
146 xmlDeregisterNodeDefaultValue(node);
147 }
148
149
THREADED_VAR(xmlParserInputBufferCreateFilenameValue,xmlParserInputBufferCreateFilenameFunc)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
THREADED_VAR(xmlOutputBufferCreateFilenameValue,xmlOutputBufferCreateFilenameFunc)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
__xmlVaStart(char ** list,char * lastargaddr,size_t lastargsize)178 __xmlVaStart(char * * list, char * lastargaddr, size_t lastargsize)
179
180 {
181 list[1] = lastargaddr + lastargsize;
182 }
183
184
185 void *
__xmlVaArg(char ** list,void * dest,size_t argsize)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
__xmlVaEnd(char ** list)209 __xmlVaEnd(char * * list)
210
211 {
212 /* Nothing to do. */
213 }
214
215
216 #ifdef LIBXML_XPATH_ENABLED
217
218 int
__xmlXPathNodeSetGetLength(const xmlNodeSet * ns)219 __xmlXPathNodeSetGetLength(const xmlNodeSet * ns)
220
221 {
222 return xmlXPathNodeSetGetLength(ns);
223 }
224
225
226 xmlNodePtr
__xmlXPathNodeSetItem(const xmlNodeSet * ns,int index)227 __xmlXPathNodeSetItem(const xmlNodeSet * ns, int index)
228
229 {
230 return xmlXPathNodeSetItem(ns, index);
231 }
232
233
234 int
__xmlXPathNodeSetIsEmpty(const xmlNodeSet * ns)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 *
__htmlDefaultSubelement(const htmlElemDesc * elt)247 __htmlDefaultSubelement(const htmlElemDesc * elt)
248
249 {
250 return htmlDefaultSubelement(elt);
251 }
252
253
254 int
__htmlElementAllowedHereDesc(const htmlElemDesc * parent,const htmlElemDesc * elt)255 __htmlElementAllowedHereDesc(const htmlElemDesc * parent,
256 const htmlElemDesc * elt)
257
258 {
259 return htmlElementAllowedHereDesc(parent, elt);
260 }
261
262
263 const char * *
__htmlRequiredAttrs(const htmlElemDesc * elt)264 __htmlRequiredAttrs(const htmlElemDesc * elt)
265
266 {
267 return htmlRequiredAttrs(elt);
268 }
269
270 #endif
271