1ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* 2ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlIO.c : implementation of the I/O interfaces used by the parser 3ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * See Copyright for the status of this software. 5ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 6ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * daniel@veillard.com 7ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 8ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 14 Nov 2000 ht - for VMS, truncated name of long functions to under 32 char 9ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 10ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 11ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define IN_LIBXML 12ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include "libxml.h" 13ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <string.h> 15ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_ERRNO_H 16ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <errno.h> 17ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 18ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 19ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 20ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_SYS_TYPES_H 21ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <sys/types.h> 22ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 23ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_SYS_STAT_H 24ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <sys/stat.h> 25ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 26ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_FCNTL_H 27ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <fcntl.h> 28ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 29ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_UNISTD_H 30ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <unistd.h> 31ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 32ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_STDLIB_H 33ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <stdlib.h> 34ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 35ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_ZLIB_H 36ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <zlib.h> 37ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 38df143a5041f03a22808b59c76698770b74692815Selim Gurun#ifdef HAVE_LZMA_H 39df143a5041f03a22808b59c76698770b74692815Selim Gurun#include <lzma.h> 40df143a5041f03a22808b59c76698770b74692815Selim Gurun#endif 41ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 42ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined(WIN32) || defined(_WIN32) 43ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <windows.h> 44ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 45ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 46ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined(_WIN32_WCE) 47ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <winnls.h> /* for CP_UTF8 */ 48ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 49ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 50ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* Figure a portable way to know if a file is a directory. */ 51ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifndef HAVE_STAT 52ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# ifdef HAVE__STAT 53ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* MS C library seems to define stat and _stat. The definition 54ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project is identical. Still, mapping them to each other causes a warning. */ 55ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# ifndef _MSC_VER 56ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# define stat(x,y) _stat(x,y) 57ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# endif 58ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# define HAVE_STAT 59ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# endif 60ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 61ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# ifdef HAVE__STAT 62ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__) 63ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# define stat _stat 64ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# endif 65ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# endif 66ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 67ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_STAT 68ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# ifndef S_ISDIR 69ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# ifdef _S_ISDIR 70ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# define S_ISDIR(x) _S_ISDIR(x) 71ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# else 72ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# ifdef S_IFDIR 73ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# ifndef S_IFMT 74ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# ifdef _S_IFMT 75ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# define S_IFMT _S_IFMT 76ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# endif 77ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# endif 78ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# ifdef S_IFMT 79ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) 80ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# endif 81ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# endif 82ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# endif 83ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# endif 84ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 85ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 86ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/xmlmemory.h> 87ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/parser.h> 88ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/parserInternals.h> 89ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/xmlIO.h> 90ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/uri.h> 91ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/nanohttp.h> 92ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/nanoftp.h> 93ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/xmlerror.h> 94ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_CATALOG_ENABLED 95ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/catalog.h> 96ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 97ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/globals.h> 98ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 9994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun#include "buf.h" 10094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun#include "enc.h" 10194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun 102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* #define VERBOSE_FAILURE */ 103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* #define DEBUG_EXTERNAL_ENTITIES */ 104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* #define DEBUG_INPUT */ 105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_INPUT 107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define MINLEN 40 108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define MINLEN 4000 110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* 113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Input I/O callback sets 114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef struct _xmlInputCallback { 116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInputMatchCallback matchcallback; 117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInputOpenCallback opencallback; 118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInputReadCallback readcallback; 119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInputCloseCallback closecallback; 120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} xmlInputCallback; 121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define MAX_INPUT_CALLBACK 15 123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlInputCallback xmlInputCallbackTable[MAX_INPUT_CALLBACK]; 125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int xmlInputCallbackNr = 0; 126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int xmlInputCallbackInitialized = 0; 127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* 130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Output I/O callback sets 131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef struct _xmlOutputCallback { 133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputMatchCallback matchcallback; 134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputOpenCallback opencallback; 135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputWriteCallback writecallback; 136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputCloseCallback closecallback; 137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} xmlOutputCallback; 138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define MAX_OUTPUT_CALLBACK 15 140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlOutputCallback xmlOutputCallbackTable[MAX_OUTPUT_CALLBACK]; 142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int xmlOutputCallbackNr = 0; 143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int xmlOutputCallbackInitialized = 0; 14460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 14560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick ScottxmlOutputBufferPtr 14660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick ScottxmlAllocOutputBufferInternal(xmlCharEncodingHandlerPtr encoder); 147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */ 148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 151df143a5041f03a22808b59c76698770b74692815Selim Gurun * Tree memory error handler * 152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic const char *IOerr[] = { 156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Unknown IO error", /* UNKNOWN */ 157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Permission denied", /* EACCES */ 158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Resource temporarily unavailable",/* EAGAIN */ 159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Bad file descriptor", /* EBADF */ 160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Bad message", /* EBADMSG */ 161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Resource busy", /* EBUSY */ 162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Operation canceled", /* ECANCELED */ 163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "No child processes", /* ECHILD */ 164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Resource deadlock avoided",/* EDEADLK */ 165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Domain error", /* EDOM */ 166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "File exists", /* EEXIST */ 167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Bad address", /* EFAULT */ 168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "File too large", /* EFBIG */ 169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Operation in progress", /* EINPROGRESS */ 170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Interrupted function call",/* EINTR */ 171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Invalid argument", /* EINVAL */ 172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Input/output error", /* EIO */ 173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Is a directory", /* EISDIR */ 174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Too many open files", /* EMFILE */ 175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Too many links", /* EMLINK */ 176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Inappropriate message buffer length",/* EMSGSIZE */ 177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Filename too long", /* ENAMETOOLONG */ 178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Too many open files in system",/* ENFILE */ 179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "No such device", /* ENODEV */ 180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "No such file or directory",/* ENOENT */ 181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Exec format error", /* ENOEXEC */ 182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "No locks available", /* ENOLCK */ 183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Not enough space", /* ENOMEM */ 184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "No space left on device", /* ENOSPC */ 185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Function not implemented", /* ENOSYS */ 186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Not a directory", /* ENOTDIR */ 187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Directory not empty", /* ENOTEMPTY */ 188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Not supported", /* ENOTSUP */ 189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Inappropriate I/O control operation",/* ENOTTY */ 190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "No such device or address",/* ENXIO */ 191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Operation not permitted", /* EPERM */ 192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Broken pipe", /* EPIPE */ 193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Result too large", /* ERANGE */ 194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Read-only file system", /* EROFS */ 195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Invalid seek", /* ESPIPE */ 196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "No such process", /* ESRCH */ 197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Operation timed out", /* ETIMEDOUT */ 198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Improper link", /* EXDEV */ 199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Attempt to load network entity %s", /* XML_IO_NETWORK_ATTEMPT */ 200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "encoder error", /* XML_IO_ENCODER */ 201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "flush error", 202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "write error", 203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "no input", 204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "buffer full", 205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "loading error", 206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "not a socket", /* ENOTSOCK */ 207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "already connected", /* EISCONN */ 208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "connection refused", /* ECONNREFUSED */ 209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "unreachable network", /* ENETUNREACH */ 210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "adddress in use", /* EADDRINUSE */ 211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "already in use", /* EALREADY */ 212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "unknown address familly", /* EAFNOSUPPORT */ 213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}; 214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__) 216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * __xmlIOWin32UTF8ToWChar: 218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @u8String: uft-8 string 219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Convert a string from utf-8 to wchar (WINDOWS ONLY!) 221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic wchar_t * 223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project__xmlIOWin32UTF8ToWChar(const char *u8String) 224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project wchar_t *wString = NULL; 226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (u8String) { 228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int wLen = 229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, u8String, 230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project -1, NULL, 0); 231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (wLen) { 232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project wString = xmlMalloc(wLen * sizeof(wchar_t)); 233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (wString) { 234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (MultiByteToWideChar 235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (CP_UTF8, 0, u8String, -1, wString, wLen) == 0) { 236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(wString); 237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project wString = NULL; 238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return wString; 244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlIOErrMemory: 249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @extra: extra informations 250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handle an out of memory condition 252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlIOErrMemory(const char *extra) 255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project __xmlSimpleError(XML_FROM_IO, XML_ERR_NO_MEMORY, NULL, NULL, extra); 257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * __xmlIOErr: 261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @code: the error number 262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ 263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @extra: extra informations 264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handle an I/O error 266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project__xmlIOErr(int domain, int code, const char *extra) 269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int idx; 271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (code == 0) { 273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_ERRNO_H 274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (errno == 0) code = 0; 275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef EACCES 276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == EACCES) code = XML_IO_EACCES; 277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef EAGAIN 279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == EAGAIN) code = XML_IO_EAGAIN; 280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef EBADF 282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == EBADF) code = XML_IO_EBADF; 283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef EBADMSG 285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == EBADMSG) code = XML_IO_EBADMSG; 286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef EBUSY 288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == EBUSY) code = XML_IO_EBUSY; 289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef ECANCELED 291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == ECANCELED) code = XML_IO_ECANCELED; 292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef ECHILD 294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == ECHILD) code = XML_IO_ECHILD; 295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef EDEADLK 297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == EDEADLK) code = XML_IO_EDEADLK; 298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef EDOM 300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == EDOM) code = XML_IO_EDOM; 301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef EEXIST 303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == EEXIST) code = XML_IO_EEXIST; 304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef EFAULT 306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == EFAULT) code = XML_IO_EFAULT; 307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef EFBIG 309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == EFBIG) code = XML_IO_EFBIG; 310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef EINPROGRESS 312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == EINPROGRESS) code = XML_IO_EINPROGRESS; 313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef EINTR 315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == EINTR) code = XML_IO_EINTR; 316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef EINVAL 318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == EINVAL) code = XML_IO_EINVAL; 319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef EIO 321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == EIO) code = XML_IO_EIO; 322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef EISDIR 324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == EISDIR) code = XML_IO_EISDIR; 325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef EMFILE 327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == EMFILE) code = XML_IO_EMFILE; 328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef EMLINK 330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == EMLINK) code = XML_IO_EMLINK; 331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef EMSGSIZE 333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == EMSGSIZE) code = XML_IO_EMSGSIZE; 334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef ENAMETOOLONG 336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == ENAMETOOLONG) code = XML_IO_ENAMETOOLONG; 337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef ENFILE 339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == ENFILE) code = XML_IO_ENFILE; 340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef ENODEV 342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == ENODEV) code = XML_IO_ENODEV; 343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef ENOENT 345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == ENOENT) code = XML_IO_ENOENT; 346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef ENOEXEC 348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == ENOEXEC) code = XML_IO_ENOEXEC; 349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef ENOLCK 351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == ENOLCK) code = XML_IO_ENOLCK; 352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef ENOMEM 354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == ENOMEM) code = XML_IO_ENOMEM; 355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef ENOSPC 357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == ENOSPC) code = XML_IO_ENOSPC; 358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef ENOSYS 360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == ENOSYS) code = XML_IO_ENOSYS; 361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef ENOTDIR 363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == ENOTDIR) code = XML_IO_ENOTDIR; 364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef ENOTEMPTY 366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == ENOTEMPTY) code = XML_IO_ENOTEMPTY; 367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef ENOTSUP 369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == ENOTSUP) code = XML_IO_ENOTSUP; 370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef ENOTTY 372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == ENOTTY) code = XML_IO_ENOTTY; 373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef ENXIO 375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == ENXIO) code = XML_IO_ENXIO; 376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef EPERM 378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == EPERM) code = XML_IO_EPERM; 379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef EPIPE 381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == EPIPE) code = XML_IO_EPIPE; 382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef ERANGE 384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == ERANGE) code = XML_IO_ERANGE; 385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef EROFS 387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == EROFS) code = XML_IO_EROFS; 388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef ESPIPE 390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == ESPIPE) code = XML_IO_ESPIPE; 391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef ESRCH 393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == ESRCH) code = XML_IO_ESRCH; 394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef ETIMEDOUT 396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == ETIMEDOUT) code = XML_IO_ETIMEDOUT; 397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef EXDEV 399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == EXDEV) code = XML_IO_EXDEV; 400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef ENOTSOCK 402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == ENOTSOCK) code = XML_IO_ENOTSOCK; 403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef EISCONN 405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == EISCONN) code = XML_IO_EISCONN; 406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef ECONNREFUSED 408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == ECONNREFUSED) code = XML_IO_ECONNREFUSED; 409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef ETIMEDOUT 411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == ETIMEDOUT) code = XML_IO_ETIMEDOUT; 412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef ENETUNREACH 414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == ENETUNREACH) code = XML_IO_ENETUNREACH; 415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef EADDRINUSE 417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == EADDRINUSE) code = XML_IO_EADDRINUSE; 418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef EINPROGRESS 420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == EINPROGRESS) code = XML_IO_EINPROGRESS; 421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef EALREADY 423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == EALREADY) code = XML_IO_EALREADY; 424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef EAFNOSUPPORT 426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (errno == EAFNOSUPPORT) code = XML_IO_EAFNOSUPPORT; 427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else code = XML_IO_UNKNOWN; 429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* HAVE_ERRNO_H */ 430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project idx = 0; 432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (code >= XML_IO_UNKNOWN) idx = code - XML_IO_UNKNOWN; 433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (idx >= (sizeof(IOerr) / sizeof(IOerr[0]))) idx = 0; 434df143a5041f03a22808b59c76698770b74692815Selim Gurun 435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project __xmlSimpleError(domain, code, NULL, IOerr[idx], extra); 436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlIOErr: 440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @code: the error number 441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @extra: extra informations 442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handle an I/O error 444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlIOErr(int code, const char *extra) 447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project __xmlIOErr(XML_FROM_IO, code, extra); 449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * __xmlLoaderErr: 453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctx: the parser context 454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @extra: extra informations 455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handle a resource access error 457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project__xmlLoaderErr(void *ctx, const char *msg, const char *filename) 460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; 462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlStructuredErrorFunc schannel = NULL; 463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericErrorFunc channel = NULL; 464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void *data = NULL; 465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlErrorLevel level = XML_ERR_ERROR; 466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt != NULL) && (ctxt->disableSAX != 0) && 468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ctxt->instate == XML_PARSER_EOF)) 469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt != NULL) && (ctxt->sax != NULL)) { 471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->validate) { 472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project channel = ctxt->sax->error; 473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project level = XML_ERR_ERROR; 474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project channel = ctxt->sax->warning; 476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project level = XML_ERR_WARNING; 477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->sax->initialized == XML_SAX2_MAGIC) 479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project schannel = ctxt->sax->serror; 480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project data = ctxt->userData; 481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project __xmlRaiseError(schannel, channel, data, ctxt, NULL, XML_FROM_IO, 483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_IO_LOAD_ERROR, level, NULL, 0, 484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project filename, NULL, NULL, 0, 0, 485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project msg, filename); 486df143a5041f03a22808b59c76698770b74692815Selim Gurun 487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 491df143a5041f03a22808b59c76698770b74692815Selim Gurun * Tree memory error handler * 492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlNormalizeWindowsPath: 496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @path: the input file path 497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This function is obsolete. Please see xmlURIFromPath in uri.c for 499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * a better solution. 500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns a canonicalized version of the path 502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlChar * 504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlNormalizeWindowsPath(const xmlChar *path) 505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return xmlCanonicPath(path); 507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCleanupInputCallbacks: 511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * clears the entire input callback table. this includes the 513df143a5041f03a22808b59c76698770b74692815Selim Gurun * compiled-in I/O. 514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCleanupInputCallbacks(void) 517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int i; 519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlInputCallbackInitialized) 521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (i = xmlInputCallbackNr - 1; i >= 0; i--) { 524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInputCallbackTable[i].matchcallback = NULL; 525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInputCallbackTable[i].opencallback = NULL; 526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInputCallbackTable[i].readcallback = NULL; 527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInputCallbackTable[i].closecallback = NULL; 528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInputCallbackNr = 0; 531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInputCallbackInitialized = 0; 532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlPopInputCallbacks: 536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Clear the top input callback from the input stack. this includes the 538df143a5041f03a22808b59c76698770b74692815Selim Gurun * compiled-in I/O. 539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of input callback registered or -1 in case of error. 541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlPopInputCallbacks(void) 544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlInputCallbackInitialized) 546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlInputCallbackNr <= 0) 549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 550df143a5041f03a22808b59c76698770b74692815Selim Gurun 551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInputCallbackNr--; 552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInputCallbackTable[xmlInputCallbackNr].matchcallback = NULL; 553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInputCallbackTable[xmlInputCallbackNr].opencallback = NULL; 554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInputCallbackTable[xmlInputCallbackNr].readcallback = NULL; 555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInputCallbackTable[xmlInputCallbackNr].closecallback = NULL; 556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlInputCallbackNr); 558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCleanupOutputCallbacks: 563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * clears the entire output callback table. this includes the 565df143a5041f03a22808b59c76698770b74692815Selim Gurun * compiled-in I/O callbacks. 566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCleanupOutputCallbacks(void) 569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int i; 571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlOutputCallbackInitialized) 573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (i = xmlOutputCallbackNr - 1; i >= 0; i--) { 576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputCallbackTable[i].matchcallback = NULL; 577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputCallbackTable[i].opencallback = NULL; 578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputCallbackTable[i].writecallback = NULL; 579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputCallbackTable[i].closecallback = NULL; 580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputCallbackNr = 0; 583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputCallbackInitialized = 0; 584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */ 586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Standard I/O for file accesses * 590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__) 594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlWrapOpenUtf8: 597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @path: the path in utf-8 encoding 598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @mode: type of access (0 - read, 1 - write) 599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * function opens the file specified by @path 601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic FILE* 604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlWrapOpenUtf8(const char *path,int mode) 605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project FILE *fd = NULL; 607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project wchar_t *wPath; 608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project wPath = __xmlIOWin32UTF8ToWChar(path); 610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if(wPath) 611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project { 612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fd = _wfopen(wPath, mode ? L"wb" : L"rb"); 613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(wPath); 614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* maybe path in native encoding */ 616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if(fd == NULL) 617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fd = fopen(path, mode ? "wb" : "rb"); 618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return fd; 620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 622df143a5041f03a22808b59c76698770b74692815Selim Gurun#ifdef HAVE_ZLIB_H 623df143a5041f03a22808b59c76698770b74692815Selim Gurunstatic gzFile 624df143a5041f03a22808b59c76698770b74692815Selim GurunxmlWrapGzOpenUtf8(const char *path, const char *mode) 625df143a5041f03a22808b59c76698770b74692815Selim Gurun{ 626df143a5041f03a22808b59c76698770b74692815Selim Gurun gzFile fd; 627df143a5041f03a22808b59c76698770b74692815Selim Gurun wchar_t *wPath; 628df143a5041f03a22808b59c76698770b74692815Selim Gurun 629df143a5041f03a22808b59c76698770b74692815Selim Gurun fd = gzopen (path, mode); 630df143a5041f03a22808b59c76698770b74692815Selim Gurun if (fd) 631df143a5041f03a22808b59c76698770b74692815Selim Gurun return fd; 632df143a5041f03a22808b59c76698770b74692815Selim Gurun 633df143a5041f03a22808b59c76698770b74692815Selim Gurun wPath = __xmlIOWin32UTF8ToWChar(path); 634df143a5041f03a22808b59c76698770b74692815Selim Gurun if(wPath) 635df143a5041f03a22808b59c76698770b74692815Selim Gurun { 636df143a5041f03a22808b59c76698770b74692815Selim Gurun int d, m = (strstr(mode, "r") ? O_RDONLY : O_RDWR); 637df143a5041f03a22808b59c76698770b74692815Selim Gurun#ifdef _O_BINARY 638df143a5041f03a22808b59c76698770b74692815Selim Gurun m |= (strstr(mode, "b") ? _O_BINARY : 0); 639df143a5041f03a22808b59c76698770b74692815Selim Gurun#endif 640df143a5041f03a22808b59c76698770b74692815Selim Gurun d = _wopen(wPath, m); 641df143a5041f03a22808b59c76698770b74692815Selim Gurun if (d >= 0) 642df143a5041f03a22808b59c76698770b74692815Selim Gurun fd = gzdopen(d, mode); 643df143a5041f03a22808b59c76698770b74692815Selim Gurun xmlFree(wPath); 644df143a5041f03a22808b59c76698770b74692815Selim Gurun } 645df143a5041f03a22808b59c76698770b74692815Selim Gurun 646df143a5041f03a22808b59c76698770b74692815Selim Gurun return fd; 647df143a5041f03a22808b59c76698770b74692815Selim Gurun} 648df143a5041f03a22808b59c76698770b74692815Selim Gurun#endif 649df143a5041f03a22808b59c76698770b74692815Selim Gurun 650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlWrapStatUtf8: 652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @path: the path in utf-8 encoding 653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @info: structure that stores results 654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * function obtains information about the file or directory 656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlWrapStatUtf8(const char *path,struct stat *info) 660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_STAT 662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int retval = -1; 663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project wchar_t *wPath; 664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project wPath = __xmlIOWin32UTF8ToWChar(path); 666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (wPath) 667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project { 668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project retval = _wstat(wPath,info); 669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(wPath); 670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* maybe path in native encoding */ 672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if(retval < 0) 673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project retval = stat(path,info); 674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return retval; 675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -1; 677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlWrapOpenNative: 682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @path: the path 683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @mode: type of access (0 - read, 1 - write) 684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * function opens the file specified by @path 686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic FILE* 689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlWrapOpenNative(const char *path,int mode) 690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return fopen(path,mode ? "wb" : "rb"); 692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlWrapStatNative: 696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @path: the path 697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @info: structure that stores results 698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * function obtains information about the file or directory 700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlWrapStatNative(const char *path,struct stat *info) 704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_STAT 706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return stat(path,info); 707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -1; 709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef int (* xmlWrapStatFunc) (const char *f, struct stat *s); 713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlWrapStatFunc xmlWrapStat = xmlWrapStatNative; 714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef FILE* (* xmlWrapOpenFunc)(const char *f,int mode); 715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlWrapOpenFunc xmlWrapOpen = xmlWrapOpenNative; 716df143a5041f03a22808b59c76698770b74692815Selim Gurun#ifdef HAVE_ZLIB_H 717df143a5041f03a22808b59c76698770b74692815Selim Guruntypedef gzFile (* xmlWrapGzOpenFunc) (const char *f, const char *mode); 718df143a5041f03a22808b59c76698770b74692815Selim Gurunstatic xmlWrapGzOpenFunc xmlWrapGzOpen = gzopen; 719df143a5041f03a22808b59c76698770b74692815Selim Gurun#endif 720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlInitPlatformSpecificIo: 722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Initialize platform specific features. 724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlInitPlatformSpecificIo(void) 727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project static int xmlPlatformIoInitialized = 0; 729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project OSVERSIONINFO osvi; 730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if(xmlPlatformIoInitialized) 732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project osvi.dwOSVersionInfoSize = sizeof(osvi); 735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if(GetVersionEx(&osvi) && (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)) { 737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlWrapStat = xmlWrapStatUtf8; 738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlWrapOpen = xmlWrapOpenUtf8; 739df143a5041f03a22808b59c76698770b74692815Selim Gurun#ifdef HAVE_ZLIB_H 740df143a5041f03a22808b59c76698770b74692815Selim Gurun xmlWrapGzOpen = xmlWrapGzOpenUtf8; 741df143a5041f03a22808b59c76698770b74692815Selim Gurun#endif 742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlWrapStat = xmlWrapStatNative; 744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlWrapOpen = xmlWrapOpenNative; 745df143a5041f03a22808b59c76698770b74692815Selim Gurun#ifdef HAVE_ZLIB_H 746df143a5041f03a22808b59c76698770b74692815Selim Gurun xmlWrapGzOpen = gzopen; 747df143a5041f03a22808b59c76698770b74692815Selim Gurun#endif 748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlPlatformIoInitialized = 1; 751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCheckFilename: 758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @path: the path to check 759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * function checks to see if @path is a valid source 761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * (file, socket...) for XML. 762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * if stat is not available on the target machine, 764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * returns 1. if stat fails, returns 0 (if calling 765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * stat on the filename fails, it can't be right). 766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * if stat succeeds and the file is a directory, 767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * returns 2. otherwise returns 1. 768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCheckFilename (const char *path) 772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_STAT 77494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun struct stat stat_buffer; 775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 77694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun if (path == NULL) 77794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun return(0); 778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_STAT 780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__) 78194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun /* 78294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * On Windows stat and wstat do not work with long pathname, 78394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * which start with '\\?\' 78494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun */ 78594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun if ((path[0] == '\\') && (path[1] == '\\') && (path[2] == '?') && 78694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun (path[3] == '\\') ) 78794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun return 1; 78894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun 789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlWrapStat(path, &stat_buffer) == -1) 790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 0; 791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (stat(path, &stat_buffer) == -1) 793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 0; 794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef S_ISDIR 796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (S_ISDIR(stat_buffer.st_mode)) 797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 2; 798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* HAVE_STAT */ 800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 1; 801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 80394442ad4107000e6d49f9b85a46a591495a57632Selim Gurunint 804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlNop(void) { 805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlFdRead: 810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @context: the I/O context 811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buffer: where to drop data 812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @len: number of bytes to read 813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Read @len bytes to @buffer from the I/O channel. 815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of bytes written 817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlFdRead (void * context, char * buffer, int len) { 820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret; 821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = read((int) (long) context, &buffer[0], len); 823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret < 0) xmlIOErr(0, "read()"); 824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlFdWrite: 830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @context: the I/O context 831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buffer: where to get data 832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @len: number of bytes to write 833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Write @len bytes from @buffer to the I/O channel. 835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of bytes written 837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlFdWrite (void * context, const char * buffer, int len) { 840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret = 0; 841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len > 0) { 843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = write((int) (long) context, &buffer[0], len); 844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret < 0) xmlIOErr(0, "write()"); 845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */ 849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlFdClose: 852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @context: the I/O context 853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Close an I/O channel 855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 in case of success and error code otherwise 857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlFdClose (void * context) { 860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret; 861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = close((int) (long) context); 862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret < 0) xmlIOErr(0, "close()"); 863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlFileMatch: 868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: the URI for matching 869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * input from FILE * 871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 1 if matches, 0 otherwise 873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlFileMatch (const char *filename ATTRIBUTE_UNUSED) { 876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlFileOpen_real: 881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: the URI for matching 882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * input from FILE *, supports compressed input 884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * if @filename is " " then the standard input is used 885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns an I/O context or NULL in case of error 887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void * 889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlFileOpen_real (const char *filename) { 890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *path = NULL; 891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project FILE *fd; 892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (filename == NULL) 894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!strcmp(filename, "-")) { 897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fd = stdin; 898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return((void *) fd); 899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file://localhost/", 17)) { 902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__) 903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = &filename[17]; 904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = &filename[16]; 906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file:///", 8)) { 908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__) 909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = &filename[8]; 910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = &filename[7]; 912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file:/", 6)) { 914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* lots of generators seems to lazy to read RFC 1738 */ 915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__) 916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = &filename[6]; 917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = &filename[5]; 919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 920df143a5041f03a22808b59c76698770b74692815Selim Gurun } else 921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = filename; 922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (path == NULL) 924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlCheckFilename(path)) 926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__) 929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fd = xmlWrapOpen(path, 0); 930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fd = fopen(path, "r"); 932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* WIN32 */ 933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (fd == NULL) xmlIOErr(0, path); 934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return((void *) fd); 935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlFileOpen: 939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: the URI for matching 940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Wrapper around xmlFileOpen_real that try it with an unescaped 942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * version of @filename, if this fails fallback to @filename 943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns a handler or NULL in case or failure 945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid * 947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlFileOpen (const char *filename) { 948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char *unescaped; 949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void *retval; 950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project retval = xmlFileOpen_real(filename); 952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (retval == NULL) { 953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unescaped = xmlURIUnescapeString(filename, 0, NULL); 954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (unescaped != NULL) { 955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project retval = xmlFileOpen_real(unescaped); 956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(unescaped); 957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return retval; 961ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlFileOpenW: 966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: the URI for matching 967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * output to from FILE *, 969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * if @filename is "-" then the standard output is used 970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns an I/O context or NULL in case of error 972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void * 974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlFileOpenW (const char *filename) { 975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *path = NULL; 976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project FILE *fd; 977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!strcmp(filename, "-")) { 979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fd = stdout; 980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return((void *) fd); 981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file://localhost/", 17)) 984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__) 985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = &filename[17]; 986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = &filename[16]; 988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file:///", 8)) { 990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__) 991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = &filename[8]; 992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = &filename[7]; 994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 995df143a5041f03a22808b59c76698770b74692815Selim Gurun } else 996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = filename; 997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (path == NULL) 999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 1000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__) 1002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fd = xmlWrapOpen(path, 1); 1003ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 100494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun fd = fopen(path, "wb"); 1005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* WIN32 */ 1006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (fd == NULL) xmlIOErr(0, path); 1008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return((void *) fd); 1009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */ 1011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1012ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlFileRead: 1014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @context: the I/O context 1015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buffer: where to drop data 1016ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @len: number of bytes to write 1017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1018ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Read @len bytes to @buffer from the I/O channel. 1019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1020ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of bytes written or < 0 in case of failure 1021ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1022ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 1023ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlFileRead (void * context, char * buffer, int len) { 1024ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret; 1025df143a5041f03a22808b59c76698770b74692815Selim Gurun if ((context == NULL) || (buffer == NULL)) 1026ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 1027ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = fread(&buffer[0], 1, len, (FILE *) context); 1028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret < 0) xmlIOErr(0, "fread()"); 1029ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 1030ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1031ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1032ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 1033ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1034ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlFileWrite: 1035ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @context: the I/O context 1036ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buffer: where to drop data 1037ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @len: number of bytes to write 1038ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1039ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Write @len bytes from @buffer to the I/O channel. 1040ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1041ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of bytes written 1042ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1043ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 1044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlFileWrite (void * context, const char * buffer, int len) { 1045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int items; 1046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1047df143a5041f03a22808b59c76698770b74692815Selim Gurun if ((context == NULL) || (buffer == NULL)) 1048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 1049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project items = fwrite(&buffer[0], len, 1, (FILE *) context); 1050ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((items == 0) && (ferror((FILE *) context))) { 1051ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErr(0, "fwrite()"); 1052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 1053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(items * len); 1055ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */ 1057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlFileClose: 1060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @context: the I/O context 1061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1062ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Close an I/O channel 1063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 or -1 in case of error 1065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1066ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 1067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlFileClose (void * context) { 1068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project FILE *fil; 1069ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret; 1070ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1071ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (context == NULL) 1072ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 1073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fil = (FILE *) context; 1074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((fil == stdout) || (fil == stderr)) { 1075ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = fflush(fil); 1076ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret < 0) 1077ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErr(0, "fflush()"); 1078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 1079ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (fil == stdin) 1081ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 1082ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = ( fclose((FILE *) context) == EOF ) ? -1 : 0; 1083ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret < 0) 1084ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErr(0, "fclose()"); 1085ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 1086ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1087ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1089ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlFileFlush: 1090ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @context: the I/O context 1091ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1092ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Flush an I/O channel 1093ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1094ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 1095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlFileFlush (void * context) { 1096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret; 1097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (context == NULL) 1099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 1100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = ( fflush((FILE *) context) == EOF ) ? -1 : 0; 1101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret < 0) 1102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErr(0, "fflush()"); 1103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 1104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 1107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlBufferWrite: 1109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @context: the xmlBuffer 1110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buffer: the data to write 1111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @len: number of bytes to write 1112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Write @len bytes from @buffer to the xml buffer 1114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of bytes written 1116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 1118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlBufferWrite (void * context, const char * buffer, int len) { 1119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret; 1120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlBufferAdd((xmlBufferPtr) context, (const xmlChar *) buffer, len); 1122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != 0) 1123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 1124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(len); 1125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 1127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_ZLIB_H 1129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 1130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 1131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * I/O for compressed file accesses * 1132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 1133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 1134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlGzfileMatch: 1136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: the URI for matching 1137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * input from compressed file test 1139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 1 if matches, 0 otherwise 1141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 1143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlGzfileMatch (const char *filename ATTRIBUTE_UNUSED) { 1144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 1145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlGzfileOpen_real: 1149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: the URI for matching 1150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * input from compressed file open 1152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * if @filename is " " then the standard input is used 1153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns an I/O context or NULL in case of error 1155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void * 1157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlGzfileOpen_real (const char *filename) { 1158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *path = NULL; 1159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project gzFile fd; 1160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!strcmp(filename, "-")) { 1162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fd = gzdopen(dup(0), "rb"); 1163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return((void *) fd); 1164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file://localhost/", 17)) 1167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__) 1168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = &filename[17]; 1169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 1170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = &filename[16]; 1171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 1172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file:///", 8)) { 1173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__) 1174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = &filename[8]; 1175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 1176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = &filename[7]; 1177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 1178df143a5041f03a22808b59c76698770b74692815Selim Gurun } else 1179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = filename; 1180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (path == NULL) 1182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 1183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlCheckFilename(path)) 1184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 1185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1186df143a5041f03a22808b59c76698770b74692815Selim Gurun#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__) 1187df143a5041f03a22808b59c76698770b74692815Selim Gurun fd = xmlWrapGzOpen(path, "rb"); 1188df143a5041f03a22808b59c76698770b74692815Selim Gurun#else 1189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fd = gzopen(path, "rb"); 1190df143a5041f03a22808b59c76698770b74692815Selim Gurun#endif 1191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return((void *) fd); 1192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlGzfileOpen: 1196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: the URI for matching 1197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Wrapper around xmlGzfileOpen if the open fais, it will 1199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * try to unescape @filename 1200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void * 1202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlGzfileOpen (const char *filename) { 1203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char *unescaped; 1204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void *retval; 1205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project retval = xmlGzfileOpen_real(filename); 1207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (retval == NULL) { 1208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unescaped = xmlURIUnescapeString(filename, 0, NULL); 1209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (unescaped != NULL) { 1210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project retval = xmlGzfileOpen_real(unescaped); 1211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(unescaped); 1213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return retval; 1215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 1218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlGzfileOpenW: 1220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: the URI for matching 1221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @compression: the compression factor (0 - 9 included) 1222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * input from compressed file open 1224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * if @filename is " " then the standard input is used 1225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns an I/O context or NULL in case of error 1227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void * 1229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlGzfileOpenW (const char *filename, int compression) { 1230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *path = NULL; 1231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char mode[15]; 1232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project gzFile fd; 1233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf(mode, sizeof(mode), "wb%d", compression); 1235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!strcmp(filename, "-")) { 1236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fd = gzdopen(dup(1), mode); 1237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return((void *) fd); 1238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file://localhost/", 17)) 1241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__) 1242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = &filename[17]; 1243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 1244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = &filename[16]; 1245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 1246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file:///", 8)) { 1247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__) 1248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = &filename[8]; 1249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 1250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = &filename[7]; 1251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 1252df143a5041f03a22808b59c76698770b74692815Selim Gurun } else 1253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = filename; 1254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (path == NULL) 1256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 1257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1258df143a5041f03a22808b59c76698770b74692815Selim Gurun#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__) 1259df143a5041f03a22808b59c76698770b74692815Selim Gurun fd = xmlWrapGzOpen(path, mode); 1260df143a5041f03a22808b59c76698770b74692815Selim Gurun#else 1261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fd = gzopen(path, mode); 1262df143a5041f03a22808b59c76698770b74692815Selim Gurun#endif 1263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return((void *) fd); 1264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */ 1266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlGzfileRead: 1269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @context: the I/O context 1270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buffer: where to drop data 1271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @len: number of bytes to write 1272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Read @len bytes to @buffer from the compressed I/O channel. 1274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of bytes written 1276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 1278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlGzfileRead (void * context, char * buffer, int len) { 1279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret; 1280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = gzread((gzFile) context, &buffer[0], len); 1282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret < 0) xmlIOErr(0, "gzread()"); 1283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 1284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 1287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlGzfileWrite: 1289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @context: the I/O context 1290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buffer: where to drop data 1291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @len: number of bytes to write 1292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Write @len bytes from @buffer to the compressed I/O channel. 1294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of bytes written 1296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 1298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlGzfileWrite (void * context, const char * buffer, int len) { 1299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret; 1300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = gzwrite((gzFile) context, (char *) &buffer[0], len); 1302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret < 0) xmlIOErr(0, "gzwrite()"); 1303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 1304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */ 1306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlGzfileClose: 1309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @context: the I/O context 1310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Close a compressed I/O channel 1312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 1314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlGzfileClose (void * context) { 1315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret; 1316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = (gzclose((gzFile) context) == Z_OK ) ? 0 : -1; 1318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret < 0) xmlIOErr(0, "gzclose()"); 1319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 1320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* HAVE_ZLIB_H */ 1322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1323df143a5041f03a22808b59c76698770b74692815Selim Gurun#ifdef HAVE_LZMA_H 1324df143a5041f03a22808b59c76698770b74692815Selim Gurun/************************************************************************ 1325df143a5041f03a22808b59c76698770b74692815Selim Gurun * * 1326df143a5041f03a22808b59c76698770b74692815Selim Gurun * I/O for compressed file accesses * 1327df143a5041f03a22808b59c76698770b74692815Selim Gurun * * 1328df143a5041f03a22808b59c76698770b74692815Selim Gurun ************************************************************************/ 1329df143a5041f03a22808b59c76698770b74692815Selim Gurun#include "xzlib.h" 1330df143a5041f03a22808b59c76698770b74692815Selim Gurun/** 1331df143a5041f03a22808b59c76698770b74692815Selim Gurun * xmlXzfileMatch: 1332df143a5041f03a22808b59c76698770b74692815Selim Gurun * @filename: the URI for matching 1333df143a5041f03a22808b59c76698770b74692815Selim Gurun * 1334df143a5041f03a22808b59c76698770b74692815Selim Gurun * input from compressed file test 1335df143a5041f03a22808b59c76698770b74692815Selim Gurun * 1336df143a5041f03a22808b59c76698770b74692815Selim Gurun * Returns 1 if matches, 0 otherwise 1337df143a5041f03a22808b59c76698770b74692815Selim Gurun */ 1338df143a5041f03a22808b59c76698770b74692815Selim Gurunstatic int 1339df143a5041f03a22808b59c76698770b74692815Selim GurunxmlXzfileMatch (const char *filename ATTRIBUTE_UNUSED) { 1340df143a5041f03a22808b59c76698770b74692815Selim Gurun return(1); 1341df143a5041f03a22808b59c76698770b74692815Selim Gurun} 1342df143a5041f03a22808b59c76698770b74692815Selim Gurun 1343df143a5041f03a22808b59c76698770b74692815Selim Gurun/** 1344df143a5041f03a22808b59c76698770b74692815Selim Gurun * xmlXzFileOpen_real: 1345df143a5041f03a22808b59c76698770b74692815Selim Gurun * @filename: the URI for matching 1346df143a5041f03a22808b59c76698770b74692815Selim Gurun * 1347df143a5041f03a22808b59c76698770b74692815Selim Gurun * input from compressed file open 1348df143a5041f03a22808b59c76698770b74692815Selim Gurun * if @filename is " " then the standard input is used 1349df143a5041f03a22808b59c76698770b74692815Selim Gurun * 1350df143a5041f03a22808b59c76698770b74692815Selim Gurun * Returns an I/O context or NULL in case of error 1351df143a5041f03a22808b59c76698770b74692815Selim Gurun */ 1352df143a5041f03a22808b59c76698770b74692815Selim Gurunstatic void * 1353df143a5041f03a22808b59c76698770b74692815Selim GurunxmlXzfileOpen_real (const char *filename) { 1354df143a5041f03a22808b59c76698770b74692815Selim Gurun const char *path = NULL; 1355df143a5041f03a22808b59c76698770b74692815Selim Gurun xzFile fd; 1356df143a5041f03a22808b59c76698770b74692815Selim Gurun 1357df143a5041f03a22808b59c76698770b74692815Selim Gurun if (!strcmp(filename, "-")) { 1358df143a5041f03a22808b59c76698770b74692815Selim Gurun fd = __libxml2_xzdopen(dup(0), "rb"); 1359df143a5041f03a22808b59c76698770b74692815Selim Gurun return((void *) fd); 1360df143a5041f03a22808b59c76698770b74692815Selim Gurun } 1361df143a5041f03a22808b59c76698770b74692815Selim Gurun 1362df143a5041f03a22808b59c76698770b74692815Selim Gurun if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file://localhost/", 17)) { 1363df143a5041f03a22808b59c76698770b74692815Selim Gurun path = &filename[16]; 1364df143a5041f03a22808b59c76698770b74692815Selim Gurun } else if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file:///", 8)) { 1365df143a5041f03a22808b59c76698770b74692815Selim Gurun path = &filename[7]; 1366df143a5041f03a22808b59c76698770b74692815Selim Gurun } else if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file:/", 6)) { 1367df143a5041f03a22808b59c76698770b74692815Selim Gurun /* lots of generators seems to lazy to read RFC 1738 */ 1368df143a5041f03a22808b59c76698770b74692815Selim Gurun path = &filename[5]; 1369df143a5041f03a22808b59c76698770b74692815Selim Gurun } else 1370df143a5041f03a22808b59c76698770b74692815Selim Gurun path = filename; 1371df143a5041f03a22808b59c76698770b74692815Selim Gurun 1372df143a5041f03a22808b59c76698770b74692815Selim Gurun if (path == NULL) 1373df143a5041f03a22808b59c76698770b74692815Selim Gurun return(NULL); 1374df143a5041f03a22808b59c76698770b74692815Selim Gurun if (!xmlCheckFilename(path)) 1375df143a5041f03a22808b59c76698770b74692815Selim Gurun return(NULL); 1376df143a5041f03a22808b59c76698770b74692815Selim Gurun 1377df143a5041f03a22808b59c76698770b74692815Selim Gurun fd = __libxml2_xzopen(path, "rb"); 1378df143a5041f03a22808b59c76698770b74692815Selim Gurun return((void *) fd); 1379df143a5041f03a22808b59c76698770b74692815Selim Gurun} 1380df143a5041f03a22808b59c76698770b74692815Selim Gurun 1381df143a5041f03a22808b59c76698770b74692815Selim Gurun/** 1382df143a5041f03a22808b59c76698770b74692815Selim Gurun * xmlXzfileOpen: 1383df143a5041f03a22808b59c76698770b74692815Selim Gurun * @filename: the URI for matching 1384df143a5041f03a22808b59c76698770b74692815Selim Gurun * 1385df143a5041f03a22808b59c76698770b74692815Selim Gurun * Wrapper around xmlXzfileOpen_real that try it with an unescaped 1386df143a5041f03a22808b59c76698770b74692815Selim Gurun * version of @filename, if this fails fallback to @filename 1387df143a5041f03a22808b59c76698770b74692815Selim Gurun * 1388df143a5041f03a22808b59c76698770b74692815Selim Gurun * Returns a handler or NULL in case or failure 1389df143a5041f03a22808b59c76698770b74692815Selim Gurun */ 1390df143a5041f03a22808b59c76698770b74692815Selim Gurunstatic void * 1391df143a5041f03a22808b59c76698770b74692815Selim GurunxmlXzfileOpen (const char *filename) { 1392df143a5041f03a22808b59c76698770b74692815Selim Gurun char *unescaped; 1393df143a5041f03a22808b59c76698770b74692815Selim Gurun void *retval; 1394df143a5041f03a22808b59c76698770b74692815Selim Gurun 1395df143a5041f03a22808b59c76698770b74692815Selim Gurun retval = xmlXzfileOpen_real(filename); 1396df143a5041f03a22808b59c76698770b74692815Selim Gurun if (retval == NULL) { 1397df143a5041f03a22808b59c76698770b74692815Selim Gurun unescaped = xmlURIUnescapeString(filename, 0, NULL); 1398df143a5041f03a22808b59c76698770b74692815Selim Gurun if (unescaped != NULL) { 1399df143a5041f03a22808b59c76698770b74692815Selim Gurun retval = xmlXzfileOpen_real(unescaped); 1400df143a5041f03a22808b59c76698770b74692815Selim Gurun } 1401df143a5041f03a22808b59c76698770b74692815Selim Gurun xmlFree(unescaped); 1402df143a5041f03a22808b59c76698770b74692815Selim Gurun } 1403df143a5041f03a22808b59c76698770b74692815Selim Gurun 1404df143a5041f03a22808b59c76698770b74692815Selim Gurun return retval; 1405df143a5041f03a22808b59c76698770b74692815Selim Gurun} 1406df143a5041f03a22808b59c76698770b74692815Selim Gurun 1407df143a5041f03a22808b59c76698770b74692815Selim Gurun/** 1408df143a5041f03a22808b59c76698770b74692815Selim Gurun * xmlXzfileRead: 1409df143a5041f03a22808b59c76698770b74692815Selim Gurun * @context: the I/O context 1410df143a5041f03a22808b59c76698770b74692815Selim Gurun * @buffer: where to drop data 1411df143a5041f03a22808b59c76698770b74692815Selim Gurun * @len: number of bytes to write 1412df143a5041f03a22808b59c76698770b74692815Selim Gurun * 1413df143a5041f03a22808b59c76698770b74692815Selim Gurun * Read @len bytes to @buffer from the compressed I/O channel. 1414df143a5041f03a22808b59c76698770b74692815Selim Gurun * 1415df143a5041f03a22808b59c76698770b74692815Selim Gurun * Returns the number of bytes written 1416df143a5041f03a22808b59c76698770b74692815Selim Gurun */ 1417df143a5041f03a22808b59c76698770b74692815Selim Gurunstatic int 1418df143a5041f03a22808b59c76698770b74692815Selim GurunxmlXzfileRead (void * context, char * buffer, int len) { 1419df143a5041f03a22808b59c76698770b74692815Selim Gurun int ret; 1420df143a5041f03a22808b59c76698770b74692815Selim Gurun 1421df143a5041f03a22808b59c76698770b74692815Selim Gurun ret = __libxml2_xzread((xzFile) context, &buffer[0], len); 1422df143a5041f03a22808b59c76698770b74692815Selim Gurun if (ret < 0) xmlIOErr(0, "xzread()"); 1423df143a5041f03a22808b59c76698770b74692815Selim Gurun return(ret); 1424df143a5041f03a22808b59c76698770b74692815Selim Gurun} 1425df143a5041f03a22808b59c76698770b74692815Selim Gurun 1426df143a5041f03a22808b59c76698770b74692815Selim Gurun/** 1427df143a5041f03a22808b59c76698770b74692815Selim Gurun * xmlXzfileClose: 1428df143a5041f03a22808b59c76698770b74692815Selim Gurun * @context: the I/O context 1429df143a5041f03a22808b59c76698770b74692815Selim Gurun * 1430df143a5041f03a22808b59c76698770b74692815Selim Gurun * Close a compressed I/O channel 1431df143a5041f03a22808b59c76698770b74692815Selim Gurun */ 1432df143a5041f03a22808b59c76698770b74692815Selim Gurunstatic int 1433df143a5041f03a22808b59c76698770b74692815Selim GurunxmlXzfileClose (void * context) { 1434df143a5041f03a22808b59c76698770b74692815Selim Gurun int ret; 1435df143a5041f03a22808b59c76698770b74692815Selim Gurun 1436df143a5041f03a22808b59c76698770b74692815Selim Gurun ret = (__libxml2_xzclose((xzFile) context) == LZMA_OK ) ? 0 : -1; 1437df143a5041f03a22808b59c76698770b74692815Selim Gurun if (ret < 0) xmlIOErr(0, "xzclose()"); 1438df143a5041f03a22808b59c76698770b74692815Selim Gurun return(ret); 1439df143a5041f03a22808b59c76698770b74692815Selim Gurun} 1440df143a5041f03a22808b59c76698770b74692815Selim Gurun#endif /* HAVE_LZMA_H */ 1441df143a5041f03a22808b59c76698770b74692815Selim Gurun 1442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_HTTP_ENABLED 1443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 1444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 1445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * I/O for HTTP file accesses * 1446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 1447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 1448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 1450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef struct xmlIOHTTPWriteCtxt_ 1451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 1452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int compression; 1453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char * uri; 1455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void * doc_buff; 1457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} xmlIOHTTPWriteCtxt, *xmlIOHTTPWriteCtxtPtr; 1459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_ZLIB_H 1461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define DFLT_WBITS ( -15 ) 1463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define DFLT_MEM_LVL ( 8 ) 1464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define GZ_MAGIC1 ( 0x1f ) 1465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define GZ_MAGIC2 ( 0x8b ) 1466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define LXML_ZLIB_OS_CODE ( 0x03 ) 1467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define INIT_HTTP_BUFF_SIZE ( 32768 ) 1468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define DFLT_ZLIB_RATIO ( 5 ) 1469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* 1471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project** Data structure and functions to work with sending compressed data 1472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project** via HTTP. 1473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project*/ 1474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef struct xmlZMemBuff_ 1476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 1477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned long size; 1478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned long crc; 1479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned char * zbuff; 1481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project z_stream zctrl; 1482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} xmlZMemBuff, *xmlZMemBuffPtr; 1484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * append_reverse_ulong 1487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buff: Compressed memory buffer 1488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @data: Unsigned long to append 1489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Append a unsigned long in reverse byte order to the end of the 1491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * memory buffer. 1492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 1494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectappend_reverse_ulong( xmlZMemBuff * buff, unsigned long data ) { 1495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int idx; 1497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( buff == NULL ) 1499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 1500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ** This is plagiarized from putLong in gzio.c (zlib source) where 1503df143a5041f03a22808b59c76698770b74692815Selim Gurun ** the number "4" is hardcoded. If zlib is ever patched to 1504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ** support 64 bit file sizes, this code would need to be patched 1505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ** as well. 1506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for ( idx = 0; idx < 4; idx++ ) { 1509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *buff->zctrl.next_out = ( data & 0xff ); 1510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project data >>= 8; 1511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buff->zctrl.next_out++; 1512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 1515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlFreeZMemBuff 1520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buff: The memory buffer context to clear 1521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Release all the resources associated with the compressed memory buffer. 1523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 1525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlFreeZMemBuff( xmlZMemBuffPtr buff ) { 1526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_HTTP 1528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int z_err; 1529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 1530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( buff == NULL ) 1532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 1533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree( buff->zbuff ); 1535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_HTTP 1536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project z_err = deflateEnd( &buff->zctrl ); 1537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( z_err != Z_OK ) 1538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError( xmlGenericErrorContext, 1539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xmlFreeZMemBuff: Error releasing zlib context: %d\n", 1540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project z_err ); 1541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 1542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project deflateEnd( &buff->zctrl ); 1543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 1544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree( buff ); 1546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 1547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCreateZMemBuff 1551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *@compression: Compression value to use 1552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Create a memory buffer to hold the compressed XML document. The 1554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * compressed document in memory will end up being identical to what 1555df143a5041f03a22808b59c76698770b74692815Selim Gurun * would be created if gzopen/gzwrite/gzclose were being used to 1556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * write the document to disk. The code for the header/trailer data to 1557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the compression is plagiarized from the zlib source files. 1558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void * 1560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCreateZMemBuff( int compression ) { 1561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int z_err; 1563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int hdr_lgth; 1564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlZMemBuffPtr buff = NULL; 1565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( ( compression < 1 ) || ( compression > 9 ) ) 1567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ( NULL ); 1568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Create the control and data areas */ 1570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buff = xmlMalloc( sizeof( xmlZMemBuff ) ); 1572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( buff == NULL ) { 1573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErrMemory("creating buffer context"); 1574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ( NULL ); 1575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (void)memset( buff, 0, sizeof( xmlZMemBuff ) ); 1578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buff->size = INIT_HTTP_BUFF_SIZE; 1579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buff->zbuff = xmlMalloc( buff->size ); 1580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( buff->zbuff == NULL ) { 1581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeZMemBuff( buff ); 1582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErrMemory("creating buffer"); 1583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ( NULL ); 1584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project z_err = deflateInit2( &buff->zctrl, compression, Z_DEFLATED, 1587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project DFLT_WBITS, DFLT_MEM_LVL, Z_DEFAULT_STRATEGY ); 1588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( z_err != Z_OK ) { 1589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar msg[500]; 1590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeZMemBuff( buff ); 1591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buff = NULL; 1592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlStrPrintf(msg, 500, 1593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (const xmlChar *) "xmlCreateZMemBuff: %s %d\n", 1594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Error initializing compression context. ZLIB error:", 1595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project z_err ); 1596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErr(XML_IO_WRITE, (const char *) msg); 1597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ( NULL ); 1598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Set the header data. The CRC will be needed for the trailer */ 1601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buff->crc = crc32( 0L, NULL, 0 ); 1602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project hdr_lgth = snprintf( (char *)buff->zbuff, buff->size, 1603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "%c%c%c%c%c%c%c%c%c%c", 1604df143a5041f03a22808b59c76698770b74692815Selim Gurun GZ_MAGIC1, GZ_MAGIC2, Z_DEFLATED, 1605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 0, 0, 0, 0, 0, 0, LXML_ZLIB_OS_CODE ); 1606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buff->zctrl.next_out = buff->zbuff + hdr_lgth; 1607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buff->zctrl.avail_out = buff->size - hdr_lgth; 1608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ( buff ); 1610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlZMemBuffExtend 1614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buff: Buffer used to compress and consolidate data. 1615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ext_amt: Number of bytes to extend the buffer. 1616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Extend the internal buffer used to store the compressed data by the 1618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * specified amount. 1619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 on success or -1 on failure to extend the buffer. On failure 1621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the original buffer still exists at the original size. 1622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 1624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlZMemBuffExtend( xmlZMemBuffPtr buff, size_t ext_amt ) { 1625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int rc = -1; 1627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project size_t new_size; 1628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project size_t cur_used; 1629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned char * tmp_ptr = NULL; 1631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( buff == NULL ) 1633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ( -1 ); 1634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if ( ext_amt == 0 ) 1636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ( 0 ); 1637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur_used = buff->zctrl.next_out - buff->zbuff; 1639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project new_size = buff->size + ext_amt; 1640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_HTTP 1642df143a5041f03a22808b59c76698770b74692815Selim Gurun if ( cur_used > new_size ) 1643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError( xmlGenericErrorContext, 1644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xmlZMemBuffExtend: %s\n%s %d bytes.\n", 1645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Buffer overwrite detected during compressed memory", 1646df143a5041f03a22808b59c76698770b74692815Selim Gurun "buffer extension. Overflowed by", 1647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (cur_used - new_size ) ); 1648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 1649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp_ptr = xmlRealloc( buff->zbuff, new_size ); 1651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( tmp_ptr != NULL ) { 1652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project rc = 0; 1653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buff->size = new_size; 1654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buff->zbuff = tmp_ptr; 1655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buff->zctrl.next_out = tmp_ptr + cur_used; 1656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buff->zctrl.avail_out = new_size - cur_used; 1657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 1659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar msg[500]; 1660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlStrPrintf(msg, 500, 1661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (const xmlChar *) "xmlZMemBuffExtend: %s %lu bytes.\n", 1662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Allocation failure extending output buffer to", 1663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project new_size ); 1664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErr(XML_IO_WRITE, (const char *) msg); 1665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ( rc ); 1668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlZMemBuffAppend 1672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buff: Buffer used to compress and consolidate data 1673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @src: Uncompressed source content to append to buffer 1674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @len: Length of source data to append to buffer 1675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Compress and append data to the internal buffer. The data buffer 1677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * will be expanded if needed to store the additional data. 1678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of bytes appended to the buffer or -1 on error. 1680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 1682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlZMemBuffAppend( xmlZMemBuffPtr buff, const char * src, int len ) { 1683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int z_err; 1685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project size_t min_accept; 1686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( ( buff == NULL ) || ( src == NULL ) ) 1688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ( -1 ); 1689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buff->zctrl.avail_in = len; 1691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buff->zctrl.next_in = (unsigned char *)src; 1692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ( buff->zctrl.avail_in > 0 ) { 1693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ** Extend the buffer prior to deflate call if a reasonable amount 1695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ** of output buffer space is not available. 1696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project min_accept = buff->zctrl.avail_in / DFLT_ZLIB_RATIO; 1698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( buff->zctrl.avail_out <= min_accept ) { 1699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( xmlZMemBuffExtend( buff, buff->size ) == -1 ) 1700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ( -1 ); 1701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project z_err = deflate( &buff->zctrl, Z_NO_FLUSH ); 1704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( z_err != Z_OK ) { 1705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar msg[500]; 1706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlStrPrintf(msg, 500, 1707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (const xmlChar *) "xmlZMemBuffAppend: %s %d %s - %d", 1708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Compression error while appending", 1709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len, "bytes to buffer. ZLIB error", z_err ); 1710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErr(XML_IO_WRITE, (const char *) msg); 1711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ( -1 ); 1712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buff->crc = crc32( buff->crc, (unsigned char *)src, len ); 1716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ( len ); 1718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlZMemBuffGetContent 1722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buff: Compressed memory content buffer 1723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @data_ref: Pointer reference to point to compressed content 1724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Flushes the compression buffers, appends gzip file trailers and 1726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * returns the compressed content and length of the compressed data. 1727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * NOTE: The gzip trailer code here is plagiarized from zlib source. 1728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the length of the compressed data or -1 on error. 1730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 1732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlZMemBuffGetContent( xmlZMemBuffPtr buff, char ** data_ref ) { 1733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int zlgth = -1; 1735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int z_err; 1736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( ( buff == NULL ) || ( data_ref == NULL ) ) 1738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ( -1 ); 1739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Need to loop until compression output buffers are flushed */ 1741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project do 1743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project { 1744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project z_err = deflate( &buff->zctrl, Z_FINISH ); 1745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( z_err == Z_OK ) { 1746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* In this case Z_OK means more buffer space needed */ 1747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( xmlZMemBuffExtend( buff, buff->size ) == -1 ) 1749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ( -1 ); 1750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ( z_err == Z_OK ); 1753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* If the compression state is not Z_STREAM_END, some error occurred */ 1755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( z_err == Z_STREAM_END ) { 1757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Need to append the gzip data trailer */ 1759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( buff->zctrl.avail_out < ( 2 * sizeof( unsigned long ) ) ) { 1761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( xmlZMemBuffExtend(buff, (2 * sizeof(unsigned long))) == -1 ) 1762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ( -1 ); 1763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ** For whatever reason, the CRC and length data are pushed out 1767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ** in reverse byte order. So a memcpy can't be used here. 1768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project append_reverse_ulong( buff, buff->crc ); 1771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project append_reverse_ulong( buff, buff->zctrl.total_in ); 1772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project zlgth = buff->zctrl.next_out - buff->zbuff; 1774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *data_ref = (char *)buff->zbuff; 1775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 1778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar msg[500]; 1779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlStrPrintf(msg, 500, 1780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (const xmlChar *) "xmlZMemBuffGetContent: %s - %d\n", 1781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Error flushing zlib buffers. Error code", z_err ); 1782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErr(XML_IO_WRITE, (const char *) msg); 1783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1784df143a5041f03a22808b59c76698770b74692815Selim Gurun 1785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ( zlgth ); 1786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */ 1788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* HAVE_ZLIB_H */ 1789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 1791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlFreeHTTPWriteCtxt 1793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: Context to cleanup 1794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Free allocated memory and reclaim system resources. 1796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * No return value. 1798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 1800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlFreeHTTPWriteCtxt( xmlIOHTTPWriteCtxtPtr ctxt ) 1801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 1802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( ctxt->uri != NULL ) 1803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree( ctxt->uri ); 1804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( ctxt->doc_buff != NULL ) { 1806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_ZLIB_H 1808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( ctxt->compression > 0 ) { 1809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeZMemBuff( ctxt->doc_buff ); 1810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 1812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 1813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project { 1814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputBufferClose( ctxt->doc_buff ); 1815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree( ctxt ); 1819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 1820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */ 1822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlIOHTTPMatch: 1826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: the URI for matching 1827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * check if the URI matches an HTTP one 1829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 1 if matches, 0 otherwise 1831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 1833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlIOHTTPMatch (const char *filename) { 1834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "http://", 7)) 1835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 1836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 1837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlIOHTTPOpen: 1841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: the URI for matching 1842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * open an HTTP I/O channel 1844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns an I/O context or NULL in case of error 1846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid * 1848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlIOHTTPOpen (const char *filename) { 1849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlNanoHTTPOpen(filename, NULL)); 1850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 1853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlIOHTTPOpenW: 1855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @post_uri: The destination URI for the document 1856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @compression: The compression desired for the document. 1857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Open a temporary buffer to collect the document for a subsequent HTTP POST 1859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * request. Non-static as is called from the output buffer creation routine. 1860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns an I/O context or NULL in case of error. 1862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid * 1865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlIOHTTPOpenW(const char *post_uri, int compression) 1866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 1867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOHTTPWriteCtxtPtr ctxt = NULL; 1869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (post_uri == NULL) 1871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 1872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt = xmlMalloc(sizeof(xmlIOHTTPWriteCtxt)); 1874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) { 1875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErrMemory("creating HTTP output context"); 1876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 1877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (void) memset(ctxt, 0, sizeof(xmlIOHTTPWriteCtxt)); 1880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->uri = (char *) xmlStrdup((const xmlChar *)post_uri); 1882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->uri == NULL) { 1883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErrMemory("copying URI"); 1884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeHTTPWriteCtxt(ctxt); 1885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 1886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * ** Since the document length is required for an HTTP post, 1890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * ** need to put the document into a buffer. A memory buffer 1891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * ** is being used to avoid pushing the data to disk and back. 1892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_ZLIB_H 1895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((compression > 0) && (compression <= 9)) { 1896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->compression = compression; 1898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->doc_buff = xmlCreateZMemBuff(compression); 1899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 1900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 1901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project { 1902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Any character conversions should have been done before this */ 1903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 190460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ctxt->doc_buff = xmlAllocOutputBufferInternal(NULL); 1905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->doc_buff == NULL) { 1908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeHTTPWriteCtxt(ctxt); 1909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt = NULL; 1910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (ctxt); 1913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */ 191560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 1916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 1917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlIOHTTPDfltOpenW 1919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @post_uri: The destination URI for this document. 1920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Calls xmlIOHTTPOpenW with no compression to set up for a subsequent 1922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * HTTP post command. This function should generally not be used as 1923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the open callback is short circuited in xmlOutputBufferCreateFile. 1924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns a pointer to the new IO context. 1926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void * 1928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlIOHTTPDfltOpenW( const char * post_uri ) { 1929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ( xmlIOHTTPOpenW( post_uri, 0 ) ); 1930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */ 1932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlIOHTTPRead: 1935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @context: the I/O context 1936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buffer: where to drop data 1937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @len: number of bytes to write 1938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Read @len bytes to @buffer from the I/O channel. 1940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of bytes written 1942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1943df143a5041f03a22808b59c76698770b74692815Selim Gurunint 1944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlIOHTTPRead(void * context, char * buffer, int len) { 1945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((buffer == NULL) || (len < 0)) return(-1); 1946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlNanoHTTPRead(context, &buffer[0], len)); 1947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 1950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlIOHTTPWrite 1952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @context: previously opened writing context 1953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buffer: data to output to temporary buffer 1954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @len: bytes to output 1955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Collect data from memory buffer into a temporary file for later 1957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * processing. 1958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns number of bytes written. 1960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1961ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 1963df143a5041f03a22808b59c76698770b74692815Selim GurunxmlIOHTTPWrite( void * context, const char * buffer, int len ) { 1964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOHTTPWriteCtxtPtr ctxt = context; 1966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( ( ctxt == NULL ) || ( ctxt->doc_buff == NULL ) || ( buffer == NULL ) ) 1968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ( -1 ); 1969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( len > 0 ) { 1971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Use gzwrite or fwrite as previously setup in the open call */ 1973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_ZLIB_H 1975df143a5041f03a22808b59c76698770b74692815Selim Gurun if ( ctxt->compression > 0 ) 1976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = xmlZMemBuffAppend( ctxt->doc_buff, buffer, len ); 1977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 1979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 1980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = xmlOutputBufferWrite( ctxt->doc_buff, len, buffer ); 1981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( len < 0 ) { 1983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar msg[500]; 1984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlStrPrintf(msg, 500, 1985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (const xmlChar *) "xmlIOHTTPWrite: %s\n%s '%s'.\n", 1986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Error appending to internal buffer.", 1987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Error sending document to URI", 1988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->uri ); 1989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErr(XML_IO_WRITE, (const char *) msg); 1990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ( len ); 1994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */ 1996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlIOHTTPClose: 2000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @context: the I/O context 2001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Close an HTTP I/O channel 2003ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2004ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 2005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 2007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlIOHTTPClose (void * context) { 2008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNanoHTTPClose(context); 2009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 0; 2010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2012ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 2013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlIOHTTCloseWrite 2015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @context: The I/O context 2016ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @http_mthd: The HTTP method to be used when sending the data 2017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2018ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Close the transmit HTTP I/O channel and actually send the data. 2019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2020ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 2021ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlIOHTTPCloseWrite( void * context, const char * http_mthd ) { 2022ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2023ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int close_rc = -1; 2024ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int http_rtn = 0; 2025ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int content_lgth = 0; 2026ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOHTTPWriteCtxtPtr ctxt = context; 2027ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char * http_content = NULL; 2029ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char * content_encoding = NULL; 2030ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char * content_type = (char *) "text/xml"; 2031ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void * http_ctxt = NULL; 2032ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2033ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( ( ctxt == NULL ) || ( http_mthd == NULL ) ) 2034ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ( -1 ); 2035ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2036ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Retrieve the content from the appropriate buffer */ 2037ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2038ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_ZLIB_H 2039ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2040ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( ctxt->compression > 0 ) { 2041ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project content_lgth = xmlZMemBuffGetContent( ctxt->doc_buff, &http_content ); 2042ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project content_encoding = (char *) "Content-Encoding: gzip"; 2043ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 2045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 2046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project { 2047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Pull the data out of the memory output buffer */ 2048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputBufferPtr dctxt = ctxt->doc_buff; 205094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun http_content = (char *) xmlBufContent(dctxt->buffer); 205194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun content_lgth = xmlBufUse(dctxt->buffer); 2052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( http_content == NULL ) { 2055ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar msg[500]; 2056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlStrPrintf(msg, 500, 2057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (const xmlChar *) "xmlIOHTTPCloseWrite: %s '%s' %s '%s'.\n", 2058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Error retrieving content.\nUnable to", 2059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project http_mthd, "data to URI", ctxt->uri ); 2060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErr(XML_IO_WRITE, (const char *) msg); 2061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2062ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 2064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project http_ctxt = xmlNanoHTTPMethod( ctxt->uri, http_mthd, http_content, 2066df143a5041f03a22808b59c76698770b74692815Selim Gurun &content_type, content_encoding, 2067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project content_lgth ); 2068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2069ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( http_ctxt != NULL ) { 2070ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_HTTP 2071ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* If testing/debugging - dump reply with request content */ 2072ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project FILE * tst_file = NULL; 2074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char buffer[ 4096 ]; 2075ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char * dump_name = NULL; 2076ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int avail; 2077ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError( xmlGenericErrorContext, 2079ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xmlNanoHTTPCloseWrite: HTTP %s to\n%s returned %d.\n", 2080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project http_mthd, ctxt->uri, 2081ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNanoHTTPReturnCode( http_ctxt ) ); 2082ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2083ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2084ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ** Since either content or reply may be gzipped, 2085df143a5041f03a22808b59c76698770b74692815Selim Gurun ** dump them to separate files instead of the 2086ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ** standard error context. 2087ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2089ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dump_name = tempnam( NULL, "lxml" ); 2090ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( dump_name != NULL ) { 2091ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (void)snprintf( buffer, sizeof(buffer), "%s.content", dump_name ); 2092ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2093ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tst_file = fopen( buffer, "wb" ); 2094ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( tst_file != NULL ) { 2095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError( xmlGenericErrorContext, 2096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Transmitted content saved in file: %s\n", buffer ); 2097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fwrite( http_content, sizeof( char ), 2099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project content_lgth, tst_file ); 2100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fclose( tst_file ); 2101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (void)snprintf( buffer, sizeof(buffer), "%s.reply", dump_name ); 2104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tst_file = fopen( buffer, "wb" ); 2105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( tst_file != NULL ) { 2106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError( xmlGenericErrorContext, 2107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Reply content saved in file: %s\n", buffer ); 2108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ( (avail = xmlNanoHTTPRead( http_ctxt, 2111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buffer, sizeof( buffer ) )) > 0 ) { 2112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fwrite( buffer, sizeof( char ), avail, tst_file ); 2114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fclose( tst_file ); 2117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project free( dump_name ); 2120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* DEBUG_HTTP */ 2122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project http_rtn = xmlNanoHTTPReturnCode( http_ctxt ); 2124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( ( http_rtn >= 200 ) && ( http_rtn < 300 ) ) 2125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project close_rc = 0; 2126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 2127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar msg[500]; 2128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlStrPrintf(msg, 500, 2129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (const xmlChar *) "xmlIOHTTPCloseWrite: HTTP '%s' of %d %s\n'%s' %s %d\n", 2130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project http_mthd, content_lgth, 2131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "bytes to URI", ctxt->uri, 2132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "failed. HTTP return code:", http_rtn ); 2133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErr(XML_IO_WRITE, (const char *) msg); 2134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNanoHTTPClose( http_ctxt ); 2137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree( content_type ); 2138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Final cleanups */ 2142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeHTTPWriteCtxt( ctxt ); 2144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ( close_rc ); 2146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlIOHTTPClosePut 2150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @context: The I/O context 2152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Close the transmit HTTP I/O channel and actually send data using a PUT 2154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * HTTP method. 2155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 2157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlIOHTTPClosePut( void * ctxt ) { 2158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ( xmlIOHTTPCloseWrite( ctxt, "PUT" ) ); 2159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlIOHTTPClosePost 2164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @context: The I/O context 2166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Close the transmit HTTP I/O channel and actually send data using a POST 2168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * HTTP method. 2169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 2171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlIOHTTPClosePost( void * ctxt ) { 2172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ( xmlIOHTTPCloseWrite( ctxt, "POST" ) ); 2173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */ 2175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_HTTP_ENABLED */ 2177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_FTP_ENABLED 2179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 2180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 2181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * I/O for FTP file accesses * 2182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 2183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 2184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlIOFTPMatch: 2186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: the URI for matching 2187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * check if the URI matches an FTP one 2189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 1 if matches, 0 otherwise 2191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 2193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlIOFTPMatch (const char *filename) { 2194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "ftp://", 6)) 2195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 2196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 2197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlIOFTPOpen: 2201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: the URI for matching 2202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * open an FTP I/O channel 2204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns an I/O context or NULL in case of error 2206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid * 2208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlIOFTPOpen (const char *filename) { 2209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlNanoFTPOpen(filename)); 2210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlIOFTPRead: 2214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @context: the I/O context 2215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buffer: where to drop data 2216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @len: number of bytes to write 2217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Read @len bytes to @buffer from the I/O channel. 2219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of bytes written 2221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2222df143a5041f03a22808b59c76698770b74692815Selim Gurunint 2223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlIOFTPRead(void * context, char * buffer, int len) { 2224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((buffer == NULL) || (len < 0)) return(-1); 2225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlNanoFTPRead(context, &buffer[0], len)); 2226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlIOFTPClose: 2230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @context: the I/O context 2231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Close an FTP I/O channel 2233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 2235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 2237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlIOFTPClose (void * context) { 2238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ( xmlNanoFTPClose(context) ); 2239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_FTP_ENABLED */ 2241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlRegisterInputCallbacks: 2245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @matchFunc: the xmlInputMatchCallback 2246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @openFunc: the xmlInputOpenCallback 2247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @readFunc: the xmlInputReadCallback 2248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @closeFunc: the xmlInputCloseCallback 2249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Register a new set of I/O callback for handling parser input. 2251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the registered handler number or -1 in case of error 2253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 2255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlRegisterInputCallbacks(xmlInputMatchCallback matchFunc, 2256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInputOpenCallback openFunc, xmlInputReadCallback readFunc, 2257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInputCloseCallback closeFunc) { 2258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlInputCallbackNr >= MAX_INPUT_CALLBACK) { 2259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 2260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInputCallbackTable[xmlInputCallbackNr].matchcallback = matchFunc; 2262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInputCallbackTable[xmlInputCallbackNr].opencallback = openFunc; 2263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInputCallbackTable[xmlInputCallbackNr].readcallback = readFunc; 2264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInputCallbackTable[xmlInputCallbackNr].closecallback = closeFunc; 2265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInputCallbackInitialized = 1; 2266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlInputCallbackNr++); 2267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 2270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlRegisterOutputCallbacks: 2272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @matchFunc: the xmlOutputMatchCallback 2273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @openFunc: the xmlOutputOpenCallback 2274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @writeFunc: the xmlOutputWriteCallback 2275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @closeFunc: the xmlOutputCloseCallback 2276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Register a new set of I/O callback for handling output. 2278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the registered handler number or -1 in case of error 2280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 2282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlRegisterOutputCallbacks(xmlOutputMatchCallback matchFunc, 2283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputOpenCallback openFunc, xmlOutputWriteCallback writeFunc, 2284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputCloseCallback closeFunc) { 2285df143a5041f03a22808b59c76698770b74692815Selim Gurun if (xmlOutputCallbackNr >= MAX_OUTPUT_CALLBACK) { 2286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 2287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputCallbackTable[xmlOutputCallbackNr].matchcallback = matchFunc; 2289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputCallbackTable[xmlOutputCallbackNr].opencallback = openFunc; 2290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputCallbackTable[xmlOutputCallbackNr].writecallback = writeFunc; 2291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputCallbackTable[xmlOutputCallbackNr].closecallback = closeFunc; 2292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputCallbackInitialized = 1; 2293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlOutputCallbackNr++); 2294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */ 2296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlRegisterDefaultInputCallbacks: 2299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Registers the default compiled-in I/O handlers. 2301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 2303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlRegisterDefaultInputCallbacks(void) { 2304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlInputCallbackInitialized) 2305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 2306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__) 2308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInitPlatformSpecificIo(); 2309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 2310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRegisterInputCallbacks(xmlFileMatch, xmlFileOpen, 2312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFileRead, xmlFileClose); 2313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_ZLIB_H 2314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRegisterInputCallbacks(xmlGzfileMatch, xmlGzfileOpen, 2315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGzfileRead, xmlGzfileClose); 2316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* HAVE_ZLIB_H */ 2317df143a5041f03a22808b59c76698770b74692815Selim Gurun#ifdef HAVE_LZMA_H 2318df143a5041f03a22808b59c76698770b74692815Selim Gurun xmlRegisterInputCallbacks(xmlXzfileMatch, xmlXzfileOpen, 2319df143a5041f03a22808b59c76698770b74692815Selim Gurun xmlXzfileRead, xmlXzfileClose); 2320df143a5041f03a22808b59c76698770b74692815Selim Gurun#endif /* HAVE_ZLIB_H */ 2321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_HTTP_ENABLED 2323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRegisterInputCallbacks(xmlIOHTTPMatch, xmlIOHTTPOpen, 2324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOHTTPRead, xmlIOHTTPClose); 2325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_HTTP_ENABLED */ 2326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_FTP_ENABLED 2328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRegisterInputCallbacks(xmlIOFTPMatch, xmlIOFTPOpen, 2329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOFTPRead, xmlIOFTPClose); 2330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_FTP_ENABLED */ 2331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInputCallbackInitialized = 1; 2332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 2335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlRegisterDefaultOutputCallbacks: 2337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Registers the default compiled-in I/O handlers. 2339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 2341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlRegisterDefaultOutputCallbacks (void) { 2342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlOutputCallbackInitialized) 2343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 2344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__) 2346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInitPlatformSpecificIo(); 2347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 2348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRegisterOutputCallbacks(xmlFileMatch, xmlFileOpenW, 2350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFileWrite, xmlFileClose); 2351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_HTTP_ENABLED 2353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRegisterOutputCallbacks(xmlIOHTTPMatch, xmlIOHTTPDfltOpenW, 2354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOHTTPWrite, xmlIOHTTPClosePut); 2355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 2356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/********************************* 2358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project No way a-priori to distinguish between gzipped files from 2359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project uncompressed ones except opening if existing then closing 2360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project and saving with same compression ratio ... a pain. 2361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_ZLIB_H 2363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRegisterOutputCallbacks(xmlGzfileMatch, xmlGzfileOpen, 2364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGzfileWrite, xmlGzfileClose); 2365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 2366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project Nor FTP PUT .... 2368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_FTP_ENABLED 2369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRegisterOutputCallbacks(xmlIOFTPMatch, xmlIOFTPOpen, 2370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOFTPWrite, xmlIOFTPClose); 2371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 2372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project **********************************/ 2373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputCallbackInitialized = 1; 2374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_HTTP_ENABLED 2377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlRegisterHTTPPostCallbacks: 2379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * By default, libxml submits HTTP output requests using the "PUT" method. 2381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Calling this method changes the HTTP output method to use the "POST" 2382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * method instead. 2383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 2386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlRegisterHTTPPostCallbacks( void ) { 2387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Register defaults if not done previously */ 2389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( xmlOutputCallbackInitialized == 0 ) 2391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRegisterDefaultOutputCallbacks( ); 2392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRegisterOutputCallbacks(xmlIOHTTPMatch, xmlIOHTTPDfltOpenW, 2394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOHTTPWrite, xmlIOHTTPClosePost); 2395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 2396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 2398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */ 2399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlAllocParserInputBuffer: 2402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @enc: the charset encoding if known 2403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Create a buffered parser input for progressive parsing 2405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the new parser input or NULL 2407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserInputBufferPtr 2409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlAllocParserInputBuffer(xmlCharEncoding enc) { 2410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputBufferPtr ret; 2411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = (xmlParserInputBufferPtr) xmlMalloc(sizeof(xmlParserInputBuffer)); 2413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == NULL) { 2414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErrMemory("creating input buffer"); 2415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memset(ret, 0, (size_t) sizeof(xmlParserInputBuffer)); 241894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun ret->buffer = xmlBufCreateSize(2 * xmlDefaultBufferSize); 2419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret->buffer == NULL) { 2420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(ret); 2421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 242394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun xmlBufSetAllocationScheme(ret->buffer, XML_BUFFER_ALLOC_DOUBLEIT); 2424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->encoder = xmlGetCharEncodingHandler(enc); 2425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret->encoder != NULL) 242694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun ret->raw = xmlBufCreateSize(2 * xmlDefaultBufferSize); 2427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 2428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->raw = NULL; 2429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->readcallback = NULL; 2430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->closecallback = NULL; 2431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->context = NULL; 2432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->compressed = -1; 2433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->rawconsumed = 0; 2434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 2436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 2439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlAllocOutputBuffer: 2441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @encoder: the encoding converter or NULL 2442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Create a buffered parser output 2444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the new parser output or NULL 2446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlOutputBufferPtr 2448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlAllocOutputBuffer(xmlCharEncodingHandlerPtr encoder) { 2449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputBufferPtr ret; 2450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = (xmlOutputBufferPtr) xmlMalloc(sizeof(xmlOutputBuffer)); 2452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == NULL) { 2453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErrMemory("creating output buffer"); 2454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memset(ret, 0, (size_t) sizeof(xmlOutputBuffer)); 245794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun ret->buffer = xmlBufCreate(); 2458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret->buffer == NULL) { 2459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(ret); 2460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 246260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 2463df143a5041f03a22808b59c76698770b74692815Selim Gurun /* try to avoid a performance problem with Windows realloc() */ 246494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun if (xmlBufGetAllocationScheme(ret->buffer) == XML_BUFFER_ALLOC_EXACT) 246594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun xmlBufSetAllocationScheme(ret->buffer, XML_BUFFER_ALLOC_DOUBLEIT); 2466df143a5041f03a22808b59c76698770b74692815Selim Gurun 246760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ret->encoder = encoder; 246860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (encoder != NULL) { 246994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun ret->conv = xmlBufCreateSize(4000); 247060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ret->conv == NULL) { 247160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFree(ret); 247260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 247360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 247460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 247560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 247660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * This call is designed to initiate the encoder state 247760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 247894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun xmlCharEncOutput(ret, 1); 247960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } else 248060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ret->conv = NULL; 248160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ret->writecallback = NULL; 248260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ret->closecallback = NULL; 248360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ret->context = NULL; 248460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ret->written = 0; 248560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 248660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(ret); 248760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott} 248860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 248960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott/** 249060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * xmlAllocOutputBufferInternal: 249160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * @encoder: the encoding converter or NULL 249260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 249360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Create a buffered parser output 249460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * 249560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * Returns the new parser output or NULL 249660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 249760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick ScottxmlOutputBufferPtr 249860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick ScottxmlAllocOutputBufferInternal(xmlCharEncodingHandlerPtr encoder) { 249960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlOutputBufferPtr ret; 250060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 250160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ret = (xmlOutputBufferPtr) xmlMalloc(sizeof(xmlOutputBuffer)); 250260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ret == NULL) { 250360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlIOErrMemory("creating output buffer"); 250460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 250560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 250660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott memset(ret, 0, (size_t) sizeof(xmlOutputBuffer)); 250794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun ret->buffer = xmlBufCreate(); 250860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ret->buffer == NULL) { 250960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFree(ret); 251060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 251160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 251260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 251360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 251460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 251560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * For conversion buffers we use the special IO handling 251660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 251794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun xmlBufSetAllocationScheme(ret->buffer, XML_BUFFER_ALLOC_IO); 251860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 2519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->encoder = encoder; 2520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (encoder != NULL) { 252194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun ret->conv = xmlBufCreateSize(4000); 252260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ret->conv == NULL) { 252360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott xmlFree(ret); 252460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(NULL); 252560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 252660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 2527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This call is designed to initiate the encoder state 2529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 253094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun xmlCharEncOutput(ret, 1); 2531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 2532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->conv = NULL; 2533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->writecallback = NULL; 2534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->closecallback = NULL; 2535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->context = NULL; 2536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->written = 0; 2537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 2539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 254060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 2541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */ 2542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlFreeParserInputBuffer: 2545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @in: a buffered parser input 2546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Free up the memory used by a buffered parser input 2548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 2550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlFreeParserInputBuffer(xmlParserInputBufferPtr in) { 2551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (in == NULL) return; 2552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (in->raw) { 255494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun xmlBufFree(in->raw); 2555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in->raw = NULL; 2556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (in->encoder != NULL) { 2558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCharEncCloseFunc(in->encoder); 2559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (in->closecallback != NULL) { 2561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in->closecallback(in->context); 2562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (in->buffer != NULL) { 256494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun xmlBufFree(in->buffer); 2565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in->buffer = NULL; 2566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(in); 2569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 2572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlOutputBufferClose: 2574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @out: a buffered output 2575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * flushes and close the output I/O channel 2577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * and free up all the associated resources 2578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of byte written or -1 in case of error. 2580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 2582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlOutputBufferClose(xmlOutputBufferPtr out) 2583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 2584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int written; 2585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int err_rc = 0; 2586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (out == NULL) 2588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-1); 2589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (out->writecallback != NULL) 2590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputBufferFlush(out); 2591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (out->closecallback != NULL) { 2592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project err_rc = out->closecallback(out->context); 2593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project written = out->written; 2595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (out->conv) { 259694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun xmlBufFree(out->conv); 2597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project out->conv = NULL; 2598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (out->encoder != NULL) { 2600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCharEncCloseFunc(out->encoder); 2601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (out->buffer != NULL) { 260394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun xmlBufFree(out->buffer); 2604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project out->buffer = NULL; 2605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (out->error) 2608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project err_rc = -1; 2609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(out); 2610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ((err_rc == 0) ? written : err_rc); 2611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */ 2613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserInputBufferPtr 2615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project__xmlParserInputBufferCreateFilename(const char *URI, xmlCharEncoding enc) { 2616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputBufferPtr ret; 2617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int i = 0; 2618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void *context = NULL; 2619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlInputCallbackInitialized == 0) 2621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRegisterDefaultInputCallbacks(); 2622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (URI == NULL) return(NULL); 2624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Try to find one of the input accept method accepting that scheme 2627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Go in reverse to give precedence to user defined handlers. 2628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (context == NULL) { 2630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (i = xmlInputCallbackNr - 1;i >= 0;i--) { 2631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((xmlInputCallbackTable[i].matchcallback != NULL) && 2632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlInputCallbackTable[i].matchcallback(URI) != 0)) { 2633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project context = xmlInputCallbackTable[i].opencallback(URI); 2634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (context != NULL) { 2635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (context == NULL) { 2641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Allocate the Input buffer front-end. 2646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlAllocParserInputBuffer(enc); 2648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) { 2649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->context = context; 2650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->readcallback = xmlInputCallbackTable[i].readcallback; 2651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->closecallback = xmlInputCallbackTable[i].closecallback; 2652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_ZLIB_H 2653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((xmlInputCallbackTable[i].opencallback == xmlGzfileOpen) && 2654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (strcmp(URI, "-") != 0)) { 2655df143a5041f03a22808b59c76698770b74692815Selim Gurun#if defined(ZLIB_VERNUM) && ZLIB_VERNUM >= 0x1230 2656df143a5041f03a22808b59c76698770b74692815Selim Gurun ret->compressed = !gzdirect(context); 2657df143a5041f03a22808b59c76698770b74692815Selim Gurun#else 2658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (((z_stream *)context)->avail_in > 4) { 2659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char *cptr, buff4[4]; 2660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cptr = (char *) ((z_stream *)context)->next_in; 2661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (gzread(context, buff4, 4) == 4) { 2662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (strncmp(buff4, cptr, 4) == 0) 2663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->compressed = 0; 2664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 2665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->compressed = 1; 2666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project gzrewind(context); 2667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2669df143a5041f03a22808b59c76698770b74692815Selim Gurun#endif 2670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 2672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 2674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInputCallbackTable[i].closecallback (context); 2675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 2677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParserInputBufferCreateFilename: 2681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URI: a C string containing the URI or filename 2682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @enc: the charset encoding if known 2683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Create a buffered parser input for the progressive parsing of a file 2685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * If filename is "-' then we use stdin as the input. 2686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Automatic support for ZLIB/Compress compressed document is provided 2687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * by default if found at compile-time. 2688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Do an encoding check if enc == XML_CHAR_ENCODING_NONE 2689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the new parser input or NULL 2691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserInputBufferPtr 2693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserInputBufferCreateFilename(const char *URI, xmlCharEncoding enc) { 2694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((xmlParserInputBufferCreateFilenameValue)) { 2695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return xmlParserInputBufferCreateFilenameValue(URI, enc); 2696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return __xmlParserInputBufferCreateFilename(URI, enc); 2698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 2701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlOutputBufferPtr 2702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project__xmlOutputBufferCreateFilename(const char *URI, 2703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCharEncodingHandlerPtr encoder, 2704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int compression ATTRIBUTE_UNUSED) { 2705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputBufferPtr ret; 2706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlURIPtr puri; 2707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int i = 0; 2708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void *context = NULL; 2709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char *unescaped = NULL; 2710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_ZLIB_H 2711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int is_file_uri = 1; 2712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 2713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlOutputCallbackInitialized == 0) 2715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRegisterDefaultOutputCallbacks(); 2716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (URI == NULL) return(NULL); 2718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project puri = xmlParseURI(URI); 2720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (puri != NULL) { 2721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_ZLIB_H 2722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((puri->scheme != NULL) && 2723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!xmlStrEqual(BAD_CAST puri->scheme, BAD_CAST "file"))) 2724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project is_file_uri = 0; 2725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 2726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * try to limit the damages of the URI unescaping code. 2728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((puri->scheme == NULL) || 2730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlStrEqual(BAD_CAST puri->scheme, BAD_CAST "file"))) 2731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unescaped = xmlURIUnescapeString(URI, 0, NULL); 2732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeURI(puri); 2733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Try to find one of the output accept method accepting that scheme 2737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Go in reverse to give precedence to user defined handlers. 2738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * try with an unescaped version of the URI 2739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (unescaped != NULL) { 2741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_ZLIB_H 2742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((compression > 0) && (compression <= 9) && (is_file_uri == 1)) { 2743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project context = xmlGzfileOpenW(unescaped, compression); 2744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (context != NULL) { 274560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ret = xmlAllocOutputBufferInternal(encoder); 2746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) { 2747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->context = context; 2748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->writecallback = xmlGzfileWrite; 2749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->closecallback = xmlGzfileClose; 2750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(unescaped); 2752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 2753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 2756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (i = xmlOutputCallbackNr - 1;i >= 0;i--) { 2757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((xmlOutputCallbackTable[i].matchcallback != NULL) && 2758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlOutputCallbackTable[i].matchcallback(unescaped) != 0)) { 2759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined(LIBXML_HTTP_ENABLED) && defined(HAVE_ZLIB_H) 2760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Need to pass compression parameter into HTTP open calls */ 2761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlOutputCallbackTable[i].matchcallback == xmlIOHTTPMatch) 2762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project context = xmlIOHTTPOpenW(unescaped, compression); 2763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 2764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 2765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project context = xmlOutputCallbackTable[i].opencallback(unescaped); 2766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (context != NULL) 2767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(unescaped); 2771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * If this failed try with a non-escaped URI this may be a strange 2775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * filename 2776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (context == NULL) { 2778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_ZLIB_H 2779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((compression > 0) && (compression <= 9) && (is_file_uri == 1)) { 2780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project context = xmlGzfileOpenW(URI, compression); 2781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (context != NULL) { 278260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ret = xmlAllocOutputBufferInternal(encoder); 2783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) { 2784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->context = context; 2785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->writecallback = xmlGzfileWrite; 2786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->closecallback = xmlGzfileClose; 2787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 2789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 2792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (i = xmlOutputCallbackNr - 1;i >= 0;i--) { 2793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((xmlOutputCallbackTable[i].matchcallback != NULL) && 2794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlOutputCallbackTable[i].matchcallback(URI) != 0)) { 2795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined(LIBXML_HTTP_ENABLED) && defined(HAVE_ZLIB_H) 2796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Need to pass compression parameter into HTTP open calls */ 2797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlOutputCallbackTable[i].matchcallback == xmlIOHTTPMatch) 2798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project context = xmlIOHTTPOpenW(URI, compression); 2799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 2800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 2801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project context = xmlOutputCallbackTable[i].opencallback(URI); 2802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (context != NULL) 2803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (context == NULL) { 2809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Allocate the Output buffer front-end. 2814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 281560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ret = xmlAllocOutputBufferInternal(encoder); 2816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) { 2817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->context = context; 2818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->writecallback = xmlOutputCallbackTable[i].writecallback; 2819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->closecallback = xmlOutputCallbackTable[i].closecallback; 2820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 2822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlOutputBufferCreateFilename: 2826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URI: a C string containing the URI or filename 2827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @encoder: the encoding converter or NULL 2828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @compression: the compression ration (0 none, 9 max). 2829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Create a buffered output for the progressive saving of a file 2831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * If filename is "-' then we use stdout as the output. 2832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Automatic support for ZLIB/Compress compressed document is provided 2833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * by default if found at compile-time. 2834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TODO: currently if compression is set, the library only support 2835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * writing to a local file. 2836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the new output or NULL 2838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlOutputBufferPtr 2840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlOutputBufferCreateFilename(const char *URI, 2841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCharEncodingHandlerPtr encoder, 2842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int compression ATTRIBUTE_UNUSED) { 2843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((xmlOutputBufferCreateFilenameValue)) { 2844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return xmlOutputBufferCreateFilenameValue(URI, encoder, compression); 2845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return __xmlOutputBufferCreateFilename(URI, encoder, compression); 2847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */ 2849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParserInputBufferCreateFile: 2852df143a5041f03a22808b59c76698770b74692815Selim Gurun * @file: a FILE* 2853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @enc: the charset encoding if known 2854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Create a buffered parser input for the progressive parsing of a FILE * 2856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * buffered C I/O 2857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the new parser input or NULL 2859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserInputBufferPtr 2861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserInputBufferCreateFile(FILE *file, xmlCharEncoding enc) { 2862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputBufferPtr ret; 2863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlInputCallbackInitialized == 0) 2865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRegisterDefaultInputCallbacks(); 2866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (file == NULL) return(NULL); 2868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlAllocParserInputBuffer(enc); 2870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) { 2871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->context = file; 2872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->readcallback = xmlFileRead; 2873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->closecallback = xmlFileFlush; 2874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 2877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 2880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlOutputBufferCreateFile: 2882df143a5041f03a22808b59c76698770b74692815Selim Gurun * @file: a FILE* 2883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @encoder: the encoding converter or NULL 2884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Create a buffered output for the progressive saving to a FILE * 2886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * buffered C I/O 2887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the new parser output or NULL 2889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlOutputBufferPtr 2891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlOutputBufferCreateFile(FILE *file, xmlCharEncodingHandlerPtr encoder) { 2892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputBufferPtr ret; 2893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlOutputCallbackInitialized == 0) 2895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRegisterDefaultOutputCallbacks(); 2896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (file == NULL) return(NULL); 2898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 289960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ret = xmlAllocOutputBufferInternal(encoder); 2900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) { 2901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->context = file; 2902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->writecallback = xmlFileWrite; 2903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->closecallback = xmlFileFlush; 2904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 2907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlOutputBufferCreateBuffer: 2911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buffer: a xmlBufferPtr 2912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @encoder: the encoding converter or NULL 2913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Create a buffered output for the progressive saving to a xmlBuffer 2915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the new parser output or NULL 2917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlOutputBufferPtr 2919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlOutputBufferCreateBuffer(xmlBufferPtr buffer, 2920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCharEncodingHandlerPtr encoder) { 2921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputBufferPtr ret; 2922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buffer == NULL) return(NULL); 2924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlOutputBufferCreateIO((xmlOutputWriteCallback) 2926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlBufferWrite, 2927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlOutputCloseCallback) 2928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NULL, (void *) buffer, encoder); 2929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 2931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 293394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun/** 293494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * xmlOutputBufferGetContent: 293594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * @out: an xmlOutputBufferPtr 293694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * 293794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * Gives a pointer to the data currently held in the output buffer 293894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * 293994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * Returns a pointer to the data or NULL in case of error 294094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun */ 294194442ad4107000e6d49f9b85a46a591495a57632Selim Gurunconst xmlChar * 294294442ad4107000e6d49f9b85a46a591495a57632Selim GurunxmlOutputBufferGetContent(xmlOutputBufferPtr out) { 294394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun if ((out == NULL) || (out->buffer == NULL)) 294494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun return(NULL); 294594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun 294694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun return(xmlBufContent(out->buffer)); 294794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun} 294894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun 294994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun/** 295094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * xmlOutputBufferGetSize: 295194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * @out: an xmlOutputBufferPtr 295294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * 295394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * Gives the length of the data currently held in the output buffer 295494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * 295594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * Returns 0 in case or error or no data is held, the size otherwise 295694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun */ 295794442ad4107000e6d49f9b85a46a591495a57632Selim Gurunsize_t 295894442ad4107000e6d49f9b85a46a591495a57632Selim GurunxmlOutputBufferGetSize(xmlOutputBufferPtr out) { 295994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun if ((out == NULL) || (out->buffer == NULL)) 296094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun return(0); 296194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun 296294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun return(xmlBufUse(out->buffer)); 296394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun} 296494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun 296594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun 2966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */ 2967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParserInputBufferCreateFd: 2970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @fd: a file descriptor number 2971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @enc: the charset encoding if known 2972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Create a buffered parser input for the progressive parsing for the input 2974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * from a file descriptor 2975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the new parser input or NULL 2977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserInputBufferPtr 2979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserInputBufferCreateFd(int fd, xmlCharEncoding enc) { 2980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputBufferPtr ret; 2981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (fd < 0) return(NULL); 2983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlAllocParserInputBuffer(enc); 2985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) { 2986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->context = (void *) (long) fd; 2987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->readcallback = xmlFdRead; 2988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->closecallback = xmlFdClose; 2989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 2992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParserInputBufferCreateMem: 2996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @mem: the memory input 2997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @size: the length of the memory block 2998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @enc: the charset encoding if known 2999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Create a buffered parser input for the progressive parsing for the input 3001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * from a memory area. 3002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3003ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the new parser input or NULL 3004ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserInputBufferPtr 3006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserInputBufferCreateMem(const char *mem, int size, xmlCharEncoding enc) { 3007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputBufferPtr ret; 3008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int errcode; 3009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (size <= 0) return(NULL); 3011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (mem == NULL) return(NULL); 3012ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlAllocParserInputBuffer(enc); 3014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) { 3015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->context = (void *) mem; 3016ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->readcallback = (xmlInputReadCallback) xmlNop; 3017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->closecallback = NULL; 301894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun errcode = xmlBufAdd(ret->buffer, (const xmlChar *) mem, size); 3019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (errcode != 0) { 3020ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(ret); 3021ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 3022ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3023ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3024ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3025ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 3026ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3027ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3029ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParserInputBufferCreateStatic: 3030ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @mem: the memory input 3031ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @size: the length of the memory block 3032ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @enc: the charset encoding if known 3033ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3034ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Create a buffered parser input for the progressive parsing for the input 3035ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * from an immutable memory area. This will not copy the memory area to 3036ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the buffer, but the memory is expected to be available until the end of 3037ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the parsing, this is useful for example when using mmap'ed file. 3038ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3039ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the new parser input or NULL 3040ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3041ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserInputBufferPtr 3042ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserInputBufferCreateStatic(const char *mem, int size, 3043ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCharEncoding enc) { 3044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputBufferPtr ret; 3045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (size <= 0) return(NULL); 3047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (mem == NULL) return(NULL); 3048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = (xmlParserInputBufferPtr) xmlMalloc(sizeof(xmlParserInputBuffer)); 3050ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == NULL) { 3051ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErrMemory("creating input buffer"); 3052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 3053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memset(ret, 0, (size_t) sizeof(xmlParserInputBuffer)); 305594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun ret->buffer = xmlBufCreateStatic((void *)mem, (size_t) size); 3056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret->buffer == NULL) { 3057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(ret); 3058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 3059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->encoder = xmlGetCharEncodingHandler(enc); 3061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret->encoder != NULL) 306294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun ret->raw = xmlBufCreateSize(2 * xmlDefaultBufferSize); 3063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 3064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->raw = NULL; 3065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->compressed = -1; 3066ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->context = (void *) mem; 3067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->readcallback = NULL; 3068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->closecallback = NULL; 3069ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3070ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 3071ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3072ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 3074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3075ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlOutputBufferCreateFd: 3076ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @fd: a file descriptor number 3077ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @encoder: the encoding converter or NULL 3078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3079df143a5041f03a22808b59c76698770b74692815Selim Gurun * Create a buffered output for the progressive saving 3080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * to a file descriptor 3081ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3082ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the new parser output or NULL 3083ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3084ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlOutputBufferPtr 3085ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlOutputBufferCreateFd(int fd, xmlCharEncodingHandlerPtr encoder) { 3086ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputBufferPtr ret; 3087ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (fd < 0) return(NULL); 3089ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 309060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ret = xmlAllocOutputBufferInternal(encoder); 3091ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) { 3092ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->context = (void *) (long) fd; 3093ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->writecallback = xmlFdWrite; 3094ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->closecallback = NULL; 3095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 3098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */ 3100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParserInputBufferCreateIO: 3103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ioread: an I/O read function 3104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ioclose: an I/O close function 3105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ioctx: an I/O handler 3106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @enc: the charset encoding if known 3107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Create a buffered parser input for the progressive parsing for the input 3109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * from an I/O handler 3110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the new parser input or NULL 3112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserInputBufferPtr 3114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserInputBufferCreateIO(xmlInputReadCallback ioread, 3115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInputCloseCallback ioclose, void *ioctx, xmlCharEncoding enc) { 3116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputBufferPtr ret; 3117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ioread == NULL) return(NULL); 3119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlAllocParserInputBuffer(enc); 3121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) { 3122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->context = (void *) ioctx; 3123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->readcallback = ioread; 3124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->closecallback = ioclose; 3125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 3128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 3131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlOutputBufferCreateIO: 3133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @iowrite: an I/O write function 3134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ioclose: an I/O close function 3135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ioctx: an I/O handler 3136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @encoder: the charset encoding if known 3137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Create a buffered output for the progressive saving 3139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * to an I/O handler 3140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the new parser output or NULL 3142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlOutputBufferPtr 3144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlOutputBufferCreateIO(xmlOutputWriteCallback iowrite, 3145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputCloseCallback ioclose, void *ioctx, 3146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCharEncodingHandlerPtr encoder) { 3147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputBufferPtr ret; 3148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (iowrite == NULL) return(NULL); 3150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 315160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ret = xmlAllocOutputBufferInternal(encoder); 3152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) { 3153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->context = (void *) ioctx; 3154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->writecallback = iowrite; 3155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->closecallback = ioclose; 3156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 3159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */ 3161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParserInputBufferCreateFilenameDefault: 3164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @func: function pointer to the new ParserInputBufferCreateFilenameFunc 3165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Registers a callback for URI input file handling 3167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the old value of the registration function 3169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserInputBufferCreateFilenameFunc 3171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserInputBufferCreateFilenameDefault(xmlParserInputBufferCreateFilenameFunc func) 3172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 3173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputBufferCreateFilenameFunc old = xmlParserInputBufferCreateFilenameValue; 3174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (old == NULL) { 3175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project old = __xmlParserInputBufferCreateFilename; 3176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputBufferCreateFilenameValue = func; 3179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(old); 3180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlOutputBufferCreateFilenameDefault: 3184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @func: function pointer to the new OutputBufferCreateFilenameFunc 3185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Registers a callback for URI output file handling 3187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the old value of the registration function 3189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlOutputBufferCreateFilenameFunc 3191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlOutputBufferCreateFilenameDefault(xmlOutputBufferCreateFilenameFunc func) 3192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 3193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputBufferCreateFilenameFunc old = xmlOutputBufferCreateFilenameValue; 3194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 3195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (old == NULL) { 3196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project old = __xmlOutputBufferCreateFilename; 3197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 3199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputBufferCreateFilenameValue = func; 3200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(old); 3201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParserInputBufferPush: 3205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @in: a buffered parser input 3206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @len: the size in bytes of the array. 3207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buf: an char array 3208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Push the content of the arry in the input buffer 3210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This routine handle the I18N transcoding to internal UTF-8 3211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This is used when operating the parser in progressive (push) mode. 3212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of chars read and stored in the buffer, or -1 3214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * in case of error. 3215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 3217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserInputBufferPush(xmlParserInputBufferPtr in, 3218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int len, const char *buf) { 3219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int nbchars = 0; 3220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret; 3221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len < 0) return(0); 3223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((in == NULL) || (in->error)) return(-1); 3224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (in->encoder != NULL) { 3225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int use; 3226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Store the data in the incoming raw buffer 3229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (in->raw == NULL) { 323194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun in->raw = xmlBufCreate(); 3232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 323394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun ret = xmlBufAdd(in->raw, (const xmlChar *) buf, len); 3234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != 0) 3235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 3236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * convert as much as possible to the parser reading buffer. 3239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 324094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun use = xmlBufUse(in->raw); 324194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun nbchars = xmlCharEncInput(in, 1); 3242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nbchars < 0) { 3243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErr(XML_IO_ENCODER, NULL); 3244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in->error = XML_IO_ENCODER; 3245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 3246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 324794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun in->rawconsumed += (use - xmlBufUse(in->raw)); 3248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 3249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nbchars = len; 325094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun ret = xmlBufAdd(in->buffer, (xmlChar *) buf, nbchars); 3251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != 0) 3252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 3253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_INPUT 3255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 3256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "I/O: pushed %d chars, buffer %d/%d\n", 325794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun nbchars, xmlBufUse(in->buffer), xmlBufLength(in->buffer)); 3258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 3259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(nbchars); 3260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * endOfInput: 3264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * When reading from an Input channel indicated end of file or error 3266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * don't reread from it again. 3267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 3269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectendOfInput (void * context ATTRIBUTE_UNUSED, 3270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char * buffer ATTRIBUTE_UNUSED, 3271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int len ATTRIBUTE_UNUSED) { 3272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 3273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParserInputBufferGrow: 3277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @in: a buffered parser input 3278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @len: indicative value of the amount of chars to read 3279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Grow up the content of the input buffer, the old data are preserved 3281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This routine handle the I18N transcoding to internal UTF-8 3282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This routine is used when operating the parser in normal (pull) mode 3283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TODO: one should be able to remove one extra copy by copying directly 3285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * onto in->buffer or in->raw 3286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of chars read and stored in the buffer, or -1 3288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * in case of error. 3289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 3291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserInputBufferGrow(xmlParserInputBufferPtr in, int len) { 3292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char *buffer = NULL; 3293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int res = 0; 3294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int nbchars = 0; 3295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((in == NULL) || (in->error)) return(-1); 3297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((len <= MINLEN) && (len != 4)) 3298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = MINLEN; 3299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 330094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun if (xmlBufAvail(in->buffer) <= 0) { 3301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErr(XML_IO_BUFFER_FULL, NULL); 3302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in->error = XML_IO_BUFFER_FULL; 3303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 3304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 330694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun if (xmlBufGrow(in->buffer, len + 1) < 0) { 330794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun xmlIOErrMemory("growing input buffer"); 330894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun in->error = XML_ERR_NO_MEMORY; 330994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun return(-1); 3310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 331194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun buffer = (char *)xmlBufEnd(in->buffer); 3312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Call the read method for this I/O type. 3315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (in->readcallback != NULL) { 3317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project res = in->readcallback(in->context, &buffer[0], len); 3318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (res <= 0) 3319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in->readcallback = endOfInput; 3320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 3321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErr(XML_IO_NO_INPUT, NULL); 3322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in->error = XML_IO_NO_INPUT; 3323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 3324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (res < 0) { 3326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 3327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = res; 3329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (in->encoder != NULL) { 3330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int use; 3331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Store the data in the incoming raw buffer 3334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (in->raw == NULL) { 333694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun in->raw = xmlBufCreate(); 3337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 333894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun res = xmlBufAdd(in->raw, (const xmlChar *) buffer, len); 3339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (res != 0) 3340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 3341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * convert as much as possible to the parser reading buffer. 3344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 334594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun use = xmlBufUse(in->raw); 334694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun nbchars = xmlCharEncInput(in, 1); 3347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nbchars < 0) { 3348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErr(XML_IO_ENCODER, NULL); 3349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project in->error = XML_IO_ENCODER; 3350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 3351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 335294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun in->rawconsumed += (use - xmlBufUse(in->raw)); 3353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 3354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nbchars = len; 335594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun xmlBufAddLen(in->buffer, nbchars); 3356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_INPUT 3358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 335994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun "I/O: read %d chars, buffer %d\n", 336094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun nbchars, xmlBufUse(in->buffer)); 3361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 3362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(nbchars); 3363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParserInputBufferRead: 3367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @in: a buffered parser input 3368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @len: indicative value of the amount of chars to read 3369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Refresh the content of the input buffer, the old data are considered 3371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * consumed 3372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This routine handle the I18N transcoding to internal UTF-8 3373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of chars read and stored in the buffer, or -1 3375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * in case of error. 3376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 3378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserInputBufferRead(xmlParserInputBufferPtr in, int len) { 3379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((in == NULL) || (in->error)) return(-1); 3380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (in->readcallback != NULL) 3381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlParserInputBufferGrow(in, len)); 338294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun else if (xmlBufGetAllocationScheme(in->buffer) == XML_BUFFER_ALLOC_IMMUTABLE) 3383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 3384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 3385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 3386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 3389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlOutputBufferWrite: 3391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @out: a buffered parser output 3392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @len: the size in bytes of the array. 3393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buf: an char array 3394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Write the content of the array in the output I/O buffer 3396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This routine handle the I18N transcoding from internal UTF-8 3397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The buffer is lossless, i.e. will store in case of partial 3398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * or delayed writes. 3399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of chars immediately written, or -1 3401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * in case of error. 3402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 3404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlOutputBufferWrite(xmlOutputBufferPtr out, int len, const char *buf) { 3405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int nbchars = 0; /* number of chars to output to I/O */ 3406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret; /* return from function call */ 3407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int written = 0; /* number of char written to I/O so far */ 3408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int chunk; /* number of byte curreent processed from buf */ 3409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((out == NULL) || (out->error)) return(-1); 3411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len < 0) return(0); 3412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (out->error) return(-1); 3413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project do { 3415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project chunk = len; 3416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (chunk > 4 * MINLEN) 3417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project chunk = 4 * MINLEN; 3418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * first handle encoding stuff. 3421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (out->encoder != NULL) { 3423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Store the data in the incoming raw buffer 3425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (out->conv == NULL) { 342794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun out->conv = xmlBufCreate(); 3428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 342994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun ret = xmlBufAdd(out->buffer, (const xmlChar *) buf, chunk); 3430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != 0) 3431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 3432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 343394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun if ((xmlBufUse(out->buffer) < MINLEN) && (chunk == len)) 3434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 3435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * convert as much as possible to the parser reading buffer. 3438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 343994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun ret = xmlCharEncOutput(out, 0); 3440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret < 0) && (ret != -3)) { 3441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErr(XML_IO_ENCODER, NULL); 3442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project out->error = XML_IO_ENCODER; 3443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 3444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 344594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun nbchars = xmlBufUse(out->conv); 3446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 344794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun ret = xmlBufAdd(out->buffer, (const xmlChar *) buf, chunk); 3448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != 0) 3449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 345094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun nbchars = xmlBufUse(out->buffer); 3451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf += chunk; 3453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len -= chunk; 3454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((nbchars < MINLEN) && (len <= 0)) 3456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 3457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (out->writecallback) { 3459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * second write the stuff to the I/O channel 3461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (out->encoder != NULL) { 3463df143a5041f03a22808b59c76698770b74692815Selim Gurun ret = out->writecallback(out->context, 346494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun (const char *)xmlBufContent(out->conv), nbchars); 3465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret >= 0) 346694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun xmlBufShrink(out->conv, ret); 3467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 3468df143a5041f03a22808b59c76698770b74692815Selim Gurun ret = out->writecallback(out->context, 346994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun (const char *)xmlBufContent(out->buffer), nbchars); 3470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret >= 0) 347194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun xmlBufShrink(out->buffer, ret); 3472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret < 0) { 3474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErr(XML_IO_WRITE, NULL); 3475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project out->error = XML_IO_WRITE; 3476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 3477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project out->written += ret; 3479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project written += nbchars; 3481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } while (len > 0); 3482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectdone: 3484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_INPUT 3485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 3486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "I/O: wrote %d chars\n", written); 3487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 3488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(written); 3489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlEscapeContent: 3493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @out: a pointer to an array of bytes to store the result 3494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @outlen: the length of @out 3495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @in: a pointer to an array of unescaped UTF-8 bytes 3496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @inlen: the length of @in 3497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Take a block of UTF-8 chars in and escape them. 3499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 if success, or -1 otherwise 3500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The value of @inlen after return is the number of octets consumed 3501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * if the return value is positive, else unpredictable. 3502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The value of @outlen after return is the number of octets consumed. 3503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 3505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlEscapeContent(unsigned char* out, int *outlen, 3506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar* in, int *inlen) { 3507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned char* outstart = out; 3508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const unsigned char* base = in; 3509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned char* outend = out + *outlen; 3510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const unsigned char* inend; 3511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inend = in + (*inlen); 3513df143a5041f03a22808b59c76698770b74692815Selim Gurun 3514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((in < inend) && (out < outend)) { 351594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun if (*in == '<') { 3516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (outend - out < 4) break; 3517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *out++ = '&'; 3518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *out++ = 'l'; 3519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *out++ = 't'; 3520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *out++ = ';'; 3521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (*in == '>') { 3522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (outend - out < 4) break; 3523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *out++ = '&'; 3524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *out++ = 'g'; 3525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *out++ = 't'; 3526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *out++ = ';'; 3527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (*in == '&') { 3528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (outend - out < 5) break; 3529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *out++ = '&'; 3530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *out++ = 'a'; 3531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *out++ = 'm'; 3532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *out++ = 'p'; 3533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *out++ = ';'; 3534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (*in == '\r') { 3535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (outend - out < 5) break; 3536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *out++ = '&'; 3537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *out++ = '#'; 3538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *out++ = '1'; 3539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *out++ = '3'; 3540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *out++ = ';'; 3541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 3542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *out++ = (unsigned char) *in; 3543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ++in; 3545df143a5041f03a22808b59c76698770b74692815Selim Gurun } 3546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *outlen = out - outstart; 3547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *inlen = in - base; 3548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 3549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlOutputBufferWriteEscape: 3553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @out: a buffered parser output 3554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str: a zero terminated UTF-8 string 3555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @escaping: an optional escaping function (or NULL) 3556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Write the content of the string in the output I/O buffer 3558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This routine escapes the caracters and then handle the I18N 3559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * transcoding from internal UTF-8 3560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The buffer is lossless, i.e. will store in case of partial 3561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * or delayed writes. 3562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of chars immediately written, or -1 3564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * in case of error. 3565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 3567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlOutputBufferWriteEscape(xmlOutputBufferPtr out, const xmlChar *str, 3568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCharEncodingOutputFunc escaping) { 3569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int nbchars = 0; /* number of chars to output to I/O */ 3570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret; /* return from function call */ 3571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int written = 0; /* number of char written to I/O so far */ 3572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int oldwritten=0;/* loop guard */ 3573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int chunk; /* number of byte currently processed from str */ 3574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int len; /* number of bytes in str */ 3575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int cons; /* byte from str consumed */ 3576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((out == NULL) || (out->error) || (str == NULL) || 3578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (out->buffer == NULL) || 357994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun (xmlBufGetAllocationScheme(out->buffer) == XML_BUFFER_ALLOC_IMMUTABLE)) 358094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun return(-1); 3581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = strlen((const char *)str); 3582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len < 0) return(0); 3583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (out->error) return(-1); 3584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (escaping == NULL) escaping = xmlEscapeContent; 3585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project do { 3587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project oldwritten = written; 3588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * how many bytes to consume and how many bytes to store. 3591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cons = len; 359394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun chunk = xmlBufAvail(out->buffer) - 1; 3594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 359560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott /* 359660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * make sure we have enough room to save first, if this is 359760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * not the case force a flush, but make sure we stay in the loop 359860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott */ 359960a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (chunk < 40) { 360094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun if (xmlBufGrow(out->buffer, 100) < 0) 360160a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(-1); 360260a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott oldwritten = -1; 360360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott continue; 360460a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott } 360560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 3606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * first handle encoding stuff. 3608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (out->encoder != NULL) { 3610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Store the data in the incoming raw buffer 3612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (out->conv == NULL) { 361494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun out->conv = xmlBufCreate(); 3615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 361694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun ret = escaping(xmlBufEnd(out->buffer) , 3617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project &chunk, str, &cons); 3618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret < 0) || (chunk == 0)) /* chunk==0 => nothing done */ 3619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 362094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun xmlBufAddLen(out->buffer, chunk); 3621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 362294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun if ((xmlBufUse(out->buffer) < MINLEN) && (cons == len)) 3623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 3624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * convert as much as possible to the output buffer. 3627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 362894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun ret = xmlCharEncOutput(out, 0); 3629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret < 0) && (ret != -3)) { 3630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErr(XML_IO_ENCODER, NULL); 3631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project out->error = XML_IO_ENCODER; 3632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 3633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 363494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun nbchars = xmlBufUse(out->conv); 3635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 363694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun ret = escaping(xmlBufEnd(out->buffer), &chunk, str, &cons); 3637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret < 0) || (chunk == 0)) /* chunk==0 => nothing done */ 3638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 363994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun xmlBufAddLen(out->buffer, chunk); 364094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun nbchars = xmlBufUse(out->buffer); 3641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project str += cons; 3643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len -= cons; 3644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((nbchars < MINLEN) && (len <= 0)) 3646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 3647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (out->writecallback) { 3649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * second write the stuff to the I/O channel 3651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (out->encoder != NULL) { 3653df143a5041f03a22808b59c76698770b74692815Selim Gurun ret = out->writecallback(out->context, 365494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun (const char *)xmlBufContent(out->conv), nbchars); 3655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret >= 0) 365694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun xmlBufShrink(out->conv, ret); 3657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 3658df143a5041f03a22808b59c76698770b74692815Selim Gurun ret = out->writecallback(out->context, 365994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun (const char *)xmlBufContent(out->buffer), nbchars); 3660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret >= 0) 366194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun xmlBufShrink(out->buffer, ret); 3662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret < 0) { 3664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErr(XML_IO_WRITE, NULL); 3665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project out->error = XML_IO_WRITE; 3666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 3667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project out->written += ret; 366994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun } else if (xmlBufAvail(out->buffer) < MINLEN) { 367094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun xmlBufGrow(out->buffer, MINLEN); 3671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project written += nbchars; 3673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } while ((len > 0) && (oldwritten != written)); 3674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectdone: 3676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_INPUT 3677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 3678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "I/O: wrote %d chars\n", written); 3679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 3680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(written); 3681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlOutputBufferWriteString: 3685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @out: a buffered parser output 3686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str: a zero terminated C string 3687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Write the content of the string in the output I/O buffer 3689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This routine handle the I18N transcoding from internal UTF-8 3690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The buffer is lossless, i.e. will store in case of partial 3691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * or delayed writes. 3692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of chars immediately written, or -1 3694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * in case of error. 3695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 3697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlOutputBufferWriteString(xmlOutputBufferPtr out, const char *str) { 3698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int len; 3699df143a5041f03a22808b59c76698770b74692815Selim Gurun 3700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((out == NULL) || (out->error)) return(-1); 3701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (str == NULL) 3702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 3703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = strlen(str); 3704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len > 0) 3706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlOutputBufferWrite(out, len, str)); 3707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(len); 3708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlOutputBufferFlush: 3712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @out: a buffered output 3713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * flushes the output I/O channel 3715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of byte written or -1 in case of error. 3717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 3719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlOutputBufferFlush(xmlOutputBufferPtr out) { 3720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int nbchars = 0, ret = 0; 3721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((out == NULL) || (out->error)) return(-1); 3723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * first handle encoding stuff. 3725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((out->conv != NULL) && (out->encoder != NULL)) { 3727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 372894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * convert as much as possible to the parser output buffer. 3729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 373094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun do { 373194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun nbchars = xmlCharEncOutput(out, 0); 373294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun if (nbchars < 0) { 373394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun xmlIOErr(XML_IO_ENCODER, NULL); 373494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun out->error = XML_IO_ENCODER; 373594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun return(-1); 373694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun } 373794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun } while (nbchars); 3738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * second flush the stuff to the I/O channel 3742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((out->conv != NULL) && (out->encoder != NULL) && 3744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (out->writecallback != NULL)) { 3745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = out->writecallback(out->context, 374694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun (const char *)xmlBufContent(out->conv), 374794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun xmlBufUse(out->conv)); 3748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret >= 0) 374994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun xmlBufShrink(out->conv, ret); 3750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (out->writecallback != NULL) { 3751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = out->writecallback(out->context, 375294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun (const char *)xmlBufContent(out->buffer), 375394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun xmlBufUse(out->buffer)); 3754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret >= 0) 375594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun xmlBufShrink(out->buffer, ret); 3756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret < 0) { 3758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErr(XML_IO_FLUSH, NULL); 3759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project out->error = XML_IO_FLUSH; 3760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 3761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project out->written += ret; 3763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_INPUT 3765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 3766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "I/O: flushed %d chars\n", ret); 3767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 3768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 3769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */ 3771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParserGetDirectory: 3774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: the path to a file 3775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * lookup the directory for that file 3777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns a new allocated string containing the directory, or NULL. 3779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectchar * 3781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserGetDirectory(const char *filename) { 3782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char *ret = NULL; 3783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char dir[1024]; 3784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char *cur; 3785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef _WIN32_WCE /* easy way by now ... wince does not have dirs! */ 3787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return NULL; 3788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 3789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlInputCallbackInitialized == 0) 3791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRegisterDefaultInputCallbacks(); 3792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (filename == NULL) return(NULL); 3794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined(WIN32) && !defined(__CYGWIN__) 3796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# define IS_XMLPGD_SEP(ch) ((ch=='/')||(ch=='\\')) 3797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 3798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# define IS_XMLPGD_SEP(ch) (ch=='/') 3799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 3800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project strncpy(dir, filename, 1023); 3802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dir[1023] = 0; 3803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = &dir[strlen(dir)]; 3804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (cur > dir) { 3805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (IS_XMLPGD_SEP(*cur)) break; 3806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur --; 3807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (IS_XMLPGD_SEP(*cur)) { 3809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == dir) dir[1] = 0; 3810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else *cur = 0; 3811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlMemStrdup(dir); 3812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 3813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (getcwd(dir, 1024) != NULL) { 3814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dir[1023] = 0; 3815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlMemStrdup(dir); 3816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 3819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#undef IS_XMLPGD_SEP 3820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**************************************************************** 3823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 3824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * External entities loading * 3825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 3826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ****************************************************************/ 3827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCheckHTTPInput: 3830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: an XML parser context 3831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ret: an XML parser input 3832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check an input in case it was created from an HTTP stream, in that 3834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * case it will handle encoding and update of the base URL in case of 3835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * redirection. It also checks for HTTP errors in which case the input 3836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * is cleanly freed up and an appropriate error is raised in context 3837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the input or NULL in case of HTTP error. 3839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserInputPtr 3841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCheckHTTPInput(xmlParserCtxtPtr ctxt, xmlParserInputPtr ret) { 3842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_HTTP_ENABLED 3843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret != NULL) && (ret->buf != NULL) && 3844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ret->buf->readcallback == xmlIOHTTPRead) && 3845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ret->buf->context != NULL)) { 3846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *encoding; 3847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *redir; 3848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *mime; 3849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int code; 3850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project code = xmlNanoHTTPReturnCode(ret->buf->context); 3852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (code >= 400) { 3853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* fatal error */ 3854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret->filename != NULL) 3855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project __xmlLoaderErr(ctxt, "failed to load HTTP resource \"%s\"\n", 3856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (const char *) ret->filename); 3857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 3858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project __xmlLoaderErr(ctxt, "failed to load HTTP resource\n", NULL); 3859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeInputStream(ret); 3860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = NULL; 3861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 3862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project mime = xmlNanoHTTPMimeType(ret->buf->context); 3864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((xmlStrstr(BAD_CAST mime, BAD_CAST "/xml")) || 3865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlStrstr(BAD_CAST mime, BAD_CAST "+xml"))) { 3866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project encoding = xmlNanoHTTPEncoding(ret->buf->context); 3867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (encoding != NULL) { 3868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCharEncodingHandlerPtr handler; 3869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project handler = xmlFindCharEncodingHandler(encoding); 3871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (handler != NULL) { 3872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSwitchInputEncoding(ctxt, ret, handler); 3873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 3874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project __xmlErrEncoding(ctxt, XML_ERR_UNKNOWN_ENCODING, 3875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Unknown encoding %s", 3876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST encoding, NULL); 3877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret->encoding == NULL) 3879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->encoding = xmlStrdup(BAD_CAST encoding); 3880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if 0 3882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (xmlStrstr(BAD_CAST mime, BAD_CAST "html")) { 3883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 3884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project redir = xmlNanoHTTPRedir(ret->buf->context); 3886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (redir != NULL) { 3887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret->filename != NULL) 3888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree((xmlChar *) ret->filename); 3889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret->directory != NULL) { 3890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree((xmlChar *) ret->directory); 3891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->directory = NULL; 3892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->filename = 3894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (char *) xmlStrdup((const xmlChar *) redir); 3895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 3899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 3900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int xmlNoNetExists(const char *URL) { 3903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *path; 3904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (URL == NULL) 3906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 3907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlStrncasecmp(BAD_CAST URL, BAD_CAST "file://localhost/", 17)) 3909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__) 3910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = &URL[17]; 3911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 3912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = &URL[16]; 3913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 3914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (!xmlStrncasecmp(BAD_CAST URL, BAD_CAST "file:///", 8)) { 3915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__) 3916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = &URL[8]; 3917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 3918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = &URL[7]; 3919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 3920df143a5041f03a22808b59c76698770b74692815Selim Gurun } else 3921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = URL; 3922df143a5041f03a22808b59c76698770b74692815Selim Gurun 3923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return xmlCheckFilename(path); 3924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_CATALOG_ENABLED 3927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlResolveResourceFromCatalog: 3930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URL: the URL for the entity to load 3931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ID: the System ID for the entity to load 3932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: the context in which the entity is called or NULL 3933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Resolves the URL and ID against the appropriate catalog. 3935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This function is used by xmlDefaultExternalEntityLoader and 3936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlNoNetExternalEntityLoader. 3937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns a new allocated URL, or NULL. 3939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlChar * 3941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlResolveResourceFromCatalog(const char *URL, const char *ID, 3942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt) { 3943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *resource = NULL; 3944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogAllow pref; 3945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * If the resource doesn't exists as a file, 3948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * try to load it from the resource pointed in the catalogs 3949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project pref = xmlCatalogGetDefaults(); 3951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((pref != XML_CATA_ALLOW_NONE) && (!xmlNoNetExists(URL))) { 3953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Do a local lookup 3955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt != NULL) && (ctxt->catalogs != NULL) && 3957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((pref == XML_CATA_ALLOW_ALL) || 3958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (pref == XML_CATA_ALLOW_DOCUMENT))) { 3959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project resource = xmlCatalogLocalResolve(ctxt->catalogs, 3960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (const xmlChar *)ID, 3961ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (const xmlChar *)URL); 3962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Try a global lookup 3965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((resource == NULL) && 3967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((pref == XML_CATA_ALLOW_ALL) || 3968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (pref == XML_CATA_ALLOW_GLOBAL))) { 3969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project resource = xmlCatalogResolve((const xmlChar *)ID, 3970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (const xmlChar *)URL); 3971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((resource == NULL) && (URL != NULL)) 3973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project resource = xmlStrdup((const xmlChar *) URL); 3974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TODO: do an URI lookup on the reference 3977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((resource != NULL) && (!xmlNoNetExists((const char *)resource))) { 3979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *tmp = NULL; 3980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt != NULL) && (ctxt->catalogs != NULL) && 3982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((pref == XML_CATA_ALLOW_ALL) || 3983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (pref == XML_CATA_ALLOW_DOCUMENT))) { 3984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = xmlCatalogLocalResolveURI(ctxt->catalogs, resource); 3985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((tmp == NULL) && 3987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((pref == XML_CATA_ALLOW_ALL) || 3988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (pref == XML_CATA_ALLOW_GLOBAL))) { 3989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = xmlCatalogResolveURI(resource); 3990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp != NULL) { 3993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(resource); 3994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project resource = tmp; 3995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return resource; 4000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 4001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 4003ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4004ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 4005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlDefaultExternalEntityLoader: 4006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URL: the URL for the entity to load 4007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ID: the System ID for the entity to load 4008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: the context in which the entity is called or NULL 4009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * By default we don't load external entitites, yet. 4011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4012ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns a new allocated xmlParserInputPtr, or NULL. 4013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlParserInputPtr 4015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDefaultExternalEntityLoader(const char *URL, const char *ID, 4016ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt) 4017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 4018ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr ret = NULL; 4019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *resource = NULL; 4020ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4021ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG_EXTERNAL_ENTITIES 4022ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 4023ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "xmlDefaultExternalEntityLoader(%s, xxx)\n", URL); 4024ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 4025ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt != NULL) && (ctxt->options & XML_PARSE_NONET)) { 4026ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int options = ctxt->options; 4027ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->options -= XML_PARSE_NONET; 4029ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlNoNetExternalEntityLoader(URL, ID, ctxt); 4030ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->options = options; 4031ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 4032ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4033ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_CATALOG_ENABLED 4034ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project resource = xmlResolveResourceFromCatalog(URL, ID, ctxt); 4035ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 4036ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4037ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (resource == NULL) 4038ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project resource = (xmlChar *) URL; 4039ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4040ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (resource == NULL) { 4041ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ID == NULL) 4042ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ID = "NULL"; 4043ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project __xmlLoaderErr(ctxt, "failed to load external entity \"%s\"\n", ID); 4044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 4045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlNewInputFromFile(ctxt, (const char *) resource); 4047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((resource != NULL) && (resource != (xmlChar *) URL)) 4048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(resource); 4049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (ret); 4050ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 4051ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlExternalEntityLoader xmlCurrentExternalEntityLoader = 4053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDefaultExternalEntityLoader; 4054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4055ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 4056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSetExternalEntityLoader: 4057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @f: the new entity resolver function 4058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Changes the defaultexternal entity resolver function for the application 4060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 4062ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSetExternalEntityLoader(xmlExternalEntityLoader f) { 4063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCurrentExternalEntityLoader = f; 4064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 4065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4066ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 4067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlGetExternalEntityLoader: 4068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4069ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Get the default external entity resolver function for the application 4070ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4071ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the xmlExternalEntityLoader function pointer 4072ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlExternalEntityLoader 4074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlGetExternalEntityLoader(void) { 4075ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlCurrentExternalEntityLoader); 4076ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 4077ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 4079ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlLoadExternalEntity: 4080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URL: the URL for the entity to load 4081ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ID: the Public ID for the entity to load 4082ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: the context in which the entity is called or NULL 4083ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4084ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Load an external entity, note that the use of this function for 4085ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * unparsed entities may generate problems 4086ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4087ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the xmlParserInputPtr or NULL 4088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4089ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserInputPtr 4090ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlLoadExternalEntity(const char *URL, const char *ID, 4091ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt) { 4092ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((URL != NULL) && (xmlNoNetExists(URL) == 0)) { 4093ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char *canonicFilename; 4094ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr ret; 4095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project canonicFilename = (char *) xmlCanonicPath((const xmlChar *) URL); 4097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (canonicFilename == NULL) { 4098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErrMemory("building canonical path\n"); 4099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 4100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCurrentExternalEntityLoader(canonicFilename, ID, ctxt); 4103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(canonicFilename); 4104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 4105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlCurrentExternalEntityLoader(URL, ID, ctxt)); 4107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 4108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 4110df143a5041f03a22808b59c76698770b74692815Selim Gurun * * 4111df143a5041f03a22808b59c76698770b74692815Selim Gurun * Disabling Network access * 4112df143a5041f03a22808b59c76698770b74692815Selim Gurun * * 4113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 4114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 4116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlNoNetExternalEntityLoader: 4117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URL: the URL for the entity to load 4118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ID: the System ID for the entity to load 4119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ctxt: the context in which the entity is called or NULL 4120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * A specific entity loader disabling network accesses, though still 4122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * allowing local catalog accesses for resolution. 4123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns a new allocated xmlParserInputPtr, or NULL. 4125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParserInputPtr 4127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlNoNetExternalEntityLoader(const char *URL, const char *ID, 4128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt) { 4129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr input = NULL; 4130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *resource = NULL; 4131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_CATALOG_ENABLED 4133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project resource = xmlResolveResourceFromCatalog(URL, ID, ctxt); 4134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 4135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (resource == NULL) 4137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project resource = (xmlChar *) URL; 4138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (resource != NULL) { 4140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((!xmlStrncasecmp(BAD_CAST resource, BAD_CAST "ftp://", 6)) || 4141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!xmlStrncasecmp(BAD_CAST resource, BAD_CAST "http://", 7))) { 4142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIOErr(XML_IO_NETWORK_ATTEMPT, (const char *) resource); 4143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (resource != (xmlChar *) URL) 4144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(resource); 4145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 4146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project input = xmlDefaultExternalEntityLoader((const char *) resource, ID, ctxt); 4149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (resource != (xmlChar *) URL) 4150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(resource); 4151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(input); 4152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 4153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define bottom_xmlIO 4155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include "elfgcchack.h" 4156