(root)/
libxml2-2.12.3/
os400/
rpgsupport.c
       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