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 33THREADED_VAR(xmlFree, xmlFreeFunc) 34 35void 36__call_xmlFree(void * mem) 37 38{ 39 xmlFree(mem); 40} 41 42 43THREADED_VAR(xmlMalloc, xmlMallocFunc) 44 45void * 46__call_xmlMalloc(size_t size) 47 48{ 49 return xmlMalloc(size); 50} 51 52 53THREADED_VAR(xmlMallocAtomic, xmlMallocFunc) 54 55void * 56__call_xmlMallocAtomic(size_t size) 57 58{ 59 return xmlMallocAtomic(size); 60} 61 62 63THREADED_VAR(xmlRealloc, xmlReallocFunc) 64 65void * 66__call_xmlRealloc(void * mem, size_t size) 67 68{ 69 return xmlRealloc(mem, size); 70} 71 72 73THREADED_VAR(xmlMemStrdup, xmlStrdupFunc) 74 75char * 76__call_xmlMemStrdup(const char * str) 77 78{ 79 return xmlMemStrdup(str); 80} 81 82 83#ifdef LIBXML_DOCB_ENABLED 84THREADED_VAR(docbDefaultSAXHandler, xmlSAXHandlerV1) 85#endif 86 87 88#ifdef LIBXML_HTML_ENABLED 89THREADED_VAR(htmlDefaultSAXHandler, xmlSAXHandlerV1) 90#endif 91 92 93THREADED_VAR(xmlLastError, xmlError) 94 95THREADED_VAR(oldXMLWDcompatibility, int) 96THREADED_VAR(xmlBufferAllocScheme, xmlBufferAllocationScheme) 97THREADED_VAR(xmlDefaultBufferSize, int) 98THREADED_VAR(xmlDefaultSAXHandler, xmlSAXHandlerV1) 99THREADED_VAR(xmlDefaultSAXLocator, xmlSAXLocator) 100THREADED_VAR(xmlDoValidityCheckingDefaultValue, int) 101 102/* No caller to xmlGenericError() because the argument list is unknown. */ 103THREADED_VAR(xmlGenericError, xmlGenericErrorFunc) 104 105 106THREADED_VAR(xmlStructuredError, xmlStructuredErrorFunc) 107 108void 109__call_xmlStructuredError(void * userData, xmlErrorPtr error) 110 111{ 112 xmlStructuredError(userData, error); 113} 114 115THREADED_VAR(xmlGenericErrorContext, void *) 116THREADED_VAR(xmlStructuredErrorContext, void *) 117THREADED_VAR(xmlGetWarningsDefaultValue, int) 118THREADED_VAR(xmlIndentTreeOutput, int) 119THREADED_VAR(xmlTreeIndentString, const char *) 120THREADED_VAR(xmlKeepBlanksDefaultValue, int) 121THREADED_VAR(xmlLineNumbersDefaultValue, int) 122THREADED_VAR(xmlLoadExtDtdDefaultValue, int) 123THREADED_VAR(xmlParserDebugEntities, int) 124THREADED_VAR(xmlParserVersion, const char *) 125THREADED_VAR(xmlPedanticParserDefaultValue, int) 126THREADED_VAR(xmlSaveNoEmptyTags, int) 127THREADED_VAR(xmlSubstituteEntitiesDefaultValue, int) 128 129 130THREADED_VAR(xmlRegisterNodeDefaultValue, xmlRegisterNodeFunc) 131 132void 133__call_xmlRegisterNodeDefaultValue(xmlNodePtr node) 134 135{ 136 xmlRegisterNodeDefaultValue(node); 137} 138 139 140THREADED_VAR(xmlDeregisterNodeDefaultValue, xmlDeregisterNodeFunc) 141 142void 143__call_xmlDeregisterNodeDefaultValue(xmlNodePtr node) 144 145{ 146 xmlDeregisterNodeDefaultValue(node); 147} 148 149 150THREADED_VAR(xmlParserInputBufferCreateFilenameValue, xmlParserInputBufferCreateFilenameFunc) 151 152xmlParserInputBufferPtr 153__call_xmlParserInputBufferCreateFilenameValue(const char *URI, 154 xmlCharEncoding enc) 155 156{ 157 return xmlParserInputBufferCreateFilenameValue(URI, enc); 158} 159 160 161THREADED_VAR(xmlOutputBufferCreateFilenameValue, xmlOutputBufferCreateFilenameFunc) 162 163xmlOutputBufferPtr 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 177void 178__xmlVaStart(char * * list, char * lastargaddr, size_t lastargsize) 179 180{ 181 list[1] = lastargaddr + lastargsize; 182} 183 184 185void * 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 208void 209__xmlVaEnd(char * * list) 210 211{ 212 /* Nothing to do. */ 213} 214 215 216#ifdef LIBXML_XPATH_ENABLED 217 218int 219__xmlXPathNodeSetGetLength(const xmlNodeSet * ns) 220 221{ 222 return xmlXPathNodeSetGetLength(ns); 223} 224 225 226xmlNodePtr 227__xmlXPathNodeSetItem(const xmlNodeSet * ns, int index) 228 229{ 230 return xmlXPathNodeSetItem(ns, index); 231} 232 233 234int 235__xmlXPathNodeSetIsEmpty(const xmlNodeSet * ns) 236 237{ 238 return xmlXPathNodeSetIsEmpty(ns); 239} 240 241#endif 242 243 244#ifdef LIBXML_HTML_ENABLED 245 246const char * 247__htmlDefaultSubelement(const htmlElemDesc * elt) 248 249{ 250 return htmlDefaultSubelement(elt); 251} 252 253 254int 255__htmlElementAllowedHereDesc(const htmlElemDesc * parent, 256 const htmlElemDesc * elt) 257 258{ 259 return htmlElementAllowedHereDesc(parent, elt); 260} 261 262 263const char * * 264__htmlRequiredAttrs(const htmlElemDesc * elt) 265 266{ 267 return htmlRequiredAttrs(elt); 268} 269 270#endif 271