/ libxml2 / os400 / rpgsupport.c
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 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  
 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