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