1 /* libxml2 - Library for parsing XML documents 2 * Copyright (C) 2006-2019 Free Software Foundation, Inc. 3 * 4 * This file is not part of the GNU gettext program, but is used with 5 * GNU gettext. 6 * 7 * The original copyright notice is as follows: 8 */ 9 10 /* 11 * Copyright (C) 1998-2012 Daniel Veillard. All Rights Reserved. 12 * 13 * Permission is hereby granted, free of charge, to any person obtaining a copy 14 * of this software and associated documentation files (the "Software"), to deal 15 * in the Software without restriction, including without limitation the rights 16 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 17 * copies of the Software, and to permit persons to whom the Software is fur- 18 * nished to do so, subject to the following conditions: 19 * 20 * The above copyright notice and this permission notice shall be included in 21 * all copies or substantial portions of the Software. 22 * 23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 24 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT- 25 * NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 26 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 27 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 28 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 29 * THE SOFTWARE. 30 * 31 * Author: Daniel Veillard 32 */ 33 34 /* 35 * Summary: interface for the I/O interfaces used by the parser 36 * Description: interface for the I/O interfaces used by the parser 37 */ 38 39 #ifndef __XML_IO_H__ 40 #define __XML_IO_H__ 41 42 #include <stdio.h> 43 #include <libxml/xmlversion.h> 44 45 #ifdef __cplusplus 46 extern "C" { 47 #endif 48 49 /* 50 * Those are the functions and datatypes for the parser input 51 * I/O structures. 52 */ 53 54 /** 55 * xmlInputMatchCallback: 56 * @filename: the filename or URI 57 * 58 * Callback used in the I/O Input API to detect if the current handler 59 * can provide input fonctionnalities for this resource. 60 * 61 * Returns 1 if yes and 0 if another Input module should be used 62 */ 63 typedef int (XMLCALL *xmlInputMatchCallback) (char const *filename); 64 /** 65 * xmlInputOpenCallback: 66 * @filename: the filename or URI 67 * 68 * Callback used in the I/O Input API to open the resource 69 * 70 * Returns an Input context or NULL in case or error 71 */ 72 typedef void * (XMLCALL *xmlInputOpenCallback) (char const *filename); 73 /** 74 * xmlInputReadCallback: 75 * @context: an Input context 76 * @buffer: the buffer to store data read 77 * @len: the length of the buffer in bytes 78 * 79 * Callback used in the I/O Input API to read the resource 80 * 81 * Returns the number of bytes read or -1 in case of error 82 */ 83 typedef int (XMLCALL *xmlInputReadCallback) (void * context, char * buffer, int len); 84 /** 85 * xmlInputCloseCallback: 86 * @context: an Input context 87 * 88 * Callback used in the I/O Input API to close the resource 89 * 90 * Returns 0 or -1 in case of error 91 */ 92 typedef int (XMLCALL *xmlInputCloseCallback) (void * context); 93 94 #ifdef LIBXML_OUTPUT_ENABLED 95 /* 96 * Those are the functions and datatypes for the library output 97 * I/O structures. 98 */ 99 100 /** 101 * xmlOutputMatchCallback: 102 * @filename: the filename or URI 103 * 104 * Callback used in the I/O Output API to detect if the current handler 105 * can provide output fonctionnalities for this resource. 106 * 107 * Returns 1 if yes and 0 if another Output module should be used 108 */ 109 typedef int (XMLCALL *xmlOutputMatchCallback) (char const *filename); 110 /** 111 * xmlOutputOpenCallback: 112 * @filename: the filename or URI 113 * 114 * Callback used in the I/O Output API to open the resource 115 * 116 * Returns an Output context or NULL in case or error 117 */ 118 typedef void * (XMLCALL *xmlOutputOpenCallback) (char const *filename); 119 /** 120 * xmlOutputWriteCallback: 121 * @context: an Output context 122 * @buffer: the buffer of data to write 123 * @len: the length of the buffer in bytes 124 * 125 * Callback used in the I/O Output API to write to the resource 126 * 127 * Returns the number of bytes written or -1 in case of error 128 */ 129 typedef int (XMLCALL *xmlOutputWriteCallback) (void * context, const char * buffer, 130 int len); 131 /** 132 * xmlOutputCloseCallback: 133 * @context: an Output context 134 * 135 * Callback used in the I/O Output API to close the resource 136 * 137 * Returns 0 or -1 in case of error 138 */ 139 typedef int (XMLCALL *xmlOutputCloseCallback) (void * context); 140 #endif /* LIBXML_OUTPUT_ENABLED */ 141 142 #ifdef __cplusplus 143 } 144 #endif 145 146 #include <libxml/globals.h> 147 #include <libxml/tree.h> 148 #include <libxml/parser.h> 149 #include <libxml/encoding.h> 150 151 #ifdef __cplusplus 152 extern "C" { 153 #endif 154 struct _xmlParserInputBuffer { 155 void* context; 156 xmlInputReadCallback readcallback; 157 xmlInputCloseCallback closecallback; 158 159 xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */ 160 161 xmlBufPtr buffer; /* Local buffer encoded in UTF-8 */ 162 xmlBufPtr raw; /* if encoder != NULL buffer for raw input */ 163 int compressed; /* -1=unknown, 0=not compressed, 1=compressed */ 164 int error; 165 unsigned long rawconsumed;/* amount consumed from raw */ 166 }; 167 168 169 #ifdef LIBXML_OUTPUT_ENABLED 170 struct _xmlOutputBuffer { 171 void* context; 172 xmlOutputWriteCallback writecallback; 173 xmlOutputCloseCallback closecallback; 174 175 xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */ 176 177 xmlBufPtr buffer; /* Local buffer encoded in UTF-8 or ISOLatin */ 178 xmlBufPtr conv; /* if encoder != NULL buffer for output */ 179 int written; /* total number of byte written */ 180 int error; 181 }; 182 #endif /* LIBXML_OUTPUT_ENABLED */ 183 184 /* 185 * Interfaces for input 186 */ 187 XMLPUBFUN void XMLCALL 188 xmlCleanupInputCallbacks (void); 189 190 XMLPUBFUN int XMLCALL 191 xmlPopInputCallbacks (void); 192 193 XMLPUBFUN void XMLCALL 194 xmlRegisterDefaultInputCallbacks (void); 195 XMLPUBFUN xmlParserInputBufferPtr XMLCALL 196 xmlAllocParserInputBuffer (xmlCharEncoding enc); 197 198 XMLPUBFUN xmlParserInputBufferPtr XMLCALL 199 xmlParserInputBufferCreateFilename (const char *URI, 200 xmlCharEncoding enc); 201 XMLPUBFUN xmlParserInputBufferPtr XMLCALL 202 xmlParserInputBufferCreateFile (FILE *file, 203 xmlCharEncoding enc); 204 XMLPUBFUN xmlParserInputBufferPtr XMLCALL 205 xmlParserInputBufferCreateFd (int fd, 206 xmlCharEncoding enc); 207 XMLPUBFUN xmlParserInputBufferPtr XMLCALL 208 xmlParserInputBufferCreateMem (const char *mem, int size, 209 xmlCharEncoding enc); 210 XMLPUBFUN xmlParserInputBufferPtr XMLCALL 211 xmlParserInputBufferCreateStatic (const char *mem, int size, 212 xmlCharEncoding enc); 213 XMLPUBFUN xmlParserInputBufferPtr XMLCALL 214 xmlParserInputBufferCreateIO (xmlInputReadCallback ioread, 215 xmlInputCloseCallback ioclose, 216 void *ioctx, 217 xmlCharEncoding enc); 218 XMLPUBFUN int XMLCALL 219 xmlParserInputBufferRead (xmlParserInputBufferPtr in, 220 int len); 221 XMLPUBFUN int XMLCALL 222 xmlParserInputBufferGrow (xmlParserInputBufferPtr in, 223 int len); 224 XMLPUBFUN int XMLCALL 225 xmlParserInputBufferPush (xmlParserInputBufferPtr in, 226 int len, 227 const char *buf); 228 XMLPUBFUN void XMLCALL 229 xmlFreeParserInputBuffer (xmlParserInputBufferPtr in); 230 XMLPUBFUN char * XMLCALL 231 xmlParserGetDirectory (const char *filename); 232 233 XMLPUBFUN int XMLCALL 234 xmlRegisterInputCallbacks (xmlInputMatchCallback matchFunc, 235 xmlInputOpenCallback openFunc, 236 xmlInputReadCallback readFunc, 237 xmlInputCloseCallback closeFunc); 238 239 xmlParserInputBufferPtr 240 __xmlParserInputBufferCreateFilename(const char *URI, 241 xmlCharEncoding enc); 242 243 #ifdef LIBXML_OUTPUT_ENABLED 244 /* 245 * Interfaces for output 246 */ 247 XMLPUBFUN void XMLCALL 248 xmlCleanupOutputCallbacks (void); 249 XMLPUBFUN void XMLCALL 250 xmlRegisterDefaultOutputCallbacks(void); 251 XMLPUBFUN xmlOutputBufferPtr XMLCALL 252 xmlAllocOutputBuffer (xmlCharEncodingHandlerPtr encoder); 253 254 XMLPUBFUN xmlOutputBufferPtr XMLCALL 255 xmlOutputBufferCreateFilename (const char *URI, 256 xmlCharEncodingHandlerPtr encoder, 257 int compression); 258 259 XMLPUBFUN xmlOutputBufferPtr XMLCALL 260 xmlOutputBufferCreateFile (FILE *file, 261 xmlCharEncodingHandlerPtr encoder); 262 263 XMLPUBFUN xmlOutputBufferPtr XMLCALL 264 xmlOutputBufferCreateBuffer (xmlBufferPtr buffer, 265 xmlCharEncodingHandlerPtr encoder); 266 267 XMLPUBFUN xmlOutputBufferPtr XMLCALL 268 xmlOutputBufferCreateFd (int fd, 269 xmlCharEncodingHandlerPtr encoder); 270 271 XMLPUBFUN xmlOutputBufferPtr XMLCALL 272 xmlOutputBufferCreateIO (xmlOutputWriteCallback iowrite, 273 xmlOutputCloseCallback ioclose, 274 void *ioctx, 275 xmlCharEncodingHandlerPtr encoder); 276 277 /* Couple of APIs to get the output without digging into the buffers */ 278 XMLPUBFUN const xmlChar * XMLCALL 279 xmlOutputBufferGetContent (xmlOutputBufferPtr out); 280 XMLPUBFUN size_t XMLCALL 281 xmlOutputBufferGetSize (xmlOutputBufferPtr out); 282 283 XMLPUBFUN int XMLCALL 284 xmlOutputBufferWrite (xmlOutputBufferPtr out, 285 int len, 286 const char *buf); 287 XMLPUBFUN int XMLCALL 288 xmlOutputBufferWriteString (xmlOutputBufferPtr out, 289 const char *str); 290 XMLPUBFUN int XMLCALL 291 xmlOutputBufferWriteEscape (xmlOutputBufferPtr out, 292 const xmlChar *str, 293 xmlCharEncodingOutputFunc escaping); 294 295 XMLPUBFUN int XMLCALL 296 xmlOutputBufferFlush (xmlOutputBufferPtr out); 297 XMLPUBFUN int XMLCALL 298 xmlOutputBufferClose (xmlOutputBufferPtr out); 299 300 XMLPUBFUN int XMLCALL 301 xmlRegisterOutputCallbacks (xmlOutputMatchCallback matchFunc, 302 xmlOutputOpenCallback openFunc, 303 xmlOutputWriteCallback writeFunc, 304 xmlOutputCloseCallback closeFunc); 305 306 xmlOutputBufferPtr 307 __xmlOutputBufferCreateFilename(const char *URI, 308 xmlCharEncodingHandlerPtr encoder, 309 int compression); 310 311 #ifdef LIBXML_HTTP_ENABLED 312 /* This function only exists if HTTP support built into the library */ 313 XMLPUBFUN void XMLCALL 314 xmlRegisterHTTPPostCallbacks (void ); 315 #endif /* LIBXML_HTTP_ENABLED */ 316 317 #endif /* LIBXML_OUTPUT_ENABLED */ 318 319 XMLPUBFUN xmlParserInputPtr XMLCALL 320 xmlCheckHTTPInput (xmlParserCtxtPtr ctxt, 321 xmlParserInputPtr ret); 322 323 /* 324 * A predefined entity loader disabling network accesses 325 */ 326 XMLPUBFUN xmlParserInputPtr XMLCALL 327 xmlNoNetExternalEntityLoader (const char *URL, 328 const char *ID, 329 xmlParserCtxtPtr ctxt); 330 331 /* 332 * xmlNormalizeWindowsPath is obsolete, don't use it. 333 * Check xmlCanonicPath in uri.h for a better alternative. 334 */ 335 XMLPUBFUN xmlChar * XMLCALL 336 xmlNormalizeWindowsPath (const xmlChar *path); 337 338 XMLPUBFUN int XMLCALL 339 xmlCheckFilename (const char *path); 340 /** 341 * Default 'file://' protocol callbacks 342 */ 343 XMLPUBFUN int XMLCALL 344 xmlFileMatch (const char *filename); 345 XMLPUBFUN void * XMLCALL 346 xmlFileOpen (const char *filename); 347 XMLPUBFUN int XMLCALL 348 xmlFileRead (void * context, 349 char * buffer, 350 int len); 351 XMLPUBFUN int XMLCALL 352 xmlFileClose (void * context); 353 354 /** 355 * Default 'http://' protocol callbacks 356 */ 357 #ifdef LIBXML_HTTP_ENABLED 358 XMLPUBFUN int XMLCALL 359 xmlIOHTTPMatch (const char *filename); 360 XMLPUBFUN void * XMLCALL 361 xmlIOHTTPOpen (const char *filename); 362 #ifdef LIBXML_OUTPUT_ENABLED 363 XMLPUBFUN void * XMLCALL 364 xmlIOHTTPOpenW (const char * post_uri, 365 int compression ); 366 #endif /* LIBXML_OUTPUT_ENABLED */ 367 XMLPUBFUN int XMLCALL 368 xmlIOHTTPRead (void * context, 369 char * buffer, 370 int len); 371 XMLPUBFUN int XMLCALL 372 xmlIOHTTPClose (void * context); 373 #endif /* LIBXML_HTTP_ENABLED */ 374 375 /** 376 * Default 'ftp://' protocol callbacks 377 */ 378 #ifdef LIBXML_FTP_ENABLED 379 XMLPUBFUN int XMLCALL 380 xmlIOFTPMatch (const char *filename); 381 XMLPUBFUN void * XMLCALL 382 xmlIOFTPOpen (const char *filename); 383 XMLPUBFUN int XMLCALL 384 xmlIOFTPRead (void * context, 385 char * buffer, 386 int len); 387 XMLPUBFUN int XMLCALL 388 xmlIOFTPClose (void * context); 389 #endif /* LIBXML_FTP_ENABLED */ 390 391 #ifdef __cplusplus 392 } 393 #endif 394 395 #endif /* __XML_IO_H__ */ 396