| /* libxml2 - Library for parsing XML documents |
| * Copyright (C) 2006-2019 Free Software Foundation, Inc. |
| * |
| * This file is not part of the GNU gettext program, but is used with |
| * GNU gettext. |
| * |
| * The original copyright notice is as follows: |
| */ |
| |
| /* |
| * Copyright (C) 1998-2012 Daniel Veillard. All Rights Reserved. |
| * |
| * Permission is hereby granted, free of charge, to any person obtaining a copy |
| * of this software and associated documentation files (the "Software"), to deal |
| * in the Software without restriction, including without limitation the rights |
| * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
| * copies of the Software, and to permit persons to whom the Software is fur- |
| * nished to do so, subject to the following conditions: |
| * |
| * The above copyright notice and this permission notice shall be included in |
| * all copies or substantial portions of the Software. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT- |
| * NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
| * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
| * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
| * THE SOFTWARE. |
| * |
| * Author: Daniel Veillard |
| */ |
| |
| /* |
| * Summary: interface for the I/O interfaces used by the parser |
| * Description: interface for the I/O interfaces used by the parser |
| */ |
| |
| #ifndef __XML_IO_H__ |
| #define __XML_IO_H__ |
| |
| #include <stdio.h> |
| #include <libxml/xmlversion.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /* |
| * Those are the functions and datatypes for the parser input |
| * I/O structures. |
| */ |
| |
| /** |
| * xmlInputMatchCallback: |
| * @filename: the filename or URI |
| * |
| * Callback used in the I/O Input API to detect if the current handler |
| * can provide input fonctionnalities for this resource. |
| * |
| * Returns 1 if yes and 0 if another Input module should be used |
| */ |
| typedef int (XMLCALL *xmlInputMatchCallback) (char const *filename); |
| /** |
| * xmlInputOpenCallback: |
| * @filename: the filename or URI |
| * |
| * Callback used in the I/O Input API to open the resource |
| * |
| * Returns an Input context or NULL in case or error |
| */ |
| typedef void * (XMLCALL *xmlInputOpenCallback) (char const *filename); |
| /** |
| * xmlInputReadCallback: |
| * @context: an Input context |
| * @buffer: the buffer to store data read |
| * @len: the length of the buffer in bytes |
| * |
| * Callback used in the I/O Input API to read the resource |
| * |
| * Returns the number of bytes read or -1 in case of error |
| */ |
| typedef int (XMLCALL *xmlInputReadCallback) (void * context, char * buffer, int len); |
| /** |
| * xmlInputCloseCallback: |
| * @context: an Input context |
| * |
| * Callback used in the I/O Input API to close the resource |
| * |
| * Returns 0 or -1 in case of error |
| */ |
| typedef int (XMLCALL *xmlInputCloseCallback) (void * context); |
| |
| #ifdef LIBXML_OUTPUT_ENABLED |
| /* |
| * Those are the functions and datatypes for the library output |
| * I/O structures. |
| */ |
| |
| /** |
| * xmlOutputMatchCallback: |
| * @filename: the filename or URI |
| * |
| * Callback used in the I/O Output API to detect if the current handler |
| * can provide output fonctionnalities for this resource. |
| * |
| * Returns 1 if yes and 0 if another Output module should be used |
| */ |
| typedef int (XMLCALL *xmlOutputMatchCallback) (char const *filename); |
| /** |
| * xmlOutputOpenCallback: |
| * @filename: the filename or URI |
| * |
| * Callback used in the I/O Output API to open the resource |
| * |
| * Returns an Output context or NULL in case or error |
| */ |
| typedef void * (XMLCALL *xmlOutputOpenCallback) (char const *filename); |
| /** |
| * xmlOutputWriteCallback: |
| * @context: an Output context |
| * @buffer: the buffer of data to write |
| * @len: the length of the buffer in bytes |
| * |
| * Callback used in the I/O Output API to write to the resource |
| * |
| * Returns the number of bytes written or -1 in case of error |
| */ |
| typedef int (XMLCALL *xmlOutputWriteCallback) (void * context, const char * buffer, |
| int len); |
| /** |
| * xmlOutputCloseCallback: |
| * @context: an Output context |
| * |
| * Callback used in the I/O Output API to close the resource |
| * |
| * Returns 0 or -1 in case of error |
| */ |
| typedef int (XMLCALL *xmlOutputCloseCallback) (void * context); |
| #endif /* LIBXML_OUTPUT_ENABLED */ |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #include <libxml/globals.h> |
| #include <libxml/tree.h> |
| #include <libxml/parser.h> |
| #include <libxml/encoding.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| struct _xmlParserInputBuffer { |
| void* context; |
| xmlInputReadCallback readcallback; |
| xmlInputCloseCallback closecallback; |
| |
| xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */ |
| |
| xmlBufPtr buffer; /* Local buffer encoded in UTF-8 */ |
| xmlBufPtr raw; /* if encoder != NULL buffer for raw input */ |
| int compressed; /* -1=unknown, 0=not compressed, 1=compressed */ |
| int error; |
| unsigned long rawconsumed;/* amount consumed from raw */ |
| }; |
| |
| |
| #ifdef LIBXML_OUTPUT_ENABLED |
| struct _xmlOutputBuffer { |
| void* context; |
| xmlOutputWriteCallback writecallback; |
| xmlOutputCloseCallback closecallback; |
| |
| xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */ |
| |
| xmlBufPtr buffer; /* Local buffer encoded in UTF-8 or ISOLatin */ |
| xmlBufPtr conv; /* if encoder != NULL buffer for output */ |
| int written; /* total number of byte written */ |
| int error; |
| }; |
| #endif /* LIBXML_OUTPUT_ENABLED */ |
| |
| /* |
| * Interfaces for input |
| */ |
| XMLPUBFUN void XMLCALL |
| xmlCleanupInputCallbacks (void); |
| |
| XMLPUBFUN int XMLCALL |
| xmlPopInputCallbacks (void); |
| |
| XMLPUBFUN void XMLCALL |
| xmlRegisterDefaultInputCallbacks (void); |
| XMLPUBFUN xmlParserInputBufferPtr XMLCALL |
| xmlAllocParserInputBuffer (xmlCharEncoding enc); |
| |
| XMLPUBFUN xmlParserInputBufferPtr XMLCALL |
| xmlParserInputBufferCreateFilename (const char *URI, |
| xmlCharEncoding enc); |
| XMLPUBFUN xmlParserInputBufferPtr XMLCALL |
| xmlParserInputBufferCreateFile (FILE *file, |
| xmlCharEncoding enc); |
| XMLPUBFUN xmlParserInputBufferPtr XMLCALL |
| xmlParserInputBufferCreateFd (int fd, |
| xmlCharEncoding enc); |
| XMLPUBFUN xmlParserInputBufferPtr XMLCALL |
| xmlParserInputBufferCreateMem (const char *mem, int size, |
| xmlCharEncoding enc); |
| XMLPUBFUN xmlParserInputBufferPtr XMLCALL |
| xmlParserInputBufferCreateStatic (const char *mem, int size, |
| xmlCharEncoding enc); |
| XMLPUBFUN xmlParserInputBufferPtr XMLCALL |
| xmlParserInputBufferCreateIO (xmlInputReadCallback ioread, |
| xmlInputCloseCallback ioclose, |
| void *ioctx, |
| xmlCharEncoding enc); |
| XMLPUBFUN int XMLCALL |
| xmlParserInputBufferRead (xmlParserInputBufferPtr in, |
| int len); |
| XMLPUBFUN int XMLCALL |
| xmlParserInputBufferGrow (xmlParserInputBufferPtr in, |
| int len); |
| XMLPUBFUN int XMLCALL |
| xmlParserInputBufferPush (xmlParserInputBufferPtr in, |
| int len, |
| const char *buf); |
| XMLPUBFUN void XMLCALL |
| xmlFreeParserInputBuffer (xmlParserInputBufferPtr in); |
| XMLPUBFUN char * XMLCALL |
| xmlParserGetDirectory (const char *filename); |
| |
| XMLPUBFUN int XMLCALL |
| xmlRegisterInputCallbacks (xmlInputMatchCallback matchFunc, |
| xmlInputOpenCallback openFunc, |
| xmlInputReadCallback readFunc, |
| xmlInputCloseCallback closeFunc); |
| |
| xmlParserInputBufferPtr |
| __xmlParserInputBufferCreateFilename(const char *URI, |
| xmlCharEncoding enc); |
| |
| #ifdef LIBXML_OUTPUT_ENABLED |
| /* |
| * Interfaces for output |
| */ |
| XMLPUBFUN void XMLCALL |
| xmlCleanupOutputCallbacks (void); |
| XMLPUBFUN void XMLCALL |
| xmlRegisterDefaultOutputCallbacks(void); |
| XMLPUBFUN xmlOutputBufferPtr XMLCALL |
| xmlAllocOutputBuffer (xmlCharEncodingHandlerPtr encoder); |
| |
| XMLPUBFUN xmlOutputBufferPtr XMLCALL |
| xmlOutputBufferCreateFilename (const char *URI, |
| xmlCharEncodingHandlerPtr encoder, |
| int compression); |
| |
| XMLPUBFUN xmlOutputBufferPtr XMLCALL |
| xmlOutputBufferCreateFile (FILE *file, |
| xmlCharEncodingHandlerPtr encoder); |
| |
| XMLPUBFUN xmlOutputBufferPtr XMLCALL |
| xmlOutputBufferCreateBuffer (xmlBufferPtr buffer, |
| xmlCharEncodingHandlerPtr encoder); |
| |
| XMLPUBFUN xmlOutputBufferPtr XMLCALL |
| xmlOutputBufferCreateFd (int fd, |
| xmlCharEncodingHandlerPtr encoder); |
| |
| XMLPUBFUN xmlOutputBufferPtr XMLCALL |
| xmlOutputBufferCreateIO (xmlOutputWriteCallback iowrite, |
| xmlOutputCloseCallback ioclose, |
| void *ioctx, |
| xmlCharEncodingHandlerPtr encoder); |
| |
| /* Couple of APIs to get the output without digging into the buffers */ |
| XMLPUBFUN const xmlChar * XMLCALL |
| xmlOutputBufferGetContent (xmlOutputBufferPtr out); |
| XMLPUBFUN size_t XMLCALL |
| xmlOutputBufferGetSize (xmlOutputBufferPtr out); |
| |
| XMLPUBFUN int XMLCALL |
| xmlOutputBufferWrite (xmlOutputBufferPtr out, |
| int len, |
| const char *buf); |
| XMLPUBFUN int XMLCALL |
| xmlOutputBufferWriteString (xmlOutputBufferPtr out, |
| const char *str); |
| XMLPUBFUN int XMLCALL |
| xmlOutputBufferWriteEscape (xmlOutputBufferPtr out, |
| const xmlChar *str, |
| xmlCharEncodingOutputFunc escaping); |
| |
| XMLPUBFUN int XMLCALL |
| xmlOutputBufferFlush (xmlOutputBufferPtr out); |
| XMLPUBFUN int XMLCALL |
| xmlOutputBufferClose (xmlOutputBufferPtr out); |
| |
| XMLPUBFUN int XMLCALL |
| xmlRegisterOutputCallbacks (xmlOutputMatchCallback matchFunc, |
| xmlOutputOpenCallback openFunc, |
| xmlOutputWriteCallback writeFunc, |
| xmlOutputCloseCallback closeFunc); |
| |
| xmlOutputBufferPtr |
| __xmlOutputBufferCreateFilename(const char *URI, |
| xmlCharEncodingHandlerPtr encoder, |
| int compression); |
| |
| #ifdef LIBXML_HTTP_ENABLED |
| /* This function only exists if HTTP support built into the library */ |
| XMLPUBFUN void XMLCALL |
| xmlRegisterHTTPPostCallbacks (void ); |
| #endif /* LIBXML_HTTP_ENABLED */ |
| |
| #endif /* LIBXML_OUTPUT_ENABLED */ |
| |
| XMLPUBFUN xmlParserInputPtr XMLCALL |
| xmlCheckHTTPInput (xmlParserCtxtPtr ctxt, |
| xmlParserInputPtr ret); |
| |
| /* |
| * A predefined entity loader disabling network accesses |
| */ |
| XMLPUBFUN xmlParserInputPtr XMLCALL |
| xmlNoNetExternalEntityLoader (const char *URL, |
| const char *ID, |
| xmlParserCtxtPtr ctxt); |
| |
| /* |
| * xmlNormalizeWindowsPath is obsolete, don't use it. |
| * Check xmlCanonicPath in uri.h for a better alternative. |
| */ |
| XMLPUBFUN xmlChar * XMLCALL |
| xmlNormalizeWindowsPath (const xmlChar *path); |
| |
| XMLPUBFUN int XMLCALL |
| xmlCheckFilename (const char *path); |
| /** |
| * Default 'file://' protocol callbacks |
| */ |
| XMLPUBFUN int XMLCALL |
| xmlFileMatch (const char *filename); |
| XMLPUBFUN void * XMLCALL |
| xmlFileOpen (const char *filename); |
| XMLPUBFUN int XMLCALL |
| xmlFileRead (void * context, |
| char * buffer, |
| int len); |
| XMLPUBFUN int XMLCALL |
| xmlFileClose (void * context); |
| |
| /** |
| * Default 'http://' protocol callbacks |
| */ |
| #ifdef LIBXML_HTTP_ENABLED |
| XMLPUBFUN int XMLCALL |
| xmlIOHTTPMatch (const char *filename); |
| XMLPUBFUN void * XMLCALL |
| xmlIOHTTPOpen (const char *filename); |
| #ifdef LIBXML_OUTPUT_ENABLED |
| XMLPUBFUN void * XMLCALL |
| xmlIOHTTPOpenW (const char * post_uri, |
| int compression ); |
| #endif /* LIBXML_OUTPUT_ENABLED */ |
| XMLPUBFUN int XMLCALL |
| xmlIOHTTPRead (void * context, |
| char * buffer, |
| int len); |
| XMLPUBFUN int XMLCALL |
| xmlIOHTTPClose (void * context); |
| #endif /* LIBXML_HTTP_ENABLED */ |
| |
| /** |
| * Default 'ftp://' protocol callbacks |
| */ |
| #ifdef LIBXML_FTP_ENABLED |
| XMLPUBFUN int XMLCALL |
| xmlIOFTPMatch (const char *filename); |
| XMLPUBFUN void * XMLCALL |
| xmlIOFTPOpen (const char *filename); |
| XMLPUBFUN int XMLCALL |
| xmlIOFTPRead (void * context, |
| char * buffer, |
| int len); |
| XMLPUBFUN int XMLCALL |
| xmlIOFTPClose (void * context); |
| #endif /* LIBXML_FTP_ENABLED */ |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* __XML_IO_H__ */ |