1b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd 2b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project See the file COPYING for copying permission. 3b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project*/ 4b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#include <stddef.h> 6b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#include <string.h> /* memset(), memcpy() */ 7b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#include <assert.h> 835e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes#include <limits.h> /* UINT_MAX */ 935e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes#include <time.h> /* time() */ 10b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 11b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define XML_BUILDING_EXPAT 1 12b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 13b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef COMPILED_FROM_DSP 14b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#include "winconfig.h" 15b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#elif defined(MACOS_CLASSIC) 16b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#include "macconfig.h" 1735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes#elif defined(__amigaos__) 18b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#include "amigaconfig.h" 19d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes#elif defined(__WATCOMC__) 20d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes#include "watcomconfig.h" 21b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#elif defined(HAVE_EXPAT_CONFIG_H) 22b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#include <expat_config.h> 23b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* ndef COMPILED_FROM_DSP */ 24b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 25d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes#include "ascii.h" 26b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#include "expat.h" 27b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 28b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_UNICODE 29b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define XML_ENCODE_MAX XML_UTF16_ENCODE_MAX 30b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define XmlConvert XmlUtf16Convert 31b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define XmlGetInternalEncoding XmlGetUtf16InternalEncoding 32b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define XmlGetInternalEncodingNS XmlGetUtf16InternalEncodingNS 33b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define XmlEncode XmlUtf16Encode 34d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes/* Using pointer subtraction to convert to integer type. */ 35d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes#define MUST_CONVERT(enc, s) (!(enc)->isUtf16 || (((char *)(s) - (char *)NULL) & 1)) 36b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projecttypedef unsigned short ICHAR; 37b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#else 38b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define XML_ENCODE_MAX XML_UTF8_ENCODE_MAX 39b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define XmlConvert XmlUtf8Convert 40b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define XmlGetInternalEncoding XmlGetUtf8InternalEncoding 41b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define XmlGetInternalEncodingNS XmlGetUtf8InternalEncodingNS 42b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define XmlEncode XmlUtf8Encode 43b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define MUST_CONVERT(enc, s) (!(enc)->isUtf8) 44b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projecttypedef char ICHAR; 45b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif 46b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 47b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 48b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifndef XML_NS 49b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 50b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define XmlInitEncodingNS XmlInitEncoding 51b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define XmlInitUnknownEncodingNS XmlInitUnknownEncoding 52b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#undef XmlGetInternalEncodingNS 53b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define XmlGetInternalEncodingNS XmlGetInternalEncoding 54b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define XmlParseXmlDeclNS XmlParseXmlDecl 55b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 56b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif 57b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 58b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_UNICODE 59b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 60b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_UNICODE_WCHAR_T 61b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define XML_T(x) (const wchar_t)x 62b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define XML_L(x) L ## x 63b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#else 64b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define XML_T(x) (const unsigned short)x 65b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define XML_L(x) x 66b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif 67b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 68b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#else 69b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 70b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define XML_T(x) x 71b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define XML_L(x) x 72b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 73b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif 74b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 75b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project/* Round up n to be a multiple of sz, where sz is a power of 2. */ 76b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define ROUND_UP(n, sz) (((n) + ((sz) - 1)) & ~((sz) - 1)) 77b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 78b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project/* Handle the case where memmove() doesn't exist. */ 79b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifndef HAVE_MEMMOVE 80b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef HAVE_BCOPY 81b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define memmove(d,s,l) bcopy((s),(d),(l)) 82b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#else 83b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#error memmove does not exist on this platform, nor is a substitute available 84b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* HAVE_BCOPY */ 85b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* HAVE_MEMMOVE */ 86b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 87b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#include "internal.h" 88b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#include "xmltok.h" 89b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#include "xmlrole.h" 90b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 91b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projecttypedef const XML_Char *KEY; 92b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 93b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projecttypedef struct { 94b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project KEY name; 95b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} NAMED; 96b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 97b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projecttypedef struct { 98b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project NAMED **v; 99b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unsigned char power; 100b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project size_t size; 101b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project size_t used; 102b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Memory_Handling_Suite *mem; 103b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} HASH_TABLE; 104b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 105b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project/* Basic character hash algorithm, taken from Python's string hash: 106b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project h = h * 1000003 ^ character, the constant being a prime number. 107b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 108b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project*/ 109b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_UNICODE 110b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define CHAR_HASH(h, c) \ 111b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (((h) * 0xF4243) ^ (unsigned short)(c)) 112b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#else 113b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define CHAR_HASH(h, c) \ 114b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (((h) * 0xF4243) ^ (unsigned char)(c)) 115b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif 116b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 117b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project/* For probing (after a collision) we need a step size relative prime 118b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project to the hash table size, which is a power of 2. We use double-hashing, 119b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project since we can calculate a second hash value cheaply by taking those bits 120b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project of the first hash value that were discarded (masked out) when the table 121b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project index was calculated: index = hash & mask, where mask = table->size - 1. 122b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project We limit the maximum step size to table->size / 4 (mask >> 2) and make 123b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project it odd, since odd numbers are always relative prime to a power of 2. 124b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project*/ 125b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define SECOND_HASH(hash, mask, power) \ 126b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ((((hash) & ~(mask)) >> ((power) - 1)) & ((mask) >> 2)) 127b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define PROBE_STEP(hash, mask, power) \ 128b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ((unsigned char)((SECOND_HASH(hash, mask, power)) | 1)) 129b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 130b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projecttypedef struct { 131b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project NAMED **p; 132b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project NAMED **end; 133b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} HASH_TABLE_ITER; 134b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 135b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define INIT_TAG_BUF_SIZE 32 /* must be a multiple of sizeof(XML_Char) */ 136b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define INIT_DATA_BUF_SIZE 1024 137b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define INIT_ATTS_SIZE 16 138b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define INIT_ATTS_VERSION 0xFFFFFFFF 139b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define INIT_BLOCK_SIZE 1024 140b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define INIT_BUFFER_SIZE 1024 141b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 142b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define EXPAND_SPARE 24 143b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 144b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projecttypedef struct binding { 145b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project struct prefix *prefix; 146b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project struct binding *nextTagBinding; 147b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project struct binding *prevPrefixBinding; 148b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const struct attribute_id *attId; 149b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char *uri; 150b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int uriLen; 151b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int uriAlloc; 152b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} BINDING; 153b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 154b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projecttypedef struct prefix { 155b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *name; 156b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project BINDING *binding; 157b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} PREFIX; 158b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 159b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projecttypedef struct { 160b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *str; 161b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *localPart; 162b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *prefix; 163b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int strLen; 164b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int uriLen; 165b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int prefixLen; 166b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} TAG_NAME; 167b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 168b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project/* TAG represents an open element. 169b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project The name of the element is stored in both the document and API 170b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project encodings. The memory buffer 'buf' is a separately-allocated 171b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project memory area which stores the name. During the XML_Parse()/ 172b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XMLParseBuffer() when the element is open, the memory for the 'raw' 173b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project version of the name (in the document encoding) is shared with the 174b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project document buffer. If the element is open across calls to 175b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Parse()/XML_ParseBuffer(), the buffer is re-allocated to 176b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project contain the 'raw' name as well. 177b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 178b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project A parser re-uses these structures, maintaining a list of allocated 179b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project TAG objects in a free list. 180b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project*/ 181b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projecttypedef struct tag { 182b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project struct tag *parent; /* parent of this element */ 183b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *rawName; /* tagName in the original encoding */ 184b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int rawNameLength; 185b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project TAG_NAME name; /* tagName in the API encoding */ 186b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project char *buf; /* buffer for name components */ 187b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project char *bufEnd; /* end of the buffer */ 188b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project BINDING *bindings; 189b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} TAG; 190b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 191b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projecttypedef struct { 192b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *name; 193b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *textPtr; 194b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int textLen; /* length in XML_Chars */ 195b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int processed; /* # of processed bytes - when suspended */ 196b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *systemId; 197b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *base; 198b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *publicId; 199b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *notation; 200b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool open; 201b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool is_param; 202b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool is_internal; /* true if declared in internal subset outside PE */ 203b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} ENTITY; 204b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 205b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projecttypedef struct { 206b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Content_Type type; 207b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Content_Quant quant; 208b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char * name; 209b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int firstchild; 210b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int lastchild; 211b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int childcnt; 212b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int nextsib; 213b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} CONTENT_SCAFFOLD; 214b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 215b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define INIT_SCAFFOLD_ELEMENTS 32 216b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 217b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projecttypedef struct block { 218b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project struct block *next; 219b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int size; 220b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char s[1]; 221b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} BLOCK; 222b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 223b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projecttypedef struct { 224b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project BLOCK *blocks; 225b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project BLOCK *freeBlocks; 226b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *end; 227b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char *ptr; 228b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char *start; 229b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Memory_Handling_Suite *mem; 230b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} STRING_POOL; 231b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 232b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project/* The XML_Char before the name is used to determine whether 233b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project an attribute has been specified. */ 234b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projecttypedef struct attribute_id { 235b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char *name; 236b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project PREFIX *prefix; 237b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool maybeTokenized; 238b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool xmlns; 239b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} ATTRIBUTE_ID; 240b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 241b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projecttypedef struct { 242b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const ATTRIBUTE_ID *id; 243b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool isCdata; 244b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *value; 245b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} DEFAULT_ATTRIBUTE; 246b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 247b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projecttypedef struct { 248b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unsigned long version; 249b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unsigned long hash; 250b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *uriName; 251b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} NS_ATT; 252b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 253b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projecttypedef struct { 254b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *name; 255b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project PREFIX *prefix; 256b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const ATTRIBUTE_ID *idAtt; 257b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int nDefaultAtts; 258b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int allocDefaultAtts; 259b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project DEFAULT_ATTRIBUTE *defaultAtts; 260b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} ELEMENT_TYPE; 261b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 262b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projecttypedef struct { 263b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project HASH_TABLE generalEntities; 264b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project HASH_TABLE elementTypes; 265b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project HASH_TABLE attributeIds; 266b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project HASH_TABLE prefixes; 267b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project STRING_POOL pool; 268b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project STRING_POOL entityValuePool; 269b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* false once a parameter entity reference has been skipped */ 270b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool keepProcessing; 271b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* true once an internal or external PE reference has been encountered; 272b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project this includes the reference to an external subset */ 273b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool hasParamEntityRefs; 274b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool standalone; 275b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 276b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* indicates if external PE has been read */ 277b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool paramEntityRead; 278b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project HASH_TABLE paramEntities; 279b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 280b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project PREFIX defaultPrefix; 281b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* === scaffolding for building content model === */ 282b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool in_eldecl; 283b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project CONTENT_SCAFFOLD *scaffold; 284b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unsigned contentStringLen; 285b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unsigned scaffSize; 286b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unsigned scaffCount; 287b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int scaffLevel; 288b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int *scaffIndex; 289b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} DTD; 290b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 291b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projecttypedef struct open_internal_entity { 292b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *internalEventPtr; 293b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *internalEventEndPtr; 294b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project struct open_internal_entity *next; 295b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ENTITY *entity; 296b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int startTagLevel; 297b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool betweenDecl; /* WFC: PE Between Declarations */ 298b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} OPEN_INTERNAL_ENTITY; 299b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 300b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projecttypedef enum XML_Error PTRCALL Processor(XML_Parser parser, 301b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *start, 302b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end, 303b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **endPtr); 304b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 305b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic Processor prologProcessor; 306b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic Processor prologInitProcessor; 307b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic Processor contentProcessor; 308b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic Processor cdataSectionProcessor; 309b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 310b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic Processor ignoreSectionProcessor; 311b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic Processor externalParEntProcessor; 312b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic Processor externalParEntInitProcessor; 313b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic Processor entityValueProcessor; 314b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic Processor entityValueInitProcessor; 315b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 316b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic Processor epilogProcessor; 317b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic Processor errorProcessor; 318b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic Processor externalEntityInitProcessor; 319b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic Processor externalEntityInitProcessor2; 320b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic Processor externalEntityInitProcessor3; 321b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic Processor externalEntityContentProcessor; 322b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic Processor internalEntityProcessor; 323b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 324b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error 325b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjecthandleUnknownEncoding(XML_Parser parser, const XML_Char *encodingName); 326b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error 327b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectprocessXmlDecl(XML_Parser parser, int isGeneralTextEntity, 328b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *s, const char *next); 329b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error 330b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectinitializeEncoding(XML_Parser parser); 331b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error 33235e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott HughesdoProlog(XML_Parser parser, const ENCODING *enc, const char *s, 33335e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes const char *end, int tok, const char *next, const char **nextPtr, 334b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool haveMore); 335b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error 33635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott HughesprocessInternalEntity(XML_Parser parser, ENTITY *entity, 337b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool betweenDecl); 338b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error 339b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectdoContent(XML_Parser parser, int startTagLevel, const ENCODING *enc, 34035e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes const char *start, const char *end, const char **endPtr, 341b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool haveMore); 342b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error 343b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectdoCdataSection(XML_Parser parser, const ENCODING *, const char **startPtr, 344b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end, const char **nextPtr, XML_Bool haveMore); 345b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 346b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error 347b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectdoIgnoreSection(XML_Parser parser, const ENCODING *, const char **startPtr, 348b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end, const char **nextPtr, XML_Bool haveMore); 349b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 350b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 351b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error 352b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectstoreAtts(XML_Parser parser, const ENCODING *, const char *s, 353b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project TAG_NAME *tagNamePtr, BINDING **bindingsPtr); 354b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error 355b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectaddBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId, 356b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *uri, BINDING **bindingsPtr); 357b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic int 35835e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott HughesdefineAttribute(ELEMENT_TYPE *type, ATTRIBUTE_ID *, XML_Bool isCdata, 359b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool isId, const XML_Char *dfltValue, XML_Parser parser); 360b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error 361b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectstoreAttributeValue(XML_Parser parser, const ENCODING *, XML_Bool isCdata, 362b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *, const char *, STRING_POOL *); 363b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error 364b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectappendAttributeValue(XML_Parser parser, const ENCODING *, XML_Bool isCdata, 365b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *, const char *, STRING_POOL *); 366b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic ATTRIBUTE_ID * 367b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectgetAttributeId(XML_Parser parser, const ENCODING *enc, const char *start, 368b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end); 369b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic int 370b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectsetElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *); 371b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error 372b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectstoreEntityValue(XML_Parser parser, const ENCODING *enc, const char *start, 373b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end); 374b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic int 375b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectreportProcessingInstruction(XML_Parser parser, const ENCODING *enc, 376b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *start, const char *end); 377b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic int 378b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectreportComment(XML_Parser parser, const ENCODING *enc, const char *start, 379b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end); 380b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic void 381b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectreportDefault(XML_Parser parser, const ENCODING *enc, const char *start, 382b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end); 383b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 384b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic const XML_Char * getContext(XML_Parser parser); 385b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic XML_Bool 386b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectsetContext(XML_Parser parser, const XML_Char *context); 387b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 388b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic void FASTCALL normalizePublicId(XML_Char *s); 389b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 390b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic DTD * dtdCreate(const XML_Memory_Handling_Suite *ms); 391b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project/* do not call if parentParser != NULL */ 392b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic void dtdReset(DTD *p, const XML_Memory_Handling_Suite *ms); 393b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic void 394b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectdtdDestroy(DTD *p, XML_Bool isDocEntity, const XML_Memory_Handling_Suite *ms); 395b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic int 39635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott HughesdtdCopy(XML_Parser oldParser, 39735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes DTD *newDtd, const DTD *oldDtd, const XML_Memory_Handling_Suite *ms); 398b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic int 39935e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott HughescopyEntityTable(XML_Parser oldParser, 40035e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes HASH_TABLE *, STRING_POOL *, const HASH_TABLE *); 401b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic NAMED * 40235e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hugheslookup(XML_Parser parser, HASH_TABLE *table, KEY name, size_t createSize); 403b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic void FASTCALL 404b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjecthashTableInit(HASH_TABLE *, const XML_Memory_Handling_Suite *ms); 405b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic void FASTCALL hashTableClear(HASH_TABLE *); 406b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic void FASTCALL hashTableDestroy(HASH_TABLE *); 407b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic void FASTCALL 408b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjecthashTableIterInit(HASH_TABLE_ITER *, const HASH_TABLE *); 409b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic NAMED * FASTCALL hashTableIterNext(HASH_TABLE_ITER *); 410b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 411b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic void FASTCALL 412b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectpoolInit(STRING_POOL *, const XML_Memory_Handling_Suite *ms); 413b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic void FASTCALL poolClear(STRING_POOL *); 414b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic void FASTCALL poolDestroy(STRING_POOL *); 415b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic XML_Char * 416b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectpoolAppend(STRING_POOL *pool, const ENCODING *enc, 417b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *ptr, const char *end); 418b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic XML_Char * 419b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectpoolStoreString(STRING_POOL *pool, const ENCODING *enc, 420b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *ptr, const char *end); 421b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic XML_Bool FASTCALL poolGrow(STRING_POOL *pool); 422b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic const XML_Char * FASTCALL 423b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectpoolCopyString(STRING_POOL *pool, const XML_Char *s); 424b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic const XML_Char * 425b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectpoolCopyStringN(STRING_POOL *pool, const XML_Char *s, int n); 426b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic const XML_Char * FASTCALL 427b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectpoolAppendString(STRING_POOL *pool, const XML_Char *s); 428b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 429b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic int FASTCALL nextScaffoldPart(XML_Parser parser); 430b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic XML_Content * build_model(XML_Parser parser); 431b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic ELEMENT_TYPE * 432b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectgetElementType(XML_Parser parser, const ENCODING *enc, 433b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *ptr, const char *end); 434b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 43535e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughesstatic unsigned long generate_hash_secret_salt(void); 43635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughesstatic XML_Bool startParsing(XML_Parser parser); 43735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes 438b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic XML_Parser 439b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectparserCreate(const XML_Char *encodingName, 440b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Memory_Handling_Suite *memsuite, 441b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *nameSep, 442b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project DTD *dtd); 44335e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes 444b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic void 445b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectparserInit(XML_Parser parser, const XML_Char *encodingName); 446b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 447b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define poolStart(pool) ((pool)->start) 448b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define poolEnd(pool) ((pool)->ptr) 449b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define poolLength(pool) ((pool)->ptr - (pool)->start) 450b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define poolChop(pool) ((void)--(pool->ptr)) 451b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define poolLastChar(pool) (((pool)->ptr)[-1]) 452b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define poolDiscard(pool) ((pool)->ptr = (pool)->start) 453b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define poolFinish(pool) ((pool)->start = (pool)->ptr) 454b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define poolAppendChar(pool, c) \ 455b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (((pool)->ptr == (pool)->end && !poolGrow(pool)) \ 456b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ? 0 \ 457b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project : ((*((pool)->ptr)++ = c), 1)) 458b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 459b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstruct XML_ParserStruct { 460b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* The first member must be userData so that the XML_GetUserData 461b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project macro works. */ 462b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project void *m_userData; 463b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project void *m_handlerArg; 464b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project char *m_buffer; 465b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Memory_Handling_Suite m_mem; 466b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* first character to be parsed */ 467b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *m_bufferPtr; 468b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* past last character to be parsed */ 469b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project char *m_bufferEnd; 470b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* allocated end of buffer */ 471b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *m_bufferLim; 472b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Index m_parseEndByteIndex; 473b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *m_parseEndPtr; 474b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char *m_dataBuf; 475b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char *m_dataBufEnd; 476b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_StartElementHandler m_startElementHandler; 477b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_EndElementHandler m_endElementHandler; 478b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_CharacterDataHandler m_characterDataHandler; 479b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_ProcessingInstructionHandler m_processingInstructionHandler; 480b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_CommentHandler m_commentHandler; 481b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_StartCdataSectionHandler m_startCdataSectionHandler; 482b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_EndCdataSectionHandler m_endCdataSectionHandler; 483b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_DefaultHandler m_defaultHandler; 484b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_StartDoctypeDeclHandler m_startDoctypeDeclHandler; 485b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_EndDoctypeDeclHandler m_endDoctypeDeclHandler; 486b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_UnparsedEntityDeclHandler m_unparsedEntityDeclHandler; 487b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_NotationDeclHandler m_notationDeclHandler; 488b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_StartNamespaceDeclHandler m_startNamespaceDeclHandler; 489b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_EndNamespaceDeclHandler m_endNamespaceDeclHandler; 490b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_NotStandaloneHandler m_notStandaloneHandler; 491b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_ExternalEntityRefHandler m_externalEntityRefHandler; 492b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Parser m_externalEntityRefHandlerArg; 493b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_SkippedEntityHandler m_skippedEntityHandler; 494b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_UnknownEncodingHandler m_unknownEncodingHandler; 495b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_ElementDeclHandler m_elementDeclHandler; 496b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_AttlistDeclHandler m_attlistDeclHandler; 497b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_EntityDeclHandler m_entityDeclHandler; 498b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_XmlDeclHandler m_xmlDeclHandler; 499b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const ENCODING *m_encoding; 500b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project INIT_ENCODING m_initEncoding; 501b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const ENCODING *m_internalEncoding; 502b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *m_protocolEncodingName; 503b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool m_ns; 504b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool m_ns_triplets; 505b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project void *m_unknownEncodingMem; 506b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project void *m_unknownEncodingData; 507b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project void *m_unknownEncodingHandlerData; 508b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project void (XMLCALL *m_unknownEncodingRelease)(void *); 509b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project PROLOG_STATE m_prologState; 510b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project Processor *m_processor; 511b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Error m_errorCode; 512b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *m_eventPtr; 513b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *m_eventEndPtr; 514b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *m_positionPtr; 515b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project OPEN_INTERNAL_ENTITY *m_openInternalEntities; 516b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project OPEN_INTERNAL_ENTITY *m_freeInternalEntities; 517b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool m_defaultExpandInternalEntities; 518b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int m_tagLevel; 519b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ENTITY *m_declEntity; 520b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *m_doctypeName; 521b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *m_doctypeSysid; 522b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *m_doctypePubid; 523b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *m_declAttributeType; 524b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *m_declNotationName; 525b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *m_declNotationPublicId; 526b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ELEMENT_TYPE *m_declElementType; 527b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ATTRIBUTE_ID *m_declAttributeId; 528b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool m_declAttributeIsCdata; 529b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool m_declAttributeIsId; 530b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project DTD *m_dtd; 531b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *m_curBase; 532b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project TAG *m_tagStack; 533b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project TAG *m_freeTagList; 534b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project BINDING *m_inheritedBindings; 535b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project BINDING *m_freeBindingList; 536b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int m_attsSize; 537b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int m_nSpecifiedAtts; 538b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int m_idAttIndex; 539b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ATTRIBUTE *m_atts; 540b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project NS_ATT *m_nsAtts; 541b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unsigned long m_nsAttsVersion; 542b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unsigned char m_nsAttsPower; 54335e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes#ifdef XML_ATTR_INFO 54435e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes XML_AttrInfo *m_attInfo; 54535e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes#endif 546b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project POSITION m_position; 547b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project STRING_POOL m_tempPool; 548b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project STRING_POOL m_temp2Pool; 549b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project char *m_groupConnector; 550b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unsigned int m_groupSize; 551b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char m_namespaceSeparator; 552b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Parser m_parentParser; 553b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_ParsingStatus m_parsingStatus; 554b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 555b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool m_isParamEntity; 556b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool m_useForeignDTD; 557b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_ParamEntityParsing m_paramEntityParsing; 558b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif 55935e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes unsigned long m_hash_secret_salt; 560b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project}; 561b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 562b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define MALLOC(s) (parser->m_mem.malloc_fcn((s))) 563b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define REALLOC(p,s) (parser->m_mem.realloc_fcn((p),(s))) 564b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define FREE(p) (parser->m_mem.free_fcn((p))) 565b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 566b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define userData (parser->m_userData) 567b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define handlerArg (parser->m_handlerArg) 568b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define startElementHandler (parser->m_startElementHandler) 569b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define endElementHandler (parser->m_endElementHandler) 570b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define characterDataHandler (parser->m_characterDataHandler) 571b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define processingInstructionHandler \ 572b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (parser->m_processingInstructionHandler) 573b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define commentHandler (parser->m_commentHandler) 574b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define startCdataSectionHandler \ 575b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (parser->m_startCdataSectionHandler) 576b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define endCdataSectionHandler (parser->m_endCdataSectionHandler) 577b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define defaultHandler (parser->m_defaultHandler) 578b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define startDoctypeDeclHandler (parser->m_startDoctypeDeclHandler) 579b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define endDoctypeDeclHandler (parser->m_endDoctypeDeclHandler) 580b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define unparsedEntityDeclHandler \ 581b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (parser->m_unparsedEntityDeclHandler) 582b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define notationDeclHandler (parser->m_notationDeclHandler) 583b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define startNamespaceDeclHandler \ 584b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (parser->m_startNamespaceDeclHandler) 585b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define endNamespaceDeclHandler (parser->m_endNamespaceDeclHandler) 586b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define notStandaloneHandler (parser->m_notStandaloneHandler) 587b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define externalEntityRefHandler \ 588b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (parser->m_externalEntityRefHandler) 589b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define externalEntityRefHandlerArg \ 590b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (parser->m_externalEntityRefHandlerArg) 591b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define internalEntityRefHandler \ 592b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (parser->m_internalEntityRefHandler) 593b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define skippedEntityHandler (parser->m_skippedEntityHandler) 594b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define unknownEncodingHandler (parser->m_unknownEncodingHandler) 595b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define elementDeclHandler (parser->m_elementDeclHandler) 596b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define attlistDeclHandler (parser->m_attlistDeclHandler) 597b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define entityDeclHandler (parser->m_entityDeclHandler) 598b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define xmlDeclHandler (parser->m_xmlDeclHandler) 599b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define encoding (parser->m_encoding) 600b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define initEncoding (parser->m_initEncoding) 601b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define internalEncoding (parser->m_internalEncoding) 602b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define unknownEncodingMem (parser->m_unknownEncodingMem) 603b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define unknownEncodingData (parser->m_unknownEncodingData) 604b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define unknownEncodingHandlerData \ 605b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (parser->m_unknownEncodingHandlerData) 606b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define unknownEncodingRelease (parser->m_unknownEncodingRelease) 607b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define protocolEncodingName (parser->m_protocolEncodingName) 608b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define ns (parser->m_ns) 609b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define ns_triplets (parser->m_ns_triplets) 610b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define prologState (parser->m_prologState) 611b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define processor (parser->m_processor) 612b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define errorCode (parser->m_errorCode) 613b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define eventPtr (parser->m_eventPtr) 614b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define eventEndPtr (parser->m_eventEndPtr) 615b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define positionPtr (parser->m_positionPtr) 616b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define position (parser->m_position) 617b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define openInternalEntities (parser->m_openInternalEntities) 618b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define freeInternalEntities (parser->m_freeInternalEntities) 619b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define defaultExpandInternalEntities \ 620b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (parser->m_defaultExpandInternalEntities) 621b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define tagLevel (parser->m_tagLevel) 622b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define buffer (parser->m_buffer) 623b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define bufferPtr (parser->m_bufferPtr) 624b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define bufferEnd (parser->m_bufferEnd) 625b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define parseEndByteIndex (parser->m_parseEndByteIndex) 626b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define parseEndPtr (parser->m_parseEndPtr) 627b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define bufferLim (parser->m_bufferLim) 628b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define dataBuf (parser->m_dataBuf) 629b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define dataBufEnd (parser->m_dataBufEnd) 630b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define _dtd (parser->m_dtd) 631b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define curBase (parser->m_curBase) 632b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define declEntity (parser->m_declEntity) 633b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define doctypeName (parser->m_doctypeName) 634b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define doctypeSysid (parser->m_doctypeSysid) 635b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define doctypePubid (parser->m_doctypePubid) 636b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define declAttributeType (parser->m_declAttributeType) 637b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define declNotationName (parser->m_declNotationName) 638b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define declNotationPublicId (parser->m_declNotationPublicId) 639b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define declElementType (parser->m_declElementType) 640b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define declAttributeId (parser->m_declAttributeId) 641b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define declAttributeIsCdata (parser->m_declAttributeIsCdata) 642b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define declAttributeIsId (parser->m_declAttributeIsId) 643b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define freeTagList (parser->m_freeTagList) 644b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define freeBindingList (parser->m_freeBindingList) 645b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define inheritedBindings (parser->m_inheritedBindings) 646b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define tagStack (parser->m_tagStack) 647b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define atts (parser->m_atts) 648b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define attsSize (parser->m_attsSize) 649b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define nSpecifiedAtts (parser->m_nSpecifiedAtts) 650b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define idAttIndex (parser->m_idAttIndex) 651b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define nsAtts (parser->m_nsAtts) 652b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define nsAttsVersion (parser->m_nsAttsVersion) 653b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define nsAttsPower (parser->m_nsAttsPower) 65435e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes#define attInfo (parser->m_attInfo) 655b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define tempPool (parser->m_tempPool) 656b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define temp2Pool (parser->m_temp2Pool) 657b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define groupConnector (parser->m_groupConnector) 658b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define groupSize (parser->m_groupSize) 659b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define namespaceSeparator (parser->m_namespaceSeparator) 660b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define parentParser (parser->m_parentParser) 661b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define ps_parsing (parser->m_parsingStatus.parsing) 662b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define ps_finalBuffer (parser->m_parsingStatus.finalBuffer) 663b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 664b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define isParamEntity (parser->m_isParamEntity) 665b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define useForeignDTD (parser->m_useForeignDTD) 666b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define paramEntityParsing (parser->m_paramEntityParsing) 667b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 66835e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes#define hash_secret_salt (parser->m_hash_secret_salt) 669b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 670b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_Parser XMLCALL 671b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_ParserCreate(const XML_Char *encodingName) 672b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 673b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ParserCreate_MM(encodingName, NULL, NULL); 674b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 675b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 676b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_Parser XMLCALL 677b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_ParserCreateNS(const XML_Char *encodingName, XML_Char nsSep) 678b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 679b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char tmp[2]; 680b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *tmp = nsSep; 681b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ParserCreate_MM(encodingName, NULL, tmp); 682b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 683b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 684b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic const XML_Char implicitContext[] = { 685d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes ASCII_x, ASCII_m, ASCII_l, ASCII_EQUALS, ASCII_h, ASCII_t, ASCII_t, ASCII_p, 68635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes ASCII_COLON, ASCII_SLASH, ASCII_SLASH, ASCII_w, ASCII_w, ASCII_w, 687d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes ASCII_PERIOD, ASCII_w, ASCII_3, ASCII_PERIOD, ASCII_o, ASCII_r, ASCII_g, 688d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes ASCII_SLASH, ASCII_X, ASCII_M, ASCII_L, ASCII_SLASH, ASCII_1, ASCII_9, 689d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes ASCII_9, ASCII_8, ASCII_SLASH, ASCII_n, ASCII_a, ASCII_m, ASCII_e, 690d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes ASCII_s, ASCII_p, ASCII_a, ASCII_c, ASCII_e, '\0' 691b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project}; 692b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 69335e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughesstatic unsigned long 69435e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughesgenerate_hash_secret_salt(void) 69535e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes{ 69635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes unsigned int seed = time(NULL) % UINT_MAX; 69735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes srand(seed); 69835e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes return rand(); 69935e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes} 70035e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes 70135e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughesstatic XML_Bool /* only valid for root parser */ 70235e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott HughesstartParsing(XML_Parser parser) 70335e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes{ 70435e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes /* hash functions must be initialized before setContext() is called */ 70535e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes if (hash_secret_salt == 0) 70635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes hash_secret_salt = generate_hash_secret_salt(); 70735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes if (ns) { 70835e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes /* implicit context only set for root parser, since child 70935e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes parsers (i.e. external entity parsers) will inherit it 71035e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes */ 71135e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes return setContext(parser, implicitContext); 71235e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes } 71335e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes return XML_TRUE; 71435e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes} 71535e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes 716b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_Parser XMLCALL 717b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_ParserCreate_MM(const XML_Char *encodingName, 718b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Memory_Handling_Suite *memsuite, 719b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *nameSep) 720b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 72135e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes return parserCreate(encodingName, memsuite, nameSep, NULL); 722b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 723b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 724b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic XML_Parser 725b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectparserCreate(const XML_Char *encodingName, 726b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Memory_Handling_Suite *memsuite, 727b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *nameSep, 728b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project DTD *dtd) 729b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 730b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Parser parser; 731b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 732b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (memsuite) { 733b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Memory_Handling_Suite *mtemp; 734b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project parser = (XML_Parser) 735b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project memsuite->malloc_fcn(sizeof(struct XML_ParserStruct)); 736b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (parser != NULL) { 737b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project mtemp = (XML_Memory_Handling_Suite *)&(parser->m_mem); 738b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project mtemp->malloc_fcn = memsuite->malloc_fcn; 739b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project mtemp->realloc_fcn = memsuite->realloc_fcn; 740b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project mtemp->free_fcn = memsuite->free_fcn; 741b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 742b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 743b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 744b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Memory_Handling_Suite *mtemp; 745b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project parser = (XML_Parser)malloc(sizeof(struct XML_ParserStruct)); 746b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (parser != NULL) { 747b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project mtemp = (XML_Memory_Handling_Suite *)&(parser->m_mem); 748b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project mtemp->malloc_fcn = malloc; 749b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project mtemp->realloc_fcn = realloc; 750b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project mtemp->free_fcn = free; 751b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 752b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 753b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 754b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!parser) 755b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return parser; 756b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 757b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project buffer = NULL; 758b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project bufferLim = NULL; 759b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 760b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project attsSize = INIT_ATTS_SIZE; 761b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project atts = (ATTRIBUTE *)MALLOC(attsSize * sizeof(ATTRIBUTE)); 762b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (atts == NULL) { 763b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project FREE(parser); 764b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 765b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 76635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes#ifdef XML_ATTR_INFO 76735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes attInfo = (XML_AttrInfo*)MALLOC(attsSize * sizeof(XML_AttrInfo)); 76835e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes if (attInfo == NULL) { 76935e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes FREE(atts); 77035e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes FREE(parser); 77135e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes return NULL; 77235e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes } 77335e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes#endif 774b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dataBuf = (XML_Char *)MALLOC(INIT_DATA_BUF_SIZE * sizeof(XML_Char)); 775b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dataBuf == NULL) { 776b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project FREE(atts); 77735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes#ifdef XML_ATTR_INFO 77835e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes FREE(attInfo); 77935e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes#endif 780b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project FREE(parser); 781b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 782b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 783b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dataBufEnd = dataBuf + INIT_DATA_BUF_SIZE; 784b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 785b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd) 786b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project _dtd = dtd; 787b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 788b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project _dtd = dtdCreate(&parser->m_mem); 789b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (_dtd == NULL) { 790b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project FREE(dataBuf); 791b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project FREE(atts); 79235e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes#ifdef XML_ATTR_INFO 79335e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes FREE(attInfo); 79435e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes#endif 795b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project FREE(parser); 796b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 797b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 798b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 799b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 800b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project freeBindingList = NULL; 801b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project freeTagList = NULL; 802b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project freeInternalEntities = NULL; 803b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 804b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project groupSize = 0; 805b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project groupConnector = NULL; 806b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 807b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unknownEncodingHandler = NULL; 808b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unknownEncodingHandlerData = NULL; 809b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 810d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes namespaceSeparator = ASCII_EXCL; 811b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ns = XML_FALSE; 812b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ns_triplets = XML_FALSE; 813b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 814b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project nsAtts = NULL; 815b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project nsAttsVersion = 0; 816b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project nsAttsPower = 0; 817b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 818b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolInit(&tempPool, &(parser->m_mem)); 819b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolInit(&temp2Pool, &(parser->m_mem)); 820b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project parserInit(parser, encodingName); 821b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 822b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (encodingName && !protocolEncodingName) { 823b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_ParserFree(parser); 824b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 825b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 826b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 827b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (nameSep) { 828b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ns = XML_TRUE; 829b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project internalEncoding = XmlGetInternalEncodingNS(); 830b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project namespaceSeparator = *nameSep; 831b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 832b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 833b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project internalEncoding = XmlGetInternalEncoding(); 834b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 835b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 836b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return parser; 837b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 838b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 839b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic void 840b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectparserInit(XML_Parser parser, const XML_Char *encodingName) 841b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 842b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processor = prologInitProcessor; 843b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XmlPrologStateInit(&prologState); 844b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project protocolEncodingName = (encodingName != NULL 845b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ? poolCopyString(&tempPool, encodingName) 846b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project : NULL); 847b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project curBase = NULL; 848b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XmlInitEncoding(&initEncoding, &encoding, 0); 849b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project userData = NULL; 850b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handlerArg = NULL; 851b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project startElementHandler = NULL; 852b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project endElementHandler = NULL; 853b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project characterDataHandler = NULL; 854b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processingInstructionHandler = NULL; 855b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project commentHandler = NULL; 856b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project startCdataSectionHandler = NULL; 857b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project endCdataSectionHandler = NULL; 858b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project defaultHandler = NULL; 859b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project startDoctypeDeclHandler = NULL; 860b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project endDoctypeDeclHandler = NULL; 861b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unparsedEntityDeclHandler = NULL; 862b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project notationDeclHandler = NULL; 863b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project startNamespaceDeclHandler = NULL; 864b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project endNamespaceDeclHandler = NULL; 865b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project notStandaloneHandler = NULL; 866b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project externalEntityRefHandler = NULL; 867b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project externalEntityRefHandlerArg = parser; 868b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project skippedEntityHandler = NULL; 869b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project elementDeclHandler = NULL; 870b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project attlistDeclHandler = NULL; 871b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entityDeclHandler = NULL; 872b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project xmlDeclHandler = NULL; 873b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project bufferPtr = buffer; 874b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project bufferEnd = buffer; 875b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project parseEndByteIndex = 0; 876b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project parseEndPtr = NULL; 877b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declElementType = NULL; 878b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declAttributeId = NULL; 879b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity = NULL; 880b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project doctypeName = NULL; 881b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project doctypeSysid = NULL; 882b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project doctypePubid = NULL; 883b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declAttributeType = NULL; 884b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declNotationName = NULL; 885b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declNotationPublicId = NULL; 886b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declAttributeIsCdata = XML_FALSE; 887b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declAttributeIsId = XML_FALSE; 888b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project memset(&position, 0, sizeof(POSITION)); 889b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project errorCode = XML_ERROR_NONE; 890b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = NULL; 891b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventEndPtr = NULL; 892b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project positionPtr = NULL; 893b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project openInternalEntities = NULL; 894b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project defaultExpandInternalEntities = XML_TRUE; 895b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tagLevel = 0; 896b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tagStack = NULL; 897b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project inheritedBindings = NULL; 898b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project nSpecifiedAtts = 0; 899b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unknownEncodingMem = NULL; 900b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unknownEncodingRelease = NULL; 901b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unknownEncodingData = NULL; 902b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project parentParser = NULL; 903b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ps_parsing = XML_INITIALIZED; 904b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 905b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project isParamEntity = XML_FALSE; 906b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project useForeignDTD = XML_FALSE; 907b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER; 908b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif 90935e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes hash_secret_salt = 0; 910b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 911b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 912b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project/* moves list of bindings to freeBindingList */ 913b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic void FASTCALL 914b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectmoveToFreeBindingList(XML_Parser parser, BINDING *bindings) 915b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 916b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project while (bindings) { 917b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project BINDING *b = bindings; 918b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project bindings = bindings->nextTagBinding; 919b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project b->nextTagBinding = freeBindingList; 920b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project freeBindingList = b; 921b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 922b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 923b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 924b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_Bool XMLCALL 925b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_ParserReset(XML_Parser parser, const XML_Char *encodingName) 926b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 927b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project TAG *tStk; 928b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project OPEN_INTERNAL_ENTITY *openEntityList; 929b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (parentParser) 930b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_FALSE; 931b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* move tagStack to freeTagList */ 932b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tStk = tagStack; 933b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project while (tStk) { 934b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project TAG *tag = tStk; 935b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tStk = tStk->parent; 936b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tag->parent = freeTagList; 937b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project moveToFreeBindingList(parser, tag->bindings); 938b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tag->bindings = NULL; 939b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project freeTagList = tag; 940b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 941b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* move openInternalEntities to freeInternalEntities */ 942b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project openEntityList = openInternalEntities; 943b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project while (openEntityList) { 944b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project OPEN_INTERNAL_ENTITY *openEntity = openEntityList; 945b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project openEntityList = openEntity->next; 946b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project openEntity->next = freeInternalEntities; 947b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project freeInternalEntities = openEntity; 948b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 949b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project moveToFreeBindingList(parser, inheritedBindings); 950b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project FREE(unknownEncodingMem); 951b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (unknownEncodingRelease) 952b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unknownEncodingRelease(unknownEncodingData); 953b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolClear(&tempPool); 954b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolClear(&temp2Pool); 955b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project parserInit(parser, encodingName); 956b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtdReset(_dtd, &parser->m_mem); 95735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes return XML_TRUE; 958b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 959b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 960b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectenum XML_Status XMLCALL 961b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetEncoding(XML_Parser parser, const XML_Char *encodingName) 962b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 963b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* Block after XML_Parse()/XML_ParseBuffer() has been called. 964b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XXX There's no way for the caller to determine which of the 965b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XXX possible error cases caused the XML_STATUS_ERROR return. 966b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 967b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (ps_parsing == XML_PARSING || ps_parsing == XML_SUSPENDED) 968b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_STATUS_ERROR; 969b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (encodingName == NULL) 970b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project protocolEncodingName = NULL; 971b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 972b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project protocolEncodingName = poolCopyString(&tempPool, encodingName); 973b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!protocolEncodingName) 974b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_STATUS_ERROR; 975b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 976b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_STATUS_OK; 977b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 978b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 979b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_Parser XMLCALL 980b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_ExternalEntityParserCreate(XML_Parser oldParser, 981b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *context, 982b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *encodingName) 983b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 984b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Parser parser = oldParser; 985b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project DTD *newDtd = NULL; 986b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project DTD *oldDtd = _dtd; 987b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_StartElementHandler oldStartElementHandler = startElementHandler; 988b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_EndElementHandler oldEndElementHandler = endElementHandler; 989b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_CharacterDataHandler oldCharacterDataHandler = characterDataHandler; 990b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_ProcessingInstructionHandler oldProcessingInstructionHandler 991b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project = processingInstructionHandler; 992b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_CommentHandler oldCommentHandler = commentHandler; 993b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_StartCdataSectionHandler oldStartCdataSectionHandler 994b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project = startCdataSectionHandler; 995b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_EndCdataSectionHandler oldEndCdataSectionHandler 996b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project = endCdataSectionHandler; 997b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_DefaultHandler oldDefaultHandler = defaultHandler; 998b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_UnparsedEntityDeclHandler oldUnparsedEntityDeclHandler 999b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project = unparsedEntityDeclHandler; 1000b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_NotationDeclHandler oldNotationDeclHandler = notationDeclHandler; 1001b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_StartNamespaceDeclHandler oldStartNamespaceDeclHandler 1002b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project = startNamespaceDeclHandler; 1003b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_EndNamespaceDeclHandler oldEndNamespaceDeclHandler 1004b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project = endNamespaceDeclHandler; 1005b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_NotStandaloneHandler oldNotStandaloneHandler = notStandaloneHandler; 1006b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_ExternalEntityRefHandler oldExternalEntityRefHandler 1007b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project = externalEntityRefHandler; 1008b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_SkippedEntityHandler oldSkippedEntityHandler = skippedEntityHandler; 1009b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_UnknownEncodingHandler oldUnknownEncodingHandler 1010b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project = unknownEncodingHandler; 1011b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_ElementDeclHandler oldElementDeclHandler = elementDeclHandler; 1012b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_AttlistDeclHandler oldAttlistDeclHandler = attlistDeclHandler; 1013b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_EntityDeclHandler oldEntityDeclHandler = entityDeclHandler; 1014b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_XmlDeclHandler oldXmlDeclHandler = xmlDeclHandler; 1015b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ELEMENT_TYPE * oldDeclElementType = declElementType; 1016b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1017b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project void *oldUserData = userData; 1018b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project void *oldHandlerArg = handlerArg; 1019b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool oldDefaultExpandInternalEntities = defaultExpandInternalEntities; 1020b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Parser oldExternalEntityRefHandlerArg = externalEntityRefHandlerArg; 1021b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 1022b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_ParamEntityParsing oldParamEntityParsing = paramEntityParsing; 1023b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int oldInEntityValue = prologState.inEntityValue; 1024b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif 1025b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool oldns_triplets = ns_triplets; 102635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes /* Note that the new parser shares the same hash secret as the old 102735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes parser, so that dtdCopy and copyEntityTable can lookup values 102835e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes from hash tables associated with either parser without us having 102935e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes to worry which hash secrets each table has. 103035e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes */ 103135e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes unsigned long oldhash_secret_salt = hash_secret_salt; 1032b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1033b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 1034b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!context) 1035b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newDtd = oldDtd; 1036b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 1037b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1038b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* Note that the magical uses of the pre-processor to make field 1039b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project access look more like C++ require that `parser' be overwritten 1040b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project here. This makes this function more painful to follow than it 1041b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project would be otherwise. 1042b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 1043b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (ns) { 1044b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char tmp[2]; 1045b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *tmp = namespaceSeparator; 1046b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project parser = parserCreate(encodingName, &parser->m_mem, tmp, newDtd); 1047b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1048b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 1049b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project parser = parserCreate(encodingName, &parser->m_mem, NULL, newDtd); 1050b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1051b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1052b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!parser) 1053b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 1054b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1055b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project startElementHandler = oldStartElementHandler; 1056b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project endElementHandler = oldEndElementHandler; 1057b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project characterDataHandler = oldCharacterDataHandler; 1058b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processingInstructionHandler = oldProcessingInstructionHandler; 1059b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project commentHandler = oldCommentHandler; 1060b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project startCdataSectionHandler = oldStartCdataSectionHandler; 1061b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project endCdataSectionHandler = oldEndCdataSectionHandler; 1062b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project defaultHandler = oldDefaultHandler; 1063b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unparsedEntityDeclHandler = oldUnparsedEntityDeclHandler; 1064b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project notationDeclHandler = oldNotationDeclHandler; 1065b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project startNamespaceDeclHandler = oldStartNamespaceDeclHandler; 1066b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project endNamespaceDeclHandler = oldEndNamespaceDeclHandler; 1067b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project notStandaloneHandler = oldNotStandaloneHandler; 1068b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project externalEntityRefHandler = oldExternalEntityRefHandler; 1069b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project skippedEntityHandler = oldSkippedEntityHandler; 1070b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unknownEncodingHandler = oldUnknownEncodingHandler; 1071b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project elementDeclHandler = oldElementDeclHandler; 1072b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project attlistDeclHandler = oldAttlistDeclHandler; 1073b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entityDeclHandler = oldEntityDeclHandler; 1074b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project xmlDeclHandler = oldXmlDeclHandler; 1075b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declElementType = oldDeclElementType; 1076b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project userData = oldUserData; 1077b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (oldUserData == oldHandlerArg) 1078b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handlerArg = userData; 1079b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 1080b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handlerArg = parser; 1081b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (oldExternalEntityRefHandlerArg != oldParser) 1082b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project externalEntityRefHandlerArg = oldExternalEntityRefHandlerArg; 1083b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project defaultExpandInternalEntities = oldDefaultExpandInternalEntities; 1084b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ns_triplets = oldns_triplets; 108535e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes hash_secret_salt = oldhash_secret_salt; 1086b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project parentParser = oldParser; 1087b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 1088b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project paramEntityParsing = oldParamEntityParsing; 1089b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project prologState.inEntityValue = oldInEntityValue; 1090b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (context) { 1091b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 109235e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes if (!dtdCopy(oldParser, _dtd, oldDtd, &parser->m_mem) 1093b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project || !setContext(parser, context)) { 1094b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_ParserFree(parser); 1095b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 1096b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1097b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processor = externalEntityInitProcessor; 1098b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 1099b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1100b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 1101b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* The DTD instance referenced by _dtd is shared between the document's 1102b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project root parser and external PE parsers, therefore one does not need to 1103b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project call setContext. In addition, one also *must* not call setContext, 1104b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project because this would overwrite existing prefix->binding pointers in 1105b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project _dtd with ones that get destroyed with the external PE parser. 1106b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project This would leave those prefixes with dangling pointers. 1107b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 1108b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project isParamEntity = XML_TRUE; 1109b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XmlPrologStateInitExternalEntity(&prologState); 1110b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processor = externalParEntInitProcessor; 1111b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1112b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 1113b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return parser; 1114b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1115b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1116b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic void FASTCALL 1117b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectdestroyBindings(BINDING *bindings, XML_Parser parser) 1118b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1119b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (;;) { 1120b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project BINDING *b = bindings; 1121b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!b) 1122b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 1123b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project bindings = b->nextTagBinding; 1124b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project FREE(b->uri); 1125b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project FREE(b); 1126b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1127b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1128b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1129b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1130b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_ParserFree(XML_Parser parser) 1131b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1132b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project TAG *tagList; 1133b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project OPEN_INTERNAL_ENTITY *entityList; 1134b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (parser == NULL) 1135b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return; 1136b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* free tagStack and freeTagList */ 1137b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tagList = tagStack; 1138b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (;;) { 1139b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project TAG *p; 1140b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (tagList == NULL) { 1141b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (freeTagList == NULL) 1142b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 1143b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tagList = freeTagList; 1144b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project freeTagList = NULL; 1145b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1146b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p = tagList; 1147b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tagList = tagList->parent; 1148b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project FREE(p->buf); 1149b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project destroyBindings(p->bindings, parser); 1150b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project FREE(p); 1151b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1152b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* free openInternalEntities and freeInternalEntities */ 1153b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entityList = openInternalEntities; 1154b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (;;) { 1155b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project OPEN_INTERNAL_ENTITY *openEntity; 1156b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (entityList == NULL) { 1157b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (freeInternalEntities == NULL) 1158b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 1159b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entityList = freeInternalEntities; 1160b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project freeInternalEntities = NULL; 1161b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1162b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project openEntity = entityList; 1163b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entityList = entityList->next; 1164b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project FREE(openEntity); 1165b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1166b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1167b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project destroyBindings(freeBindingList, parser); 1168b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project destroyBindings(inheritedBindings, parser); 1169b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolDestroy(&tempPool); 1170b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolDestroy(&temp2Pool); 1171b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 1172b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* external parameter entity parsers share the DTD structure 1173b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project parser->m_dtd with the root parser, so we must not destroy it 1174b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 1175b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!isParamEntity && _dtd) 1176b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#else 1177b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (_dtd) 1178b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 1179b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtdDestroy(_dtd, (XML_Bool)!parentParser, &parser->m_mem); 1180b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project FREE((void *)atts); 118135e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes#ifdef XML_ATTR_INFO 118235e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes FREE((void *)attInfo); 118335e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes#endif 1184b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project FREE(groupConnector); 1185b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project FREE(buffer); 1186b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project FREE(dataBuf); 1187b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project FREE(nsAtts); 1188b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project FREE(unknownEncodingMem); 1189b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (unknownEncodingRelease) 1190b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unknownEncodingRelease(unknownEncodingData); 1191b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project FREE(parser); 1192b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1193b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1194b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1195b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_UseParserAsHandlerArg(XML_Parser parser) 1196b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1197b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handlerArg = parser; 1198b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1199b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1200b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectenum XML_Error XMLCALL 1201b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD) 1202b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1203b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 1204b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* block after XML_Parse()/XML_ParseBuffer() has been called */ 1205b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (ps_parsing == XML_PARSING || ps_parsing == XML_SUSPENDED) 1206b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING; 1207b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project useForeignDTD = useDTD; 1208b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 1209b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#else 1210b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_FEATURE_REQUIRES_XML_DTD; 1211b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif 1212b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1213b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1214b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1215b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetReturnNSTriplet(XML_Parser parser, int do_nst) 1216b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1217b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* block after XML_Parse()/XML_ParseBuffer() has been called */ 1218b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (ps_parsing == XML_PARSING || ps_parsing == XML_SUSPENDED) 1219b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return; 1220b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ns_triplets = do_nst ? XML_TRUE : XML_FALSE; 1221b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1222b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1223b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1224b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetUserData(XML_Parser parser, void *p) 1225b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1226b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (handlerArg == userData) 1227b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handlerArg = userData = p; 1228b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 1229b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project userData = p; 1230b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1231b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1232b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectenum XML_Status XMLCALL 1233b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetBase(XML_Parser parser, const XML_Char *p) 1234b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1235b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (p) { 1236b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p = poolCopyString(&_dtd->pool, p); 1237b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!p) 1238b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_STATUS_ERROR; 1239b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project curBase = p; 1240b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1241b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 1242b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project curBase = NULL; 1243b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_STATUS_OK; 1244b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1245b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1246b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectconst XML_Char * XMLCALL 1247b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_GetBase(XML_Parser parser) 1248b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1249b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return curBase; 1250b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1251b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1252b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectint XMLCALL 1253b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_GetSpecifiedAttributeCount(XML_Parser parser) 1254b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1255b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return nSpecifiedAtts; 1256b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1257b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1258b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectint XMLCALL 1259b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_GetIdAttributeIndex(XML_Parser parser) 1260b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1261b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return idAttIndex; 1262b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1263b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 126435e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes#ifdef XML_ATTR_INFO 126535e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughesconst XML_AttrInfo * XMLCALL 126635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott HughesXML_GetAttributeInfo(XML_Parser parser) 126735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes{ 126835e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes return attInfo; 126935e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes} 127035e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes#endif 127135e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes 1272b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1273b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetElementHandler(XML_Parser parser, 1274b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_StartElementHandler start, 1275b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_EndElementHandler end) 1276b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1277b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project startElementHandler = start; 1278b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project endElementHandler = end; 1279b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1280b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1281b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1282b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetStartElementHandler(XML_Parser parser, 1283b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_StartElementHandler start) { 1284b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project startElementHandler = start; 1285b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1286b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1287b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1288b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetEndElementHandler(XML_Parser parser, 1289b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_EndElementHandler end) { 1290b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project endElementHandler = end; 1291b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1292b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1293b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1294b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetCharacterDataHandler(XML_Parser parser, 1295b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_CharacterDataHandler handler) 1296b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1297b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project characterDataHandler = handler; 1298b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1299b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1300b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1301b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetProcessingInstructionHandler(XML_Parser parser, 1302b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_ProcessingInstructionHandler handler) 1303b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1304b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processingInstructionHandler = handler; 1305b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1306b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1307b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1308b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetCommentHandler(XML_Parser parser, 1309b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_CommentHandler handler) 1310b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1311b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project commentHandler = handler; 1312b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1313b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1314b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1315b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetCdataSectionHandler(XML_Parser parser, 1316b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_StartCdataSectionHandler start, 1317b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_EndCdataSectionHandler end) 1318b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1319b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project startCdataSectionHandler = start; 1320b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project endCdataSectionHandler = end; 1321b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1322b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1323b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1324b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetStartCdataSectionHandler(XML_Parser parser, 1325b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_StartCdataSectionHandler start) { 1326b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project startCdataSectionHandler = start; 1327b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1328b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1329b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1330b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetEndCdataSectionHandler(XML_Parser parser, 1331b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_EndCdataSectionHandler end) { 1332b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project endCdataSectionHandler = end; 1333b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1334b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1335b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1336b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetDefaultHandler(XML_Parser parser, 1337b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_DefaultHandler handler) 1338b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1339b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project defaultHandler = handler; 1340b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project defaultExpandInternalEntities = XML_FALSE; 1341b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1342b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1343b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1344b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetDefaultHandlerExpand(XML_Parser parser, 1345b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_DefaultHandler handler) 1346b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1347b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project defaultHandler = handler; 1348b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project defaultExpandInternalEntities = XML_TRUE; 1349b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1350b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1351b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1352b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetDoctypeDeclHandler(XML_Parser parser, 1353b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_StartDoctypeDeclHandler start, 1354b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_EndDoctypeDeclHandler end) 1355b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1356b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project startDoctypeDeclHandler = start; 1357b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project endDoctypeDeclHandler = end; 1358b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1359b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1360b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1361b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetStartDoctypeDeclHandler(XML_Parser parser, 1362b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_StartDoctypeDeclHandler start) { 1363b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project startDoctypeDeclHandler = start; 1364b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1365b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1366b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1367b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetEndDoctypeDeclHandler(XML_Parser parser, 1368b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_EndDoctypeDeclHandler end) { 1369b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project endDoctypeDeclHandler = end; 1370b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1371b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1372b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1373b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetUnparsedEntityDeclHandler(XML_Parser parser, 1374b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_UnparsedEntityDeclHandler handler) 1375b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1376b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unparsedEntityDeclHandler = handler; 1377b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1378b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1379b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1380b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetNotationDeclHandler(XML_Parser parser, 1381b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_NotationDeclHandler handler) 1382b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1383b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project notationDeclHandler = handler; 1384b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1385b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1386b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1387b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetNamespaceDeclHandler(XML_Parser parser, 1388b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_StartNamespaceDeclHandler start, 1389b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_EndNamespaceDeclHandler end) 1390b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1391b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project startNamespaceDeclHandler = start; 1392b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project endNamespaceDeclHandler = end; 1393b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1394b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1395b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1396b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetStartNamespaceDeclHandler(XML_Parser parser, 1397b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_StartNamespaceDeclHandler start) { 1398b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project startNamespaceDeclHandler = start; 1399b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1400b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1401b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1402b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetEndNamespaceDeclHandler(XML_Parser parser, 1403b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_EndNamespaceDeclHandler end) { 1404b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project endNamespaceDeclHandler = end; 1405b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1406b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1407b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1408b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetNotStandaloneHandler(XML_Parser parser, 1409b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_NotStandaloneHandler handler) 1410b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1411b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project notStandaloneHandler = handler; 1412b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1413b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1414b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1415b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetExternalEntityRefHandler(XML_Parser parser, 1416b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_ExternalEntityRefHandler handler) 1417b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1418b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project externalEntityRefHandler = handler; 1419b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1420b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1421b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1422b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetExternalEntityRefHandlerArg(XML_Parser parser, void *arg) 1423b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1424b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (arg) 1425b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project externalEntityRefHandlerArg = (XML_Parser)arg; 1426b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 1427b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project externalEntityRefHandlerArg = parser; 1428b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1429b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1430b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1431b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetSkippedEntityHandler(XML_Parser parser, 1432b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_SkippedEntityHandler handler) 1433b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1434b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project skippedEntityHandler = handler; 1435b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1436b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1437b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1438b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetUnknownEncodingHandler(XML_Parser parser, 1439b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_UnknownEncodingHandler handler, 1440b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project void *data) 1441b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1442b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unknownEncodingHandler = handler; 1443b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unknownEncodingHandlerData = data; 1444b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1445b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1446b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1447b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetElementDeclHandler(XML_Parser parser, 1448b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_ElementDeclHandler eldecl) 1449b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1450b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project elementDeclHandler = eldecl; 1451b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1452b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1453b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1454b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetAttlistDeclHandler(XML_Parser parser, 1455b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_AttlistDeclHandler attdecl) 1456b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1457b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project attlistDeclHandler = attdecl; 1458b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1459b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1460b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1461b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetEntityDeclHandler(XML_Parser parser, 1462b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_EntityDeclHandler handler) 1463b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1464b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entityDeclHandler = handler; 1465b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1466b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1467b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1468b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetXmlDeclHandler(XML_Parser parser, 1469b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_XmlDeclHandler handler) { 1470b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project xmlDeclHandler = handler; 1471b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1472b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1473b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectint XMLCALL 1474b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_SetParamEntityParsing(XML_Parser parser, 1475b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_ParamEntityParsing peParsing) 1476b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1477b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* block after XML_Parse()/XML_ParseBuffer() has been called */ 1478b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (ps_parsing == XML_PARSING || ps_parsing == XML_SUSPENDED) 1479b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 1480b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 1481b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project paramEntityParsing = peParsing; 1482b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 1; 1483b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#else 1484b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return peParsing == XML_PARAM_ENTITY_PARSING_NEVER; 1485b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif 1486b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1487b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 148835e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughesint XMLCALL 148935e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott HughesXML_SetHashSalt(XML_Parser parser, 149035e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes unsigned long hash_salt) 149135e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes{ 149235e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes /* block after XML_Parse()/XML_ParseBuffer() has been called */ 149335e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes if (ps_parsing == XML_PARSING || ps_parsing == XML_SUSPENDED) 149435e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes return 0; 149535e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes hash_secret_salt = hash_salt; 149635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes return 1; 149735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes} 149835e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes 1499b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectenum XML_Status XMLCALL 1500b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_Parse(XML_Parser parser, const char *s, int len, int isFinal) 1501b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1502b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (ps_parsing) { 1503b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_SUSPENDED: 1504b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project errorCode = XML_ERROR_SUSPENDED; 1505b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_STATUS_ERROR; 1506b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_FINISHED: 1507b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project errorCode = XML_ERROR_FINISHED; 1508b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_STATUS_ERROR; 150935e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes case XML_INITIALIZED: 151035e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes if (parentParser == NULL && !startParsing(parser)) { 151135e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes errorCode = XML_ERROR_NO_MEMORY; 151235e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes return XML_STATUS_ERROR; 151335e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes } 1514b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project default: 1515b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ps_parsing = XML_PARSING; 1516b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1517b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1518b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (len == 0) { 1519b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ps_finalBuffer = (XML_Bool)isFinal; 1520b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!isFinal) 1521b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_STATUS_OK; 1522b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project positionPtr = bufferPtr; 1523b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project parseEndPtr = bufferEnd; 1524b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1525b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* If data are left over from last buffer, and we now know that these 1526b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project data are the final chunk of input, then we have to check them again 1527b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project to detect errors based on that fact. 1528b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 1529b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project errorCode = processor(parser, bufferPtr, parseEndPtr, &bufferPtr); 1530b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1531b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (errorCode == XML_ERROR_NONE) { 1532b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (ps_parsing) { 1533b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_SUSPENDED: 1534b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XmlUpdatePosition(encoding, positionPtr, bufferPtr, &position); 1535b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project positionPtr = bufferPtr; 1536b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_STATUS_SUSPENDED; 153735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes case XML_INITIALIZED: 1538b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_PARSING: 1539b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ps_parsing = XML_FINISHED; 1540b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* fall through */ 1541b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project default: 1542b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_STATUS_OK; 1543b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1544b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1545b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventEndPtr = eventPtr; 1546b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processor = errorProcessor; 1547b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_STATUS_ERROR; 1548b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1549b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifndef XML_CONTEXT_BYTES 1550b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (bufferPtr == bufferEnd) { 1551b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end; 1552b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int nLeftOver; 1553b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Error result; 1554b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project parseEndByteIndex += len; 1555b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project positionPtr = s; 1556b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ps_finalBuffer = (XML_Bool)isFinal; 1557b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1558b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project errorCode = processor(parser, s, parseEndPtr = s + len, &end); 1559b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1560b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (errorCode != XML_ERROR_NONE) { 1561b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventEndPtr = eventPtr; 1562b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processor = errorProcessor; 1563b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_STATUS_ERROR; 1564b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1565b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 1566b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (ps_parsing) { 1567b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_SUSPENDED: 1568b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project result = XML_STATUS_SUSPENDED; 1569b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 1570b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_INITIALIZED: 1571b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_PARSING: 1572b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (isFinal) { 1573b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ps_parsing = XML_FINISHED; 157435e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes return XML_STATUS_OK; 1575b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 157635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes /* fall through */ 157735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes default: 157835e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes result = XML_STATUS_OK; 1579b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1580b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1581b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1582b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XmlUpdatePosition(encoding, positionPtr, end, &position); 1583b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project nLeftOver = s + len - end; 1584b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (nLeftOver) { 1585b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (buffer == NULL || nLeftOver > bufferLim - buffer) { 1586b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* FIXME avoid integer overflow */ 1587b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project char *temp; 1588b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project temp = (buffer == NULL 1589b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ? (char *)MALLOC(len * 2) 1590b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project : (char *)REALLOC(buffer, len * 2)); 1591b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (temp == NULL) { 1592b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project errorCode = XML_ERROR_NO_MEMORY; 1593b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = eventEndPtr = NULL; 1594b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processor = errorProcessor; 1595b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_STATUS_ERROR; 1596b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 159735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes buffer = temp; 1598b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project bufferLim = buffer + len * 2; 1599b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1600b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project memcpy(buffer, end, nLeftOver); 1601b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1602b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project bufferPtr = buffer; 1603b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project bufferEnd = buffer + nLeftOver; 1604b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project positionPtr = bufferPtr; 1605b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project parseEndPtr = bufferEnd; 1606b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = bufferPtr; 1607b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventEndPtr = bufferPtr; 1608b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 1609b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1610b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* not defined XML_CONTEXT_BYTES */ 1611b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 1612b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project void *buff = XML_GetBuffer(parser, len); 1613b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (buff == NULL) 1614b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_STATUS_ERROR; 1615b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 1616b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project memcpy(buff, s, len); 1617b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ParseBuffer(parser, len, isFinal); 1618b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1619b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1620b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1621b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1622b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectenum XML_Status XMLCALL 1623b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_ParseBuffer(XML_Parser parser, int len, int isFinal) 1624b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1625b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *start; 1626b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Status result = XML_STATUS_OK; 1627b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1628b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (ps_parsing) { 1629b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_SUSPENDED: 1630b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project errorCode = XML_ERROR_SUSPENDED; 1631b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_STATUS_ERROR; 1632b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_FINISHED: 1633b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project errorCode = XML_ERROR_FINISHED; 1634b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_STATUS_ERROR; 163535e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes case XML_INITIALIZED: 163635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes if (parentParser == NULL && !startParsing(parser)) { 163735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes errorCode = XML_ERROR_NO_MEMORY; 163835e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes return XML_STATUS_ERROR; 163935e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes } 1640b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project default: 1641b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ps_parsing = XML_PARSING; 1642b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1643b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1644b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project start = bufferPtr; 1645b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project positionPtr = start; 1646b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project bufferEnd += len; 1647b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project parseEndPtr = bufferEnd; 1648b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project parseEndByteIndex += len; 1649b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ps_finalBuffer = (XML_Bool)isFinal; 1650b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1651b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project errorCode = processor(parser, start, parseEndPtr, &bufferPtr); 1652b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1653b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (errorCode != XML_ERROR_NONE) { 1654b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventEndPtr = eventPtr; 1655b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processor = errorProcessor; 1656b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_STATUS_ERROR; 1657b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1658b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 1659b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (ps_parsing) { 1660b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_SUSPENDED: 1661b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project result = XML_STATUS_SUSPENDED; 1662b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 166335e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes case XML_INITIALIZED: 1664b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_PARSING: 1665b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (isFinal) { 1666b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ps_parsing = XML_FINISHED; 1667b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 1668b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1669b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project default: ; /* should not happen */ 1670b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1671b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1672b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1673b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XmlUpdatePosition(encoding, positionPtr, bufferPtr, &position); 1674b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project positionPtr = bufferPtr; 1675b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 1676b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1677b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1678b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid * XMLCALL 1679b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_GetBuffer(XML_Parser parser, int len) 1680b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1681b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (ps_parsing) { 1682b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_SUSPENDED: 1683b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project errorCode = XML_ERROR_SUSPENDED; 1684b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 1685b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_FINISHED: 1686b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project errorCode = XML_ERROR_FINISHED; 1687b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 1688b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project default: ; 1689b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1690b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1691b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (len > bufferLim - bufferEnd) { 1692b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* FIXME avoid integer overflow */ 1693b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int neededSize = len + (int)(bufferEnd - bufferPtr); 1694b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_CONTEXT_BYTES 1695b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int keep = (int)(bufferPtr - buffer); 1696b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1697b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (keep > XML_CONTEXT_BYTES) 1698b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project keep = XML_CONTEXT_BYTES; 1699b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project neededSize += keep; 1700b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* defined XML_CONTEXT_BYTES */ 1701b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (neededSize <= bufferLim - buffer) { 1702b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_CONTEXT_BYTES 1703b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (keep < bufferPtr - buffer) { 1704b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int offset = (int)(bufferPtr - buffer) - keep; 1705b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project memmove(buffer, &buffer[offset], bufferEnd - bufferPtr + keep); 1706b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project bufferEnd -= offset; 1707b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project bufferPtr -= offset; 1708b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1709b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#else 1710b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project memmove(buffer, bufferPtr, bufferEnd - bufferPtr); 1711b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project bufferEnd = buffer + (bufferEnd - bufferPtr); 1712b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project bufferPtr = buffer; 1713b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* not defined XML_CONTEXT_BYTES */ 1714b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1715b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 1716b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project char *newBuf; 1717b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int bufferSize = (int)(bufferLim - bufferPtr); 1718b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (bufferSize == 0) 1719b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project bufferSize = INIT_BUFFER_SIZE; 1720b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project do { 1721b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project bufferSize *= 2; 1722b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } while (bufferSize < neededSize); 1723b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newBuf = (char *)MALLOC(bufferSize); 1724b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (newBuf == 0) { 1725b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project errorCode = XML_ERROR_NO_MEMORY; 1726b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 1727b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1728b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project bufferLim = newBuf + bufferSize; 1729b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_CONTEXT_BYTES 1730b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (bufferPtr) { 1731b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int keep = (int)(bufferPtr - buffer); 1732b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (keep > XML_CONTEXT_BYTES) 1733b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project keep = XML_CONTEXT_BYTES; 1734b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project memcpy(newBuf, &bufferPtr[-keep], bufferEnd - bufferPtr + keep); 1735b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project FREE(buffer); 1736b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project buffer = newBuf; 1737b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project bufferEnd = buffer + (bufferEnd - bufferPtr) + keep; 1738b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project bufferPtr = buffer + keep; 1739b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1740b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 1741b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project bufferEnd = newBuf + (bufferEnd - bufferPtr); 1742b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project bufferPtr = buffer = newBuf; 1743b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1744b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#else 1745b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (bufferPtr) { 1746b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project memcpy(newBuf, bufferPtr, bufferEnd - bufferPtr); 1747b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project FREE(buffer); 1748b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1749b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project bufferEnd = newBuf + (bufferEnd - bufferPtr); 1750b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project bufferPtr = buffer = newBuf; 1751b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* not defined XML_CONTEXT_BYTES */ 1752b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 175335e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes eventPtr = eventEndPtr = NULL; 175435e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes positionPtr = NULL; 1755b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1756b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return bufferEnd; 1757b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1758b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1759b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectenum XML_Status XMLCALL 1760b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_StopParser(XML_Parser parser, XML_Bool resumable) 1761b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1762b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (ps_parsing) { 1763b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_SUSPENDED: 1764b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (resumable) { 1765b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project errorCode = XML_ERROR_SUSPENDED; 1766b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_STATUS_ERROR; 1767b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1768b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ps_parsing = XML_FINISHED; 1769b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 1770b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_FINISHED: 1771b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project errorCode = XML_ERROR_FINISHED; 1772b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_STATUS_ERROR; 1773b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project default: 1774b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (resumable) { 1775b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 1776b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (isParamEntity) { 1777b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project errorCode = XML_ERROR_SUSPEND_PE; 1778b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_STATUS_ERROR; 1779b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1780b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif 1781b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ps_parsing = XML_SUSPENDED; 1782b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1783b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 1784b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ps_parsing = XML_FINISHED; 1785b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1786b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_STATUS_OK; 1787b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1788b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1789b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectenum XML_Status XMLCALL 1790b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_ResumeParser(XML_Parser parser) 1791b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1792b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Status result = XML_STATUS_OK; 1793b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1794b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (ps_parsing != XML_SUSPENDED) { 1795b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project errorCode = XML_ERROR_NOT_SUSPENDED; 1796b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_STATUS_ERROR; 1797b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1798b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ps_parsing = XML_PARSING; 1799b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1800b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project errorCode = processor(parser, bufferPtr, parseEndPtr, &bufferPtr); 1801b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1802b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (errorCode != XML_ERROR_NONE) { 1803b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventEndPtr = eventPtr; 1804b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processor = errorProcessor; 1805b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_STATUS_ERROR; 1806b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1807b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 1808b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (ps_parsing) { 1809b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_SUSPENDED: 1810b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project result = XML_STATUS_SUSPENDED; 1811b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 181235e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes case XML_INITIALIZED: 1813b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_PARSING: 1814b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (ps_finalBuffer) { 1815b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ps_parsing = XML_FINISHED; 1816b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 1817b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1818b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project default: ; 1819b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1820b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1821b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1822b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XmlUpdatePosition(encoding, positionPtr, bufferPtr, &position); 1823b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project positionPtr = bufferPtr; 1824b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 1825b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1826b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1827b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1828b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_GetParsingStatus(XML_Parser parser, XML_ParsingStatus *status) 1829b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1830b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project assert(status != NULL); 1831b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *status = parser->m_parsingStatus; 1832b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1833b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1834b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectenum XML_Error XMLCALL 1835b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_GetErrorCode(XML_Parser parser) 1836b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1837b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return errorCode; 1838b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1839b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1840b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_Index XMLCALL 1841b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_GetCurrentByteIndex(XML_Parser parser) 1842b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1843b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (eventPtr) 1844b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return parseEndByteIndex - (parseEndPtr - eventPtr); 1845b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return -1; 1846b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1847b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1848b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectint XMLCALL 1849b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_GetCurrentByteCount(XML_Parser parser) 1850b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1851b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (eventEndPtr && eventPtr) 1852b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return (int)(eventEndPtr - eventPtr); 1853b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 1854b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1855b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1856b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectconst char * XMLCALL 1857b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_GetInputContext(XML_Parser parser, int *offset, int *size) 1858b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1859b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_CONTEXT_BYTES 1860b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (eventPtr && buffer) { 1861b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *offset = (int)(eventPtr - buffer); 1862b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *size = (int)(bufferEnd - buffer); 1863b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return buffer; 1864b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1865b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* defined XML_CONTEXT_BYTES */ 1866b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return (char *) 0; 1867b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1868b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1869b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_Size XMLCALL 1870b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_GetCurrentLineNumber(XML_Parser parser) 1871b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1872b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (eventPtr && eventPtr >= positionPtr) { 1873b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XmlUpdatePosition(encoding, positionPtr, eventPtr, &position); 1874b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project positionPtr = eventPtr; 1875b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1876b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return position.lineNumber + 1; 1877b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1878b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1879b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_Size XMLCALL 1880b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_GetCurrentColumnNumber(XML_Parser parser) 1881b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1882b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (eventPtr && eventPtr >= positionPtr) { 1883b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XmlUpdatePosition(encoding, positionPtr, eventPtr, &position); 1884b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project positionPtr = eventPtr; 1885b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1886b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return position.columnNumber; 1887b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1888b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1889b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1890b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_FreeContentModel(XML_Parser parser, XML_Content *model) 1891b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1892b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project FREE(model); 1893b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1894b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1895b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid * XMLCALL 1896b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_MemMalloc(XML_Parser parser, size_t size) 1897b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1898b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return MALLOC(size); 1899b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1900b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1901b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid * XMLCALL 1902b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_MemRealloc(XML_Parser parser, void *ptr, size_t size) 1903b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1904b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return REALLOC(ptr, size); 1905b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1906b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1907b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1908b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_MemFree(XML_Parser parser, void *ptr) 1909b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1910b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project FREE(ptr); 1911b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1912b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1913b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectvoid XMLCALL 1914b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_DefaultCurrent(XML_Parser parser) 1915b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1916b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (defaultHandler) { 1917b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (openInternalEntities) 1918b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project reportDefault(parser, 1919b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project internalEncoding, 1920b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project openInternalEntities->internalEventPtr, 1921b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project openInternalEntities->internalEventEndPtr); 1922b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 1923b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project reportDefault(parser, encoding, eventPtr, eventEndPtr); 1924b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 1925b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1926b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1927b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectconst XML_LChar * XMLCALL 1928b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_ErrorString(enum XML_Error code) 1929b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 1930b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project static const XML_LChar* const message[] = { 1931b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 0, 1932b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("out of memory"), 1933b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("syntax error"), 1934b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("no element found"), 1935b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("not well-formed (invalid token)"), 1936b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("unclosed token"), 1937b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("partial character"), 1938b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("mismatched tag"), 1939b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("duplicate attribute"), 1940b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("junk after document element"), 1941b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("illegal parameter entity reference"), 1942b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("undefined entity"), 1943b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("recursive entity reference"), 1944b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("asynchronous entity"), 1945b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("reference to invalid character number"), 1946b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("reference to binary entity"), 1947b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("reference to external entity in attribute"), 1948b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("XML or text declaration not at start of entity"), 1949b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("unknown encoding"), 1950b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("encoding specified in XML declaration is incorrect"), 1951b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("unclosed CDATA section"), 1952b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("error in processing external entity reference"), 1953b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("document is not standalone"), 1954b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("unexpected parser state - please send a bug report"), 1955b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("entity declared in parameter entity"), 1956b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("requested feature requires XML_DTD support in Expat"), 1957b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("cannot change setting once parsing has begun"), 1958b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("unbound prefix"), 1959b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("must not undeclare prefix"), 1960b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("incomplete markup in parameter entity"), 1961b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("XML declaration not well-formed"), 1962b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("text declaration not well-formed"), 1963b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("illegal character(s) in public id"), 1964b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("parser suspended"), 1965b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("parser not suspended"), 1966b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("parsing aborted"), 1967b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("parsing finished"), 1968b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("cannot suspend in external parameter entity"), 1969b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("reserved prefix (xml) must not be undeclared or bound to another namespace name"), 1970b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("reserved prefix (xmlns) must not be declared or undeclared"), 1971b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_L("prefix must not be bound to one of the reserved namespace names") 1972b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project }; 1973b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (code > 0 && code < sizeof(message)/sizeof(message[0])) 1974b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return message[code]; 1975b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 1976b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1977b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1978b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectconst XML_LChar * XMLCALL 1979b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_ExpatVersion(void) { 1980b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1981b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* V1 is used to string-ize the version number. However, it would 1982b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project string-ize the actual version macro *names* unless we get them 1983b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project substituted before being passed to V1. CPP is defined to expand 1984b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project a macro, then rescan for more expansions. Thus, we use V2 to expand 1985b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project the version macros, then CPP will expand the resulting V1() macro 1986b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project with the correct numerals. */ 1987b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* ### I'm assuming cpp is portable in this respect... */ 1988b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1989b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define V1(a,b,c) XML_L(#a)XML_L(".")XML_L(#b)XML_L(".")XML_L(#c) 1990b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define V2(a,b,c) XML_L("expat_")V1(a,b,c) 1991b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1992b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return V2(XML_MAJOR_VERSION, XML_MINOR_VERSION, XML_MICRO_VERSION); 1993b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1994b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#undef V1 1995b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#undef V2 1996b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 1997b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 1998b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_Expat_Version XMLCALL 1999b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_ExpatVersionInfo(void) 2000b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 2001b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Expat_Version version; 2002b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2003b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project version.major = XML_MAJOR_VERSION; 2004b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project version.minor = XML_MINOR_VERSION; 2005b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project version.micro = XML_MICRO_VERSION; 2006b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2007b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return version; 2008b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 2009b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2010b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectconst XML_Feature * XMLCALL 2011b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectXML_GetFeatureList(void) 2012b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 2013b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project static const XML_Feature features[] = { 2014b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project {XML_FEATURE_SIZEOF_XML_CHAR, XML_L("sizeof(XML_Char)"), 2015b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project sizeof(XML_Char)}, 2016b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project {XML_FEATURE_SIZEOF_XML_LCHAR, XML_L("sizeof(XML_LChar)"), 2017b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project sizeof(XML_LChar)}, 2018b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_UNICODE 2019b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project {XML_FEATURE_UNICODE, XML_L("XML_UNICODE"), 0}, 2020b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif 2021b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_UNICODE_WCHAR_T 2022b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project {XML_FEATURE_UNICODE_WCHAR_T, XML_L("XML_UNICODE_WCHAR_T"), 0}, 2023b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif 2024b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 2025b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project {XML_FEATURE_DTD, XML_L("XML_DTD"), 0}, 2026b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif 2027b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_CONTEXT_BYTES 2028b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project {XML_FEATURE_CONTEXT_BYTES, XML_L("XML_CONTEXT_BYTES"), 2029b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_CONTEXT_BYTES}, 2030b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif 2031b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_MIN_SIZE 2032b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project {XML_FEATURE_MIN_SIZE, XML_L("XML_MIN_SIZE"), 0}, 2033b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif 2034b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_NS 2035b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project {XML_FEATURE_NS, XML_L("XML_NS"), 0}, 2036b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif 2037d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes#ifdef XML_LARGE_SIZE 2038d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes {XML_FEATURE_LARGE_SIZE, XML_L("XML_LARGE_SIZE"), 0}, 203935e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes#endif 204035e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes#ifdef XML_ATTR_INFO 204135e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes {XML_FEATURE_ATTR_INFO, XML_L("XML_ATTR_INFO"), 0}, 204235e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes#endif 2043b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project {XML_FEATURE_END, NULL, 0} 2044b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project }; 2045b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2046b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return features; 2047b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 2048b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2049b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project/* Initially tag->rawName always points into the parse buffer; 2050b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for those TAG instances opened while the current parse buffer was 2051b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processed, and not yet closed, we need to store tag->rawName in a more 2052b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project permanent location, since the parse buffer is about to be discarded. 2053b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project*/ 2054b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic XML_Bool 2055b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectstoreRawNames(XML_Parser parser) 2056b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 2057b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project TAG *tag = tagStack; 2058b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project while (tag) { 2059b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int bufSize; 2060b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int nameLen = sizeof(XML_Char) * (tag->name.strLen + 1); 2061b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project char *rawNameBuf = tag->buf + nameLen; 2062b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* Stop if already stored. Since tagStack is a stack, we can stop 2063b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project at the first entry that has already been copied; everything 2064b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project below it in the stack is already been accounted for in a 2065b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project previous call to this function. 2066b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 2067b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (tag->rawName == rawNameBuf) 2068b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 2069b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* For re-use purposes we need to ensure that the 2070b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project size of tag->buf is a multiple of sizeof(XML_Char). 2071b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 2072b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project bufSize = nameLen + ROUND_UP(tag->rawNameLength, sizeof(XML_Char)); 2073b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (bufSize > tag->bufEnd - tag->buf) { 2074b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project char *temp = (char *)REALLOC(tag->buf, bufSize); 2075b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (temp == NULL) 2076b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_FALSE; 2077b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* if tag->name.str points to tag->buf (only when namespace 2078b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processing is off) then we have to update it 2079b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 2080b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (tag->name.str == (XML_Char *)tag->buf) 2081b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tag->name.str = (XML_Char *)temp; 2082b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* if tag->name.localPart is set (when namespace processing is on) 2083b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project then update it as well, since it will always point into tag->buf 2084b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 2085b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (tag->name.localPart) 2086b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tag->name.localPart = (XML_Char *)temp + (tag->name.localPart - 2087b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (XML_Char *)tag->buf); 2088b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tag->buf = temp; 2089b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tag->bufEnd = temp + bufSize; 2090b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project rawNameBuf = temp + nameLen; 2091b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2092b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project memcpy(rawNameBuf, tag->rawName, tag->rawNameLength); 2093b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tag->rawName = rawNameBuf; 2094b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tag = tag->parent; 2095b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2096b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_TRUE; 2097b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 2098b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2099b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error PTRCALL 2100b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectcontentProcessor(XML_Parser parser, 2101b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *start, 2102b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end, 2103b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **endPtr) 2104b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 210535e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes enum XML_Error result = doContent(parser, 0, encoding, start, end, 2106b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project endPtr, (XML_Bool)!ps_finalBuffer); 2107b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (result == XML_ERROR_NONE) { 2108b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!storeRawNames(parser)) 2109b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 2110b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2111b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 2112b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 2113b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2114b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error PTRCALL 2115b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectexternalEntityInitProcessor(XML_Parser parser, 2116b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *start, 2117b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end, 2118b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **endPtr) 2119b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 2120b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Error result = initializeEncoding(parser); 2121b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (result != XML_ERROR_NONE) 2122b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 2123b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processor = externalEntityInitProcessor2; 2124b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return externalEntityInitProcessor2(parser, start, end, endPtr); 2125b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 2126b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2127b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error PTRCALL 2128b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectexternalEntityInitProcessor2(XML_Parser parser, 2129b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *start, 2130b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end, 2131b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **endPtr) 2132b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 2133b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *next = start; /* XmlContentTok doesn't always set the last arg */ 2134b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int tok = XmlContentTok(encoding, start, end, &next); 2135b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (tok) { 2136b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_BOM: 2137b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* If we are at the end of the buffer, this would cause the next stage, 2138b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project i.e. externalEntityInitProcessor3, to pass control directly to 2139b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project doContent (by detecting XML_TOK_NONE) without processing any xml text 2140b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declaration - causing the error XML_ERROR_MISPLACED_XML_PI in doContent. 2141b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 2142b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (next == end && !ps_finalBuffer) { 2143b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *endPtr = next; 2144b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 2145b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2146b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project start = next; 2147b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 2148b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_PARTIAL: 2149b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!ps_finalBuffer) { 2150b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *endPtr = start; 2151b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 2152b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2153b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = start; 2154b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_UNCLOSED_TOKEN; 2155b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_PARTIAL_CHAR: 2156b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!ps_finalBuffer) { 2157b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *endPtr = start; 2158b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 2159b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2160b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = start; 2161b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_PARTIAL_CHAR; 2162b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2163b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processor = externalEntityInitProcessor3; 2164b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return externalEntityInitProcessor3(parser, start, end, endPtr); 2165b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 2166b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2167b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error PTRCALL 2168b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectexternalEntityInitProcessor3(XML_Parser parser, 2169b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *start, 2170b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end, 2171b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **endPtr) 2172b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 2173b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int tok; 2174b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *next = start; /* XmlContentTok doesn't always set the last arg */ 2175b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = start; 2176b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tok = XmlContentTok(encoding, start, end, &next); 2177b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventEndPtr = next; 2178b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2179b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (tok) { 2180b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_XML_DECL: 2181b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project { 2182b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Error result; 2183b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project result = processXmlDecl(parser, 1, start, next); 2184b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (result != XML_ERROR_NONE) 2185b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 2186b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (ps_parsing) { 218735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes case XML_SUSPENDED: 2188b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *endPtr = next; 2189b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 2190b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_FINISHED: 2191b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_ABORTED; 2192b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project default: 2193b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project start = next; 2194b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2195b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2196b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 2197b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_PARTIAL: 2198b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!ps_finalBuffer) { 2199b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *endPtr = start; 2200b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 2201b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2202b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_UNCLOSED_TOKEN; 2203b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_PARTIAL_CHAR: 2204b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!ps_finalBuffer) { 2205b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *endPtr = start; 2206b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 2207b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2208b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_PARTIAL_CHAR; 2209b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2210b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processor = externalEntityContentProcessor; 2211b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tagLevel = 1; 2212b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return externalEntityContentProcessor(parser, start, end, endPtr); 2213b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 2214b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2215b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error PTRCALL 2216b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectexternalEntityContentProcessor(XML_Parser parser, 2217b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *start, 2218b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end, 2219b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **endPtr) 2220b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 222135e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes enum XML_Error result = doContent(parser, 1, encoding, start, end, 2222b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project endPtr, (XML_Bool)!ps_finalBuffer); 2223b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (result == XML_ERROR_NONE) { 2224b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!storeRawNames(parser)) 2225b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 2226b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2227b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 2228b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 2229b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2230b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error 2231b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectdoContent(XML_Parser parser, 2232b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int startTagLevel, 2233b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const ENCODING *enc, 2234b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *s, 2235b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end, 2236b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **nextPtr, 2237b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool haveMore) 2238b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 2239b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* save one level of indirection */ 224035e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes DTD * const dtd = _dtd; 2241b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2242b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **eventPP; 2243b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **eventEndPP; 2244b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (enc == encoding) { 2245b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPP = &eventPtr; 2246b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventEndPP = &eventEndPtr; 2247b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2248b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 2249b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPP = &(openInternalEntities->internalEventPtr); 2250b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventEndPP = &(openInternalEntities->internalEventEndPtr); 2251b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2252b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventPP = s; 2253b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2254b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (;;) { 2255b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *next = s; /* XmlContentTok doesn't always set the last arg */ 2256b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int tok = XmlContentTok(enc, s, end, &next); 2257b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventEndPP = next; 2258b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (tok) { 2259b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_TRAILING_CR: 2260b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (haveMore) { 2261b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = s; 2262b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 2263b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2264b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventEndPP = end; 2265b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (characterDataHandler) { 2266b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char c = 0xA; 2267b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project characterDataHandler(handlerArg, &c, 1); 2268b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2269b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (defaultHandler) 2270b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project reportDefault(parser, enc, s, end); 227135e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes /* We are at the end of the final buffer, should we check for 227235e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes XML_SUSPENDED, XML_FINISHED? 2273b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 2274b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (startTagLevel == 0) 2275b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_ELEMENTS; 2276b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (tagLevel != startTagLevel) 2277b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_ASYNC_ENTITY; 2278b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = end; 2279b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 2280b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_NONE: 2281b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (haveMore) { 2282b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = s; 2283b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 2284b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2285b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (startTagLevel > 0) { 2286b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (tagLevel != startTagLevel) 2287b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_ASYNC_ENTITY; 2288b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = s; 2289b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 2290b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2291b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_ELEMENTS; 2292b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_INVALID: 2293b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventPP = next; 2294b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_INVALID_TOKEN; 2295b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_PARTIAL: 2296b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (haveMore) { 2297b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = s; 2298b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 2299b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2300b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_UNCLOSED_TOKEN; 2301b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_PARTIAL_CHAR: 2302b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (haveMore) { 2303b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = s; 2304b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 2305b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2306b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_PARTIAL_CHAR; 2307b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_ENTITY_REF: 2308b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project { 2309b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *name; 2310b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ENTITY *entity; 2311b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char ch = (XML_Char) XmlPredefinedEntityName(enc, 2312b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project s + enc->minBytesPerChar, 2313b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project next - enc->minBytesPerChar); 2314b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (ch) { 2315b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (characterDataHandler) 2316b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project characterDataHandler(handlerArg, &ch, 1); 2317b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (defaultHandler) 2318b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project reportDefault(parser, enc, s, next); 2319b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 2320b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2321b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project name = poolStoreString(&dtd->pool, enc, 2322b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project s + enc->minBytesPerChar, 2323b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project next - enc->minBytesPerChar); 2324b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!name) 2325b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 232635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes entity = (ENTITY *)lookup(parser, &dtd->generalEntities, name, 0); 2327b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolDiscard(&dtd->pool); 2328b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* First, determine if a check for an existing declaration is needed; 2329b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if yes, check that the entity exists, and that it is internal, 2330b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project otherwise call the skipped entity or default handler. 2331b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 2332b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!dtd->hasParamEntityRefs || dtd->standalone) { 2333b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!entity) 2334b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_UNDEFINED_ENTITY; 2335b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (!entity->is_internal) 2336b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_ENTITY_DECLARED_IN_PE; 2337b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2338b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (!entity) { 2339b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (skippedEntityHandler) 2340b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project skippedEntityHandler(handlerArg, name, 0); 2341b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (defaultHandler) 2342b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project reportDefault(parser, enc, s, next); 2343b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 2344b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2345b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (entity->open) 2346b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_RECURSIVE_ENTITY_REF; 2347b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (entity->notation) 2348b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_BINARY_ENTITY_REF; 2349b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (entity->textPtr) { 2350b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Error result; 2351b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!defaultExpandInternalEntities) { 2352b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (skippedEntityHandler) 2353b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project skippedEntityHandler(handlerArg, entity->name, 0); 2354b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (defaultHandler) 2355b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project reportDefault(parser, enc, s, next); 2356b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 2357b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2358b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project result = processInternalEntity(parser, entity, XML_FALSE); 2359b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (result != XML_ERROR_NONE) 2360b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 2361b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2362b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (externalEntityRefHandler) { 2363b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *context; 2364b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->open = XML_TRUE; 2365b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project context = getContext(parser); 2366b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->open = XML_FALSE; 2367b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!context) 2368b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 2369b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!externalEntityRefHandler(externalEntityRefHandlerArg, 2370b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project context, 2371b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->base, 2372b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->systemId, 2373b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->publicId)) 2374b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_EXTERNAL_ENTITY_HANDLING; 2375b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolDiscard(&tempPool); 2376b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2377b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (defaultHandler) 2378b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project reportDefault(parser, enc, s, next); 2379b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 2380b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2381b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_START_TAG_NO_ATTS: 2382b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* fall through */ 2383b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_START_TAG_WITH_ATTS: 2384b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project { 2385b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project TAG *tag; 2386b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Error result; 2387b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char *toPtr; 2388b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (freeTagList) { 2389b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tag = freeTagList; 2390b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project freeTagList = freeTagList->parent; 2391b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2392b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 2393b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tag = (TAG *)MALLOC(sizeof(TAG)); 2394b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!tag) 2395b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 2396b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tag->buf = (char *)MALLOC(INIT_TAG_BUF_SIZE); 2397b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!tag->buf) { 2398b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project FREE(tag); 2399b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 2400b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2401b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tag->bufEnd = tag->buf + INIT_TAG_BUF_SIZE; 2402b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2403b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tag->bindings = NULL; 2404b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tag->parent = tagStack; 2405b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tagStack = tag; 2406b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tag->name.localPart = NULL; 2407b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tag->name.prefix = NULL; 2408b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tag->rawName = s + enc->minBytesPerChar; 2409b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tag->rawNameLength = XmlNameLength(enc, tag->rawName); 2410b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ++tagLevel; 2411b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project { 2412b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *rawNameEnd = tag->rawName + tag->rawNameLength; 2413b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *fromPtr = tag->rawName; 2414b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project toPtr = (XML_Char *)tag->buf; 2415b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (;;) { 2416b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int bufSize; 2417b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int convLen; 2418b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XmlConvert(enc, 2419b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project &fromPtr, rawNameEnd, 2420b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (ICHAR **)&toPtr, (ICHAR *)tag->bufEnd - 1); 2421b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project convLen = (int)(toPtr - (XML_Char *)tag->buf); 2422b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (fromPtr == rawNameEnd) { 2423b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tag->name.strLen = convLen; 2424b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 2425b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2426b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project bufSize = (int)(tag->bufEnd - tag->buf) << 1; 2427b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project { 2428b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project char *temp = (char *)REALLOC(tag->buf, bufSize); 2429b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (temp == NULL) 2430b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 2431b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tag->buf = temp; 2432b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tag->bufEnd = temp + bufSize; 2433b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project toPtr = (XML_Char *)temp + convLen; 2434b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2435b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2436b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2437b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tag->name.str = (XML_Char *)tag->buf; 2438b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *toPtr = XML_T('\0'); 2439b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project result = storeAtts(parser, enc, s, &(tag->name), &(tag->bindings)); 2440b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (result) 2441b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 2442b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (startElementHandler) 2443b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project startElementHandler(handlerArg, tag->name.str, 2444b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (const XML_Char **)atts); 2445b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (defaultHandler) 2446b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project reportDefault(parser, enc, s, next); 2447b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolClear(&tempPool); 2448b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 2449b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2450b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_EMPTY_ELEMENT_NO_ATTS: 2451b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* fall through */ 2452b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_EMPTY_ELEMENT_WITH_ATTS: 2453b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project { 2454b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *rawName = s + enc->minBytesPerChar; 2455b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Error result; 2456b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project BINDING *bindings = NULL; 2457b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool noElmHandlers = XML_TRUE; 2458b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project TAG_NAME name; 2459b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project name.str = poolStoreString(&tempPool, enc, rawName, 2460b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project rawName + XmlNameLength(enc, rawName)); 2461b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!name.str) 2462b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 2463b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolFinish(&tempPool); 2464b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project result = storeAtts(parser, enc, s, &name, &bindings); 2465b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (result) 2466b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 2467b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolFinish(&tempPool); 2468b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (startElementHandler) { 2469b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project startElementHandler(handlerArg, name.str, (const XML_Char **)atts); 2470b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project noElmHandlers = XML_FALSE; 2471b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2472b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (endElementHandler) { 2473b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (startElementHandler) 2474b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventPP = *eventEndPP; 2475b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project endElementHandler(handlerArg, name.str); 2476b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project noElmHandlers = XML_FALSE; 2477b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2478b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (noElmHandlers && defaultHandler) 2479b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project reportDefault(parser, enc, s, next); 2480b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolClear(&tempPool); 2481b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project while (bindings) { 2482b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project BINDING *b = bindings; 2483b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (endNamespaceDeclHandler) 2484b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project endNamespaceDeclHandler(handlerArg, b->prefix->name); 2485b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project bindings = bindings->nextTagBinding; 2486b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project b->nextTagBinding = freeBindingList; 2487b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project freeBindingList = b; 2488b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project b->prefix->binding = b->prevPrefixBinding; 2489b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2490b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2491b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (tagLevel == 0) 2492b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return epilogProcessor(parser, next, end, nextPtr); 2493b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 2494b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_END_TAG: 2495b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (tagLevel == startTagLevel) 2496b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_ASYNC_ENTITY; 2497b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 2498b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int len; 2499b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *rawName; 2500b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project TAG *tag = tagStack; 2501b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tagStack = tag->parent; 2502b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tag->parent = freeTagList; 2503b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project freeTagList = tag; 2504b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project rawName = s + enc->minBytesPerChar*2; 2505b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project len = XmlNameLength(enc, rawName); 2506b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (len != tag->rawNameLength 2507b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project || memcmp(tag->rawName, rawName, len) != 0) { 2508b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventPP = rawName; 2509b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_TAG_MISMATCH; 2510b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2511b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project --tagLevel; 2512b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (endElementHandler) { 2513b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *localPart; 2514b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *prefix; 2515b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char *uri; 2516b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project localPart = tag->name.localPart; 2517b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (ns && localPart) { 2518b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* localPart and prefix may have been overwritten in 2519b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tag->name.str, since this points to the binding->uri 2520b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project buffer which gets re-used; so we have to add them again 2521b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 2522b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project uri = (XML_Char *)tag->name.str + tag->name.uriLen; 2523b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* don't need to check for space - already done in storeAtts() */ 2524b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project while (*localPart) *uri++ = *localPart++; 2525b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project prefix = (XML_Char *)tag->name.prefix; 2526b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (ns_triplets && prefix) { 2527b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *uri++ = namespaceSeparator; 2528b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project while (*prefix) *uri++ = *prefix++; 2529b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2530b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *uri = XML_T('\0'); 2531b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2532b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project endElementHandler(handlerArg, tag->name.str); 2533b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2534b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (defaultHandler) 2535b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project reportDefault(parser, enc, s, next); 2536b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project while (tag->bindings) { 2537b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project BINDING *b = tag->bindings; 2538b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (endNamespaceDeclHandler) 2539b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project endNamespaceDeclHandler(handlerArg, b->prefix->name); 2540b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tag->bindings = tag->bindings->nextTagBinding; 2541b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project b->nextTagBinding = freeBindingList; 2542b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project freeBindingList = b; 2543b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project b->prefix->binding = b->prevPrefixBinding; 2544b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2545b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (tagLevel == 0) 2546b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return epilogProcessor(parser, next, end, nextPtr); 2547b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2548b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 2549b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_CHAR_REF: 2550b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project { 2551b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int n = XmlCharRefNumber(enc, s); 2552b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (n < 0) 2553b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_BAD_CHAR_REF; 2554b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (characterDataHandler) { 2555b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char buf[XML_ENCODE_MAX]; 2556b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project characterDataHandler(handlerArg, buf, XmlEncode(n, (ICHAR *)buf)); 2557b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2558b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (defaultHandler) 2559b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project reportDefault(parser, enc, s, next); 2560b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2561b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 2562b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_XML_DECL: 2563b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_MISPLACED_XML_PI; 2564b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_DATA_NEWLINE: 2565b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (characterDataHandler) { 2566b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char c = 0xA; 2567b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project characterDataHandler(handlerArg, &c, 1); 2568b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2569b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (defaultHandler) 2570b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project reportDefault(parser, enc, s, next); 2571b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 2572b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_CDATA_SECT_OPEN: 2573b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project { 2574b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Error result; 2575b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (startCdataSectionHandler) 2576b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project startCdataSectionHandler(handlerArg); 2577b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#if 0 2578b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* Suppose you doing a transformation on a document that involves 2579b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project changing only the character data. You set up a defaultHandler 2580b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project and a characterDataHandler. The defaultHandler simply copies 2581b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project characters through. The characterDataHandler does the 2582b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project transformation and writes the characters out escaping them as 2583b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project necessary. This case will fail to work if we leave out the 2584b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project following two lines (because & and < inside CDATA sections will 2585b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project be incorrectly escaped). 2586b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2587b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project However, now we have a start/endCdataSectionHandler, so it seems 2588b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project easier to let the user deal with this. 2589b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 2590b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (characterDataHandler) 2591b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project characterDataHandler(handlerArg, dataBuf, 0); 2592b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif 2593b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (defaultHandler) 2594b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project reportDefault(parser, enc, s, next); 2595b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project result = doCdataSection(parser, enc, &next, end, nextPtr, haveMore); 2596b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (result != XML_ERROR_NONE) 2597b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 2598b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (!next) { 2599b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processor = cdataSectionProcessor; 2600b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 2601b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2602b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2603b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 2604b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_TRAILING_RSQB: 2605b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (haveMore) { 2606b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = s; 2607b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 2608b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2609b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (characterDataHandler) { 2610b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (MUST_CONVERT(enc, s)) { 2611b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ICHAR *dataPtr = (ICHAR *)dataBuf; 2612b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)dataBufEnd); 2613b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project characterDataHandler(handlerArg, dataBuf, 2614b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (int)(dataPtr - (ICHAR *)dataBuf)); 2615b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2616b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 2617b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project characterDataHandler(handlerArg, 2618b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (XML_Char *)s, 2619b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (int)((XML_Char *)end - (XML_Char *)s)); 2620b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2621b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (defaultHandler) 2622b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project reportDefault(parser, enc, s, end); 262335e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes /* We are at the end of the final buffer, should we check for 262435e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes XML_SUSPENDED, XML_FINISHED? 2625b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 2626b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (startTagLevel == 0) { 2627b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventPP = end; 2628b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_ELEMENTS; 2629b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2630b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (tagLevel != startTagLevel) { 2631b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventPP = end; 2632b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_ASYNC_ENTITY; 2633b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2634b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = end; 2635b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 263635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes case XML_TOK_DATA_CHARS: 2637d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes { 2638d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes XML_CharacterDataHandler charDataHandler = characterDataHandler; 2639d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes if (charDataHandler) { 2640d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes if (MUST_CONVERT(enc, s)) { 2641d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes for (;;) { 2642d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes ICHAR *dataPtr = (ICHAR *)dataBuf; 2643d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)dataBufEnd); 2644d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes *eventEndPP = s; 2645d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes charDataHandler(handlerArg, dataBuf, 2646d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes (int)(dataPtr - (ICHAR *)dataBuf)); 2647d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes if (s == next) 2648d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes break; 2649d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes *eventPP = s; 2650d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes } 2651b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2652d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes else 2653d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes charDataHandler(handlerArg, 2654d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes (XML_Char *)s, 2655d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes (int)((XML_Char *)next - (XML_Char *)s)); 2656b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2657d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes else if (defaultHandler) 2658d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes reportDefault(parser, enc, s, next); 2659b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2660b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 2661b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_PI: 2662b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!reportProcessingInstruction(parser, enc, s, next)) 2663b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 2664b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 2665b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_COMMENT: 2666b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!reportComment(parser, enc, s, next)) 2667b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 2668b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 2669b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project default: 2670b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (defaultHandler) 2671b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project reportDefault(parser, enc, s, next); 2672b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 2673b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2674b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventPP = s = next; 2675b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (ps_parsing) { 267635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes case XML_SUSPENDED: 2677b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = next; 2678b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 2679b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_FINISHED: 2680b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_ABORTED; 2681b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project default: ; 2682b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2683b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2684b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* not reached */ 2685b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 2686b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2687b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project/* Precondition: all arguments must be non-NULL; 2688b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project Purpose: 2689b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project - normalize attributes 2690b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project - check attributes for well-formedness 2691b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project - generate namespace aware attribute names (URI, prefix) 2692b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project - build list of attributes for startElementHandler 2693b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project - default attributes 2694b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project - process namespace declarations (check and report them) 2695b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project - generate namespace aware element name (URI, prefix) 2696b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project*/ 2697b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error 2698b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectstoreAtts(XML_Parser parser, const ENCODING *enc, 2699b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *attStr, TAG_NAME *tagNamePtr, 2700b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project BINDING **bindingsPtr) 2701b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 2702b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project DTD * const dtd = _dtd; /* save one level of indirection */ 2703b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ELEMENT_TYPE *elementType; 2704b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int nDefaultAtts; 2705b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char **appAtts; /* the attribute list for the application */ 2706b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int attIndex = 0; 2707b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int prefixLen; 2708b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int i; 2709b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int n; 2710b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char *uri; 2711b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int nPrefixes = 0; 2712b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project BINDING *binding; 2713b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *localPart; 2714b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2715b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* lookup the element type name */ 271635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes elementType = (ELEMENT_TYPE *)lookup(parser, &dtd->elementTypes, tagNamePtr->str,0); 2717b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!elementType) { 2718b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *name = poolCopyString(&dtd->pool, tagNamePtr->str); 2719b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!name) 2720b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 272135e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes elementType = (ELEMENT_TYPE *)lookup(parser, &dtd->elementTypes, name, 2722b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project sizeof(ELEMENT_TYPE)); 2723b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!elementType) 2724b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 2725b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (ns && !setElementTypePrefix(parser, elementType)) 2726b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 2727b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2728b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project nDefaultAtts = elementType->nDefaultAtts; 2729b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2730b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* get the attributes from the tokenizer */ 2731b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project n = XmlGetAttributes(enc, attStr, attsSize, atts); 2732b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (n + nDefaultAtts > attsSize) { 2733b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int oldAttsSize = attsSize; 2734b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ATTRIBUTE *temp; 273535e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes#ifdef XML_ATTR_INFO 273635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes XML_AttrInfo *temp2; 273735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes#endif 2738b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project attsSize = n + nDefaultAtts + INIT_ATTS_SIZE; 2739b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project temp = (ATTRIBUTE *)REALLOC((void *)atts, attsSize * sizeof(ATTRIBUTE)); 2740b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (temp == NULL) 2741b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 2742b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project atts = temp; 274335e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes#ifdef XML_ATTR_INFO 274435e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes temp2 = (XML_AttrInfo *)REALLOC((void *)attInfo, attsSize * sizeof(XML_AttrInfo)); 274535e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes if (temp2 == NULL) 274635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes return XML_ERROR_NO_MEMORY; 274735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes attInfo = temp2; 274835e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes#endif 2749b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (n > oldAttsSize) 2750b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XmlGetAttributes(enc, attStr, n, atts); 2751b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2752b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2753b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project appAtts = (const XML_Char **)atts; 2754b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (i = 0; i < n; i++) { 275535e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes ATTRIBUTE *currAtt = &atts[i]; 275635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes#ifdef XML_ATTR_INFO 275735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes XML_AttrInfo *currAttInfo = &attInfo[i]; 275835e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes#endif 2759b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* add the name and value to the attribute list */ 276035e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes ATTRIBUTE_ID *attId = getAttributeId(parser, enc, currAtt->name, 276135e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes currAtt->name 276235e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes + XmlNameLength(enc, currAtt->name)); 2763b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!attId) 2764b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 276535e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes#ifdef XML_ATTR_INFO 276635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes currAttInfo->nameStart = parseEndByteIndex - (parseEndPtr - currAtt->name); 276735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes currAttInfo->nameEnd = currAttInfo->nameStart + 276835e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes XmlNameLength(enc, currAtt->name); 276935e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes currAttInfo->valueStart = parseEndByteIndex - 277035e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes (parseEndPtr - currAtt->valuePtr); 277135e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes currAttInfo->valueEnd = parseEndByteIndex - (parseEndPtr - currAtt->valueEnd); 277235e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes#endif 2773b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* Detect duplicate attributes by their QNames. This does not work when 2774b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project namespace processing is turned on and different prefixes for the same 2775b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project namespace are used. For this case we have a check further down. 2776b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 2777b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if ((attId->name)[-1]) { 2778b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (enc == encoding) 2779b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = atts[i].name; 2780b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_DUPLICATE_ATTRIBUTE; 2781b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2782b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (attId->name)[-1] = 1; 2783b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project appAtts[attIndex++] = attId->name; 2784b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!atts[i].normalized) { 2785b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Error result; 2786b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool isCdata = XML_TRUE; 2787b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2788b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* figure out whether declared as other than CDATA */ 2789b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (attId->maybeTokenized) { 2790b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int j; 2791b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (j = 0; j < nDefaultAtts; j++) { 2792b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (attId == elementType->defaultAtts[j].id) { 2793b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project isCdata = elementType->defaultAtts[j].isCdata; 2794b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 2795b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2796b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2797b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2798b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2799b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* normalize the attribute value */ 2800b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project result = storeAttributeValue(parser, enc, isCdata, 2801b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project atts[i].valuePtr, atts[i].valueEnd, 2802b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project &tempPool); 2803b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (result) 2804b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 2805b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project appAtts[attIndex] = poolStart(&tempPool); 2806b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolFinish(&tempPool); 2807b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2808b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 2809b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* the value did not need normalizing */ 2810b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project appAtts[attIndex] = poolStoreString(&tempPool, enc, atts[i].valuePtr, 2811b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project atts[i].valueEnd); 2812b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (appAtts[attIndex] == 0) 2813b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 2814b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolFinish(&tempPool); 2815b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2816b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* handle prefixed attribute names */ 2817b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (attId->prefix) { 2818b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (attId->xmlns) { 2819b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* deal with namespace declarations here */ 2820b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Error result = addBinding(parser, attId->prefix, attId, 2821b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project appAtts[attIndex], bindingsPtr); 2822b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (result) 2823b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 2824b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project --attIndex; 2825b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2826b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 2827b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* deal with other prefixed names later */ 2828b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project attIndex++; 2829b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project nPrefixes++; 2830b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (attId->name)[-1] = 2; 2831b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2832b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2833b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 2834b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project attIndex++; 2835b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2836b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2837b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* set-up for XML_GetSpecifiedAttributeCount and XML_GetIdAttributeIndex */ 2838b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project nSpecifiedAtts = attIndex; 2839b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (elementType->idAtt && (elementType->idAtt->name)[-1]) { 2840b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (i = 0; i < attIndex; i += 2) 2841b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (appAtts[i] == elementType->idAtt->name) { 2842b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project idAttIndex = i; 2843b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 2844b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2845b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2846b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 2847b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project idAttIndex = -1; 2848b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2849b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* do attribute defaulting */ 2850b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (i = 0; i < nDefaultAtts; i++) { 2851b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const DEFAULT_ATTRIBUTE *da = elementType->defaultAtts + i; 2852b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!(da->id->name)[-1] && da->value) { 2853b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (da->id->prefix) { 2854b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (da->id->xmlns) { 2855b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Error result = addBinding(parser, da->id->prefix, da->id, 2856b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project da->value, bindingsPtr); 2857b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (result) 2858b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 2859b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2860b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 2861b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (da->id->name)[-1] = 2; 2862b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project nPrefixes++; 2863b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project appAtts[attIndex++] = da->id->name; 2864b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project appAtts[attIndex++] = da->value; 2865b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2866b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2867b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 2868b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (da->id->name)[-1] = 1; 2869b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project appAtts[attIndex++] = da->id->name; 2870b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project appAtts[attIndex++] = da->value; 2871b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2872b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2873b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2874b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project appAtts[attIndex] = 0; 2875b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2876b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* expand prefixed attribute names, check for duplicates, 2877b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project and clear flags that say whether attributes were specified */ 2878b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project i = 0; 2879b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (nPrefixes) { 2880b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int j; /* hash table index */ 2881b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unsigned long version = nsAttsVersion; 2882b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int nsAttsSize = (int)1 << nsAttsPower; 2883b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* size of hash table must be at least 2 * (# of prefixed attributes) */ 2884b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if ((nPrefixes << 1) >> nsAttsPower) { /* true for nsAttsPower = 0 */ 2885b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project NS_ATT *temp; 2886b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* hash table size must also be a power of 2 and >= 8 */ 2887b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project while (nPrefixes >> nsAttsPower++); 2888b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (nsAttsPower < 3) 2889b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project nsAttsPower = 3; 2890b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project nsAttsSize = (int)1 << nsAttsPower; 2891b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project temp = (NS_ATT *)REALLOC(nsAtts, nsAttsSize * sizeof(NS_ATT)); 2892b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!temp) 2893b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 2894b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project nsAtts = temp; 2895b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project version = 0; /* force re-initialization of nsAtts hash table */ 2896b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2897b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* using a version flag saves us from initializing nsAtts every time */ 2898b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!version) { /* initialize version flags when version wraps around */ 2899b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project version = INIT_ATTS_VERSION; 2900b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (j = nsAttsSize; j != 0; ) 2901b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project nsAtts[--j].version = version; 2902b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2903b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project nsAttsVersion = --version; 2904b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2905b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* expand prefixed names and check for duplicates */ 2906b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (; i < attIndex; i += 2) { 2907b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *s = appAtts[i]; 2908b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (s[-1] == 2) { /* prefixed */ 2909b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ATTRIBUTE_ID *id; 2910b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const BINDING *b; 291135e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes unsigned long uriHash = hash_secret_salt; 2912b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ((XML_Char *)s)[-1] = 0; /* clear flag */ 291335e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes id = (ATTRIBUTE_ID *)lookup(parser, &dtd->attributeIds, s, 0); 2914b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project b = id->prefix->binding; 2915b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!b) 2916b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_UNBOUND_PREFIX; 2917b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2918b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* as we expand the name we also calculate its hash value */ 2919b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (j = 0; j < b->uriLen; j++) { 2920b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char c = b->uri[j]; 2921b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppendChar(&tempPool, c)) 2922b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 2923b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project uriHash = CHAR_HASH(uriHash, c); 2924b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2925d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes while (*s++ != XML_T(ASCII_COLON)) 2926b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ; 2927b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project do { /* copies null terminator */ 2928b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char c = *s; 2929b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppendChar(&tempPool, *s)) 2930b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 2931b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project uriHash = CHAR_HASH(uriHash, c); 2932b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } while (*s++); 2933b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2934b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project { /* Check hash table for duplicate of expanded name (uriName). 293535e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes Derived from code in lookup(parser, HASH_TABLE *table, ...). 2936b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 2937b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unsigned char step = 0; 2938b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unsigned long mask = nsAttsSize - 1; 2939b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project j = uriHash & mask; /* index into hash table */ 2940b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project while (nsAtts[j].version == version) { 2941b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* for speed we compare stored hash values first */ 2942b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (uriHash == nsAtts[j].hash) { 2943b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *s1 = poolStart(&tempPool); 2944b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *s2 = nsAtts[j].uriName; 2945b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* s1 is null terminated, but not s2 */ 2946b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (; *s1 == *s2 && *s1 != 0; s1++, s2++); 2947b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (*s1 == 0) 2948b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_DUPLICATE_ATTRIBUTE; 2949b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2950b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!step) 2951b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project step = PROBE_STEP(uriHash, mask, nsAttsPower); 2952b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project j < step ? (j += nsAttsSize - step) : (j -= step); 2953b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2954b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2955b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2956b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (ns_triplets) { /* append namespace separator and prefix */ 2957b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tempPool.ptr[-1] = namespaceSeparator; 2958b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project s = b->prefix->name; 2959b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project do { 2960b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppendChar(&tempPool, *s)) 2961b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 2962b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } while (*s++); 2963b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2964b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2965b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* store expanded name in attribute list */ 2966b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project s = poolStart(&tempPool); 2967b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolFinish(&tempPool); 2968b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project appAtts[i] = s; 2969b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2970b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* fill empty slot with new version, uriName and hash value */ 2971b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project nsAtts[j].version = version; 2972b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project nsAtts[j].hash = uriHash; 2973b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project nsAtts[j].uriName = s; 2974b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2975b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!--nPrefixes) { 2976b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project i += 2; 2977b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 2978b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2979b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2980b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else /* not prefixed */ 2981b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ((XML_Char *)s)[-1] = 0; /* clear flag */ 2982b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2983b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 2984b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* clear flags for the remaining attributes */ 2985b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (; i < attIndex; i += 2) 2986b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ((XML_Char *)(appAtts[i]))[-1] = 0; 2987b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (binding = *bindingsPtr; binding; binding = binding->nextTagBinding) 2988b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project binding->attId->name[-1] = 0; 2989b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2990b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!ns) 2991b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 2992b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 2993b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* expand the element type name */ 2994b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (elementType->prefix) { 2995b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project binding = elementType->prefix->binding; 2996b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!binding) 2997b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_UNBOUND_PREFIX; 2998b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project localPart = tagNamePtr->str; 2999d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes while (*localPart++ != XML_T(ASCII_COLON)) 3000b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ; 3001b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3002b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (dtd->defaultPrefix.binding) { 3003b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project binding = dtd->defaultPrefix.binding; 3004b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project localPart = tagNamePtr->str; 3005b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3006b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 3007b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 3008b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project prefixLen = 0; 3009b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (ns_triplets && binding->prefix->name) { 3010b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (; binding->prefix->name[prefixLen++];) 3011b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ; /* prefixLen includes null terminator */ 3012b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3013b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tagNamePtr->localPart = localPart; 3014b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tagNamePtr->uriLen = binding->uriLen; 3015b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tagNamePtr->prefix = binding->prefix->name; 3016b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tagNamePtr->prefixLen = prefixLen; 3017b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (i = 0; localPart[i++];) 3018b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ; /* i includes null terminator */ 3019b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project n = i + binding->uriLen + prefixLen; 3020b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (n > binding->uriAlloc) { 3021b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project TAG *p; 3022b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project uri = (XML_Char *)MALLOC((n + EXPAND_SPARE) * sizeof(XML_Char)); 3023b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!uri) 3024b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 3025b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project binding->uriAlloc = n + EXPAND_SPARE; 3026b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project memcpy(uri, binding->uri, binding->uriLen * sizeof(XML_Char)); 3027b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (p = tagStack; p; p = p->parent) 3028b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (p->name.str == binding->uri) 3029b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->name.str = uri; 3030b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project FREE(binding->uri); 3031b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project binding->uri = uri; 3032b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3033b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* if namespaceSeparator != '\0' then uri includes it already */ 3034b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project uri = binding->uri + binding->uriLen; 3035b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project memcpy(uri, localPart, i * sizeof(XML_Char)); 3036b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* we always have a namespace separator between localPart and prefix */ 3037b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (prefixLen) { 3038b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project uri += i - 1; 3039b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *uri = namespaceSeparator; /* replace null terminator */ 3040b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project memcpy(uri + 1, binding->prefix->name, prefixLen * sizeof(XML_Char)); 3041b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3042b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tagNamePtr->str = binding->uri; 3043b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 3044b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 3045b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3046b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project/* addBinding() overwrites the value of prefix->binding without checking. 3047b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project Therefore one must keep track of the old value outside of addBinding(). 3048b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project*/ 3049b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error 3050b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectaddBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId, 3051b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *uri, BINDING **bindingsPtr) 3052b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 3053b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project static const XML_Char xmlNamespace[] = { 3054d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes ASCII_h, ASCII_t, ASCII_t, ASCII_p, ASCII_COLON, ASCII_SLASH, ASCII_SLASH, 3055d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes ASCII_w, ASCII_w, ASCII_w, ASCII_PERIOD, ASCII_w, ASCII_3, ASCII_PERIOD, 305635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes ASCII_o, ASCII_r, ASCII_g, ASCII_SLASH, ASCII_X, ASCII_M, ASCII_L, 3057d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes ASCII_SLASH, ASCII_1, ASCII_9, ASCII_9, ASCII_8, ASCII_SLASH, 3058d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes ASCII_n, ASCII_a, ASCII_m, ASCII_e, ASCII_s, ASCII_p, ASCII_a, ASCII_c, 3059d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes ASCII_e, '\0' 3060b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project }; 306135e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes static const int xmlLen = 3062b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (int)sizeof(xmlNamespace)/sizeof(XML_Char) - 1; 3063b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project static const XML_Char xmlnsNamespace[] = { 3064d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes ASCII_h, ASCII_t, ASCII_t, ASCII_p, ASCII_COLON, ASCII_SLASH, ASCII_SLASH, 3065d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes ASCII_w, ASCII_w, ASCII_w, ASCII_PERIOD, ASCII_w, ASCII_3, ASCII_PERIOD, 306635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes ASCII_o, ASCII_r, ASCII_g, ASCII_SLASH, ASCII_2, ASCII_0, ASCII_0, 306735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes ASCII_0, ASCII_SLASH, ASCII_x, ASCII_m, ASCII_l, ASCII_n, ASCII_s, 3068d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes ASCII_SLASH, '\0' 3069b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project }; 307035e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes static const int xmlnsLen = 3071b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (int)sizeof(xmlnsNamespace)/sizeof(XML_Char) - 1; 3072b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3073b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool mustBeXML = XML_FALSE; 3074b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool isXML = XML_TRUE; 3075b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool isXMLNS = XML_TRUE; 307635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes 3077b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project BINDING *b; 3078b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int len; 3079b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3080b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* empty URI is only valid for default namespace per XML NS 1.0 (not 1.1) */ 3081b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (*uri == XML_T('\0') && prefix->name) 3082b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_UNDECLARING_PREFIX; 3083b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3084b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (prefix->name 3085d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes && prefix->name[0] == XML_T(ASCII_x) 3086d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes && prefix->name[1] == XML_T(ASCII_m) 3087d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes && prefix->name[2] == XML_T(ASCII_l)) { 3088b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3089b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* Not allowed to bind xmlns */ 3090d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes if (prefix->name[3] == XML_T(ASCII_n) 3091d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes && prefix->name[4] == XML_T(ASCII_s) 3092b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project && prefix->name[5] == XML_T('\0')) 3093b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_RESERVED_PREFIX_XMLNS; 3094b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3095b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (prefix->name[3] == XML_T('\0')) 3096b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project mustBeXML = XML_TRUE; 3097b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3098b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3099b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (len = 0; uri[len]; len++) { 3100b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (isXML && (len > xmlLen || uri[len] != xmlNamespace[len])) 3101b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project isXML = XML_FALSE; 3102b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 310335e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes if (!mustBeXML && isXMLNS 3104b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project && (len > xmlnsLen || uri[len] != xmlnsNamespace[len])) 3105b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project isXMLNS = XML_FALSE; 3106b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3107b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project isXML = isXML && len == xmlLen; 3108b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project isXMLNS = isXMLNS && len == xmlnsLen; 3109b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3110b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (mustBeXML != isXML) 3111b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return mustBeXML ? XML_ERROR_RESERVED_PREFIX_XML 3112b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project : XML_ERROR_RESERVED_NAMESPACE_URI; 3113b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3114b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (isXMLNS) 3115b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_RESERVED_NAMESPACE_URI; 3116b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3117b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (namespaceSeparator) 3118b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project len++; 3119b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (freeBindingList) { 3120b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project b = freeBindingList; 3121b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (len > b->uriAlloc) { 3122b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char *temp = (XML_Char *)REALLOC(b->uri, 3123b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project sizeof(XML_Char) * (len + EXPAND_SPARE)); 3124b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (temp == NULL) 3125b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 3126b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project b->uri = temp; 3127b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project b->uriAlloc = len + EXPAND_SPARE; 3128b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3129b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project freeBindingList = b->nextTagBinding; 3130b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3131b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 3132b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project b = (BINDING *)MALLOC(sizeof(BINDING)); 3133b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!b) 3134b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 3135b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project b->uri = (XML_Char *)MALLOC(sizeof(XML_Char) * (len + EXPAND_SPARE)); 3136b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!b->uri) { 3137b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project FREE(b); 3138b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 3139b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3140b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project b->uriAlloc = len + EXPAND_SPARE; 3141b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3142b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project b->uriLen = len; 3143b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project memcpy(b->uri, uri, len * sizeof(XML_Char)); 3144b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (namespaceSeparator) 3145b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project b->uri[len - 1] = namespaceSeparator; 3146b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project b->prefix = prefix; 3147b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project b->attId = attId; 3148b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project b->prevPrefixBinding = prefix->binding; 3149b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* NULL binding when default namespace undeclared */ 3150b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (*uri == XML_T('\0') && prefix == &_dtd->defaultPrefix) 3151b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project prefix->binding = NULL; 3152b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 3153b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project prefix->binding = b; 3154b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project b->nextTagBinding = *bindingsPtr; 3155b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *bindingsPtr = b; 3156b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* if attId == NULL then we are not starting a namespace scope */ 3157b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (attId && startNamespaceDeclHandler) 3158b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project startNamespaceDeclHandler(handlerArg, prefix->name, 3159b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project prefix->binding ? uri : 0); 3160b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 3161b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 3162b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3163b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project/* The idea here is to avoid using stack for each CDATA section when 3164b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project the whole file is parsed with one call. 3165b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project*/ 3166b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error PTRCALL 3167b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectcdataSectionProcessor(XML_Parser parser, 3168b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *start, 3169b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end, 3170b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **endPtr) 3171b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 3172b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Error result = doCdataSection(parser, encoding, &start, end, 3173b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project endPtr, (XML_Bool)!ps_finalBuffer); 3174b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (result != XML_ERROR_NONE) 3175b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 3176b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (start) { 3177b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (parentParser) { /* we are parsing an external entity */ 3178b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processor = externalEntityContentProcessor; 3179b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return externalEntityContentProcessor(parser, start, end, endPtr); 3180b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3181b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 3182b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processor = contentProcessor; 3183b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return contentProcessor(parser, start, end, endPtr); 3184b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3185b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3186b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 3187b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 3188b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3189b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project/* startPtr gets set to non-null if the section is closed, and to null if 3190b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project the section is not yet closed. 3191b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project*/ 3192b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error 3193b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectdoCdataSection(XML_Parser parser, 3194b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const ENCODING *enc, 3195b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **startPtr, 3196b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end, 3197b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **nextPtr, 3198b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool haveMore) 3199b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 3200b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *s = *startPtr; 3201b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **eventPP; 3202b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **eventEndPP; 3203b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (enc == encoding) { 3204b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPP = &eventPtr; 3205b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventPP = s; 3206b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventEndPP = &eventEndPtr; 3207b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3208b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 3209b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPP = &(openInternalEntities->internalEventPtr); 3210b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventEndPP = &(openInternalEntities->internalEventEndPtr); 3211b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3212b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventPP = s; 3213b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *startPtr = NULL; 3214b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3215b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (;;) { 3216b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *next; 3217b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int tok = XmlCdataSectionTok(enc, s, end, &next); 3218b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventEndPP = next; 3219b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (tok) { 3220b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_CDATA_SECT_CLOSE: 3221b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (endCdataSectionHandler) 3222b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project endCdataSectionHandler(handlerArg); 3223b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#if 0 3224b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* see comment under XML_TOK_CDATA_SECT_OPEN */ 3225b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (characterDataHandler) 3226b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project characterDataHandler(handlerArg, dataBuf, 0); 3227b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif 3228b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (defaultHandler) 3229b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project reportDefault(parser, enc, s, next); 3230b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *startPtr = next; 3231b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = next; 3232b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (ps_parsing == XML_FINISHED) 3233b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_ABORTED; 3234b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 3235b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 3236b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_DATA_NEWLINE: 3237b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (characterDataHandler) { 3238b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char c = 0xA; 3239b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project characterDataHandler(handlerArg, &c, 1); 3240b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3241b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (defaultHandler) 3242b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project reportDefault(parser, enc, s, next); 3243b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 3244b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_DATA_CHARS: 3245d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes { 3246d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes XML_CharacterDataHandler charDataHandler = characterDataHandler; 3247d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes if (charDataHandler) { 3248d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes if (MUST_CONVERT(enc, s)) { 3249d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes for (;;) { 3250d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes ICHAR *dataPtr = (ICHAR *)dataBuf; 3251d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)dataBufEnd); 3252d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes *eventEndPP = next; 3253d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes charDataHandler(handlerArg, dataBuf, 3254d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes (int)(dataPtr - (ICHAR *)dataBuf)); 3255d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes if (s == next) 3256d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes break; 3257d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes *eventPP = s; 3258d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes } 3259b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3260d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes else 3261d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes charDataHandler(handlerArg, 3262d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes (XML_Char *)s, 3263d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes (int)((XML_Char *)next - (XML_Char *)s)); 3264b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3265d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes else if (defaultHandler) 3266d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes reportDefault(parser, enc, s, next); 3267b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3268b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 3269b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_INVALID: 3270b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventPP = next; 3271b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_INVALID_TOKEN; 3272b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_PARTIAL_CHAR: 3273b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (haveMore) { 3274b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = s; 3275b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 3276b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3277b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_PARTIAL_CHAR; 3278b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_PARTIAL: 3279b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_NONE: 3280b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (haveMore) { 3281b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = s; 3282b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 3283b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3284b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_UNCLOSED_CDATA_SECTION; 3285b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project default: 3286b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventPP = next; 3287b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_UNEXPECTED_STATE; 3288b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3289b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3290b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventPP = s = next; 3291b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (ps_parsing) { 3292b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_SUSPENDED: 3293b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = next; 3294b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 3295b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_FINISHED: 3296b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_ABORTED; 3297b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project default: ; 3298b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3299b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3300b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* not reached */ 3301b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 3302b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3303b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 3304b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3305b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project/* The idea here is to avoid using stack for each IGNORE section when 3306b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project the whole file is parsed with one call. 3307b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project*/ 3308b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error PTRCALL 3309b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectignoreSectionProcessor(XML_Parser parser, 3310b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *start, 3311b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end, 3312b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **endPtr) 3313b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 331435e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes enum XML_Error result = doIgnoreSection(parser, encoding, &start, end, 3315b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project endPtr, (XML_Bool)!ps_finalBuffer); 3316b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (result != XML_ERROR_NONE) 3317b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 3318b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (start) { 3319b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processor = prologProcessor; 3320b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return prologProcessor(parser, start, end, endPtr); 3321b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3322b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 3323b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 3324b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3325b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project/* startPtr gets set to non-null is the section is closed, and to null 3326b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if the section is not yet closed. 3327b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project*/ 3328b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error 3329b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectdoIgnoreSection(XML_Parser parser, 3330b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const ENCODING *enc, 3331b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **startPtr, 3332b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end, 3333b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **nextPtr, 3334b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool haveMore) 3335b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 3336b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *next; 3337b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int tok; 3338b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *s = *startPtr; 3339b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **eventPP; 3340b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **eventEndPP; 3341b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (enc == encoding) { 3342b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPP = &eventPtr; 3343b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventPP = s; 3344b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventEndPP = &eventEndPtr; 3345b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3346b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 3347b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPP = &(openInternalEntities->internalEventPtr); 3348b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventEndPP = &(openInternalEntities->internalEventEndPtr); 3349b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3350b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventPP = s; 3351b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *startPtr = NULL; 3352b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tok = XmlIgnoreSectionTok(enc, s, end, &next); 3353b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventEndPP = next; 3354b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (tok) { 3355b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_IGNORE_SECT: 3356b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (defaultHandler) 3357b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project reportDefault(parser, enc, s, next); 3358b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *startPtr = next; 3359b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = next; 3360b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (ps_parsing == XML_FINISHED) 3361b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_ABORTED; 3362b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 3363b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 3364b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_INVALID: 3365b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventPP = next; 3366b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_INVALID_TOKEN; 3367b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_PARTIAL_CHAR: 3368b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (haveMore) { 3369b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = s; 3370b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 3371b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3372b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_PARTIAL_CHAR; 3373b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_PARTIAL: 3374b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_NONE: 3375b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (haveMore) { 3376b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = s; 3377b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 3378b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3379b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_SYNTAX; /* XML_ERROR_UNCLOSED_IGNORE_SECTION */ 3380b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project default: 3381b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventPP = next; 3382b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_UNEXPECTED_STATE; 3383b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3384b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* not reached */ 3385b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 3386b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3387b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 3388b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3389b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error 3390b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectinitializeEncoding(XML_Parser parser) 3391b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 3392b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *s; 3393b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_UNICODE 3394b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project char encodingBuf[128]; 3395b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!protocolEncodingName) 3396b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project s = NULL; 3397b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 3398b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int i; 3399b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (i = 0; protocolEncodingName[i]; i++) { 3400b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (i == sizeof(encodingBuf) - 1 3401b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project || (protocolEncodingName[i] & ~0x7f) != 0) { 3402b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project encodingBuf[0] = '\0'; 3403b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 3404b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3405b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project encodingBuf[i] = (char)protocolEncodingName[i]; 3406b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3407b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project encodingBuf[i] = '\0'; 3408b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project s = encodingBuf; 3409b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3410b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#else 3411b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project s = protocolEncodingName; 3412b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif 3413b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if ((ns ? XmlInitEncodingNS : XmlInitEncoding)(&initEncoding, &encoding, s)) 3414b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 3415b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return handleUnknownEncoding(parser, protocolEncodingName); 3416b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 3417b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3418b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error 3419b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectprocessXmlDecl(XML_Parser parser, int isGeneralTextEntity, 3420b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *s, const char *next) 3421b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 3422b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *encodingName = NULL; 3423b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *storedEncName = NULL; 3424b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const ENCODING *newEncoding = NULL; 3425b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *version = NULL; 3426b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *versionend; 3427b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *storedversion = NULL; 3428b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int standalone = -1; 3429b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!(ns 3430b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ? XmlParseXmlDeclNS 3431b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project : XmlParseXmlDecl)(isGeneralTextEntity, 3432b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project encoding, 3433b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project s, 3434b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project next, 3435b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project &eventPtr, 3436b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project &version, 3437b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project &versionend, 3438b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project &encodingName, 3439b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project &newEncoding, 3440b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project &standalone)) { 3441b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (isGeneralTextEntity) 3442b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_TEXT_DECL; 3443b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 3444b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_XML_DECL; 3445b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3446b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!isGeneralTextEntity && standalone == 1) { 3447b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project _dtd->standalone = XML_TRUE; 3448b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 3449b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (paramEntityParsing == XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE) 3450b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER; 3451b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 3452b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3453b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (xmlDeclHandler) { 3454b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (encodingName != NULL) { 3455b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project storedEncName = poolStoreString(&temp2Pool, 3456b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project encoding, 3457b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project encodingName, 3458b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project encodingName 3459b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project + XmlNameLength(encoding, encodingName)); 3460b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!storedEncName) 3461b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 3462b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolFinish(&temp2Pool); 3463b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3464b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (version) { 3465b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project storedversion = poolStoreString(&temp2Pool, 3466b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project encoding, 3467b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project version, 3468b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project versionend - encoding->minBytesPerChar); 3469b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!storedversion) 3470b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 3471b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3472b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project xmlDeclHandler(handlerArg, storedversion, storedEncName, standalone); 3473b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3474b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (defaultHandler) 3475b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project reportDefault(parser, encoding, s, next); 3476b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (protocolEncodingName == NULL) { 3477b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (newEncoding) { 3478b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (newEncoding->minBytesPerChar != encoding->minBytesPerChar) { 3479b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = encodingName; 3480b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_INCORRECT_ENCODING; 3481b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3482b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project encoding = newEncoding; 3483b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3484b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (encodingName) { 3485b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Error result; 3486b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!storedEncName) { 3487b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project storedEncName = poolStoreString( 3488b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project &temp2Pool, encoding, encodingName, 3489b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project encodingName + XmlNameLength(encoding, encodingName)); 3490b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!storedEncName) 3491b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 3492b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3493b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project result = handleUnknownEncoding(parser, storedEncName); 3494b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolClear(&temp2Pool); 3495b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (result == XML_ERROR_UNKNOWN_ENCODING) 3496b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = encodingName; 3497b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 3498b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3499b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3500b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3501b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (storedEncName || storedversion) 3502b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolClear(&temp2Pool); 3503b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3504b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 3505b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 3506b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3507b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error 3508b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjecthandleUnknownEncoding(XML_Parser parser, const XML_Char *encodingName) 3509b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 3510b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (unknownEncodingHandler) { 3511b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Encoding info; 3512b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int i; 3513b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (i = 0; i < 256; i++) 3514b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project info.map[i] = -1; 3515b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project info.convert = NULL; 3516b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project info.data = NULL; 3517b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project info.release = NULL; 3518b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (unknownEncodingHandler(unknownEncodingHandlerData, encodingName, 3519b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project &info)) { 3520b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ENCODING *enc; 3521b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unknownEncodingMem = MALLOC(XmlSizeOfUnknownEncoding()); 3522b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!unknownEncodingMem) { 3523b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (info.release) 3524b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project info.release(info.data); 3525b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 3526b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3527b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enc = (ns 3528b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ? XmlInitUnknownEncodingNS 3529b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project : XmlInitUnknownEncoding)(unknownEncodingMem, 3530b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project info.map, 3531b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project info.convert, 3532b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project info.data); 3533b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (enc) { 3534b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unknownEncodingData = info.data; 3535b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unknownEncodingRelease = info.release; 3536b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project encoding = enc; 3537b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 3538b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3539b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3540b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (info.release != NULL) 3541b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project info.release(info.data); 3542b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3543b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_UNKNOWN_ENCODING; 3544b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 3545b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3546b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error PTRCALL 3547b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectprologInitProcessor(XML_Parser parser, 3548b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *s, 3549b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end, 3550b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **nextPtr) 3551b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 3552b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Error result = initializeEncoding(parser); 3553b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (result != XML_ERROR_NONE) 3554b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 3555b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processor = prologProcessor; 3556b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return prologProcessor(parser, s, end, nextPtr); 3557b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 3558b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3559b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 3560b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3561b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error PTRCALL 3562b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectexternalParEntInitProcessor(XML_Parser parser, 3563b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *s, 3564b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end, 3565b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **nextPtr) 3566b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 3567b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Error result = initializeEncoding(parser); 3568b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (result != XML_ERROR_NONE) 3569b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 3570b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3571b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* we know now that XML_Parse(Buffer) has been called, 3572b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project so we consider the external parameter entity read */ 3573b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project _dtd->paramEntityRead = XML_TRUE; 3574b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3575b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (prologState.inEntityValue) { 3576b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processor = entityValueInitProcessor; 3577b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return entityValueInitProcessor(parser, s, end, nextPtr); 3578b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3579b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 3580b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processor = externalParEntProcessor; 3581b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return externalParEntProcessor(parser, s, end, nextPtr); 3582b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3583b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 3584b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3585b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error PTRCALL 3586b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectentityValueInitProcessor(XML_Parser parser, 3587b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *s, 3588b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end, 3589b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **nextPtr) 3590b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 3591b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int tok; 3592b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *start = s; 3593b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *next = start; 3594b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = start; 3595b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 359635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes for (;;) { 3597b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tok = XmlPrologTok(encoding, start, end, &next); 3598b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventEndPtr = next; 3599b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (tok <= 0) { 3600b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!ps_finalBuffer && tok != XML_TOK_INVALID) { 3601b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = s; 3602b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 3603b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3604b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (tok) { 3605b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_INVALID: 3606b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_INVALID_TOKEN; 3607b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_PARTIAL: 3608b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_UNCLOSED_TOKEN; 3609b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_PARTIAL_CHAR: 3610b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_PARTIAL_CHAR; 3611b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_NONE: /* start == end */ 3612b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project default: 3613b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 3614b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3615b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* found end of entity value - can store it now */ 3616b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return storeEntityValue(parser, encoding, s, end); 3617b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3618b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (tok == XML_TOK_XML_DECL) { 3619b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Error result; 3620b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project result = processXmlDecl(parser, 0, start, next); 3621b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (result != XML_ERROR_NONE) 3622b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 3623b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (ps_parsing) { 362435e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes case XML_SUSPENDED: 3625b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = next; 3626b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 3627b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_FINISHED: 3628b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_ABORTED; 3629b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project default: 3630b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = next; 3631b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3632b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* stop scanning for text declaration - we found one */ 3633b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processor = entityValueProcessor; 3634b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return entityValueProcessor(parser, next, end, nextPtr); 3635b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3636b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* If we are at the end of the buffer, this would cause XmlPrologTok to 3637b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_TOK_NONE on the next call, which would then cause the 3638b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project function to exit with *nextPtr set to s - that is what we want for other 3639b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tokens, but not for the BOM - we would rather like to skip it; 3640b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project then, when this routine is entered the next time, XmlPrologTok will 3641b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_TOK_INVALID, since the BOM is still in the buffer 3642b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 3643b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (tok == XML_TOK_BOM && next == end && !ps_finalBuffer) { 3644b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = next; 3645b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 3646b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3647b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project start = next; 3648b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = start; 3649b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3650b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 3651b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3652b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error PTRCALL 3653b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectexternalParEntProcessor(XML_Parser parser, 3654b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *s, 3655b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end, 3656b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **nextPtr) 3657b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 3658b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *next = s; 3659b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int tok; 3660b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3661b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tok = XmlPrologTok(encoding, s, end, &next); 3662b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (tok <= 0) { 3663b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!ps_finalBuffer && tok != XML_TOK_INVALID) { 3664b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = s; 3665b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 3666b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3667b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (tok) { 3668b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_INVALID: 3669b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_INVALID_TOKEN; 3670b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_PARTIAL: 3671b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_UNCLOSED_TOKEN; 3672b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_PARTIAL_CHAR: 3673b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_PARTIAL_CHAR; 3674b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_NONE: /* start == end */ 3675b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project default: 3676b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 3677b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3678b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3679b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* This would cause the next stage, i.e. doProlog to be passed XML_TOK_BOM. 3680b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project However, when parsing an external subset, doProlog will not accept a BOM 3681b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project as valid, and report a syntax error, so we have to skip the BOM 3682b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 3683b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (tok == XML_TOK_BOM) { 3684b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project s = next; 3685b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tok = XmlPrologTok(encoding, s, end, &next); 3686b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3687b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3688b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processor = prologProcessor; 368935e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes return doProlog(parser, encoding, s, end, tok, next, 3690b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project nextPtr, (XML_Bool)!ps_finalBuffer); 3691b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 3692b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3693b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error PTRCALL 3694b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectentityValueProcessor(XML_Parser parser, 3695b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *s, 3696b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end, 3697b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **nextPtr) 3698b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 3699b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *start = s; 3700b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *next = s; 3701b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const ENCODING *enc = encoding; 3702b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int tok; 3703b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3704b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (;;) { 3705b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tok = XmlPrologTok(enc, start, end, &next); 3706b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (tok <= 0) { 3707b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!ps_finalBuffer && tok != XML_TOK_INVALID) { 3708b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = s; 3709b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 3710b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3711b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (tok) { 3712b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_INVALID: 3713b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_INVALID_TOKEN; 3714b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_PARTIAL: 3715b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_UNCLOSED_TOKEN; 3716b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_PARTIAL_CHAR: 3717b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_PARTIAL_CHAR; 3718b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_NONE: /* start == end */ 3719b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project default: 3720b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 3721b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3722b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* found end of entity value - can store it now */ 3723b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return storeEntityValue(parser, enc, s, end); 3724b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3725b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project start = next; 3726b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3727b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 3728b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3729b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 3730b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3731b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error PTRCALL 3732b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectprologProcessor(XML_Parser parser, 3733b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *s, 3734b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end, 3735b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **nextPtr) 3736b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 3737b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *next = s; 3738b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int tok = XmlPrologTok(encoding, s, end, &next); 373935e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes return doProlog(parser, encoding, s, end, tok, next, 3740b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project nextPtr, (XML_Bool)!ps_finalBuffer); 3741b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 3742b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3743b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error 3744b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectdoProlog(XML_Parser parser, 3745b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const ENCODING *enc, 3746b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *s, 3747b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end, 3748b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int tok, 3749b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *next, 3750b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **nextPtr, 3751b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool haveMore) 3752b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 3753b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 3754d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes static const XML_Char externalSubsetName[] = { ASCII_HASH , '\0' }; 3755b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 375635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes static const XML_Char atypeCDATA[] = 3757d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes { ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' }; 3758d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes static const XML_Char atypeID[] = { ASCII_I, ASCII_D, '\0' }; 3759d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes static const XML_Char atypeIDREF[] = 3760d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes { ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, '\0' }; 3761d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes static const XML_Char atypeIDREFS[] = 3762d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes { ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, ASCII_S, '\0' }; 3763d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes static const XML_Char atypeENTITY[] = 3764d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes { ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_Y, '\0' }; 3765d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes static const XML_Char atypeENTITIES[] = { ASCII_E, ASCII_N, 3766d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes ASCII_T, ASCII_I, ASCII_T, ASCII_I, ASCII_E, ASCII_S, '\0' }; 3767b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project static const XML_Char atypeNMTOKEN[] = { 3768d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, '\0' }; 3769d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes static const XML_Char atypeNMTOKENS[] = { ASCII_N, ASCII_M, ASCII_T, 3770d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes ASCII_O, ASCII_K, ASCII_E, ASCII_N, ASCII_S, '\0' }; 3771d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes static const XML_Char notationPrefix[] = { ASCII_N, ASCII_O, ASCII_T, 3772d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes ASCII_A, ASCII_T, ASCII_I, ASCII_O, ASCII_N, ASCII_LPAREN, '\0' }; 3773d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes static const XML_Char enumValueSep[] = { ASCII_PIPE, '\0' }; 3774d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes static const XML_Char enumValueStart[] = { ASCII_LPAREN, '\0' }; 3775b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3776b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* save one level of indirection */ 377735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes DTD * const dtd = _dtd; 3778b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3779b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **eventPP; 3780b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **eventEndPP; 3781b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Content_Quant quant; 3782b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3783b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (enc == encoding) { 3784b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPP = &eventPtr; 3785b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventEndPP = &eventEndPtr; 3786b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3787b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 3788b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPP = &(openInternalEntities->internalEventPtr); 3789b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventEndPP = &(openInternalEntities->internalEventEndPtr); 3790b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3791b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 3792b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (;;) { 3793b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int role; 3794b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool handleDefault = XML_TRUE; 3795b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventPP = s; 3796b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventEndPP = next; 3797b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (tok <= 0) { 3798b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (haveMore && tok != XML_TOK_INVALID) { 3799b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = s; 3800b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 3801b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3802b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (tok) { 3803b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_INVALID: 3804b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventPP = next; 3805b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_INVALID_TOKEN; 3806b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_PARTIAL: 3807b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_UNCLOSED_TOKEN; 3808b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_PARTIAL_CHAR: 3809b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_PARTIAL_CHAR; 381035e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes case -XML_TOK_PROLOG_S: 381135e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes tok = -tok; 381235e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes break; 3813b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_NONE: 3814b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 3815b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* for internal PE NOT referenced between declarations */ 3816b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (enc != encoding && !openInternalEntities->betweenDecl) { 3817b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = s; 3818b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 3819b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3820b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* WFC: PE Between Declarations - must check that PE contains 3821b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project complete markup, not only for external PEs, but also for 3822b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project internal PEs if the reference occurs between declarations. 3823b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 3824b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (isParamEntity || enc != encoding) { 3825b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (XmlTokenRole(&prologState, XML_TOK_NONE, end, end, enc) 3826b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project == XML_ROLE_ERROR) 3827b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_INCOMPLETE_PE; 3828b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = s; 3829b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 3830b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3831b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 3832b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_ELEMENTS; 3833b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project default: 3834b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tok = -tok; 3835b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project next = end; 3836b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 3837b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3838b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3839b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project role = XmlTokenRole(&prologState, tok, s, next, enc); 3840b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (role) { 3841b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_XML_DECL: 3842b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project { 3843b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Error result = processXmlDecl(parser, 0, s, next); 3844b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (result != XML_ERROR_NONE) 3845b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 3846b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enc = encoding; 3847b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 3848b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3849b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 3850b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_DOCTYPE_NAME: 3851b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (startDoctypeDeclHandler) { 3852b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project doctypeName = poolStoreString(&tempPool, enc, s, next); 3853b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!doctypeName) 3854b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 3855b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolFinish(&tempPool); 3856b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project doctypePubid = NULL; 3857b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 3858b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3859b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project doctypeSysid = NULL; /* always initialize to NULL */ 3860b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 3861b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_DOCTYPE_INTERNAL_SUBSET: 3862b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (startDoctypeDeclHandler) { 3863b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project startDoctypeDeclHandler(handlerArg, doctypeName, doctypeSysid, 3864b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project doctypePubid, 1); 3865b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project doctypeName = NULL; 3866b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolClear(&tempPool); 3867b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 3868b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3869b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 3870b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 3871b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_TEXT_DECL: 3872b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project { 3873b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Error result = processXmlDecl(parser, 1, s, next); 3874b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (result != XML_ERROR_NONE) 3875b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 3876b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enc = encoding; 3877b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 3878b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3879b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 3880b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 3881b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_DOCTYPE_PUBLIC_ID: 3882b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 3883b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project useForeignDTD = XML_FALSE; 388435e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes declEntity = (ENTITY *)lookup(parser, 388535e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes &dtd->paramEntities, 3886b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project externalSubsetName, 3887b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project sizeof(ENTITY)); 3888b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!declEntity) 3889b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 3890b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 3891b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->hasParamEntityRefs = XML_TRUE; 3892b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (startDoctypeDeclHandler) { 389335e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes XML_Char *pubId; 3894b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!XmlIsPublicId(enc, s, next, eventPP)) 3895b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_PUBLICID; 389635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes pubId = poolStoreString(&tempPool, enc, 389735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes s + enc->minBytesPerChar, 389835e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes next - enc->minBytesPerChar); 389935e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes if (!pubId) 3900b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 390135e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes normalizePublicId(pubId); 3902b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolFinish(&tempPool); 390335e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes doctypePubid = pubId; 3904b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 3905b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto alreadyChecked; 3906b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3907b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* fall through */ 3908b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_ENTITY_PUBLIC_ID: 3909b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!XmlIsPublicId(enc, s, next, eventPP)) 3910b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_PUBLICID; 3911b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project alreadyChecked: 3912b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd->keepProcessing && declEntity) { 3913b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char *tem = poolStoreString(&dtd->pool, 3914b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enc, 3915b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project s + enc->minBytesPerChar, 3916b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project next - enc->minBytesPerChar); 3917b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!tem) 3918b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 3919b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project normalizePublicId(tem); 3920b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->publicId = tem; 3921b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolFinish(&dtd->pool); 3922b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (entityDeclHandler) 3923b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 3924b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3925b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 3926b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_DOCTYPE_CLOSE: 3927b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (doctypeName) { 3928b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project startDoctypeDeclHandler(handlerArg, doctypeName, 3929b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project doctypeSysid, doctypePubid, 0); 3930b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolClear(&tempPool); 3931b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 3932b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3933b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* doctypeSysid will be non-NULL in the case of a previous 3934b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_ROLE_DOCTYPE_SYSTEM_ID, even if startDoctypeDeclHandler 3935b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project was not set, indicating an external subset 3936b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 3937b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 3938b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (doctypeSysid || useForeignDTD) { 3939b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool hadParamEntityRefs = dtd->hasParamEntityRefs; 3940b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->hasParamEntityRefs = XML_TRUE; 3941b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (paramEntityParsing && externalEntityRefHandler) { 394235e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes ENTITY *entity = (ENTITY *)lookup(parser, 394335e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes &dtd->paramEntities, 3944b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project externalSubsetName, 3945b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project sizeof(ENTITY)); 3946b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!entity) 3947b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 3948b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (useForeignDTD) 3949b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->base = curBase; 3950b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->paramEntityRead = XML_FALSE; 3951b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!externalEntityRefHandler(externalEntityRefHandlerArg, 3952b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 0, 3953b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->base, 3954b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->systemId, 3955b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->publicId)) 3956b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_EXTERNAL_ENTITY_HANDLING; 3957b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd->paramEntityRead) { 395835e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes if (!dtd->standalone && 395935e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes notStandaloneHandler && 3960b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project !notStandaloneHandler(handlerArg)) 3961b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NOT_STANDALONE; 3962b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3963b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* if we didn't read the foreign DTD then this means that there 3964b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project is no external subset and we must reset dtd->hasParamEntityRefs 3965b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 3966b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (!doctypeSysid) 3967b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->hasParamEntityRefs = hadParamEntityRefs; 3968b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* end of DTD - no need to update dtd->keepProcessing */ 3969b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3970b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project useForeignDTD = XML_FALSE; 3971b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3972b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 3973b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (endDoctypeDeclHandler) { 3974b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project endDoctypeDeclHandler(handlerArg); 3975b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 3976b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 3977b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 3978b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_INSTANCE_START: 3979b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 3980b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* if there is no DOCTYPE declaration then now is the 3981b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project last chance to read the foreign DTD 3982b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 3983b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (useForeignDTD) { 3984b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool hadParamEntityRefs = dtd->hasParamEntityRefs; 3985b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->hasParamEntityRefs = XML_TRUE; 3986b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (paramEntityParsing && externalEntityRefHandler) { 398735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes ENTITY *entity = (ENTITY *)lookup(parser, &dtd->paramEntities, 3988b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project externalSubsetName, 3989b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project sizeof(ENTITY)); 3990b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!entity) 3991b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 3992b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->base = curBase; 3993b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->paramEntityRead = XML_FALSE; 3994b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!externalEntityRefHandler(externalEntityRefHandlerArg, 3995b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 0, 3996b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->base, 3997b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->systemId, 3998b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->publicId)) 3999b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_EXTERNAL_ENTITY_HANDLING; 4000b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd->paramEntityRead) { 4001b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!dtd->standalone && 4002b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project notStandaloneHandler && 4003b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project !notStandaloneHandler(handlerArg)) 4004b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NOT_STANDALONE; 4005b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4006b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* if we didn't read the foreign DTD then this means that there 4007b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project is no external subset and we must reset dtd->hasParamEntityRefs 4008b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 4009b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 4010b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->hasParamEntityRefs = hadParamEntityRefs; 4011b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* end of DTD - no need to update dtd->keepProcessing */ 4012b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4013b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4014b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 4015b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processor = contentProcessor; 4016b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return contentProcessor(parser, s, end, nextPtr); 4017b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_ATTLIST_ELEMENT_NAME: 4018b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declElementType = getElementType(parser, enc, s, next); 4019b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!declElementType) 4020b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4021b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto checkAttListDeclHandler; 4022b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_ATTRIBUTE_NAME: 4023b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declAttributeId = getAttributeId(parser, enc, s, next); 4024b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!declAttributeId) 4025b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4026b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declAttributeIsCdata = XML_FALSE; 4027b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declAttributeType = NULL; 4028b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declAttributeIsId = XML_FALSE; 4029b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto checkAttListDeclHandler; 4030b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_ATTRIBUTE_TYPE_CDATA: 4031b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declAttributeIsCdata = XML_TRUE; 4032b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declAttributeType = atypeCDATA; 4033b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto checkAttListDeclHandler; 4034b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_ATTRIBUTE_TYPE_ID: 4035b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declAttributeIsId = XML_TRUE; 4036b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declAttributeType = atypeID; 4037b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto checkAttListDeclHandler; 4038b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_ATTRIBUTE_TYPE_IDREF: 4039b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declAttributeType = atypeIDREF; 4040b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto checkAttListDeclHandler; 4041b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_ATTRIBUTE_TYPE_IDREFS: 4042b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declAttributeType = atypeIDREFS; 4043b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto checkAttListDeclHandler; 4044b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_ATTRIBUTE_TYPE_ENTITY: 4045b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declAttributeType = atypeENTITY; 4046b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto checkAttListDeclHandler; 4047b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_ATTRIBUTE_TYPE_ENTITIES: 4048b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declAttributeType = atypeENTITIES; 4049b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto checkAttListDeclHandler; 4050b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_ATTRIBUTE_TYPE_NMTOKEN: 4051b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declAttributeType = atypeNMTOKEN; 4052b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto checkAttListDeclHandler; 4053b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_ATTRIBUTE_TYPE_NMTOKENS: 4054b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declAttributeType = atypeNMTOKENS; 4055b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project checkAttListDeclHandler: 4056b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd->keepProcessing && attlistDeclHandler) 4057b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4058b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4059b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_ATTRIBUTE_ENUM_VALUE: 4060b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_ATTRIBUTE_NOTATION_VALUE: 4061b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd->keepProcessing && attlistDeclHandler) { 4062b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *prefix; 4063b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (declAttributeType) { 4064b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project prefix = enumValueSep; 4065b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4066b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 4067b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project prefix = (role == XML_ROLE_ATTRIBUTE_NOTATION_VALUE 4068b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ? notationPrefix 4069b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project : enumValueStart); 4070b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4071b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppendString(&tempPool, prefix)) 4072b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4073b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppend(&tempPool, enc, s, next)) 4074b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4075b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declAttributeType = tempPool.start; 4076b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4077b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4078b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4079b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_IMPLIED_ATTRIBUTE_VALUE: 4080b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_REQUIRED_ATTRIBUTE_VALUE: 4081b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd->keepProcessing) { 4082b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!defineAttribute(declElementType, declAttributeId, 4083b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declAttributeIsCdata, declAttributeIsId, 4084b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 0, parser)) 4085b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4086b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (attlistDeclHandler && declAttributeType) { 4087d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes if (*declAttributeType == XML_T(ASCII_LPAREN) 4088d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes || (*declAttributeType == XML_T(ASCII_N) 4089d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes && declAttributeType[1] == XML_T(ASCII_O))) { 4090b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* Enumerated or Notation type */ 4091d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes if (!poolAppendChar(&tempPool, XML_T(ASCII_RPAREN)) 4092b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project || !poolAppendChar(&tempPool, XML_T('\0'))) 4093b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4094b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declAttributeType = tempPool.start; 4095b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolFinish(&tempPool); 4096b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4097b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventEndPP = s; 4098b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project attlistDeclHandler(handlerArg, declElementType->name, 4099b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declAttributeId->name, declAttributeType, 4100b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 0, role == XML_ROLE_REQUIRED_ATTRIBUTE_VALUE); 4101b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolClear(&tempPool); 4102b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4103b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4104b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4105b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4106b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_DEFAULT_ATTRIBUTE_VALUE: 4107b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_FIXED_ATTRIBUTE_VALUE: 4108b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd->keepProcessing) { 4109b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *attVal; 4110b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Error result = 4111b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project storeAttributeValue(parser, enc, declAttributeIsCdata, 4112b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project s + enc->minBytesPerChar, 4113b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project next - enc->minBytesPerChar, 4114b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project &dtd->pool); 4115b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (result) 4116b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 4117b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project attVal = poolStart(&dtd->pool); 4118b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolFinish(&dtd->pool); 4119b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* ID attributes aren't allowed to have a default */ 4120b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!defineAttribute(declElementType, declAttributeId, 4121b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declAttributeIsCdata, XML_FALSE, attVal, parser)) 4122b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4123b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (attlistDeclHandler && declAttributeType) { 4124d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes if (*declAttributeType == XML_T(ASCII_LPAREN) 4125d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes || (*declAttributeType == XML_T(ASCII_N) 4126d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes && declAttributeType[1] == XML_T(ASCII_O))) { 4127b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* Enumerated or Notation type */ 4128d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes if (!poolAppendChar(&tempPool, XML_T(ASCII_RPAREN)) 4129b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project || !poolAppendChar(&tempPool, XML_T('\0'))) 4130b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4131b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declAttributeType = tempPool.start; 4132b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolFinish(&tempPool); 4133b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4134b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventEndPP = s; 4135b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project attlistDeclHandler(handlerArg, declElementType->name, 4136b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declAttributeId->name, declAttributeType, 4137b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project attVal, 4138b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project role == XML_ROLE_FIXED_ATTRIBUTE_VALUE); 4139b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolClear(&tempPool); 4140b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4141b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4142b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4143b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4144b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_ENTITY_VALUE: 4145b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd->keepProcessing) { 4146b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Error result = storeEntityValue(parser, enc, 4147b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project s + enc->minBytesPerChar, 4148b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project next - enc->minBytesPerChar); 4149b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (declEntity) { 4150b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->textPtr = poolStart(&dtd->entityValuePool); 4151b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->textLen = (int)(poolLength(&dtd->entityValuePool)); 4152b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolFinish(&dtd->entityValuePool); 4153b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (entityDeclHandler) { 4154b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventEndPP = s; 4155b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entityDeclHandler(handlerArg, 4156b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->name, 4157b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->is_param, 4158b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->textPtr, 4159b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->textLen, 4160b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project curBase, 0, 0, 0); 4161b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4162b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4163b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4164b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 4165b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolDiscard(&dtd->entityValuePool); 4166b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (result != XML_ERROR_NONE) 4167b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 4168b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4169b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4170b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_DOCTYPE_SYSTEM_ID: 4171b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 4172b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project useForeignDTD = XML_FALSE; 4173b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 4174b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->hasParamEntityRefs = XML_TRUE; 4175b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (startDoctypeDeclHandler) { 4176b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project doctypeSysid = poolStoreString(&tempPool, enc, 4177b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project s + enc->minBytesPerChar, 4178b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project next - enc->minBytesPerChar); 4179b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (doctypeSysid == NULL) 4180b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4181b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolFinish(&tempPool); 4182b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4183b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4184b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 4185b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 4186b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* use externalSubsetName to make doctypeSysid non-NULL 4187b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for the case where no startDoctypeDeclHandler is set */ 4188b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project doctypeSysid = externalSubsetName; 4189b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 4190b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!dtd->standalone 4191b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 4192b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project && !paramEntityParsing 4193b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 4194b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project && notStandaloneHandler 4195b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project && !notStandaloneHandler(handlerArg)) 4196b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NOT_STANDALONE; 4197b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifndef XML_DTD 4198b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4199b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#else /* XML_DTD */ 4200b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!declEntity) { 420135e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes declEntity = (ENTITY *)lookup(parser, 420235e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes &dtd->paramEntities, 4203b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project externalSubsetName, 4204b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project sizeof(ENTITY)); 4205b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!declEntity) 4206b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4207b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->publicId = NULL; 4208b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4209b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* fall through */ 4210b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 4211b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_ENTITY_SYSTEM_ID: 4212b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd->keepProcessing && declEntity) { 4213b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->systemId = poolStoreString(&dtd->pool, enc, 4214b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project s + enc->minBytesPerChar, 4215b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project next - enc->minBytesPerChar); 4216b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!declEntity->systemId) 4217b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4218b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->base = curBase; 4219b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolFinish(&dtd->pool); 4220b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (entityDeclHandler) 4221b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4222b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4223b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4224b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_ENTITY_COMPLETE: 4225b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd->keepProcessing && declEntity && entityDeclHandler) { 4226b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventEndPP = s; 4227b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entityDeclHandler(handlerArg, 4228b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->name, 4229b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->is_param, 4230b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 0,0, 4231b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->base, 4232b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->systemId, 4233b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->publicId, 4234b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 0); 4235b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4236b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4237b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4238b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_ENTITY_NOTATION_NAME: 4239b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd->keepProcessing && declEntity) { 4240b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->notation = poolStoreString(&dtd->pool, enc, s, next); 4241b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!declEntity->notation) 4242b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4243b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolFinish(&dtd->pool); 4244b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (unparsedEntityDeclHandler) { 4245b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventEndPP = s; 4246b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unparsedEntityDeclHandler(handlerArg, 4247b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->name, 4248b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->base, 4249b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->systemId, 4250b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->publicId, 4251b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->notation); 4252b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4253b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4254b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (entityDeclHandler) { 4255b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventEndPP = s; 4256b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entityDeclHandler(handlerArg, 4257b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->name, 4258b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 0,0,0, 4259b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->base, 4260b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->systemId, 4261b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->publicId, 4262b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->notation); 4263b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4264b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4265b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4266b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4267b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_GENERAL_ENTITY_NAME: 4268b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project { 4269b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (XmlPredefinedEntityName(enc, s, next)) { 4270b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity = NULL; 4271b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4272b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4273b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd->keepProcessing) { 4274b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *name = poolStoreString(&dtd->pool, enc, s, next); 4275b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!name) 4276b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 427735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes declEntity = (ENTITY *)lookup(parser, &dtd->generalEntities, name, 4278b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project sizeof(ENTITY)); 4279b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!declEntity) 4280b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4281b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (declEntity->name != name) { 4282b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolDiscard(&dtd->pool); 4283b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity = NULL; 4284b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4285b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 4286b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolFinish(&dtd->pool); 4287b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->publicId = NULL; 4288b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->is_param = XML_FALSE; 4289b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* if we have a parent parser or are reading an internal parameter 4290b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity, then the entity declaration is not considered "internal" 4291b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 4292b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->is_internal = !(parentParser || openInternalEntities); 4293b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (entityDeclHandler) 4294b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4295b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4296b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4297b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 4298b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolDiscard(&dtd->pool); 4299b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity = NULL; 4300b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4301b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4302b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4303b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_PARAM_ENTITY_NAME: 4304b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 4305b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd->keepProcessing) { 4306b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *name = poolStoreString(&dtd->pool, enc, s, next); 4307b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!name) 4308b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 430935e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes declEntity = (ENTITY *)lookup(parser, &dtd->paramEntities, 4310b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project name, sizeof(ENTITY)); 4311b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!declEntity) 4312b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4313b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (declEntity->name != name) { 4314b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolDiscard(&dtd->pool); 4315b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity = NULL; 4316b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4317b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 4318b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolFinish(&dtd->pool); 4319b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->publicId = NULL; 4320b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->is_param = XML_TRUE; 4321b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* if we have a parent parser or are reading an internal parameter 4322b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity, then the entity declaration is not considered "internal" 4323b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 4324b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity->is_internal = !(parentParser || openInternalEntities); 4325b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (entityDeclHandler) 4326b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4327b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4328b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4329b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 4330b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolDiscard(&dtd->pool); 4331b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity = NULL; 4332b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4333b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#else /* not XML_DTD */ 4334b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declEntity = NULL; 4335b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 4336b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4337b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_NOTATION_NAME: 4338b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declNotationPublicId = NULL; 4339b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declNotationName = NULL; 4340b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (notationDeclHandler) { 4341b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declNotationName = poolStoreString(&tempPool, enc, s, next); 4342b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!declNotationName) 4343b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4344b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolFinish(&tempPool); 4345b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4346b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4347b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4348b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_NOTATION_PUBLIC_ID: 4349b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!XmlIsPublicId(enc, s, next, eventPP)) 4350b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_PUBLICID; 4351b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (declNotationName) { /* means notationDeclHandler != NULL */ 4352b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char *tem = poolStoreString(&tempPool, 4353b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enc, 4354b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project s + enc->minBytesPerChar, 4355b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project next - enc->minBytesPerChar); 4356b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!tem) 4357b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4358b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project normalizePublicId(tem); 4359b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declNotationPublicId = tem; 4360b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolFinish(&tempPool); 4361b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4362b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4363b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4364b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_NOTATION_SYSTEM_ID: 4365b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (declNotationName && notationDeclHandler) { 4366b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *systemId 4367b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project = poolStoreString(&tempPool, enc, 4368b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project s + enc->minBytesPerChar, 4369b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project next - enc->minBytesPerChar); 4370b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!systemId) 4371b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4372b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventEndPP = s; 4373b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project notationDeclHandler(handlerArg, 4374b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declNotationName, 4375b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project curBase, 4376b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project systemId, 4377b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declNotationPublicId); 4378b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4379b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4380b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolClear(&tempPool); 4381b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4382b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_NOTATION_NO_SYSTEM_ID: 4383b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (declNotationPublicId && notationDeclHandler) { 4384b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventEndPP = s; 4385b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project notationDeclHandler(handlerArg, 4386b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declNotationName, 4387b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project curBase, 4388b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 0, 4389b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declNotationPublicId); 4390b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4391b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4392b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolClear(&tempPool); 4393b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4394b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_ERROR: 4395b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (tok) { 4396b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_PARAM_ENTITY_REF: 4397b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* PE references in internal subset are 439835e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes not allowed within declarations. */ 4399b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_PARAM_ENTITY_REF; 4400b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_XML_DECL: 4401b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_MISPLACED_XML_PI; 4402b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project default: 4403b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_SYNTAX; 4404b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4405b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 4406b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_IGNORE_SECT: 4407b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project { 4408b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Error result; 4409b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (defaultHandler) 4410b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project reportDefault(parser, enc, s, next); 4411b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4412b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project result = doIgnoreSection(parser, enc, &next, end, nextPtr, haveMore); 4413b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (result != XML_ERROR_NONE) 4414b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 4415b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (!next) { 4416b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processor = ignoreSectionProcessor; 4417b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 4418b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4419b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4420b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4421b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 4422b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_GROUP_OPEN: 4423b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (prologState.level >= groupSize) { 4424b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (groupSize) { 4425b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project char *temp = (char *)REALLOC(groupConnector, groupSize *= 2); 4426b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (temp == NULL) 4427b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4428b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project groupConnector = temp; 4429b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd->scaffIndex) { 4430b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int *temp = (int *)REALLOC(dtd->scaffIndex, 4431b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project groupSize * sizeof(int)); 4432b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (temp == NULL) 4433b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4434b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->scaffIndex = temp; 4435b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4436b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4437b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 4438b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project groupConnector = (char *)MALLOC(groupSize = 32); 4439b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!groupConnector) 4440b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4441b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4442b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4443b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project groupConnector[prologState.level] = 0; 4444b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd->in_eldecl) { 4445b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int myindex = nextScaffoldPart(parser); 4446b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (myindex < 0) 4447b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4448b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->scaffIndex[dtd->scaffLevel] = myindex; 4449b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->scaffLevel++; 4450b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->scaffold[myindex].type = XML_CTYPE_SEQ; 4451b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (elementDeclHandler) 4452b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4453b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4454b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4455b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_GROUP_SEQUENCE: 4456d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes if (groupConnector[prologState.level] == ASCII_PIPE) 4457b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_SYNTAX; 4458d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes groupConnector[prologState.level] = ASCII_COMMA; 4459b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd->in_eldecl && elementDeclHandler) 4460b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4461b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4462b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_GROUP_CHOICE: 4463d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes if (groupConnector[prologState.level] == ASCII_COMMA) 4464b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_SYNTAX; 4465b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd->in_eldecl 4466b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project && !groupConnector[prologState.level] 4467b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project && (dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]].type 4468b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project != XML_CTYPE_MIXED) 4469b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ) { 4470b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]].type 4471b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project = XML_CTYPE_CHOICE; 4472b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (elementDeclHandler) 4473b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4474b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4475d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes groupConnector[prologState.level] = ASCII_PIPE; 4476b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4477b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_PARAM_ENTITY_REF: 4478b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 4479b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_INNER_PARAM_ENTITY_REF: 4480b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->hasParamEntityRefs = XML_TRUE; 4481b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!paramEntityParsing) 4482b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->keepProcessing = dtd->standalone; 4483b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 4484b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *name; 4485b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ENTITY *entity; 4486b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project name = poolStoreString(&dtd->pool, enc, 4487b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project s + enc->minBytesPerChar, 4488b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project next - enc->minBytesPerChar); 4489b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!name) 4490b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 449135e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes entity = (ENTITY *)lookup(parser, &dtd->paramEntities, name, 0); 4492b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolDiscard(&dtd->pool); 4493b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* first, determine if a check for an existing declaration is needed; 4494b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if yes, check that the entity exists, and that it is internal, 4495b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project otherwise call the skipped entity handler 4496b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 4497b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (prologState.documentEntity && 4498b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (dtd->standalone 4499b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ? !openInternalEntities 4500b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project : !dtd->hasParamEntityRefs)) { 4501b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!entity) 4502b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_UNDEFINED_ENTITY; 4503b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (!entity->is_internal) 4504b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_ENTITY_DECLARED_IN_PE; 4505b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4506b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (!entity) { 4507b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->keepProcessing = dtd->standalone; 4508b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* cannot report skipped entities in declarations */ 4509b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if ((role == XML_ROLE_PARAM_ENTITY_REF) && skippedEntityHandler) { 4510b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project skippedEntityHandler(handlerArg, name, 1); 4511b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4512b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4513b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4514b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4515b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (entity->open) 4516b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_RECURSIVE_ENTITY_REF; 4517b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (entity->textPtr) { 4518b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Error result; 451935e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes XML_Bool betweenDecl = 4520b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (role == XML_ROLE_PARAM_ENTITY_REF ? XML_TRUE : XML_FALSE); 4521b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project result = processInternalEntity(parser, entity, betweenDecl); 4522b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (result != XML_ERROR_NONE) 4523b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 4524b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4525b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4526b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4527b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (externalEntityRefHandler) { 4528b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->paramEntityRead = XML_FALSE; 4529b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->open = XML_TRUE; 4530b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!externalEntityRefHandler(externalEntityRefHandlerArg, 4531b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 0, 4532b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->base, 4533b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->systemId, 4534b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->publicId)) { 4535b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->open = XML_FALSE; 4536b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_EXTERNAL_ENTITY_HANDLING; 4537b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4538b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->open = XML_FALSE; 4539b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4540b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!dtd->paramEntityRead) { 4541b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->keepProcessing = dtd->standalone; 4542b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4543b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4544b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4545b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 4546b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->keepProcessing = dtd->standalone; 4547b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4548b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4549b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4550b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 4551b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!dtd->standalone && 4552b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project notStandaloneHandler && 4553b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project !notStandaloneHandler(handlerArg)) 4554b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NOT_STANDALONE; 4555b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4556b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 4557b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* Element declaration stuff */ 4558b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 4559b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_ELEMENT_NAME: 4560b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (elementDeclHandler) { 4561b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project declElementType = getElementType(parser, enc, s, next); 4562b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!declElementType) 4563b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4564b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->scaffLevel = 0; 4565b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->scaffCount = 0; 4566b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->in_eldecl = XML_TRUE; 4567b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4568b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4569b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4570b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 4571b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_CONTENT_ANY: 4572b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_CONTENT_EMPTY: 4573b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd->in_eldecl) { 4574b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (elementDeclHandler) { 4575b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Content * content = (XML_Content *) MALLOC(sizeof(XML_Content)); 4576b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!content) 4577b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4578b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project content->quant = XML_CQUANT_NONE; 4579b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project content->name = NULL; 4580b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project content->numchildren = 0; 4581b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project content->children = NULL; 4582b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project content->type = ((role == XML_ROLE_CONTENT_ANY) ? 4583b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_CTYPE_ANY : 4584b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_CTYPE_EMPTY); 4585b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventEndPP = s; 4586b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project elementDeclHandler(handlerArg, declElementType->name, content); 4587b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4588b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4589b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->in_eldecl = XML_FALSE; 4590b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4591b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4592b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 4593b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_CONTENT_PCDATA: 4594b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd->in_eldecl) { 4595b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]].type 4596b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project = XML_CTYPE_MIXED; 4597b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (elementDeclHandler) 4598b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4599b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4600b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4601b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 4602b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_CONTENT_ELEMENT: 4603b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project quant = XML_CQUANT_NONE; 4604b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto elementContent; 4605b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_CONTENT_ELEMENT_OPT: 4606b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project quant = XML_CQUANT_OPT; 4607b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto elementContent; 4608b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_CONTENT_ELEMENT_REP: 4609b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project quant = XML_CQUANT_REP; 4610b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto elementContent; 4611b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_CONTENT_ELEMENT_PLUS: 4612b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project quant = XML_CQUANT_PLUS; 4613b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project elementContent: 4614b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd->in_eldecl) { 4615b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ELEMENT_TYPE *el; 4616b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *name; 4617b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int nameLen; 4618b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *nxt = (quant == XML_CQUANT_NONE 4619b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ? next 4620b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project : next - enc->minBytesPerChar); 4621b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int myindex = nextScaffoldPart(parser); 4622b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (myindex < 0) 4623b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4624b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->scaffold[myindex].type = XML_CTYPE_NAME; 4625b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->scaffold[myindex].quant = quant; 4626b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project el = getElementType(parser, enc, s, nxt); 4627b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!el) 4628b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4629b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project name = el->name; 4630b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->scaffold[myindex].name = name; 4631b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project nameLen = 0; 4632b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (; name[nameLen++]; ); 4633b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->contentStringLen += nameLen; 4634b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (elementDeclHandler) 4635b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4636b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4637b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4638b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 4639b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_GROUP_CLOSE: 4640b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project quant = XML_CQUANT_NONE; 4641b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto closeGroup; 4642b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_GROUP_CLOSE_OPT: 4643b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project quant = XML_CQUANT_OPT; 4644b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto closeGroup; 4645b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_GROUP_CLOSE_REP: 4646b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project quant = XML_CQUANT_REP; 4647b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto closeGroup; 4648b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_GROUP_CLOSE_PLUS: 4649b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project quant = XML_CQUANT_PLUS; 4650b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project closeGroup: 4651b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd->in_eldecl) { 4652b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (elementDeclHandler) 4653b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4654b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->scaffLevel--; 4655b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel]].quant = quant; 4656b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd->scaffLevel == 0) { 4657b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!handleDefault) { 4658b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Content *model = build_model(parser); 4659b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!model) 4660b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4661b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventEndPP = s; 4662b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project elementDeclHandler(handlerArg, declElementType->name, model); 4663b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4664b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->in_eldecl = XML_FALSE; 4665b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->contentStringLen = 0; 4666b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4667b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4668b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4669b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* End element declaration stuff */ 4670b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 4671b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_PI: 4672b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!reportProcessingInstruction(parser, enc, s, next)) 4673b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4674b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4675b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4676b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_COMMENT: 4677b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!reportComment(parser, enc, s, next)) 4678b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4679b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4680b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4681b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_NONE: 4682b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (tok) { 4683b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_BOM: 4684b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4685b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4686b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4687b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4688b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_DOCTYPE_NONE: 4689b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (startDoctypeDeclHandler) 4690b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4691b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4692b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_ENTITY_NONE: 4693b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd->keepProcessing && entityDeclHandler) 4694b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4695b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4696b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_NOTATION_NONE: 4697b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (notationDeclHandler) 4698b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4699b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4700b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_ATTLIST_NONE: 4701b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd->keepProcessing && attlistDeclHandler) 4702b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4703b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4704b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_ROLE_ELEMENT_NONE: 4705b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (elementDeclHandler) 4706b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project handleDefault = XML_FALSE; 4707b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4708b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } /* end of big switch */ 4709b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 4710b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (handleDefault && defaultHandler) 4711b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project reportDefault(parser, enc, s, next); 4712b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 4713b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (ps_parsing) { 471435e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes case XML_SUSPENDED: 4715b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = next; 4716b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 4717b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_FINISHED: 4718b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_ABORTED; 4719b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project default: 4720b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project s = next; 4721b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tok = XmlPrologTok(enc, s, end, &next); 4722b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4723b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4724b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* not reached */ 4725b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 4726b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 4727b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error PTRCALL 4728b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectepilogProcessor(XML_Parser parser, 4729b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *s, 4730b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end, 4731b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **nextPtr) 4732b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 4733b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processor = epilogProcessor; 4734b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = s; 4735b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (;;) { 4736b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *next = NULL; 4737b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int tok = XmlPrologTok(encoding, s, end, &next); 4738b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventEndPtr = next; 4739b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (tok) { 4740b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* report partial linebreak - it might be the last token */ 4741b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case -XML_TOK_PROLOG_S: 4742b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (defaultHandler) { 4743b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project reportDefault(parser, encoding, s, next); 4744b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (ps_parsing == XML_FINISHED) 4745b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_ABORTED; 4746b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4747b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = next; 4748b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 4749b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_NONE: 4750b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = s; 4751b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 4752b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_PROLOG_S: 4753b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (defaultHandler) 4754b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project reportDefault(parser, encoding, s, next); 4755b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4756b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_PI: 4757b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!reportProcessingInstruction(parser, encoding, s, next)) 4758b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4759b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4760b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_COMMENT: 4761b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!reportComment(parser, encoding, s, next)) 4762b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4763b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4764b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_INVALID: 4765b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = next; 4766b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_INVALID_TOKEN; 4767b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_PARTIAL: 4768b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!ps_finalBuffer) { 4769b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = s; 4770b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 4771b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4772b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_UNCLOSED_TOKEN; 4773b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_PARTIAL_CHAR: 4774b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!ps_finalBuffer) { 4775b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = s; 4776b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 4777b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4778b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_PARTIAL_CHAR; 4779b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project default: 4780b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_JUNK_AFTER_DOC_ELEMENT; 4781b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4782b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = s = next; 4783b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (ps_parsing) { 478435e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes case XML_SUSPENDED: 4785b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *nextPtr = next; 4786b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 4787b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_FINISHED: 4788b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_ABORTED; 4789b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project default: ; 4790b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4791b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4792b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 4793b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 4794b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error 4795b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectprocessInternalEntity(XML_Parser parser, ENTITY *entity, 4796b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool betweenDecl) 4797b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 4798b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *textStart, *textEnd; 4799b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *next; 4800b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Error result; 4801b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project OPEN_INTERNAL_ENTITY *openEntity; 4802b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 4803b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (freeInternalEntities) { 4804b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project openEntity = freeInternalEntities; 4805b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project freeInternalEntities = openEntity->next; 4806b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4807b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 4808b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project openEntity = (OPEN_INTERNAL_ENTITY *)MALLOC(sizeof(OPEN_INTERNAL_ENTITY)); 4809b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!openEntity) 4810b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4811b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4812b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->open = XML_TRUE; 4813b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->processed = 0; 4814b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project openEntity->next = openInternalEntities; 4815b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project openInternalEntities = openEntity; 4816b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project openEntity->entity = entity; 4817b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project openEntity->startTagLevel = tagLevel; 4818b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project openEntity->betweenDecl = betweenDecl; 4819b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project openEntity->internalEventPtr = NULL; 4820b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project openEntity->internalEventEndPtr = NULL; 4821b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project textStart = (char *)entity->textPtr; 4822b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project textEnd = (char *)(entity->textPtr + entity->textLen); 4823b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 4824b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 4825b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (entity->is_param) { 4826b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int tok = XmlPrologTok(internalEncoding, textStart, textEnd, &next); 482735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes result = doProlog(parser, internalEncoding, textStart, textEnd, tok, 4828b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project next, &next, XML_FALSE); 4829b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 483035e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes else 4831b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 483235e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes result = doContent(parser, tagLevel, internalEncoding, textStart, 4833b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project textEnd, &next, XML_FALSE); 4834b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 4835b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (result == XML_ERROR_NONE) { 4836b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (textEnd != next && ps_parsing == XML_SUSPENDED) { 4837b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->processed = (int)(next - textStart); 4838b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processor = internalEntityProcessor; 4839b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4840b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 4841b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->open = XML_FALSE; 4842b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project openInternalEntities = openEntity->next; 4843b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* put openEntity back in list of free instances */ 4844b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project openEntity->next = freeInternalEntities; 4845b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project freeInternalEntities = openEntity; 4846b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4847b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4848b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 4849b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 4850b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 4851b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error PTRCALL 4852b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectinternalEntityProcessor(XML_Parser parser, 4853b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *s, 4854b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end, 4855b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **nextPtr) 4856b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 4857b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ENTITY *entity; 4858b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *textStart, *textEnd; 4859b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *next; 4860b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Error result; 4861b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project OPEN_INTERNAL_ENTITY *openEntity = openInternalEntities; 4862b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!openEntity) 4863b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_UNEXPECTED_STATE; 4864b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 4865b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity = openEntity->entity; 4866b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project textStart = ((char *)entity->textPtr) + entity->processed; 4867b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project textEnd = (char *)(entity->textPtr + entity->textLen); 4868b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 4869b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 4870b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (entity->is_param) { 4871b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int tok = XmlPrologTok(internalEncoding, textStart, textEnd, &next); 487235e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes result = doProlog(parser, internalEncoding, textStart, textEnd, tok, 4873b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project next, &next, XML_FALSE); 4874b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4875b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 4876b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 487735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes result = doContent(parser, openEntity->startTagLevel, internalEncoding, 487835e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes textStart, textEnd, &next, XML_FALSE); 4879b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 4880b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (result != XML_ERROR_NONE) 4881b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 4882b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (textEnd != next && ps_parsing == XML_SUSPENDED) { 4883b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->processed = (int)(next - (char *)entity->textPtr); 4884b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 4885b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4886b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 4887b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->open = XML_FALSE; 4888b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project openInternalEntities = openEntity->next; 4889b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* put openEntity back in list of free instances */ 4890b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project openEntity->next = freeInternalEntities; 4891b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project freeInternalEntities = openEntity; 4892b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4893b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 4894b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 4895b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (entity->is_param) { 4896b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int tok; 4897b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processor = prologProcessor; 4898b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tok = XmlPrologTok(encoding, s, end, &next); 489935e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes return doProlog(parser, encoding, s, end, tok, next, nextPtr, 4900b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (XML_Bool)!ps_finalBuffer); 4901b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4902b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 4903b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 4904b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project { 4905b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processor = contentProcessor; 4906b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* see externalEntityContentProcessor vs contentProcessor */ 4907b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return doContent(parser, parentParser ? 1 : 0, encoding, s, end, 490835e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes nextPtr, (XML_Bool)!ps_finalBuffer); 490935e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes } 4910b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 4911b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 4912b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error PTRCALL 4913b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjecterrorProcessor(XML_Parser parser, 4914b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *s, 4915b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end, 4916b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **nextPtr) 4917b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 4918b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return errorCode; 4919b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 4920b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 4921b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error 4922b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectstoreAttributeValue(XML_Parser parser, const ENCODING *enc, XML_Bool isCdata, 4923b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *ptr, const char *end, 4924b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project STRING_POOL *pool) 4925b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 4926b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Error result = appendAttributeValue(parser, enc, isCdata, ptr, 4927b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project end, pool); 4928b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (result) 4929b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 4930b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!isCdata && poolLength(pool) && poolLastChar(pool) == 0x20) 4931b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolChop(pool); 4932b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppendChar(pool, XML_T('\0'))) 4933b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4934b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 4935b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 4936b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 4937b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error 4938b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectappendAttributeValue(XML_Parser parser, const ENCODING *enc, XML_Bool isCdata, 4939b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *ptr, const char *end, 4940b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project STRING_POOL *pool) 4941b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 4942b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project DTD * const dtd = _dtd; /* save one level of indirection */ 4943b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (;;) { 4944b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *next; 4945b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int tok = XmlAttributeValueTok(enc, ptr, end, &next); 4946b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (tok) { 4947b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_NONE: 4948b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NONE; 4949b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_INVALID: 4950b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (enc == encoding) 4951b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = next; 4952b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_INVALID_TOKEN; 4953b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_PARTIAL: 4954b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (enc == encoding) 4955b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = ptr; 4956b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_INVALID_TOKEN; 4957b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_CHAR_REF: 4958b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project { 4959b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char buf[XML_ENCODE_MAX]; 4960b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int i; 4961b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int n = XmlCharRefNumber(enc, ptr); 4962b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (n < 0) { 4963b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (enc == encoding) 4964b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = ptr; 4965b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_BAD_CHAR_REF; 4966b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4967b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!isCdata 4968b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project && n == 0x20 /* space */ 4969b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project && (poolLength(pool) == 0 || poolLastChar(pool) == 0x20)) 4970b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4971b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project n = XmlEncode(n, (ICHAR *)buf); 4972b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!n) { 4973b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (enc == encoding) 4974b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = ptr; 4975b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_BAD_CHAR_REF; 4976b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4977b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (i = 0; i < n; i++) { 4978b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppendChar(pool, buf[i])) 4979b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4980b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4981b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 4982b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4983b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_DATA_CHARS: 4984b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppend(pool, enc, ptr, next)) 4985b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4986b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4987b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_TRAILING_CR: 4988b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project next = ptr + enc->minBytesPerChar; 4989b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* fall through */ 4990b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_ATTRIBUTE_VALUE_S: 4991b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_DATA_NEWLINE: 4992b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!isCdata && (poolLength(pool) == 0 || poolLastChar(pool) == 0x20)) 4993b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4994b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppendChar(pool, 0x20)) 4995b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 4996b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 4997b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_ENTITY_REF: 4998b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project { 4999b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *name; 5000b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ENTITY *entity; 5001b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project char checkEntityDecl; 5002b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char ch = (XML_Char) XmlPredefinedEntityName(enc, 5003b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ptr + enc->minBytesPerChar, 5004b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project next - enc->minBytesPerChar); 5005b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (ch) { 5006b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppendChar(pool, ch)) 5007b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 5008b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 5009b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5010b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project name = poolStoreString(&temp2Pool, enc, 5011b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ptr + enc->minBytesPerChar, 5012b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project next - enc->minBytesPerChar); 5013b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!name) 5014b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 501535e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes entity = (ENTITY *)lookup(parser, &dtd->generalEntities, name, 0); 5016b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolDiscard(&temp2Pool); 5017b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* First, determine if a check for an existing declaration is needed; 5018b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if yes, check that the entity exists, and that it is internal. 5019b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 5020b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (pool == &dtd->pool) /* are we called from prolog? */ 5021b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project checkEntityDecl = 5022b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 5023b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project prologState.documentEntity && 5024b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 5025b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (dtd->standalone 5026b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ? !openInternalEntities 5027b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project : !dtd->hasParamEntityRefs); 5028b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else /* if (pool == &tempPool): we are called from content */ 5029b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project checkEntityDecl = !dtd->hasParamEntityRefs || dtd->standalone; 5030b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (checkEntityDecl) { 5031b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!entity) 5032b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_UNDEFINED_ENTITY; 5033b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (!entity->is_internal) 5034b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_ENTITY_DECLARED_IN_PE; 5035b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5036b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else if (!entity) { 5037b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* Cannot report skipped entity here - see comments on 5038b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project skippedEntityHandler. 5039b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (skippedEntityHandler) 5040b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project skippedEntityHandler(handlerArg, name, 0); 5041b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 5042b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* Cannot call the default handler because this would be 5043b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project out of sync with the call to the startElementHandler. 5044b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if ((pool == &tempPool) && defaultHandler) 5045b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project reportDefault(parser, enc, ptr, next); 5046b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 5047b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 5048b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5049b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (entity->open) { 5050b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (enc == encoding) 5051b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = ptr; 5052b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_RECURSIVE_ENTITY_REF; 5053b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5054b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (entity->notation) { 5055b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (enc == encoding) 5056b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = ptr; 5057b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_BINARY_ENTITY_REF; 5058b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5059b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!entity->textPtr) { 5060b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (enc == encoding) 5061b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = ptr; 506235e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes return XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF; 5063b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5064b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 5065b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Error result; 5066b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *textEnd = entity->textPtr + entity->textLen; 5067b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->open = XML_TRUE; 5068b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project result = appendAttributeValue(parser, internalEncoding, isCdata, 5069b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (char *)entity->textPtr, 5070b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (char *)textEnd, pool); 5071b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->open = XML_FALSE; 5072b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (result) 5073b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 5074b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5075b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5076b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 5077b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project default: 5078b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (enc == encoding) 5079b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = ptr; 5080b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_UNEXPECTED_STATE; 5081b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5082b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ptr = next; 5083b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5084b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* not reached */ 5085b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 5086b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5087b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic enum XML_Error 5088b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectstoreEntityValue(XML_Parser parser, 5089b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const ENCODING *enc, 5090b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *entityTextPtr, 5091b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *entityTextEnd) 5092b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 5093b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project DTD * const dtd = _dtd; /* save one level of indirection */ 5094b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project STRING_POOL *pool = &(dtd->entityValuePool); 5095b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enum XML_Error result = XML_ERROR_NONE; 5096b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 5097b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int oldInEntityValue = prologState.inEntityValue; 5098b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project prologState.inEntityValue = 1; 5099b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 5100b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* never return Null for the value argument in EntityDeclHandler, 5101b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project since this would indicate an external entity; therefore we 5102b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project have to make sure that entityValuePool.start is not null */ 5103b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!pool->blocks) { 5104b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolGrow(pool)) 5105b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_ERROR_NO_MEMORY; 5106b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5107b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5108b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (;;) { 5109b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *next; 5110b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int tok = XmlEntityValueTok(enc, entityTextPtr, entityTextEnd, &next); 5111b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (tok) { 5112b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_PARAM_ENTITY_REF: 5113b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 5114b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (isParamEntity || enc != encoding) { 5115b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *name; 5116b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ENTITY *entity; 5117b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project name = poolStoreString(&tempPool, enc, 5118b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entityTextPtr + enc->minBytesPerChar, 5119b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project next - enc->minBytesPerChar); 5120b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!name) { 5121b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project result = XML_ERROR_NO_MEMORY; 5122b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto endEntityValue; 5123b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 512435e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes entity = (ENTITY *)lookup(parser, &dtd->paramEntities, name, 0); 5125b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolDiscard(&tempPool); 5126b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!entity) { 5127b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* not a well-formedness error - see XML 1.0: WFC Entity Declared */ 5128b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* cannot report skipped entity here - see comments on 5129b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project skippedEntityHandler 5130b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (skippedEntityHandler) 5131b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project skippedEntityHandler(handlerArg, name, 0); 5132b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project */ 5133b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->keepProcessing = dtd->standalone; 5134b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto endEntityValue; 5135b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5136b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (entity->open) { 5137b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (enc == encoding) 5138b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = entityTextPtr; 5139b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project result = XML_ERROR_RECURSIVE_ENTITY_REF; 5140b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto endEntityValue; 5141b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5142b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (entity->systemId) { 5143b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (externalEntityRefHandler) { 5144b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->paramEntityRead = XML_FALSE; 5145b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->open = XML_TRUE; 5146b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!externalEntityRefHandler(externalEntityRefHandlerArg, 5147b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 0, 5148b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->base, 5149b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->systemId, 5150b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->publicId)) { 5151b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->open = XML_FALSE; 5152b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project result = XML_ERROR_EXTERNAL_ENTITY_HANDLING; 5153b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto endEntityValue; 5154b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5155b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->open = XML_FALSE; 5156b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!dtd->paramEntityRead) 5157b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->keepProcessing = dtd->standalone; 5158b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5159b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 5160b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->keepProcessing = dtd->standalone; 5161b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5162b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 5163b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->open = XML_TRUE; 5164b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project result = storeEntityValue(parser, 5165b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project internalEncoding, 5166b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (char *)entity->textPtr, 5167b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (char *)(entity->textPtr 5168b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project + entity->textLen)); 5169b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entity->open = XML_FALSE; 5170b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (result) 5171b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto endEntityValue; 5172b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5173b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 5174b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5175b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 5176b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* In the internal subset, PE references are not legal 5177b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project within markup declarations, e.g entity values in this case. */ 5178b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = entityTextPtr; 5179b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project result = XML_ERROR_PARAM_ENTITY_REF; 5180b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto endEntityValue; 5181b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_NONE: 5182b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project result = XML_ERROR_NONE; 5183b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto endEntityValue; 5184b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_ENTITY_REF: 5185b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_DATA_CHARS: 5186b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppend(pool, enc, entityTextPtr, next)) { 5187b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project result = XML_ERROR_NO_MEMORY; 5188b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto endEntityValue; 5189b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5190b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 5191b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_TRAILING_CR: 5192b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project next = entityTextPtr + enc->minBytesPerChar; 5193b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* fall through */ 5194b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_DATA_NEWLINE: 5195b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (pool->end == pool->ptr && !poolGrow(pool)) { 5196b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project result = XML_ERROR_NO_MEMORY; 5197b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto endEntityValue; 5198b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5199b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *(pool->ptr)++ = 0xA; 5200b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 5201b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_CHAR_REF: 5202b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project { 5203b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char buf[XML_ENCODE_MAX]; 5204b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int i; 5205b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int n = XmlCharRefNumber(enc, entityTextPtr); 5206b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (n < 0) { 5207b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (enc == encoding) 5208b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = entityTextPtr; 5209b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project result = XML_ERROR_BAD_CHAR_REF; 5210b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto endEntityValue; 5211b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5212b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project n = XmlEncode(n, (ICHAR *)buf); 5213b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!n) { 5214b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (enc == encoding) 5215b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = entityTextPtr; 5216b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project result = XML_ERROR_BAD_CHAR_REF; 5217b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto endEntityValue; 5218b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5219b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (i = 0; i < n; i++) { 5220b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (pool->end == pool->ptr && !poolGrow(pool)) { 5221b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project result = XML_ERROR_NO_MEMORY; 5222b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto endEntityValue; 5223b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5224b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *(pool->ptr)++ = buf[i]; 5225b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5226b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5227b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 5228b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_PARTIAL: 5229b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (enc == encoding) 5230b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = entityTextPtr; 5231b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project result = XML_ERROR_INVALID_TOKEN; 5232b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto endEntityValue; 5233b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case XML_TOK_INVALID: 5234b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (enc == encoding) 5235b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = next; 5236b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project result = XML_ERROR_INVALID_TOKEN; 5237b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto endEntityValue; 5238b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project default: 5239b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (enc == encoding) 5240b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPtr = entityTextPtr; 5241b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project result = XML_ERROR_UNEXPECTED_STATE; 5242b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project goto endEntityValue; 5243b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5244b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project entityTextPtr = next; 5245b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5246b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectendEntityValue: 5247b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 5248b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project prologState.inEntityValue = oldInEntityValue; 5249b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 5250b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return result; 5251b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 5252b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5253b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic void FASTCALL 5254b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectnormalizeLines(XML_Char *s) 5255b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 5256b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char *p; 5257b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (;; s++) { 5258b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (*s == XML_T('\0')) 5259b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return; 5260b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (*s == 0xD) 5261b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 5262b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5263b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p = s; 5264b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project do { 5265b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (*s == 0xD) { 5266b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *p++ = 0xA; 5267b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (*++s == 0xA) 5268b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project s++; 5269b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5270b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 5271b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *p++ = *s++; 5272b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } while (*s); 5273b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *p = XML_T('\0'); 5274b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 5275b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5276b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic int 5277b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectreportProcessingInstruction(XML_Parser parser, const ENCODING *enc, 5278b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *start, const char *end) 5279b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 5280b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *target; 5281b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char *data; 5282b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *tem; 5283b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!processingInstructionHandler) { 5284b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (defaultHandler) 5285b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project reportDefault(parser, enc, start, end); 5286b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 1; 5287b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5288b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project start += enc->minBytesPerChar * 2; 5289b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tem = start + XmlNameLength(enc, start); 5290b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project target = poolStoreString(&tempPool, enc, start, tem); 5291b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!target) 5292b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 5293b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolFinish(&tempPool); 5294b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project data = poolStoreString(&tempPool, enc, 5295b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XmlSkipS(enc, tem), 5296b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project end - enc->minBytesPerChar*2); 5297b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!data) 5298b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 5299b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project normalizeLines(data); 5300b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project processingInstructionHandler(handlerArg, target, data); 5301b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolClear(&tempPool); 5302b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 1; 5303b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 5304b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5305b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic int 5306b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectreportComment(XML_Parser parser, const ENCODING *enc, 5307b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *start, const char *end) 5308b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 5309b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char *data; 5310b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!commentHandler) { 5311b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (defaultHandler) 5312b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project reportDefault(parser, enc, start, end); 5313b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 1; 5314b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5315b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project data = poolStoreString(&tempPool, 5316b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project enc, 5317b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project start + enc->minBytesPerChar * 4, 5318b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project end - enc->minBytesPerChar * 3); 5319b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!data) 5320b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 5321b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project normalizeLines(data); 5322b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project commentHandler(handlerArg, data); 5323b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolClear(&tempPool); 5324b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 1; 5325b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 5326b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5327b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic void 5328b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectreportDefault(XML_Parser parser, const ENCODING *enc, 5329b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *s, const char *end) 5330b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 5331b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (MUST_CONVERT(enc, s)) { 5332b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **eventPP; 5333b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char **eventEndPP; 5334b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (enc == encoding) { 5335b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPP = &eventPtr; 5336b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventEndPP = &eventEndPtr; 5337b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5338b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 5339b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventPP = &(openInternalEntities->internalEventPtr); 5340b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project eventEndPP = &(openInternalEntities->internalEventEndPtr); 5341b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5342b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project do { 5343b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ICHAR *dataPtr = (ICHAR *)dataBuf; 5344b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)dataBufEnd); 5345b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventEndPP = s; 5346b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project defaultHandler(handlerArg, dataBuf, (int)(dataPtr - (ICHAR *)dataBuf)); 5347b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *eventPP = s; 5348b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } while (s != end); 5349b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5350b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 5351b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project defaultHandler(handlerArg, (XML_Char *)s, (int)((XML_Char *)end - (XML_Char *)s)); 5352b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 5353b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5354b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5355b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic int 5356b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectdefineAttribute(ELEMENT_TYPE *type, ATTRIBUTE_ID *attId, XML_Bool isCdata, 5357b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool isId, const XML_Char *value, XML_Parser parser) 5358b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 5359b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project DEFAULT_ATTRIBUTE *att; 5360b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (value || isId) { 5361b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* The handling of default attributes gets messed up if we have 5362b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project a default which duplicates a non-default. */ 5363b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int i; 5364b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (i = 0; i < type->nDefaultAtts; i++) 5365b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (attId == type->defaultAtts[i].id) 5366b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 1; 5367b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (isId && !type->idAtt && !attId->xmlns) 5368b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project type->idAtt = attId; 5369b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5370b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (type->nDefaultAtts == type->allocDefaultAtts) { 5371b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (type->allocDefaultAtts == 0) { 5372b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project type->allocDefaultAtts = 8; 5373b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project type->defaultAtts = (DEFAULT_ATTRIBUTE *)MALLOC(type->allocDefaultAtts 5374b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project * sizeof(DEFAULT_ATTRIBUTE)); 5375b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!type->defaultAtts) 5376b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 5377b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5378b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 5379b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project DEFAULT_ATTRIBUTE *temp; 5380b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int count = type->allocDefaultAtts * 2; 5381b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project temp = (DEFAULT_ATTRIBUTE *) 5382b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project REALLOC(type->defaultAtts, (count * sizeof(DEFAULT_ATTRIBUTE))); 5383b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (temp == NULL) 5384b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 5385b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project type->allocDefaultAtts = count; 5386b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project type->defaultAtts = temp; 5387b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5388b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5389b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project att = type->defaultAtts + type->nDefaultAtts; 5390b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project att->id = attId; 5391b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project att->value = value; 5392b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project att->isCdata = isCdata; 5393b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!isCdata) 5394b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project attId->maybeTokenized = XML_TRUE; 5395b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project type->nDefaultAtts += 1; 5396b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 1; 5397b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 5398b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5399b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic int 5400b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectsetElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *elementType) 5401b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 5402b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project DTD * const dtd = _dtd; /* save one level of indirection */ 5403b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *name; 5404b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (name = elementType->name; *name; name++) { 5405d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes if (*name == XML_T(ASCII_COLON)) { 5406b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project PREFIX *prefix; 5407b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *s; 5408b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (s = elementType->name; s != name; s++) { 5409b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppendChar(&dtd->pool, *s)) 5410b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 5411b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5412b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppendChar(&dtd->pool, XML_T('\0'))) 5413b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 541435e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes prefix = (PREFIX *)lookup(parser, &dtd->prefixes, poolStart(&dtd->pool), 5415b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project sizeof(PREFIX)); 5416b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!prefix) 5417b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 5418b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (prefix->name == poolStart(&dtd->pool)) 5419b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolFinish(&dtd->pool); 5420b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 5421b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolDiscard(&dtd->pool); 5422b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project elementType->prefix = prefix; 5423b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5424b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5425b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5426b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 1; 5427b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 5428b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5429b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic ATTRIBUTE_ID * 5430b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectgetAttributeId(XML_Parser parser, const ENCODING *enc, 5431b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *start, const char *end) 5432b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 5433b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project DTD * const dtd = _dtd; /* save one level of indirection */ 5434b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ATTRIBUTE_ID *id; 5435b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *name; 5436b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppendChar(&dtd->pool, XML_T('\0'))) 5437b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 5438b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project name = poolStoreString(&dtd->pool, enc, start, end); 5439b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!name) 5440b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 5441b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* skip quotation mark - its storage will be re-used (like in name[-1]) */ 5442b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ++name; 544335e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes id = (ATTRIBUTE_ID *)lookup(parser, &dtd->attributeIds, name, sizeof(ATTRIBUTE_ID)); 5444b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!id) 5445b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 5446b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (id->name != name) 5447b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolDiscard(&dtd->pool); 5448b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 5449b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolFinish(&dtd->pool); 5450b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!ns) 5451b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ; 5452d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes else if (name[0] == XML_T(ASCII_x) 5453d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes && name[1] == XML_T(ASCII_m) 5454d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes && name[2] == XML_T(ASCII_l) 5455d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes && name[3] == XML_T(ASCII_n) 5456d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes && name[4] == XML_T(ASCII_s) 5457d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes && (name[5] == XML_T('\0') || name[5] == XML_T(ASCII_COLON))) { 5458b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (name[5] == XML_T('\0')) 5459b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project id->prefix = &dtd->defaultPrefix; 5460b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 546135e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes id->prefix = (PREFIX *)lookup(parser, &dtd->prefixes, name + 6, sizeof(PREFIX)); 5462b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project id->xmlns = XML_TRUE; 5463b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5464b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 5465b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int i; 5466b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (i = 0; name[i]; i++) { 5467b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* attributes without prefix are *not* in the default namespace */ 5468d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes if (name[i] == XML_T(ASCII_COLON)) { 5469b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int j; 5470b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (j = 0; j < i; j++) { 5471b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppendChar(&dtd->pool, name[j])) 5472b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 5473b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5474b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppendChar(&dtd->pool, XML_T('\0'))) 5475b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 547635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes id->prefix = (PREFIX *)lookup(parser, &dtd->prefixes, poolStart(&dtd->pool), 5477b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project sizeof(PREFIX)); 5478b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (id->prefix->name == poolStart(&dtd->pool)) 5479b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolFinish(&dtd->pool); 5480b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 5481b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolDiscard(&dtd->pool); 5482b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 5483b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5484b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5485b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5486b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5487b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return id; 5488b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 5489b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5490d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes#define CONTEXT_SEP XML_T(ASCII_FF) 5491b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5492b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic const XML_Char * 5493b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectgetContext(XML_Parser parser) 5494b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 5495b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project DTD * const dtd = _dtd; /* save one level of indirection */ 5496b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project HASH_TABLE_ITER iter; 5497b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Bool needSep = XML_FALSE; 5498b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5499b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd->defaultPrefix.binding) { 5500b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int i; 5501b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int len; 5502d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes if (!poolAppendChar(&tempPool, XML_T(ASCII_EQUALS))) 5503b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 5504b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project len = dtd->defaultPrefix.binding->uriLen; 5505b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (namespaceSeparator) 5506b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project len--; 5507b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (i = 0; i < len; i++) 5508b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppendChar(&tempPool, dtd->defaultPrefix.binding->uri[i])) 5509b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 5510b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project needSep = XML_TRUE; 5511b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5512b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5513b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project hashTableIterInit(&iter, &(dtd->prefixes)); 5514b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (;;) { 5515b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int i; 5516b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int len; 5517b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *s; 5518b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project PREFIX *prefix = (PREFIX *)hashTableIterNext(&iter); 5519b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!prefix) 5520b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 5521b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!prefix->binding) 5522b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project continue; 5523b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (needSep && !poolAppendChar(&tempPool, CONTEXT_SEP)) 5524b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 5525b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (s = prefix->name; *s; s++) 5526b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppendChar(&tempPool, *s)) 5527b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 5528d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes if (!poolAppendChar(&tempPool, XML_T(ASCII_EQUALS))) 5529b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 5530b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project len = prefix->binding->uriLen; 5531b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (namespaceSeparator) 5532b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project len--; 5533b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (i = 0; i < len; i++) 5534b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppendChar(&tempPool, prefix->binding->uri[i])) 5535b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 5536b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project needSep = XML_TRUE; 5537b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5538b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5539b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5540b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project hashTableIterInit(&iter, &(dtd->generalEntities)); 5541b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (;;) { 5542b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *s; 5543b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ENTITY *e = (ENTITY *)hashTableIterNext(&iter); 5544b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!e) 5545b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 5546b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!e->open) 5547b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project continue; 5548b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (needSep && !poolAppendChar(&tempPool, CONTEXT_SEP)) 5549b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 5550b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (s = e->name; *s; s++) 5551b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppendChar(&tempPool, *s)) 5552b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 5553b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project needSep = XML_TRUE; 5554b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5555b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5556b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppendChar(&tempPool, XML_T('\0'))) 5557b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 5558b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return tempPool.start; 5559b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 5560b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5561b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic XML_Bool 5562b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectsetContext(XML_Parser parser, const XML_Char *context) 5563b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 5564b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project DTD * const dtd = _dtd; /* save one level of indirection */ 5565b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *s = context; 5566b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5567b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project while (*context != XML_T('\0')) { 5568b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (*s == CONTEXT_SEP || *s == XML_T('\0')) { 5569b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ENTITY *e; 5570b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppendChar(&tempPool, XML_T('\0'))) 5571b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_FALSE; 557235e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes e = (ENTITY *)lookup(parser, &dtd->generalEntities, poolStart(&tempPool), 0); 5573b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (e) 5574b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project e->open = XML_TRUE; 5575b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (*s != XML_T('\0')) 5576b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project s++; 5577b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project context = s; 5578b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolDiscard(&tempPool); 5579b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5580d07d5a72938fd52415368c2320fc29575ae9a0c3Elliott Hughes else if (*s == XML_T(ASCII_EQUALS)) { 5581b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project PREFIX *prefix; 5582b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (poolLength(&tempPool) == 0) 5583b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project prefix = &dtd->defaultPrefix; 5584b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 5585b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppendChar(&tempPool, XML_T('\0'))) 5586b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_FALSE; 558735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes prefix = (PREFIX *)lookup(parser, &dtd->prefixes, poolStart(&tempPool), 5588b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project sizeof(PREFIX)); 5589b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!prefix) 5590b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_FALSE; 5591b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (prefix->name == poolStart(&tempPool)) { 5592b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project prefix->name = poolCopyString(&dtd->pool, prefix->name); 5593b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!prefix->name) 5594b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_FALSE; 5595b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5596b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolDiscard(&tempPool); 5597b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5598b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (context = s + 1; 5599b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *context != CONTEXT_SEP && *context != XML_T('\0'); 5600b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project context++) 5601b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppendChar(&tempPool, *context)) 5602b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_FALSE; 5603b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppendChar(&tempPool, XML_T('\0'))) 5604b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_FALSE; 5605b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (addBinding(parser, prefix, NULL, poolStart(&tempPool), 5606b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project &inheritedBindings) != XML_ERROR_NONE) 5607b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_FALSE; 5608b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolDiscard(&tempPool); 5609b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (*context != XML_T('\0')) 5610b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ++context; 5611b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project s = context; 5612b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5613b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 5614b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppendChar(&tempPool, *s)) 5615b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_FALSE; 5616b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project s++; 5617b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5618b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5619b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_TRUE; 5620b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 5621b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5622b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic void FASTCALL 5623b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectnormalizePublicId(XML_Char *publicId) 5624b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 5625b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char *p = publicId; 5626b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char *s; 5627b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (s = publicId; *s; s++) { 5628b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project switch (*s) { 5629b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case 0x20: 5630b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case 0xD: 5631b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project case 0xA: 5632b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (p != publicId && p[-1] != 0x20) 5633b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *p++ = 0x20; 5634b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 5635b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project default: 5636b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *p++ = *s; 5637b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5638b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5639b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (p != publicId && p[-1] == 0x20) 5640b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project --p; 5641b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *p = XML_T('\0'); 5642b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 5643b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5644b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic DTD * 5645b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectdtdCreate(const XML_Memory_Handling_Suite *ms) 5646b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 5647b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project DTD *p = (DTD *)ms->malloc_fcn(sizeof(DTD)); 5648b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (p == NULL) 5649b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return p; 5650b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolInit(&(p->pool), ms); 5651b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolInit(&(p->entityValuePool), ms); 5652b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project hashTableInit(&(p->generalEntities), ms); 5653b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project hashTableInit(&(p->elementTypes), ms); 5654b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project hashTableInit(&(p->attributeIds), ms); 5655b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project hashTableInit(&(p->prefixes), ms); 5656b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 5657b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->paramEntityRead = XML_FALSE; 5658b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project hashTableInit(&(p->paramEntities), ms); 5659b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 5660b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->defaultPrefix.name = NULL; 5661b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->defaultPrefix.binding = NULL; 5662b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5663b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->in_eldecl = XML_FALSE; 5664b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->scaffIndex = NULL; 5665b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->scaffold = NULL; 5666b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->scaffLevel = 0; 5667b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->scaffSize = 0; 5668b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->scaffCount = 0; 5669b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->contentStringLen = 0; 5670b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5671b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->keepProcessing = XML_TRUE; 5672b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->hasParamEntityRefs = XML_FALSE; 5673b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->standalone = XML_FALSE; 5674b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return p; 5675b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 5676b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5677b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic void 5678b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectdtdReset(DTD *p, const XML_Memory_Handling_Suite *ms) 5679b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 5680b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project HASH_TABLE_ITER iter; 5681b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project hashTableIterInit(&iter, &(p->elementTypes)); 5682b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (;;) { 5683b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ELEMENT_TYPE *e = (ELEMENT_TYPE *)hashTableIterNext(&iter); 5684b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!e) 5685b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 5686b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (e->allocDefaultAtts != 0) 5687b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ms->free_fcn(e->defaultAtts); 5688b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5689b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project hashTableClear(&(p->generalEntities)); 5690b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 5691b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->paramEntityRead = XML_FALSE; 5692b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project hashTableClear(&(p->paramEntities)); 5693b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 5694b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project hashTableClear(&(p->elementTypes)); 5695b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project hashTableClear(&(p->attributeIds)); 5696b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project hashTableClear(&(p->prefixes)); 5697b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolClear(&(p->pool)); 5698b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolClear(&(p->entityValuePool)); 5699b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->defaultPrefix.name = NULL; 5700b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->defaultPrefix.binding = NULL; 5701b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5702b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->in_eldecl = XML_FALSE; 5703b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5704b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ms->free_fcn(p->scaffIndex); 5705b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->scaffIndex = NULL; 5706b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ms->free_fcn(p->scaffold); 5707b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->scaffold = NULL; 5708b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5709b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->scaffLevel = 0; 5710b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->scaffSize = 0; 5711b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->scaffCount = 0; 5712b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->contentStringLen = 0; 5713b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5714b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->keepProcessing = XML_TRUE; 5715b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->hasParamEntityRefs = XML_FALSE; 5716b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->standalone = XML_FALSE; 5717b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 5718b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5719b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic void 5720b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectdtdDestroy(DTD *p, XML_Bool isDocEntity, const XML_Memory_Handling_Suite *ms) 5721b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 5722b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project HASH_TABLE_ITER iter; 5723b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project hashTableIterInit(&iter, &(p->elementTypes)); 5724b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (;;) { 5725b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ELEMENT_TYPE *e = (ELEMENT_TYPE *)hashTableIterNext(&iter); 5726b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!e) 5727b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 5728b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (e->allocDefaultAtts != 0) 5729b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ms->free_fcn(e->defaultAtts); 5730b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5731b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project hashTableDestroy(&(p->generalEntities)); 5732b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 5733b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project hashTableDestroy(&(p->paramEntities)); 5734b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 5735b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project hashTableDestroy(&(p->elementTypes)); 5736b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project hashTableDestroy(&(p->attributeIds)); 5737b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project hashTableDestroy(&(p->prefixes)); 5738b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolDestroy(&(p->pool)); 5739b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolDestroy(&(p->entityValuePool)); 5740b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (isDocEntity) { 5741b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ms->free_fcn(p->scaffIndex); 5742b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ms->free_fcn(p->scaffold); 5743b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5744b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ms->free_fcn(p); 5745b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 5746b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5747b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project/* Do a deep copy of the DTD. Return 0 for out of memory, non-zero otherwise. 5748b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project The new DTD has already been initialized. 5749b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project*/ 5750b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic int 575135e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott HughesdtdCopy(XML_Parser oldParser, DTD *newDtd, const DTD *oldDtd, const XML_Memory_Handling_Suite *ms) 5752b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 5753b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project HASH_TABLE_ITER iter; 5754b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5755b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* Copy the prefix table. */ 5756b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5757b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project hashTableIterInit(&iter, &(oldDtd->prefixes)); 5758b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (;;) { 5759b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *name; 5760b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const PREFIX *oldP = (PREFIX *)hashTableIterNext(&iter); 5761b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!oldP) 5762b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 5763b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project name = poolCopyString(&(newDtd->pool), oldP->name); 5764b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!name) 5765b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 576635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes if (!lookup(oldParser, &(newDtd->prefixes), name, sizeof(PREFIX))) 5767b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 5768b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5769b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5770b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project hashTableIterInit(&iter, &(oldDtd->attributeIds)); 5771b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5772b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* Copy the attribute id table. */ 5773b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5774b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (;;) { 5775b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ATTRIBUTE_ID *newA; 5776b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *name; 5777b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const ATTRIBUTE_ID *oldA = (ATTRIBUTE_ID *)hashTableIterNext(&iter); 5778b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5779b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!oldA) 5780b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 5781b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* Remember to allocate the scratch byte before the name. */ 5782b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppendChar(&(newDtd->pool), XML_T('\0'))) 5783b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 5784b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project name = poolCopyString(&(newDtd->pool), oldA->name); 5785b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!name) 5786b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 5787b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ++name; 578835e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes newA = (ATTRIBUTE_ID *)lookup(oldParser, &(newDtd->attributeIds), name, 5789b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project sizeof(ATTRIBUTE_ID)); 5790b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!newA) 5791b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 5792b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newA->maybeTokenized = oldA->maybeTokenized; 5793b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (oldA->prefix) { 5794b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newA->xmlns = oldA->xmlns; 5795b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (oldA->prefix == &oldDtd->defaultPrefix) 5796b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newA->prefix = &newDtd->defaultPrefix; 5797b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 579835e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes newA->prefix = (PREFIX *)lookup(oldParser, &(newDtd->prefixes), 5799b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project oldA->prefix->name, 0); 5800b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5801b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5802b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5803b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* Copy the element type table. */ 5804b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5805b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project hashTableIterInit(&iter, &(oldDtd->elementTypes)); 5806b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5807b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (;;) { 5808b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int i; 5809b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ELEMENT_TYPE *newE; 5810b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *name; 5811b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const ELEMENT_TYPE *oldE = (ELEMENT_TYPE *)hashTableIterNext(&iter); 5812b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!oldE) 5813b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 5814b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project name = poolCopyString(&(newDtd->pool), oldE->name); 5815b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!name) 5816b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 581735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes newE = (ELEMENT_TYPE *)lookup(oldParser, &(newDtd->elementTypes), name, 5818b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project sizeof(ELEMENT_TYPE)); 5819b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!newE) 5820b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 5821b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (oldE->nDefaultAtts) { 5822b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newE->defaultAtts = (DEFAULT_ATTRIBUTE *) 5823b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ms->malloc_fcn(oldE->nDefaultAtts * sizeof(DEFAULT_ATTRIBUTE)); 5824b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!newE->defaultAtts) { 5825b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ms->free_fcn(newE); 5826b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 5827b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5828b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5829b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (oldE->idAtt) 5830b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newE->idAtt = (ATTRIBUTE_ID *) 583135e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes lookup(oldParser, &(newDtd->attributeIds), oldE->idAtt->name, 0); 5832b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newE->allocDefaultAtts = newE->nDefaultAtts = oldE->nDefaultAtts; 5833b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (oldE->prefix) 583435e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes newE->prefix = (PREFIX *)lookup(oldParser, &(newDtd->prefixes), 5835b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project oldE->prefix->name, 0); 5836b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (i = 0; i < newE->nDefaultAtts; i++) { 5837b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newE->defaultAtts[i].id = (ATTRIBUTE_ID *) 583835e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes lookup(oldParser, &(newDtd->attributeIds), oldE->defaultAtts[i].id->name, 0); 5839b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newE->defaultAtts[i].isCdata = oldE->defaultAtts[i].isCdata; 5840b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (oldE->defaultAtts[i].value) { 5841b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newE->defaultAtts[i].value 5842b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project = poolCopyString(&(newDtd->pool), oldE->defaultAtts[i].value); 5843b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!newE->defaultAtts[i].value) 5844b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 5845b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5846b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 5847b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newE->defaultAtts[i].value = NULL; 5848b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5849b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5850b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5851b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* Copy the entity tables. */ 585235e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes if (!copyEntityTable(oldParser, 585335e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes &(newDtd->generalEntities), 5854b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project &(newDtd->pool), 5855b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project &(oldDtd->generalEntities))) 5856b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 5857b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5858b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#ifdef XML_DTD 585935e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes if (!copyEntityTable(oldParser, 586035e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes &(newDtd->paramEntities), 5861b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project &(newDtd->pool), 5862b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project &(oldDtd->paramEntities))) 5863b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 5864b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newDtd->paramEntityRead = oldDtd->paramEntityRead; 5865b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#endif /* XML_DTD */ 5866b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5867b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newDtd->keepProcessing = oldDtd->keepProcessing; 5868b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newDtd->hasParamEntityRefs = oldDtd->hasParamEntityRefs; 5869b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newDtd->standalone = oldDtd->standalone; 5870b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5871b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* Don't want deep copying for scaffolding */ 5872b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newDtd->in_eldecl = oldDtd->in_eldecl; 5873b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newDtd->scaffold = oldDtd->scaffold; 5874b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newDtd->contentStringLen = oldDtd->contentStringLen; 5875b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newDtd->scaffSize = oldDtd->scaffSize; 5876b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newDtd->scaffLevel = oldDtd->scaffLevel; 5877b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newDtd->scaffIndex = oldDtd->scaffIndex; 5878b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5879b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 1; 5880b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} /* End dtdCopy */ 5881b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5882b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic int 588335e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott HughescopyEntityTable(XML_Parser oldParser, 588435e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes HASH_TABLE *newTable, 5885b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project STRING_POOL *newPool, 5886b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const HASH_TABLE *oldTable) 5887b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 5888b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project HASH_TABLE_ITER iter; 5889b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *cachedOldBase = NULL; 5890b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *cachedNewBase = NULL; 5891b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5892b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project hashTableIterInit(&iter, oldTable); 5893b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5894b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (;;) { 5895b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ENTITY *newE; 5896b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *name; 5897b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const ENTITY *oldE = (ENTITY *)hashTableIterNext(&iter); 5898b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!oldE) 5899b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 5900b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project name = poolCopyString(newPool, oldE->name); 5901b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!name) 5902b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 590335e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes newE = (ENTITY *)lookup(oldParser, newTable, name, sizeof(ENTITY)); 5904b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!newE) 5905b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 5906b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (oldE->systemId) { 5907b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *tem = poolCopyString(newPool, oldE->systemId); 5908b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!tem) 5909b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 5910b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newE->systemId = tem; 5911b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (oldE->base) { 5912b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (oldE->base == cachedOldBase) 5913b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newE->base = cachedNewBase; 5914b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 5915b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project cachedOldBase = oldE->base; 5916b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tem = poolCopyString(newPool, cachedOldBase); 5917b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!tem) 5918b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 5919b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project cachedNewBase = newE->base = tem; 5920b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5921b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5922b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (oldE->publicId) { 5923b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tem = poolCopyString(newPool, oldE->publicId); 5924b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!tem) 5925b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 5926b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newE->publicId = tem; 5927b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5928b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5929b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 5930b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *tem = poolCopyStringN(newPool, oldE->textPtr, 5931b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project oldE->textLen); 5932b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!tem) 5933b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 5934b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newE->textPtr = tem; 5935b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newE->textLen = oldE->textLen; 5936b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5937b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (oldE->notation) { 5938b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *tem = poolCopyString(newPool, oldE->notation); 5939b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!tem) 5940b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 0; 5941b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newE->notation = tem; 5942b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5943b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newE->is_param = oldE->is_param; 5944b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newE->is_internal = oldE->is_internal; 5945b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5946b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return 1; 5947b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 5948b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5949b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project#define INIT_POWER 6 5950b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5951b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic XML_Bool FASTCALL 5952b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectkeyeq(KEY s1, KEY s2) 5953b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 5954b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (; *s1 == *s2; s1++, s2++) 5955b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (*s1 == 0) 5956b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_TRUE; 5957b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_FALSE; 5958b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 5959b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5960b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic unsigned long FASTCALL 596135e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hugheshash(XML_Parser parser, KEY s) 5962b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 596335e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes unsigned long h = hash_secret_salt; 5964b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project while (*s) 5965b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project h = CHAR_HASH(h, *s++); 5966b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return h; 5967b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 5968b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 5969b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic NAMED * 597035e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hugheslookup(XML_Parser parser, HASH_TABLE *table, KEY name, size_t createSize) 5971b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 5972b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project size_t i; 5973b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (table->size == 0) { 5974b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project size_t tsize; 5975b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!createSize) 5976b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 5977b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project table->power = INIT_POWER; 5978b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* table->size is a power of 2 */ 5979b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project table->size = (size_t)1 << INIT_POWER; 5980b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tsize = table->size * sizeof(NAMED *); 5981b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project table->v = (NAMED **)table->mem->malloc_fcn(tsize); 5982b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!table->v) { 5983b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project table->size = 0; 5984b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 5985b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5986b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project memset(table->v, 0, tsize); 598735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes i = hash(parser, name) & ((unsigned long)table->size - 1); 5988b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 5989b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 599035e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes unsigned long h = hash(parser, name); 5991b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unsigned long mask = (unsigned long)table->size - 1; 5992b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unsigned char step = 0; 5993b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project i = h & mask; 5994b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project while (table->v[i]) { 5995b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (keyeq(name, table->v[i]->name)) 5996b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return table->v[i]; 5997b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!step) 5998b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project step = PROBE_STEP(h, mask, table->power); 5999b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project i < step ? (i += table->size - step) : (i -= step); 6000b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6001b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!createSize) 6002b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 6003b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 6004b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project /* check for overflow (table is half full) */ 6005b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (table->used >> (table->power - 1)) { 6006b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unsigned char newPower = table->power + 1; 6007b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project size_t newSize = (size_t)1 << newPower; 6008b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unsigned long newMask = (unsigned long)newSize - 1; 6009b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project size_t tsize = newSize * sizeof(NAMED *); 6010b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project NAMED **newV = (NAMED **)table->mem->malloc_fcn(tsize); 6011b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!newV) 6012b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 6013b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project memset(newV, 0, tsize); 6014b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (i = 0; i < table->size; i++) 6015b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (table->v[i]) { 601635e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes unsigned long newHash = hash(parser, table->v[i]->name); 6017b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project size_t j = newHash & newMask; 6018b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project step = 0; 6019b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project while (newV[j]) { 6020b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!step) 6021b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project step = PROBE_STEP(newHash, newMask, newPower); 6022b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project j < step ? (j += newSize - step) : (j -= step); 6023b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6024b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project newV[j] = table->v[i]; 6025b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6026b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project table->mem->free_fcn(table->v); 6027b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project table->v = newV; 6028b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project table->power = newPower; 6029b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project table->size = newSize; 6030b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project i = h & newMask; 6031b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project step = 0; 6032b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project while (table->v[i]) { 6033b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!step) 6034b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project step = PROBE_STEP(h, newMask, newPower); 6035b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project i < step ? (i += newSize - step) : (i -= step); 6036b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6037b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6038b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6039b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project table->v[i] = (NAMED *)table->mem->malloc_fcn(createSize); 6040b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!table->v[i]) 6041b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 6042b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project memset(table->v[i], 0, createSize); 6043b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project table->v[i]->name = name; 6044b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (table->used)++; 6045b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return table->v[i]; 6046b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 6047b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 6048b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic void FASTCALL 6049b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjecthashTableClear(HASH_TABLE *table) 6050b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 6051b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project size_t i; 6052b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (i = 0; i < table->size; i++) { 6053b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project table->mem->free_fcn(table->v[i]); 6054b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project table->v[i] = NULL; 6055b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6056b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project table->used = 0; 6057b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 6058b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 6059b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic void FASTCALL 6060b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjecthashTableDestroy(HASH_TABLE *table) 6061b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 6062b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project size_t i; 6063b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (i = 0; i < table->size; i++) 6064b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project table->mem->free_fcn(table->v[i]); 6065b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project table->mem->free_fcn(table->v); 6066b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 6067b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 6068b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic void FASTCALL 6069b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjecthashTableInit(HASH_TABLE *p, const XML_Memory_Handling_Suite *ms) 6070b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 6071b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->power = 0; 6072b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->size = 0; 6073b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->used = 0; 6074b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->v = NULL; 6075b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->mem = ms; 6076b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 6077b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 6078b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic void FASTCALL 6079b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjecthashTableIterInit(HASH_TABLE_ITER *iter, const HASH_TABLE *table) 6080b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 6081b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project iter->p = table->v; 6082b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project iter->end = iter->p + table->size; 6083b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 6084b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 6085b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic NAMED * FASTCALL 6086b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjecthashTableIterNext(HASH_TABLE_ITER *iter) 6087b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 6088b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project while (iter->p != iter->end) { 6089b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project NAMED *tem = *(iter->p)++; 6090b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (tem) 6091b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return tem; 6092b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6093b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 6094b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 6095b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 6096b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic void FASTCALL 6097b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectpoolInit(STRING_POOL *pool, const XML_Memory_Handling_Suite *ms) 6098b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 6099b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->blocks = NULL; 6100b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->freeBlocks = NULL; 6101b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->start = NULL; 6102b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->ptr = NULL; 6103b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->end = NULL; 6104b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->mem = ms; 6105b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 6106b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 6107b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic void FASTCALL 6108b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectpoolClear(STRING_POOL *pool) 6109b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 6110b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!pool->freeBlocks) 6111b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->freeBlocks = pool->blocks; 6112b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 6113b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project BLOCK *p = pool->blocks; 6114b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project while (p) { 6115b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project BLOCK *tem = p->next; 6116b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p->next = pool->freeBlocks; 6117b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->freeBlocks = p; 6118b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p = tem; 6119b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6120b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6121b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->blocks = NULL; 6122b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->start = NULL; 6123b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->ptr = NULL; 6124b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->end = NULL; 6125b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 6126b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 6127b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic void FASTCALL 6128b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectpoolDestroy(STRING_POOL *pool) 6129b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 6130b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project BLOCK *p = pool->blocks; 6131b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project while (p) { 6132b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project BLOCK *tem = p->next; 6133b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->mem->free_fcn(p); 6134b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p = tem; 6135b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6136b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p = pool->freeBlocks; 6137b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project while (p) { 6138b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project BLOCK *tem = p->next; 6139b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->mem->free_fcn(p); 6140b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project p = tem; 6141b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6142b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 6143b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 6144b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic XML_Char * 6145b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectpoolAppend(STRING_POOL *pool, const ENCODING *enc, 6146b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *ptr, const char *end) 6147b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 6148b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!pool->ptr && !poolGrow(pool)) 6149b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 6150b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (;;) { 6151b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XmlConvert(enc, &ptr, end, (ICHAR **)&(pool->ptr), (ICHAR *)pool->end); 6152b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (ptr == end) 6153b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 6154b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolGrow(pool)) 6155b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 6156b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6157b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return pool->start; 6158b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 6159b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 6160b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic const XML_Char * FASTCALL 6161b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectpoolCopyString(STRING_POOL *pool, const XML_Char *s) 6162b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 6163b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project do { 6164b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppendChar(pool, *s)) 6165b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 6166b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } while (*s++); 6167b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project s = pool->start; 6168b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolFinish(pool); 6169b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return s; 6170b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 6171b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 6172b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic const XML_Char * 6173b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectpoolCopyStringN(STRING_POOL *pool, const XML_Char *s, int n) 6174b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 6175b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!pool->ptr && !poolGrow(pool)) 6176b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 6177b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (; n > 0; --n, s++) { 6178b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppendChar(pool, *s)) 6179b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 6180b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6181b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project s = pool->start; 6182b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolFinish(pool); 6183b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return s; 6184b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 6185b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 6186b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic const XML_Char * FASTCALL 6187b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectpoolAppendString(STRING_POOL *pool, const XML_Char *s) 6188b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 6189b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project while (*s) { 6190b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppendChar(pool, *s)) 6191b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 6192b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project s++; 6193b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6194b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return pool->start; 6195b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 6196b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 6197b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic XML_Char * 6198b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectpoolStoreString(STRING_POOL *pool, const ENCODING *enc, 6199b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *ptr, const char *end) 6200b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 6201b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!poolAppend(pool, enc, ptr, end)) 6202b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 6203b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (pool->ptr == pool->end && !poolGrow(pool)) 6204b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 6205b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *(pool->ptr)++ = 0; 6206b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return pool->start; 6207b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 6208b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 6209b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic XML_Bool FASTCALL 6210b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectpoolGrow(STRING_POOL *pool) 6211b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 6212b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (pool->freeBlocks) { 6213b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (pool->start == 0) { 6214b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->blocks = pool->freeBlocks; 6215b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->freeBlocks = pool->freeBlocks->next; 6216b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->blocks->next = NULL; 6217b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->start = pool->blocks->s; 6218b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->end = pool->start + pool->blocks->size; 6219b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->ptr = pool->start; 6220b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_TRUE; 6221b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6222b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (pool->end - pool->start < pool->freeBlocks->size) { 6223b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project BLOCK *tem = pool->freeBlocks->next; 6224b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->freeBlocks->next = pool->blocks; 6225b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->blocks = pool->freeBlocks; 6226b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->freeBlocks = tem; 6227b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project memcpy(pool->blocks->s, pool->start, 6228b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (pool->end - pool->start) * sizeof(XML_Char)); 6229b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->ptr = pool->blocks->s + (pool->ptr - pool->start); 6230b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->start = pool->blocks->s; 6231b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->end = pool->start + pool->blocks->size; 6232b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_TRUE; 6233b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6234b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6235b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (pool->blocks && pool->start == pool->blocks->s) { 6236b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int blockSize = (int)(pool->end - pool->start)*2; 623735e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes BLOCK *temp = (BLOCK *) 6238b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->mem->realloc_fcn(pool->blocks, 6239b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (offsetof(BLOCK, s) 6240b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project + blockSize * sizeof(XML_Char))); 624135e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes if (temp == NULL) 6242b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_FALSE; 624335e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes pool->blocks = temp; 6244b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->blocks->size = blockSize; 6245b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->ptr = pool->blocks->s + (pool->ptr - pool->start); 6246b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->start = pool->blocks->s; 6247b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->end = pool->start + blockSize; 6248b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6249b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 6250b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project BLOCK *tem; 6251b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int blockSize = (int)(pool->end - pool->start); 6252b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (blockSize < INIT_BLOCK_SIZE) 6253b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project blockSize = INIT_BLOCK_SIZE; 6254b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else 6255b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project blockSize *= 2; 6256b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tem = (BLOCK *)pool->mem->malloc_fcn(offsetof(BLOCK, s) 6257b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project + blockSize * sizeof(XML_Char)); 6258b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!tem) 6259b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_FALSE; 6260b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tem->size = blockSize; 6261b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project tem->next = pool->blocks; 6262b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->blocks = tem; 6263b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (pool->ptr != pool->start) 6264b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project memcpy(tem->s, pool->start, 6265b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project (pool->ptr - pool->start) * sizeof(XML_Char)); 6266b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->ptr = tem->s + (pool->ptr - pool->start); 6267b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->start = tem->s; 6268b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project pool->end = tem->s + blockSize; 6269b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6270b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return XML_TRUE; 6271b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 6272b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 6273b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic int FASTCALL 6274b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectnextScaffoldPart(XML_Parser parser) 6275b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 6276b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project DTD * const dtd = _dtd; /* save one level of indirection */ 6277b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project CONTENT_SCAFFOLD * me; 6278b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int next; 6279b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 6280b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!dtd->scaffIndex) { 6281b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->scaffIndex = (int *)MALLOC(groupSize * sizeof(int)); 6282b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!dtd->scaffIndex) 6283b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return -1; 6284b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->scaffIndex[0] = 0; 6285b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6286b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 6287b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd->scaffCount >= dtd->scaffSize) { 6288b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project CONTENT_SCAFFOLD *temp; 6289b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd->scaffold) { 6290b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project temp = (CONTENT_SCAFFOLD *) 6291b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project REALLOC(dtd->scaffold, dtd->scaffSize * 2 * sizeof(CONTENT_SCAFFOLD)); 6292b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (temp == NULL) 6293b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return -1; 6294b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->scaffSize *= 2; 6295b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6296b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 6297b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project temp = (CONTENT_SCAFFOLD *)MALLOC(INIT_SCAFFOLD_ELEMENTS 6298b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project * sizeof(CONTENT_SCAFFOLD)); 6299b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (temp == NULL) 6300b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return -1; 6301b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->scaffSize = INIT_SCAFFOLD_ELEMENTS; 6302b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6303b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->scaffold = temp; 6304b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6305b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project next = dtd->scaffCount++; 6306b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project me = &dtd->scaffold[next]; 6307b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dtd->scaffLevel) { 6308b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project CONTENT_SCAFFOLD *parent = &dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel-1]]; 6309b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (parent->lastchild) { 6310b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dtd->scaffold[parent->lastchild].nextsib = next; 6311b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6312b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!parent->childcnt) 6313b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project parent->firstchild = next; 6314b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project parent->lastchild = next; 6315b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project parent->childcnt++; 6316b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6317b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project me->firstchild = me->lastchild = me->childcnt = me->nextsib = 0; 6318b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return next; 6319b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 6320b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 6321b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic void 6322b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectbuild_node(XML_Parser parser, 6323b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int src_node, 6324b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Content *dest, 6325b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Content **contpos, 6326b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char **strpos) 6327b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 6328b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project DTD * const dtd = _dtd; /* save one level of indirection */ 6329b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dest->type = dtd->scaffold[src_node].type; 6330b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dest->quant = dtd->scaffold[src_node].quant; 6331b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (dest->type == XML_CTYPE_NAME) { 6332b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *src; 6333b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dest->name = *strpos; 6334b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project src = dtd->scaffold[src_node].name; 6335b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (;;) { 6336b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *(*strpos)++ = *src; 6337b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!*src) 6338b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project break; 6339b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project src++; 6340b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6341b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dest->numchildren = 0; 6342b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dest->children = NULL; 6343b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6344b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 6345b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project unsigned int i; 6346b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int cn; 6347b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dest->numchildren = dtd->scaffold[src_node].childcnt; 6348b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dest->children = *contpos; 6349b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project *contpos += dest->numchildren; 6350b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project for (i = 0, cn = dtd->scaffold[src_node].firstchild; 6351b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project i < dest->numchildren; 6352b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project i++, cn = dtd->scaffold[cn].nextsib) { 6353b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project build_node(parser, cn, &(dest->children[i]), contpos, strpos); 6354b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6355b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project dest->name = NULL; 6356b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6357b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 6358b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 6359b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic XML_Content * 6360b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectbuild_model (XML_Parser parser) 6361b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 6362b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project DTD * const dtd = _dtd; /* save one level of indirection */ 6363b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Content *ret; 6364b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Content *cpos; 6365b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project XML_Char * str; 6366b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project int allocsize = (dtd->scaffCount * sizeof(XML_Content) 6367b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project + (dtd->contentStringLen * sizeof(XML_Char))); 6368b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 6369b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ret = (XML_Content *)MALLOC(allocsize); 6370b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!ret) 6371b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 6372b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 6373b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project str = (XML_Char *) (&ret[dtd->scaffCount]); 6374b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project cpos = &ret[1]; 6375b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 6376b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project build_node(parser, 0, ret, &cpos, &str); 6377b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return ret; 6378b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 6379b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 6380b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Projectstatic ELEMENT_TYPE * 6381b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source ProjectgetElementType(XML_Parser parser, 6382b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const ENCODING *enc, 6383b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *ptr, 6384b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const char *end) 6385b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project{ 6386b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project DTD * const dtd = _dtd; /* save one level of indirection */ 6387b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project const XML_Char *name = poolStoreString(&dtd->pool, enc, ptr, end); 6388b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project ELEMENT_TYPE *ret; 6389b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project 6390b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!name) 6391b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 639235e432dd3af2c56c00fc64ca340d1e615030f0a3Elliott Hughes ret = (ELEMENT_TYPE *) lookup(parser, &dtd->elementTypes, name, sizeof(ELEMENT_TYPE)); 6393b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!ret) 6394b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 6395b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (ret->name != name) 6396b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolDiscard(&dtd->pool); 6397b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project else { 6398b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project poolFinish(&dtd->pool); 6399b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project if (!setElementTypePrefix(parser, ret)) 6400b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return NULL; 6401b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project } 6402b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project return ret; 6403b80e287d54a028e744f9fe412840a89ec7f8084bThe Android Open Source Project} 6404