| /** |
| *** Additional procedures for ILE/RPG support. |
| *** |
| *** See Copyright for the status of this software. |
| *** |
| *** Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A. |
| **/ |
| |
| #include <sys/types.h> |
| |
| #include <stdarg.h> |
| |
| #include "libxml/xmlmemory.h" |
| #include "libxml/xpath.h" |
| #include "libxml/parser.h" |
| #include "libxml/HTMLparser.h" |
| |
| #include "rpgsupport.h" |
| |
| |
| /** |
| *** ILE/RPG cannot directly derefence a pointer and has no macros. |
| *** The following additional procedures supply these functions. |
| *** In addition, the following code is adjusted for threads control at |
| *** compile time via the C macros. |
| **/ |
| |
| #define THREADED_VAR(name, type) \ |
| type __get_##name(void) { return name; } \ |
| void __set_##name(type arg) { name = arg; } |
| |
| |
| THREADED_VAR(xmlFree, xmlFreeFunc) |
| |
| void |
| __call_xmlFree(void * mem) |
| |
| { |
| xmlFree(mem); |
| } |
| |
| |
| THREADED_VAR(xmlMalloc, xmlMallocFunc) |
| |
| void * |
| __call_xmlMalloc(size_t size) |
| |
| { |
| return xmlMalloc(size); |
| } |
| |
| |
| THREADED_VAR(xmlMallocAtomic, xmlMallocFunc) |
| |
| void * |
| __call_xmlMallocAtomic(size_t size) |
| |
| { |
| return xmlMallocAtomic(size); |
| } |
| |
| |
| THREADED_VAR(xmlRealloc, xmlReallocFunc) |
| |
| void * |
| __call_xmlRealloc(void * mem, size_t size) |
| |
| { |
| return xmlRealloc(mem, size); |
| } |
| |
| |
| THREADED_VAR(xmlMemStrdup, xmlStrdupFunc) |
| |
| char * |
| __call_xmlMemStrdup(const char * str) |
| |
| { |
| return xmlMemStrdup(str); |
| } |
| |
| |
| #ifdef LIBXML_DOCB_ENABLED |
| THREADED_VAR(docbDefaultSAXHandler, xmlSAXHandlerV1) |
| #endif |
| |
| |
| #ifdef LIBXML_HTML_ENABLED |
| THREADED_VAR(htmlDefaultSAXHandler, xmlSAXHandlerV1) |
| #endif |
| |
| |
| THREADED_VAR(xmlLastError, xmlError) |
| |
| THREADED_VAR(oldXMLWDcompatibility, int) |
| THREADED_VAR(xmlBufferAllocScheme, xmlBufferAllocationScheme) |
| THREADED_VAR(xmlDefaultBufferSize, int) |
| THREADED_VAR(xmlDefaultSAXHandler, xmlSAXHandlerV1) |
| THREADED_VAR(xmlDefaultSAXLocator, xmlSAXLocator) |
| THREADED_VAR(xmlDoValidityCheckingDefaultValue, int) |
| |
| /* No caller to xmlGenericError() because the argument list is unknown. */ |
| THREADED_VAR(xmlGenericError, xmlGenericErrorFunc) |
| |
| |
| THREADED_VAR(xmlStructuredError, xmlStructuredErrorFunc) |
| |
| void |
| __call_xmlStructuredError(void * userData, xmlErrorPtr error) |
| |
| { |
| xmlStructuredError(userData, error); |
| } |
| |
| THREADED_VAR(xmlGenericErrorContext, void *) |
| THREADED_VAR(xmlStructuredErrorContext, void *) |
| THREADED_VAR(xmlGetWarningsDefaultValue, int) |
| THREADED_VAR(xmlIndentTreeOutput, int) |
| THREADED_VAR(xmlTreeIndentString, const char *) |
| THREADED_VAR(xmlKeepBlanksDefaultValue, int) |
| THREADED_VAR(xmlLineNumbersDefaultValue, int) |
| THREADED_VAR(xmlLoadExtDtdDefaultValue, int) |
| THREADED_VAR(xmlParserDebugEntities, int) |
| THREADED_VAR(xmlParserVersion, const char *) |
| THREADED_VAR(xmlPedanticParserDefaultValue, int) |
| THREADED_VAR(xmlSaveNoEmptyTags, int) |
| THREADED_VAR(xmlSubstituteEntitiesDefaultValue, int) |
| |
| |
| THREADED_VAR(xmlRegisterNodeDefaultValue, xmlRegisterNodeFunc) |
| |
| void |
| __call_xmlRegisterNodeDefaultValue(xmlNodePtr node) |
| |
| { |
| xmlRegisterNodeDefaultValue(node); |
| } |
| |
| |
| THREADED_VAR(xmlDeregisterNodeDefaultValue, xmlDeregisterNodeFunc) |
| |
| void |
| __call_xmlDeregisterNodeDefaultValue(xmlNodePtr node) |
| |
| { |
| xmlDeregisterNodeDefaultValue(node); |
| } |
| |
| |
| THREADED_VAR(xmlParserInputBufferCreateFilenameValue, xmlParserInputBufferCreateFilenameFunc) |
| |
| xmlParserInputBufferPtr |
| __call_xmlParserInputBufferCreateFilenameValue(const char *URI, |
| xmlCharEncoding enc) |
| |
| { |
| return xmlParserInputBufferCreateFilenameValue(URI, enc); |
| } |
| |
| |
| THREADED_VAR(xmlOutputBufferCreateFilenameValue, xmlOutputBufferCreateFilenameFunc) |
| |
| xmlOutputBufferPtr |
| __call_xmlOutputBufferCreateFilenameValue(const char *URI, |
| xmlCharEncodingHandlerPtr encoder, int compression) |
| |
| { |
| return xmlOutputBufferCreateFilenameValue(URI, encoder, compression); |
| } |
| |
| |
| |
| /** |
| *** va_list support. |
| **/ |
| |
| void |
| __xmlVaStart(char * * list, char * lastargaddr, size_t lastargsize) |
| |
| { |
| list[1] = lastargaddr + lastargsize; |
| } |
| |
| |
| void * |
| __xmlVaArg(char * * list, void * dest, size_t argsize) |
| |
| { |
| size_t align; |
| |
| if (!argsize) |
| return (void *) NULL; |
| |
| for (align = 16; align > argsize; align >>= 1) |
| ; |
| |
| align--; |
| list[0] = list[1] + (align - (((size_t) list[0] - 1) & align)); |
| list[1] = list[0] + argsize; |
| |
| if (dest) |
| memcpy(dest, list[0], argsize); |
| |
| return (void *) list[0]; |
| } |
| |
| |
| void |
| __xmlVaEnd(char * * list) |
| |
| { |
| /* Nothing to do. */ |
| } |
| |
| |
| #ifdef LIBXML_XPATH_ENABLED |
| |
| int |
| __xmlXPathNodeSetGetLength(const xmlNodeSet * ns) |
| |
| { |
| return xmlXPathNodeSetGetLength(ns); |
| } |
| |
| |
| xmlNodePtr |
| __xmlXPathNodeSetItem(const xmlNodeSet * ns, int index) |
| |
| { |
| return xmlXPathNodeSetItem(ns, index); |
| } |
| |
| |
| int |
| __xmlXPathNodeSetIsEmpty(const xmlNodeSet * ns) |
| |
| { |
| return xmlXPathNodeSetIsEmpty(ns); |
| } |
| |
| #endif |
| |
| |
| #ifdef LIBXML_HTML_ENABLED |
| |
| const char * |
| __htmlDefaultSubelement(const htmlElemDesc * elt) |
| |
| { |
| return htmlDefaultSubelement(elt); |
| } |
| |
| |
| int |
| __htmlElementAllowedHereDesc(const htmlElemDesc * parent, |
| const htmlElemDesc * elt) |
| |
| { |
| return htmlElementAllowedHereDesc(parent, elt); |
| } |
| |
| |
| const char * * |
| __htmlRequiredAttrs(const htmlElemDesc * elt) |
| |
| { |
| return htmlRequiredAttrs(elt); |
| } |
| |
| #endif |