1ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* 2ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * schemastypes.c : implementation of the XML Schema Datatypes 3ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * definition and validity checking 4ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * See Copyright for the status of this software. 6ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 7ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Daniel Veillard <veillard@redhat.com> 8ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 9ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 10ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define IN_LIBXML 11ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include "libxml.h" 12ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 13ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SCHEMAS_ENABLED 14ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 15ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <string.h> 16ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/xmlmemory.h> 17ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/parser.h> 18ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/parserInternals.h> 19ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/hash.h> 20ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/valid.h> 21ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/xpath.h> 22ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/uri.h> 23ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 24ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/xmlschemas.h> 25ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/schemasInternals.h> 26ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/xmlschemastypes.h> 27ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 28ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_MATH_H 29ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <math.h> 30ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 31ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_FLOAT_H 32ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <float.h> 33ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 34ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 35ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define DEBUG 36ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 37ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifndef LIBXML_XPATH_ENABLED 38ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectextern double xmlXPathNAN; 39ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectextern double xmlXPathPINF; 40ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectextern double xmlXPathNINF; 41ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 42ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 43ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define TODO \ 44ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, \ 45ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Unimplemented block at %s:%d\n", \ 46ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project __FILE__, __LINE__); 47ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 48ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define XML_SCHEMAS_NAMESPACE_NAME \ 49ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (const xmlChar *)"http://www.w3.org/2001/XMLSchema" 50ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 51ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define IS_WSP_REPLACE_CH(c) ((((c) == 0x9) || ((c) == 0xa)) || \ 52ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((c) == 0xd)) 53ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 54ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define IS_WSP_SPACE_CH(c) ((c) == 0x20) 55ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 56ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define IS_WSP_BLANK_CH(c) IS_BLANK_CH(c) 57ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 58ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* Date value */ 59ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef struct _xmlSchemaValDate xmlSchemaValDate; 60ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef xmlSchemaValDate *xmlSchemaValDatePtr; 61ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstruct _xmlSchemaValDate { 62ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project long year; 63ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int mon :4; /* 1 <= mon <= 12 */ 64ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int day :5; /* 1 <= day <= 31 */ 65ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int hour :5; /* 0 <= hour <= 23 */ 66ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int min :6; /* 0 <= min <= 59 */ 67ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project double sec; 68ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int tz_flag :1; /* is tzo explicitely set? */ 69ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project signed int tzo :12; /* -1440 <= tzo <= 1440; 70ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project currently only -840 to +840 are needed */ 71ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}; 72ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 73ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* Duration value */ 74ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef struct _xmlSchemaValDuration xmlSchemaValDuration; 75ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef xmlSchemaValDuration *xmlSchemaValDurationPtr; 76ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstruct _xmlSchemaValDuration { 77ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project long mon; /* mon stores years also */ 78ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project long day; 79ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project double sec; /* sec stores min and hour also */ 80ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}; 81ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 82ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef struct _xmlSchemaValDecimal xmlSchemaValDecimal; 83ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef xmlSchemaValDecimal *xmlSchemaValDecimalPtr; 84ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstruct _xmlSchemaValDecimal { 85ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* would use long long but not portable */ 86ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned long lo; 87ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned long mi; 88ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned long hi; 89ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int extra; 90ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int sign:1; 91ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int frac:7; 92ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int total:8; 93ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}; 94ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 95ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef struct _xmlSchemaValQName xmlSchemaValQName; 96ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef xmlSchemaValQName *xmlSchemaValQNamePtr; 97ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstruct _xmlSchemaValQName { 98ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *name; 99ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *uri; 100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}; 101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef struct _xmlSchemaValHex xmlSchemaValHex; 103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef xmlSchemaValHex *xmlSchemaValHexPtr; 104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstruct _xmlSchemaValHex { 105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *str; 106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int total; 107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}; 108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef struct _xmlSchemaValBase64 xmlSchemaValBase64; 110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef xmlSchemaValBase64 *xmlSchemaValBase64Ptr; 111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstruct _xmlSchemaValBase64 { 112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *str; 113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int total; 114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}; 115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstruct _xmlSchemaVal { 117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValType type; 118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project struct _xmlSchemaVal *next; 119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project union { 120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValDecimal decimal; 121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValDate date; 122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValDuration dur; 123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValQName qname; 124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValHex hex; 125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValBase64 base64; 126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project float f; 127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project double d; 128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int b; 129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *str; 130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } value; 131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}; 132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int xmlSchemaTypesInitialized = 0; 134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlHashTablePtr xmlSchemaTypesBank = NULL; 135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* 137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Basic types 138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeStringDef = NULL; 140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeAnyTypeDef = NULL; 141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeAnySimpleTypeDef = NULL; 142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeDecimalDef = NULL; 143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeDatetimeDef = NULL; 144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeDateDef = NULL; 145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeTimeDef = NULL; 146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeGYearDef = NULL; 147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeGYearMonthDef = NULL; 148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeGDayDef = NULL; 149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeGMonthDayDef = NULL; 150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeGMonthDef = NULL; 151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeDurationDef = NULL; 152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeFloatDef = NULL; 153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeBooleanDef = NULL; 154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeDoubleDef = NULL; 155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeHexBinaryDef = NULL; 156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeBase64BinaryDef = NULL; 157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeAnyURIDef = NULL; 158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* 160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Derived types 161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypePositiveIntegerDef = NULL; 163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeNonPositiveIntegerDef = NULL; 164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeNegativeIntegerDef = NULL; 165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeNonNegativeIntegerDef = NULL; 166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeIntegerDef = NULL; 167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeLongDef = NULL; 168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeIntDef = NULL; 169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeShortDef = NULL; 170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeByteDef = NULL; 171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeUnsignedLongDef = NULL; 172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeUnsignedIntDef = NULL; 173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeUnsignedShortDef = NULL; 174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeUnsignedByteDef = NULL; 175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeNormStringDef = NULL; 176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeTokenDef = NULL; 177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeLanguageDef = NULL; 178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeNameDef = NULL; 179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeQNameDef = NULL; 180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeNCNameDef = NULL; 181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeIdDef = NULL; 182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeIdrefDef = NULL; 183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeIdrefsDef = NULL; 184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeEntityDef = NULL; 185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeEntitiesDef = NULL; 186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeNotationDef = NULL; 187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeNmtokenDef = NULL; 188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr xmlSchemaTypeNmtokensDef = NULL; 189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Datatype error handlers * 193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaTypeErrMemory: 197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @extra: extra informations 198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handle an out of memory condition 200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaTypeErrMemory(xmlNodePtr node, const char *extra) 203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project __xmlSimpleError(XML_FROM_DATATYPE, XML_ERR_NO_MEMORY, node, NULL, extra); 205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Base types support * 210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaNewValue: 215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @type: the value type 216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Allocate a new simple type value 218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns a pointer to the new value or NULL in case of error 220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaValPtr 222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaNewValue(xmlSchemaValType type) { 223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr value; 224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project value = (xmlSchemaValPtr) xmlMalloc(sizeof(xmlSchemaVal)); 226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (value == NULL) { 227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memset(value, 0, sizeof(xmlSchemaVal)); 230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project value->type = type; 231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(value); 232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaFacetPtr 235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaNewMinLengthFacet(int value) 236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFacetPtr ret; 238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlSchemaNewFacet(); 240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == NULL) { 241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->type = XML_SCHEMA_FACET_MINLENGTH; 244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->val = xmlSchemaNewValue(XML_SCHEMAS_NNINTEGER); 245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->val->value.decimal.lo = value; 246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (ret); 247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* 250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaInitBasicType: 251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @name: the type name 252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @type: the value type associated 253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Initialize one primitive built-in type 255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaTypePtr 257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaInitBasicType(const char *name, xmlSchemaValType type, 258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypePtr baseType) { 259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypePtr ret; 260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = (xmlSchemaTypePtr) xmlMalloc(sizeof(xmlSchemaType)); 262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == NULL) { 263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeErrMemory(NULL, "could not initialize basic types"); 264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memset(ret, 0, sizeof(xmlSchemaType)); 267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->name = (const xmlChar *)name; 268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->targetNamespace = XML_SCHEMAS_NAMESPACE_NAME; 269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->type = XML_SCHEMA_TYPE_BASIC; 270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->baseType = baseType; 271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->contentType = XML_SCHEMA_CONTENT_BASIC; 272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Primitive types. 274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (type) { 276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_STRING: 277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DECIMAL: 278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DATE: 279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DATETIME: 280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_TIME: 281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GYEAR: 282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GYEARMONTH: 283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GMONTH: 284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GMONTHDAY: 285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GDAY: 286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DURATION: 287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_FLOAT: 288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DOUBLE: 289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_BOOLEAN: 290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ANYURI: 291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_HEXBINARY: 292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_BASE64BINARY: 293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_QNAME: 294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NOTATION: 295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->flags |= XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE; 296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Set variety. 302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (type) { 304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ANYTYPE: 305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ANYSIMPLETYPE: 306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_IDREFS: 308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NMTOKENS: 309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ENTITIES: 310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->flags |= XML_SCHEMAS_TYPE_VARIETY_LIST; 311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->facets = xmlSchemaNewMinLengthFacet(1); 312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->flags |= XML_SCHEMAS_TYPE_HAS_FACETS; 313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->flags |= XML_SCHEMAS_TYPE_VARIETY_ATOMIC; 316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlHashAddEntry2(xmlSchemaTypesBank, ret->name, 319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_NAMESPACE_NAME, ret); 320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->builtInType = type; 321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* 325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project* WARNING: Those type reside normally in xmlschemas.c but are 326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project* redefined here locally in oder of being able to use them for xs:anyType- 327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project* TODO: Remove those definition if we move the types to a header file. 328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project* TODO: Always keep those structs up-to-date with the originals. 329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project*/ 330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define UNBOUNDED (1 << 30) 331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef struct _xmlSchemaTreeItem xmlSchemaTreeItem; 333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef xmlSchemaTreeItem *xmlSchemaTreeItemPtr; 334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstruct _xmlSchemaTreeItem { 335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeType type; 336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaAnnotPtr annot; 337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTreeItemPtr next; 338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTreeItemPtr children; 339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}; 340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef struct _xmlSchemaParticle xmlSchemaParticle; 342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef xmlSchemaParticle *xmlSchemaParticlePtr; 343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstruct _xmlSchemaParticle { 344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeType type; 345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaAnnotPtr annot; 346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTreeItemPtr next; 347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTreeItemPtr children; 348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int minOccurs; 349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int maxOccurs; 350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNodePtr node; 351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}; 352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef struct _xmlSchemaModelGroup xmlSchemaModelGroup; 354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef xmlSchemaModelGroup *xmlSchemaModelGroupPtr; 355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstruct _xmlSchemaModelGroup { 356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeType type; 357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaAnnotPtr annot; 358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTreeItemPtr next; 359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTreeItemPtr children; 360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNodePtr node; 361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}; 362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaParticlePtr 364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaAddParticle(void) 365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaParticlePtr ret = NULL; 367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = (xmlSchemaParticlePtr) 369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlMalloc(sizeof(xmlSchemaParticle)); 370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == NULL) { 371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeErrMemory(NULL, "allocating particle component"); 372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memset(ret, 0, sizeof(xmlSchemaParticle)); 375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->type = XML_SCHEMA_TYPE_PARTICLE; 376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->minOccurs = 1; 377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->maxOccurs = 1; 378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (ret); 379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* 382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaInitTypes: 383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Initialize the default XML Schemas type library 385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaInitTypes(void) 388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlSchemaTypesInitialized != 0) 390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypesBank = xmlHashCreate(40); 392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3.4.7 Built-in Complex Type Definition 396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnyTypeDef = xmlSchemaInitBasicType("anyType", 398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_ANYTYPE, 399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NULL); 400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnyTypeDef->baseType = xmlSchemaTypeAnyTypeDef; 401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnyTypeDef->contentType = XML_SCHEMA_CONTENT_MIXED; 402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Init the content type. 404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnyTypeDef->contentType = XML_SCHEMA_CONTENT_MIXED; 406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project { 407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaParticlePtr particle; 408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaModelGroupPtr sequence; 409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaWildcardPtr wild; 410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* First particle. */ 411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project particle = xmlSchemaAddParticle(); 412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (particle == NULL) 413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnyTypeDef->subtypes = (xmlSchemaTypePtr) particle; 415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Sequence model group. */ 416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project sequence = (xmlSchemaModelGroupPtr) 417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlMalloc(sizeof(xmlSchemaModelGroup)); 418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sequence == NULL) { 419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeErrMemory(NULL, "allocating model group component"); 420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memset(sequence, 0, sizeof(xmlSchemaModelGroup)); 423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project sequence->type = XML_SCHEMA_TYPE_SEQUENCE; 424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project particle->children = (xmlSchemaTreeItemPtr) sequence; 425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Second particle. */ 426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project particle = xmlSchemaAddParticle(); 427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (particle == NULL) 428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project particle->minOccurs = 0; 430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project particle->maxOccurs = UNBOUNDED; 431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project sequence->children = (xmlSchemaTreeItemPtr) particle; 432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* The wildcard */ 433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project wild = (xmlSchemaWildcardPtr) xmlMalloc(sizeof(xmlSchemaWildcard)); 434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (wild == NULL) { 435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeErrMemory(NULL, "allocating wildcard component"); 436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memset(wild, 0, sizeof(xmlSchemaWildcard)); 439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project wild->type = XML_SCHEMA_TYPE_ANY; 440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project wild->any = 1; 441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project wild->processContents = XML_SCHEMAS_ANY_LAX; 442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project particle->children = (xmlSchemaTreeItemPtr) wild; 443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Create the attribute wildcard. 445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project wild = (xmlSchemaWildcardPtr) xmlMalloc(sizeof(xmlSchemaWildcard)); 447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (wild == NULL) { 448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeErrMemory(NULL, "could not create an attribute " 449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "wildcard on anyType"); 450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memset(wild, 0, sizeof(xmlSchemaWildcard)); 453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project wild->any = 1; 454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project wild->processContents = XML_SCHEMAS_ANY_LAX; 455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnyTypeDef->attributeWildcard = wild; 456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnySimpleTypeDef = xmlSchemaInitBasicType("anySimpleType", 458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_ANYSIMPLETYPE, 459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnyTypeDef); 460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * primitive datatypes 462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeStringDef = xmlSchemaInitBasicType("string", 464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_STRING, 465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnySimpleTypeDef); 466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeDecimalDef = xmlSchemaInitBasicType("decimal", 467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_DECIMAL, 468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnySimpleTypeDef); 469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeDateDef = xmlSchemaInitBasicType("date", 470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_DATE, 471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnySimpleTypeDef); 472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeDatetimeDef = xmlSchemaInitBasicType("dateTime", 473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_DATETIME, 474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnySimpleTypeDef); 475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeTimeDef = xmlSchemaInitBasicType("time", 476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_TIME, 477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnySimpleTypeDef); 478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeGYearDef = xmlSchemaInitBasicType("gYear", 479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_GYEAR, 480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnySimpleTypeDef); 481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeGYearMonthDef = xmlSchemaInitBasicType("gYearMonth", 482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_GYEARMONTH, 483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnySimpleTypeDef); 484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeGMonthDef = xmlSchemaInitBasicType("gMonth", 485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_GMONTH, 486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnySimpleTypeDef); 487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeGMonthDayDef = xmlSchemaInitBasicType("gMonthDay", 488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_GMONTHDAY, 489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnySimpleTypeDef); 490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeGDayDef = xmlSchemaInitBasicType("gDay", 491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_GDAY, 492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnySimpleTypeDef); 493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeDurationDef = xmlSchemaInitBasicType("duration", 494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_DURATION, 495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnySimpleTypeDef); 496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeFloatDef = xmlSchemaInitBasicType("float", 497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_FLOAT, 498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnySimpleTypeDef); 499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeDoubleDef = xmlSchemaInitBasicType("double", 500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_DOUBLE, 501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnySimpleTypeDef); 502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeBooleanDef = xmlSchemaInitBasicType("boolean", 503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_BOOLEAN, 504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnySimpleTypeDef); 505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnyURIDef = xmlSchemaInitBasicType("anyURI", 506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_ANYURI, 507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnySimpleTypeDef); 508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeHexBinaryDef = xmlSchemaInitBasicType("hexBinary", 509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_HEXBINARY, 510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnySimpleTypeDef); 511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeBase64BinaryDef 512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project = xmlSchemaInitBasicType("base64Binary", XML_SCHEMAS_BASE64BINARY, 513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnySimpleTypeDef); 514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeNotationDef = xmlSchemaInitBasicType("NOTATION", 515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_NOTATION, 516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnySimpleTypeDef); 517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeQNameDef = xmlSchemaInitBasicType("QName", 518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_QNAME, 519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnySimpleTypeDef); 520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * derived datatypes 523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeIntegerDef = xmlSchemaInitBasicType("integer", 525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_INTEGER, 526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeDecimalDef); 527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeNonPositiveIntegerDef = 528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaInitBasicType("nonPositiveInteger", 529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_NPINTEGER, 530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeIntegerDef); 531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeNegativeIntegerDef = 532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaInitBasicType("negativeInteger", XML_SCHEMAS_NINTEGER, 533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeNonPositiveIntegerDef); 534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeLongDef = 535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaInitBasicType("long", XML_SCHEMAS_LONG, 536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeIntegerDef); 537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeIntDef = xmlSchemaInitBasicType("int", XML_SCHEMAS_INT, 538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeLongDef); 539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeShortDef = xmlSchemaInitBasicType("short", 540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_SHORT, 541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeIntDef); 542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeByteDef = xmlSchemaInitBasicType("byte", 543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_BYTE, 544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeShortDef); 545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeNonNegativeIntegerDef = 546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaInitBasicType("nonNegativeInteger", 547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_NNINTEGER, 548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeIntegerDef); 549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeUnsignedLongDef = 550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaInitBasicType("unsignedLong", XML_SCHEMAS_ULONG, 551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeNonNegativeIntegerDef); 552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeUnsignedIntDef = 553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaInitBasicType("unsignedInt", XML_SCHEMAS_UINT, 554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeUnsignedLongDef); 555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeUnsignedShortDef = 556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaInitBasicType("unsignedShort", XML_SCHEMAS_USHORT, 557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeUnsignedIntDef); 558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeUnsignedByteDef = 559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaInitBasicType("unsignedByte", XML_SCHEMAS_UBYTE, 560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeUnsignedShortDef); 561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypePositiveIntegerDef = 562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaInitBasicType("positiveInteger", XML_SCHEMAS_PINTEGER, 563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeNonNegativeIntegerDef); 564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeNormStringDef = xmlSchemaInitBasicType("normalizedString", 565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_NORMSTRING, 566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeStringDef); 567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeTokenDef = xmlSchemaInitBasicType("token", 568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_TOKEN, 569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeNormStringDef); 570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeLanguageDef = xmlSchemaInitBasicType("language", 571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_LANGUAGE, 572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeTokenDef); 573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeNameDef = xmlSchemaInitBasicType("Name", 574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_NAME, 575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeTokenDef); 576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeNmtokenDef = xmlSchemaInitBasicType("NMTOKEN", 577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_NMTOKEN, 578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeTokenDef); 579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeNCNameDef = xmlSchemaInitBasicType("NCName", 580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_NCNAME, 581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeNameDef); 582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeIdDef = xmlSchemaInitBasicType("ID", XML_SCHEMAS_ID, 583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeNCNameDef); 584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeIdrefDef = xmlSchemaInitBasicType("IDREF", 585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_IDREF, 586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeNCNameDef); 587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeEntityDef = xmlSchemaInitBasicType("ENTITY", 588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_ENTITY, 589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeNCNameDef); 590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Derived list types. 592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* ENTITIES */ 594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeEntitiesDef = xmlSchemaInitBasicType("ENTITIES", 595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_ENTITIES, 596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnySimpleTypeDef); 597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeEntitiesDef->subtypes = xmlSchemaTypeEntityDef; 598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* IDREFS */ 599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeIdrefsDef = xmlSchemaInitBasicType("IDREFS", 600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_IDREFS, 601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnySimpleTypeDef); 602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeIdrefsDef->subtypes = xmlSchemaTypeIdrefDef; 603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* NMTOKENS */ 605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeNmtokensDef = xmlSchemaInitBasicType("NMTOKENS", 606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMAS_NMTOKENS, 607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnySimpleTypeDef); 608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeNmtokensDef->subtypes = xmlSchemaTypeNmtokenDef; 609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypesInitialized = 1; 611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaCleanupTypes: 615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Cleanup the default XML Schemas type library 617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaCleanupTypes(void) { 620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlSchemaTypesInitialized == 0) 621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Free xs:anyType. 624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project { 626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaParticlePtr particle; 627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Attribute wildcard. */ 628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeWildcard(xmlSchemaTypeAnyTypeDef->attributeWildcard); 629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Content type. */ 630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project particle = (xmlSchemaParticlePtr) xmlSchemaTypeAnyTypeDef->subtypes; 631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Wildcard. */ 632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeWildcard((xmlSchemaWildcardPtr) 633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project particle->children->children->children); 634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree((xmlSchemaParticlePtr) particle->children->children); 635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Sequence model group. */ 636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree((xmlSchemaModelGroupPtr) particle->children); 637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree((xmlSchemaParticlePtr) particle); 638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeAnyTypeDef->subtypes = NULL; 639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlHashFree(xmlSchemaTypesBank, (xmlHashDeallocator) xmlSchemaFreeType); 641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypesInitialized = 0; 642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaIsBuiltInTypeFacet: 646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @type: the built-in type 647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @facetType: the facet type 648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Evaluates if a specific facet can be 650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * used in conjunction with a type. 651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 1 if the facet can be used with the given built-in type, 653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 0 otherwise and -1 in case the type is not a built-in type. 654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaIsBuiltInTypeFacet(xmlSchemaTypePtr type, int facetType) 657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (type == NULL) 659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-1); 660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (type->type != XML_SCHEMA_TYPE_BASIC) 661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-1); 662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (type->builtInType) { 663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_BOOLEAN: 664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((facetType == XML_SCHEMA_FACET_PATTERN) || 665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (facetType == XML_SCHEMA_FACET_WHITESPACE)) 666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (1); 667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (0); 669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_STRING: 670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NOTATION: 671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_QNAME: 672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ANYURI: 673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_BASE64BINARY: 674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_HEXBINARY: 675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((facetType == XML_SCHEMA_FACET_LENGTH) || 676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (facetType == XML_SCHEMA_FACET_MINLENGTH) || 677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (facetType == XML_SCHEMA_FACET_MAXLENGTH) || 678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (facetType == XML_SCHEMA_FACET_PATTERN) || 679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (facetType == XML_SCHEMA_FACET_ENUMERATION) || 680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (facetType == XML_SCHEMA_FACET_WHITESPACE)) 681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (1); 682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (0); 684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DECIMAL: 685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((facetType == XML_SCHEMA_FACET_TOTALDIGITS) || 686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (facetType == XML_SCHEMA_FACET_FRACTIONDIGITS) || 687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (facetType == XML_SCHEMA_FACET_PATTERN) || 688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (facetType == XML_SCHEMA_FACET_WHITESPACE) || 689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (facetType == XML_SCHEMA_FACET_ENUMERATION) || 690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (facetType == XML_SCHEMA_FACET_MAXINCLUSIVE) || 691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (facetType == XML_SCHEMA_FACET_MAXEXCLUSIVE) || 692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (facetType == XML_SCHEMA_FACET_MININCLUSIVE) || 693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (facetType == XML_SCHEMA_FACET_MINEXCLUSIVE)) 694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (1); 695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (0); 697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_TIME: 698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GDAY: 699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GMONTH: 700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GMONTHDAY: 701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GYEAR: 702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GYEARMONTH: 703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DATE: 704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DATETIME: 705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DURATION: 706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_FLOAT: 707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DOUBLE: 708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((facetType == XML_SCHEMA_FACET_PATTERN) || 709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (facetType == XML_SCHEMA_FACET_ENUMERATION) || 710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (facetType == XML_SCHEMA_FACET_WHITESPACE) || 711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (facetType == XML_SCHEMA_FACET_MAXINCLUSIVE) || 712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (facetType == XML_SCHEMA_FACET_MAXEXCLUSIVE) || 713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (facetType == XML_SCHEMA_FACET_MININCLUSIVE) || 714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (facetType == XML_SCHEMA_FACET_MINEXCLUSIVE)) 715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (1); 716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (0); 718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (0); 722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaGetBuiltInType: 726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @type: the type of the built in type 727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Gives you the type struct for a built-in 729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * type by its type id. 730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the type if found, NULL otherwise. 732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaTypePtr 734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaGetBuiltInType(xmlSchemaValType type) 735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlSchemaTypesInitialized == 0) 737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaInitTypes(); 738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (type) { 739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ANYSIMPLETYPE: 741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeAnySimpleTypeDef); 742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_STRING: 743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeStringDef); 744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NORMSTRING: 745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeNormStringDef); 746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DECIMAL: 747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeDecimalDef); 748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_TIME: 749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeTimeDef); 750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GDAY: 751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeGDayDef); 752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GMONTH: 753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeGMonthDef); 754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GMONTHDAY: 755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeGMonthDayDef); 756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GYEAR: 757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeGYearDef); 758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GYEARMONTH: 759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeGYearMonthDef); 760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DATE: 761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeDateDef); 762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DATETIME: 763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeDatetimeDef); 764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DURATION: 765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeDurationDef); 766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_FLOAT: 767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeFloatDef); 768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DOUBLE: 769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeDoubleDef); 770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_BOOLEAN: 771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeBooleanDef); 772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_TOKEN: 773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeTokenDef); 774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_LANGUAGE: 775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeLanguageDef); 776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NMTOKEN: 777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeNmtokenDef); 778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NMTOKENS: 779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeNmtokensDef); 780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NAME: 781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeNameDef); 782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_QNAME: 783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeQNameDef); 784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NCNAME: 785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeNCNameDef); 786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ID: 787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeIdDef); 788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_IDREF: 789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeIdrefDef); 790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_IDREFS: 791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeIdrefsDef); 792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ENTITY: 793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeEntityDef); 794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ENTITIES: 795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeEntitiesDef); 796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NOTATION: 797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeNotationDef); 798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ANYURI: 799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeAnyURIDef); 800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_INTEGER: 801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeIntegerDef); 802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NPINTEGER: 803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeNonPositiveIntegerDef); 804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NINTEGER: 805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeNegativeIntegerDef); 806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NNINTEGER: 807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeNonNegativeIntegerDef); 808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_PINTEGER: 809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypePositiveIntegerDef); 810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_INT: 811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeIntDef); 812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_UINT: 813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeUnsignedIntDef); 814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_LONG: 815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeLongDef); 816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ULONG: 817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeUnsignedLongDef); 818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_SHORT: 819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeShortDef); 820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_USHORT: 821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeUnsignedShortDef); 822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_BYTE: 823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeByteDef); 824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_UBYTE: 825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeUnsignedByteDef); 826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_HEXBINARY: 827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeHexBinaryDef); 828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_BASE64BINARY: 829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeBase64BinaryDef); 830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ANYTYPE: 831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeAnyTypeDef); 832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaValueAppend: 839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @prev: the value 840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cur: the value to be appended 841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Appends a next sibling to a list of computed values. 843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 if succeeded and -1 on API errors. 845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaValueAppend(xmlSchemaValPtr prev, xmlSchemaValPtr cur) { 848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((prev == NULL) || (cur == NULL)) 850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-1); 851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project prev->next = cur; 852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (0); 853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaValueGetNext: 857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cur: the value 858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Accessor for the next sibling of a list of computed values. 860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the next value or NULL if there was none, or on 862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * API errors. 863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaValPtr 865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaValueGetNext(xmlSchemaValPtr cur) { 866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == NULL) 868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (cur->next); 870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaValueGetAsString: 874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @val: the value 875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Accessor for the string value of a computed value. 877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the string value or NULL if there was none, or on 879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * API errors. 880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectconst xmlChar * 882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaValueGetAsString(xmlSchemaValPtr val) 883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val == NULL) 885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (val->type) { 887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_STRING: 888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NORMSTRING: 889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ANYSIMPLETYPE: 890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_TOKEN: 891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_LANGUAGE: 892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NMTOKEN: 893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NAME: 894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NCNAME: 895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ID: 896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_IDREF: 897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ENTITY: 898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ANYURI: 899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (BAD_CAST val->value.str); 900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaValueGetAsBoolean: 908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @val: the value 909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Accessor for the boolean value of a computed value. 911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 1 if true and 0 if false, or in case of an error. Hmm. 913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaValueGetAsBoolean(xmlSchemaValPtr val) 916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((val == NULL) || (val->type != XML_SCHEMAS_BOOLEAN)) 918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (0); 919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (val->value.b); 920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaNewStringValue: 924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @type: the value type 925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: the value 926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Allocate a new simple type value. The type can be 928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * of XML_SCHEMAS_STRING. 929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * WARNING: This one is intended to be expanded for other 930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * string based types. We need this for anySimpleType as well. 931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The given value is consumed and freed with the struct. 932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns a pointer to the new value or NULL in case of error 934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaValPtr 936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaNewStringValue(xmlSchemaValType type, 937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *value) 938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr val; 940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (type != XML_SCHEMAS_STRING) 942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val = (xmlSchemaValPtr) xmlMalloc(sizeof(xmlSchemaVal)); 944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val == NULL) { 945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memset(val, 0, sizeof(xmlSchemaVal)); 948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val->type = type; 949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val->value.str = (xmlChar *) value; 950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(val); 951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaNewNOTATIONValue: 955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @name: the notation name 956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ns: the notation namespace name or NULL 957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Allocate a new NOTATION value. 959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The given values are consumed and freed with the struct. 960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 961ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns a pointer to the new value or NULL in case of error 962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaValPtr 964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaNewNOTATIONValue(const xmlChar *name, 965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *ns) 966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr val; 968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val = xmlSchemaNewValue(XML_SCHEMAS_NOTATION); 970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val == NULL) 971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val->value.qname.name = (xmlChar *)name; 974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ns != NULL) 975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val->value.qname.uri = (xmlChar *)ns; 976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(val); 977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaNewQNameValue: 981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @namespaceName: the namespace name 982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @localName: the local name 983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Allocate a new QName value. 985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The given values are consumed and freed with the struct. 986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns a pointer to the new value or NULL in case of an error. 988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaValPtr 990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaNewQNameValue(const xmlChar *namespaceName, 991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *localName) 992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr val; 994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val = xmlSchemaNewValue(XML_SCHEMAS_QNAME); 996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val == NULL) 997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val->value.qname.name = (xmlChar *) localName; 1000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val->value.qname.uri = (xmlChar *) namespaceName; 1001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(val); 1002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1003ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1004ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaFreeValue: 1006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: the value to free 1007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Cleanup the default XML Schemas type library 1009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 1011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaFreeValue(xmlSchemaValPtr value) { 1012ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr prev; 1013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (value != NULL) { 1015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (value->type) { 1016ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_STRING: 1017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NORMSTRING: 1018ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_TOKEN: 1019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_LANGUAGE: 1020ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NMTOKEN: 1021ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NMTOKENS: 1022ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NAME: 1023ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NCNAME: 1024ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ID: 1025ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_IDREF: 1026ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_IDREFS: 1027ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ENTITY: 1028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ENTITIES: 1029ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ANYURI: 1030ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ANYSIMPLETYPE: 1031ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (value->value.str != NULL) 1032ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(value->value.str); 1033ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1034ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NOTATION: 1035ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_QNAME: 1036ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (value->value.qname.uri != NULL) 1037ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(value->value.qname.uri); 1038ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (value->value.qname.name != NULL) 1039ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(value->value.qname.name); 1040ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1041ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_HEXBINARY: 1042ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (value->value.hex.str != NULL) 1043ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(value->value.hex.str); 1044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_BASE64BINARY: 1046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (value->value.base64.str != NULL) 1047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(value->value.base64.str); 1048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 1050ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1051ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project prev = value; 1053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project value = value->next; 1054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(prev); 1055ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaGetPredefinedType: 1060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @name: the type name 1061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ns: the URI of the namespace usually "http://www.w3.org/2001/XMLSchema" 1062ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Lookup a type in the default XML Schemas type library 1064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the type if found, NULL otherwise 1066ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaTypePtr 1068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaGetPredefinedType(const xmlChar *name, const xmlChar *ns) { 1069ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlSchemaTypesInitialized == 0) 1070ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaInitTypes(); 1071ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (name == NULL) 1072ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 1073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return((xmlSchemaTypePtr) xmlHashLookup2(xmlSchemaTypesBank, name, ns)); 1074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1075ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1076ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1077ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaGetBuiltInListSimpleTypeItemType: 1078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @type: the built-in simple type. 1079ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Lookup function 1081ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1082ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the item type of @type as defined by the built-in datatype 1083ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * hierarchy of XML Schema Part 2: Datatypes, or NULL in case of an error. 1084ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1085ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaTypePtr 1086ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaGetBuiltInListSimpleTypeItemType(xmlSchemaTypePtr type) 1087ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 1088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((type == NULL) || (type->type != XML_SCHEMA_TYPE_BASIC)) 1089ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 1090ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (type->builtInType) { 1091ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NMTOKENS: 1092ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeNmtokenDef ); 1093ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_IDREFS: 1094ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeIdrefDef); 1095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ENTITIES: 1096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaTypeEntityDef); 1097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 1098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 1099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**************************************************************** 1103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 1104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Convenience macros and functions * 1105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 1106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ****************************************************************/ 1107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define IS_TZO_CHAR(c) \ 1109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((c == 0) || (c == 'Z') || (c == '+') || (c == '-')) 1110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define VALID_YEAR(yr) (yr != 0) 1112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define VALID_MONTH(mon) ((mon >= 1) && (mon <= 12)) 1113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* VALID_DAY should only be used when month is unknown */ 1114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define VALID_DAY(day) ((day >= 1) && (day <= 31)) 1115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define VALID_HOUR(hr) ((hr >= 0) && (hr <= 23)) 1116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define VALID_MIN(min) ((min >= 0) && (min <= 59)) 1117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define VALID_SEC(sec) ((sec >= 0) && (sec < 60)) 1118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define VALID_TZO(tzo) ((tzo > -840) && (tzo < 840)) 1119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define IS_LEAP(y) \ 1120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0)) 1121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic const unsigned int daysInMonth[12] = 1123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; 1124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic const unsigned int daysInMonthLeap[12] = 1125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; 1126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define MAX_DAYINMONTH(yr,mon) \ 1128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (IS_LEAP(yr) ? daysInMonthLeap[mon - 1] : daysInMonth[mon - 1]) 1129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define VALID_MDAY(dt) \ 1131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (IS_LEAP(dt->year) ? \ 1132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (dt->day <= daysInMonthLeap[dt->mon - 1]) : \ 1133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (dt->day <= daysInMonth[dt->mon - 1])) 1134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define VALID_DATE(dt) \ 1136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (VALID_YEAR(dt->year) && VALID_MONTH(dt->mon) && VALID_MDAY(dt)) 1137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define VALID_TIME(dt) \ 1139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (VALID_HOUR(dt->hour) && VALID_MIN(dt->min) && \ 1140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project VALID_SEC(dt->sec) && VALID_TZO(dt->tzo)) 1141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define VALID_DATETIME(dt) \ 1143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (VALID_DATE(dt) && VALID_TIME(dt)) 1144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define SECS_PER_MIN (60) 1146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define SECS_PER_HOUR (60 * SECS_PER_MIN) 1147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define SECS_PER_DAY (24 * SECS_PER_HOUR) 1148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic const long dayInYearByMonth[12] = 1150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; 1151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic const long dayInLeapYearByMonth[12] = 1152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335 }; 1153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define DAY_IN_YEAR(day, month, year) \ 1155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((IS_LEAP(year) ? \ 1156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dayInLeapYearByMonth[month - 1] : \ 1157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dayInYearByMonth[month - 1]) + day) 1158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef DEBUG 1160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define DEBUG_DATE(dt) \ 1161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, \ 1162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "type=%o %04ld-%02u-%02uT%02u:%02u:%03f", \ 1163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dt->type,dt->value.date.year,dt->value.date.mon, \ 1164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dt->value.date.day,dt->value.date.hour,dt->value.date.min, \ 1165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dt->value.date.sec); \ 1166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (dt->value.date.tz_flag) \ 1167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (dt->value.date.tzo != 0) \ 1168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, \ 1169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "%+05d\n",dt->value.date.tzo); \ 1170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else \ 1171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, "Z\n"); \ 1172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else \ 1173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext,"\n") 1174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 1175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define DEBUG_DATE(dt) 1176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 1177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * _xmlSchemaParseGYear: 1180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @dt: pointer to a date structure 1181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str: pointer to the string to analyze 1182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parses a xs:gYear without time zone and fills in the appropriate 1184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * field of the @dt structure. @str is updated to point just after the 1185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xs:gYear. It is supposed that @dt->year is big enough to contain 1186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the year. 1187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 or the error code 1189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 1191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project_xmlSchemaParseGYear (xmlSchemaValDatePtr dt, const xmlChar **str) { 1192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *cur = *str, *firstChar; 1193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int isneg = 0, digcnt = 0; 1194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (((*cur < '0') || (*cur > '9')) && 1196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (*cur != '-') && (*cur != '+')) 1197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -1; 1198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur == '-') { 1200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project isneg = 1; 1201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 1202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project firstChar = cur; 1205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*cur >= '0') && (*cur <= '9')) { 1207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dt->year = dt->year * 10 + (*cur - '0'); 1208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 1209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project digcnt++; 1210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* year must be at least 4 digits (CCYY); over 4 1213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * digits cannot have a leading zero. */ 1214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((digcnt < 4) || ((digcnt > 4) && (*firstChar == '0'))) 1215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 1; 1216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (isneg) 1218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dt->year = - dt->year; 1219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!VALID_YEAR(dt->year)) 1221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 2; 1222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *str = cur; 1224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 0; 1225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * PARSE_2_DIGITS: 1229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @num: the integer to fill in 1230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cur: an #xmlChar * 1231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @invalid: an integer 1232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parses a 2-digits integer and updates @num with the value. @cur is 1234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * updated to point just after the integer. 1235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * In case of error, @invalid is set to %TRUE, values of @num and 1236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cur are undefined. 1237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define PARSE_2_DIGITS(num, cur, invalid) \ 1239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur[0] < '0') || (cur[0] > '9') || \ 1240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (cur[1] < '0') || (cur[1] > '9')) \ 1241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project invalid = 1; \ 1242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else \ 1243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project num = (cur[0] - '0') * 10 + (cur[1] - '0'); \ 1244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur += 2; 1245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * PARSE_FLOAT: 1248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @num: the double to fill in 1249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cur: an #xmlChar * 1250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @invalid: an integer 1251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parses a float and updates @num with the value. @cur is 1253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * updated to point just after the float. The float must have a 1254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2-digits integer part and may or may not have a decimal part. 1255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * In case of error, @invalid is set to %TRUE, values of @num and 1256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cur are undefined. 1257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define PARSE_FLOAT(num, cur, invalid) \ 1259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project PARSE_2_DIGITS(num, cur, invalid); \ 1260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!invalid && (*cur == '.')) { \ 1261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project double mult = 1; \ 1262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; \ 1263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*cur < '0') || (*cur > '9')) \ 1264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project invalid = 1; \ 1265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*cur >= '0') && (*cur <= '9')) { \ 1266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project mult /= 10; \ 1267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project num += (*cur - '0') * mult; \ 1268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; \ 1269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } \ 1270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * _xmlSchemaParseGMonth: 1274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @dt: pointer to a date structure 1275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str: pointer to the string to analyze 1276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parses a xs:gMonth without time zone and fills in the appropriate 1278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * field of the @dt structure. @str is updated to point just after the 1279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xs:gMonth. 1280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 or the error code 1282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 1284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project_xmlSchemaParseGMonth (xmlSchemaValDatePtr dt, const xmlChar **str) { 1285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *cur = *str; 1286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret = 0; 1287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int value = 0; 1288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project PARSE_2_DIGITS(value, cur, ret); 1290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != 0) 1291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ret; 1292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!VALID_MONTH(value)) 1294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 2; 1295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dt->mon = value; 1297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *str = cur; 1299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 0; 1300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * _xmlSchemaParseGDay: 1304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @dt: pointer to a date structure 1305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str: pointer to the string to analyze 1306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parses a xs:gDay without time zone and fills in the appropriate 1308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * field of the @dt structure. @str is updated to point just after the 1309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xs:gDay. 1310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 or the error code 1312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 1314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project_xmlSchemaParseGDay (xmlSchemaValDatePtr dt, const xmlChar **str) { 1315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *cur = *str; 1316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret = 0; 1317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int value = 0; 1318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project PARSE_2_DIGITS(value, cur, ret); 1320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != 0) 1321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ret; 1322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!VALID_DAY(value)) 1324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 2; 1325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dt->day = value; 1327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *str = cur; 1328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 0; 1329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * _xmlSchemaParseTime: 1333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @dt: pointer to a date structure 1334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str: pointer to the string to analyze 1335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parses a xs:time without time zone and fills in the appropriate 1337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * fields of the @dt structure. @str is updated to point just after the 1338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xs:time. 1339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * In case of error, values of @dt fields are undefined. 1340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 or the error code 1342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 1344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project_xmlSchemaParseTime (xmlSchemaValDatePtr dt, const xmlChar **str) { 1345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *cur = *str; 1346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret = 0; 1347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int value = 0; 1348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project PARSE_2_DIGITS(value, cur, ret); 1350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != 0) 1351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ret; 1352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur != ':') 1353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 1; 1354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!VALID_HOUR(value)) 1355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 2; 1356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 1357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* the ':' insures this string is xs:time */ 1359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dt->hour = value; 1360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project PARSE_2_DIGITS(value, cur, ret); 1362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != 0) 1363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ret; 1364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!VALID_MIN(value)) 1365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 2; 1366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dt->min = value; 1367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur != ':') 1369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 1; 1370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 1371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project PARSE_FLOAT(dt->sec, cur, ret); 1373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != 0) 1374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ret; 1375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((!VALID_SEC(dt->sec)) || (!VALID_TZO(dt->tzo))) 1377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 2; 1378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *str = cur; 1380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 0; 1381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * _xmlSchemaParseTimeZone: 1385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @dt: pointer to a date structure 1386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str: pointer to the string to analyze 1387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parses a time zone without time zone and fills in the appropriate 1389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * field of the @dt structure. @str is updated to point just after the 1390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * time zone. 1391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 or the error code 1393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 1395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project_xmlSchemaParseTimeZone (xmlSchemaValDatePtr dt, const xmlChar **str) { 1396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *cur; 1397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret = 0; 1398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (str == NULL) 1400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -1; 1401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = *str; 1402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (*cur) { 1404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case 0: 1405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dt->tz_flag = 0; 1406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dt->tzo = 0; 1407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case 'Z': 1410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dt->tz_flag = 1; 1411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dt->tzo = 0; 1412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 1413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case '+': 1416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case '-': { 1417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int isneg = 0, tmp = 0; 1418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project isneg = (*cur == '-'); 1419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 1421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project PARSE_2_DIGITS(tmp, cur, ret); 1423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != 0) 1424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ret; 1425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!VALID_HOUR(tmp)) 1426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 2; 1427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur != ':') 1429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 1; 1430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 1431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dt->tzo = tmp * 60; 1433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project PARSE_2_DIGITS(tmp, cur, ret); 1435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != 0) 1436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ret; 1437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!VALID_MIN(tmp)) 1438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 2; 1439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dt->tzo += tmp; 1441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (isneg) 1442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dt->tzo = - dt->tzo; 1443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!VALID_TZO(dt->tzo)) 1445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 2; 1446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dt->tz_flag = 1; 1448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 1451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 1; 1452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *str = cur; 1455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 0; 1456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * _xmlSchemaBase64Decode: 1460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ch: a character 1461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Converts a base64 encoded character to its base 64 value. 1463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0-63 (value), 64 (pad), or -1 (not recognized) 1465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 1467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project_xmlSchemaBase64Decode (const xmlChar ch) { 1468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (('A' <= ch) && (ch <= 'Z')) return ch - 'A'; 1469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (('a' <= ch) && (ch <= 'z')) return ch - 'a' + 26; 1470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (('0' <= ch) && (ch <= '9')) return ch - '0' + 52; 1471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ('+' == ch) return 62; 1472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ('/' == ch) return 63; 1473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ('=' == ch) return 64; 1474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -1; 1475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/**************************************************************** 1478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 1479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * XML Schema Dates/Times Datatypes Handling * 1480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 1481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ****************************************************************/ 1482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * PARSE_DIGITS: 1485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @num: the integer to fill in 1486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cur: an #xmlChar * 1487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @num_type: an integer flag 1488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parses a digits integer and updates @num with the value. @cur is 1490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * updated to point just after the integer. 1491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * In case of error, @num_type is set to -1, values of @num and 1492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cur are undefined. 1493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define PARSE_DIGITS(num, cur, num_type) \ 1495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*cur < '0') || (*cur > '9')) \ 1496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project num_type = -1; \ 1497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else \ 1498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*cur >= '0') && (*cur <= '9')) { \ 1499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project num = num * 10 + (*cur - '0'); \ 1500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; \ 1501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * PARSE_NUM: 1505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @num: the double to fill in 1506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cur: an #xmlChar * 1507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @num_type: an integer flag 1508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parses a float or integer and updates @num with the value. @cur is 1510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * updated to point just after the number. If the number is a float, 1511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * then it must have an integer part and a decimal part; @num_type will 1512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * be set to 1. If there is no decimal part, @num_type is set to zero. 1513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * In case of error, @num_type is set to -1, values of @num and 1514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cur are undefined. 1515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define PARSE_NUM(num, cur, num_type) \ 1517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project num = 0; \ 1518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project PARSE_DIGITS(num, cur, num_type); \ 1519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!num_type && (*cur == '.')) { \ 1520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project double mult = 1; \ 1521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; \ 1522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*cur < '0') || (*cur > '9')) \ 1523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project num_type = -1; \ 1524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else \ 1525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project num_type = 1; \ 1526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*cur >= '0') && (*cur <= '9')) { \ 1527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project mult /= 10; \ 1528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project num += (*cur - '0') * mult; \ 1529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; \ 1530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } \ 1531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaValidateDates: 1535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @type: the expected type or XML_SCHEMAS_UNKNOWN 1536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @dateTime: string to analyze 1537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @val: the return computed value 1538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check that @dateTime conforms to the lexical space of one of the date types. 1540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * if true a value is computed and returned in @val. 1541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 if this validates, a positive error code number otherwise 1543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * and -1 in case of internal or API error. 1544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 1546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaValidateDates (xmlSchemaValType type, 1547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *dateTime, xmlSchemaValPtr *val, 1548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int collapse) { 1549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr dt; 1550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret; 1551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *cur = dateTime; 1552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define RETURN_TYPE_IF_VALID(t) \ 1554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (IS_TZO_CHAR(*cur)) { \ 1555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = _xmlSchemaParseTimeZone(&(dt->value.date), &cur); \ 1556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == 0) { \ 1557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur != 0) \ 1558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; \ 1559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dt->type = t; \ 1560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; \ 1561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } \ 1562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (dateTime == NULL) 1565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -1; 1566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (collapse) 1568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while IS_WSP_BLANK_CH(*cur) cur++; 1569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*cur != '-') && (*cur < '0') && (*cur > '9')) 1571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 1; 1572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dt = xmlSchemaNewValue(XML_SCHEMAS_UNKNOWN); 1574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (dt == NULL) 1575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -1; 1576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur[0] == '-') && (cur[1] == '-')) { 1578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * It's an incomplete date (xs:gMonthDay, xs:gMonth or 1580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xs:gDay) 1581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur += 2; 1583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* is it an xs:gDay? */ 1585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur == '-') { 1586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (type == XML_SCHEMAS_GMONTH) 1587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 1588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ++cur; 1589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = _xmlSchemaParseGDay(&(dt->value.date), &cur); 1590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != 0) 1591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 1592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project RETURN_TYPE_IF_VALID(XML_SCHEMAS_GDAY); 1594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 1596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * it should be an xs:gMonthDay or xs:gMonth 1600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = _xmlSchemaParseGMonth(&(dt->value.date), &cur); 1602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != 0) 1603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 1604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * a '-' char could indicate this type is xs:gMonthDay or 1607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * a negative time zone offset. Check for xs:gMonthDay first. 1608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Also the first three char's of a negative tzo (-MM:SS) can 1609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * appear to be a valid day; so even if the day portion 1610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * of the xs:gMonthDay verifies, we must insure it was not 1611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * a tzo. 1612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur == '-') { 1614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *rewnd = cur; 1615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 1616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = _xmlSchemaParseGDay(&(dt->value.date), &cur); 1618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret == 0) && ((*cur == 0) || (*cur != ':'))) { 1619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * we can use the VALID_MDAY macro to validate the month 1622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * and day because the leap year test will flag year zero 1623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * as a leap year (even though zero is an invalid year). 1624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * FUTURE TODO: Zero will become valid in XML Schema 1.1 1625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * probably. 1626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (VALID_MDAY((&(dt->value.date)))) { 1628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project RETURN_TYPE_IF_VALID(XML_SCHEMAS_GMONTHDAY); 1630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 1632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * not xs:gMonthDay so rewind and check if just xs:gMonth 1637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * with an optional time zone. 1638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = rewnd; 1640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project RETURN_TYPE_IF_VALID(XML_SCHEMAS_GMONTH); 1643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 1645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * It's a right-truncated date or an xs:time. 1649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Try to parse an xs:time then fallback on right-truncated dates. 1650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*cur >= '0') && (*cur <= '9')) { 1652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = _xmlSchemaParseTime(&(dt->value.date), &cur); 1653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == 0) { 1654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* it's an xs:time */ 1655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project RETURN_TYPE_IF_VALID(XML_SCHEMAS_TIME); 1656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* fallback on date parsing */ 1660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = dateTime; 1661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = _xmlSchemaParseGYear(&(dt->value.date), &cur); 1663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != 0) 1664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 1665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* is it an xs:gYear? */ 1667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project RETURN_TYPE_IF_VALID(XML_SCHEMAS_GYEAR); 1668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur != '-') 1670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 1671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 1672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = _xmlSchemaParseGMonth(&(dt->value.date), &cur); 1674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != 0) 1675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 1676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* is it an xs:gYearMonth? */ 1678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project RETURN_TYPE_IF_VALID(XML_SCHEMAS_GYEARMONTH); 1679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur != '-') 1681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 1682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 1683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = _xmlSchemaParseGDay(&(dt->value.date), &cur); 1685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret != 0) || !VALID_DATE((&(dt->value.date)))) 1686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 1687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* is it an xs:date? */ 1689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project RETURN_TYPE_IF_VALID(XML_SCHEMAS_DATE); 1690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur != 'T') 1692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 1693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 1694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* it should be an xs:dateTime */ 1696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = _xmlSchemaParseTime(&(dt->value.date), &cur); 1697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != 0) 1698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 1699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = _xmlSchemaParseTimeZone(&(dt->value.date), &cur); 1701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (collapse) 1702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while IS_WSP_BLANK_CH(*cur) cur++; 1703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret != 0) || (*cur != 0) || (!(VALID_DATETIME((&(dt->value.date)))))) 1704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 1705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dt->type = XML_SCHEMAS_DATETIME; 1708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectdone: 1710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if 1 1711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((type != XML_SCHEMAS_UNKNOWN) && (type != dt->type)) 1712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 1713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 1714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * insure the parsed type is equal to or less significant (right 1716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * truncated) than the desired type. 1717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((type != XML_SCHEMAS_UNKNOWN) && (type != dt->type)) { 1719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* time only matches time */ 1721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((type == XML_SCHEMAS_TIME) && (dt->type == XML_SCHEMAS_TIME)) 1722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 1723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((type == XML_SCHEMAS_DATETIME) && 1725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((dt->type != XML_SCHEMAS_DATE) || 1726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (dt->type != XML_SCHEMAS_GYEARMONTH) || 1727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (dt->type != XML_SCHEMAS_GYEAR))) 1728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 1729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((type == XML_SCHEMAS_DATE) && 1731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((dt->type != XML_SCHEMAS_GYEAR) || 1732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (dt->type != XML_SCHEMAS_GYEARMONTH))) 1733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 1734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((type == XML_SCHEMAS_GYEARMONTH) && (dt->type != XML_SCHEMAS_GYEAR)) 1736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 1737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((type == XML_SCHEMAS_GMONTHDAY) && (dt->type != XML_SCHEMAS_GMONTH)) 1739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 1740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 1742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val != NULL) 1744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *val = dt; 1745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 1746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(dt); 1747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 0; 1749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecterror: 1751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (dt != NULL) 1752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(dt); 1753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 1; 1754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaValidateDuration: 1758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @type: the predefined type 1759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @duration: string to analyze 1760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @val: the return computed value 1761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check that @duration conforms to the lexical space of the duration type. 1763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * if true a value is computed and returned in @val. 1764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 if this validates, a positive error code number otherwise 1766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * and -1 in case of internal or API error. 1767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 1769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaValidateDuration (xmlSchemaTypePtr type ATTRIBUTE_UNUSED, 1770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *duration, xmlSchemaValPtr *val, 1771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int collapse) { 1772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *cur = duration; 1773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr dur; 1774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int isneg = 0; 1775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int seq = 0; 1776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project double num; 1777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int num_type = 0; /* -1 = invalid, 0 = int, 1 = floating */ 1778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar desig[] = {'Y', 'M', 'D', 'H', 'M', 'S'}; 1779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const double multi[] = { 0.0, 0.0, 86400.0, 3600.0, 60.0, 1.0, 0.0}; 1780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (duration == NULL) 1782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -1; 1783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (collapse) 1785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while IS_WSP_BLANK_CH(*cur) cur++; 1786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur == '-') { 1788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project isneg = 1; 1789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 1790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* duration must start with 'P' (after sign) */ 1793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur++ != 'P') 1794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 1; 1795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur == 0) 1797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 1; 1798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dur = xmlSchemaNewValue(XML_SCHEMAS_DURATION); 1800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (dur == NULL) 1801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -1; 1802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (*cur != 0) { 1804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* input string should be empty or invalid date/time item */ 1806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (seq >= sizeof(desig)) 1807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 1808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* T designator must be present for time items */ 1810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur == 'T') { 1811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (seq <= 3) { 1812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project seq = 3; 1813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 1814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 1815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 1; 1816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (seq == 3) 1817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 1818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* parse the number portion of the item */ 1820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project PARSE_NUM(num, cur, num_type); 1821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((num_type == -1) || (*cur == 0)) 1823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 1824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* update duration based on item type */ 1826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (seq < sizeof(desig)) { 1827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur == desig[seq]) { 1828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* verify numeric type; only seconds can be float */ 1830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((num_type != 0) && (seq < (sizeof(desig)-1))) 1831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 1832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (seq) { 1834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case 0: 1835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dur->value.dur.mon = (long)num * 12; 1836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case 1: 1838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dur->value.dur.mon += (long)num; 1839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 1841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* convert to seconds using multiplier */ 1842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dur->value.dur.sec += num * multi[seq]; 1843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project seq++; 1844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; /* exit loop */ 1848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* no date designators found? */ 1850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((++seq == 3) || (seq == 6)) 1851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 1852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 1854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (collapse) 1855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while IS_WSP_BLANK_CH(*cur) cur++; 1856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (isneg) { 1859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dur->value.dur.mon = -dur->value.dur.mon; 1860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dur->value.dur.day = -dur->value.dur.day; 1861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dur->value.dur.sec = -dur->value.dur.sec; 1862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val != NULL) 1865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *val = dur; 1866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 1867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(dur); 1868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 0; 1870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecterror: 1872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (dur != NULL) 1873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(dur); 1874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 1; 1875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaStrip: 1879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: a value 1880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Removes the leading and ending spaces of a string 1882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the new string or NULL if no change was required. 1884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlChar * 1886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaStrip(const xmlChar *value) { 1887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *start = value, *end, *f; 1888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (value == NULL) return(NULL); 1890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*start != 0) && (IS_BLANK_CH(*start))) start++; 1891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project end = start; 1892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (*end != 0) end++; 1893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project f = end; 1894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project end--; 1895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((end > start) && (IS_BLANK_CH(*end))) end--; 1896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project end++; 1897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((start == value) && (f == end)) return(NULL); 1898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlStrndup(start, end - start)); 1899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaWhiteSpaceReplace: 1903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: a value 1904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Replaces 0xd, 0x9 and 0xa with a space. 1906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the new string or NULL if no change was required. 1908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlChar * 1910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaWhiteSpaceReplace(const xmlChar *value) { 1911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *cur = value; 1912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *ret = NULL, *mcur; 1913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (value == NULL) 1915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 1916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*cur != 0) && 1918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (((*cur) != 0xd) && ((*cur) != 0x9) && ((*cur) != 0xa))) { 1919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 1920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur == 0) 1922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 1923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlStrdup(value); 1924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* TODO FIXME: I guess gcc will bark at this. */ 1925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project mcur = (xmlChar *) (ret + (cur - value)); 1926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project do { 1927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ( ((*mcur) == 0xd) || ((*mcur) == 0x9) || ((*mcur) == 0xa) ) 1928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *mcur = ' '; 1929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project mcur++; 1930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } while (*mcur != 0); 1931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 1932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaCollapseString: 1936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: a value 1937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Removes and normalize white spaces in the string 1939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the new string or NULL if no change was required. 1941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlChar * 1943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaCollapseString(const xmlChar *value) { 1944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *start = value, *end, *f; 1945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *g; 1946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int col = 0; 1947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (value == NULL) return(NULL); 1949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*start != 0) && (IS_BLANK_CH(*start))) start++; 1950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project end = start; 1951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (*end != 0) { 1952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*end == ' ') && (IS_BLANK_CH(end[1]))) { 1953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project col = end - start; 1954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((*end == 0xa) || (*end == 0x9) || (*end == 0xd)) { 1956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project col = end - start; 1957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project end++; 1960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1961ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (col == 0) { 1962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project f = end; 1963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project end--; 1964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((end > start) && (IS_BLANK_CH(*end))) end--; 1965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project end++; 1966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((start == value) && (f == end)) return(NULL); 1967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlStrndup(start, end - start)); 1968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start = xmlStrdup(start); 1970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (start == NULL) return(NULL); 1971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project g = (xmlChar *) (start + col); 1972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project end = g; 1973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (*end != 0) { 1974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (IS_BLANK_CH(*end)) { 1975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project end++; 1976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (IS_BLANK_CH(*end)) end++; 1977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*end != 0) 1978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *g++ = ' '; 1979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 1980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *g++ = *end++; 1981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *g = 0; 1983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return((xmlChar *) start); 1984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaValAtomicListNode: 1988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @type: the predefined atomic type for a token in the list 1989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: the list value to check 1990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ret: the return computed value 1991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node: the node containing the value 1992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check that a value conforms to the lexical space of the predefined 1994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * list type. if true a value is computed and returned in @ret. 1995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of items if this validates, a negative error code 1997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * number otherwise 1998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 2000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaValAtomicListNode(xmlSchemaTypePtr type, const xmlChar *value, 2001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr *ret, xmlNodePtr node) { 2002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *val, *cur, *endval; 2003ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int nb_values = 0; 2004ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int tmp = 0; 2005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (value == NULL) { 2007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 2008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val = xmlStrdup(value); 2010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val == NULL) { 2011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 2012ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) { 2014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *ret = NULL; 2015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2016ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = val; 2017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2018ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Split the list 2019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2020ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (IS_BLANK_CH(*cur)) *cur++ = 0; 2021ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (*cur != 0) { 2022ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (IS_BLANK_CH(*cur)) { 2023ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *cur = 0; 2024ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 2025ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (IS_BLANK_CH(*cur)) *cur++ = 0; 2026ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2027ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nb_values++; 2028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 2029ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*cur != 0) && (!IS_BLANK_CH(*cur))) cur++; 2030ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2031ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2032ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nb_values == 0) { 2033ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(val); 2034ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(nb_values); 2035ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2036ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project endval = cur; 2037ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = val; 2038ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*cur == 0) && (cur != endval)) cur++; 2039ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (cur != endval) { 2040ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = xmlSchemaValPredefTypeNode(type, cur, NULL, node); 2041ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp != 0) 2042ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2043ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (*cur != 0) cur++; 2044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*cur == 0) && (cur != endval)) cur++; 2045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* TODO what return value ? c.f. bug #158628 2047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) { 2048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project TODO 2049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } */ 2050ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(val); 2051ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp == 0) 2052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(nb_values); 2053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 2054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2055ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaParseUInt: 2058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @str: pointer to the string R/W 2059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @llo: pointer to the low result 2060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @lmi: pointer to the mid result 2061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @lhi: pointer to the high result 2062ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parse an unsigned long into 3 fields. 2064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of significant digits in the number or 206660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott * -1 if overflow of the capacity and -2 if it's not a number. 2067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 2069ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaParseUInt(const xmlChar **str, unsigned long *llo, 2070ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned long *lmi, unsigned long *lhi) { 2071ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned long lo = 0, mi = 0, hi = 0; 2072ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *tmp, *cur = *str; 2073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret = 0, i = 0; 2074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 207560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (!((*cur >= '0') && (*cur <= '9'))) 207660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(-2); 207760a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 2078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (*cur == '0') { /* ignore leading zeroes */ 2079ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 2080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2081ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = cur; 2082ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*tmp != 0) && (*tmp >= '0') && (*tmp <= '9')) { 2083ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project i++;tmp++;ret++; 2084ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2085ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (i > 24) { 2086ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *str = tmp; 2087ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 2088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2089ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (i > 16) { 2090ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project hi = hi * 10 + (*cur++ - '0'); 2091ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project i--; 2092ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2093ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (i > 8) { 2094ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project mi = mi * 10 + (*cur++ - '0'); 2095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project i--; 2096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (i > 0) { 2098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project lo = lo * 10 + (*cur++ - '0'); 2099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project i--; 2100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *str = cur; 2103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *llo = lo; 2104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *lmi = mi; 2105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *lhi = hi; 2106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 2107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaValAtomicType: 2111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @type: the predefined type 2112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: the value to check 2113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @val: the return computed value 2114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node: the node containing the value 2115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * flags: flags to control the vlidation 2116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check that a value conforms to the lexical space of the atomic type. 2118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * if true a value is computed and returned in @val. 2119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This checks the value space for list types as well (IDREFS, NMTOKENS). 2120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 if this validates, a positive error code number otherwise 2122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * and -1 in case of internal or API error. 2123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 2125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaValAtomicType(xmlSchemaTypePtr type, const xmlChar * value, 2126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr * val, xmlNodePtr node, int flags, 2127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaWhitespaceValueType ws, 2128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int normOnTheFly, int applyNorm, int createStringValue) 2129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 2130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr v; 2131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *norm = NULL; 2132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret = 0; 2133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlSchemaTypesInitialized == 0) 2135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaInitTypes(); 2136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (type == NULL) 2137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-1); 2138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * validating a non existant text node is similar to validating 2141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * an empty one. 2142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (value == NULL) 2144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project value = BAD_CAST ""; 2145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val != NULL) 2147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *val = NULL; 2148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((flags == 0) && (value != NULL)) { 2149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((type->builtInType != XML_SCHEMAS_STRING) && 2151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (type->builtInType != XML_SCHEMAS_ANYTYPE) && 2152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (type->builtInType != XML_SCHEMAS_ANYSIMPLETYPE)) { 2153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (type->builtInType == XML_SCHEMAS_NORMSTRING) 2154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project norm = xmlSchemaWhiteSpaceReplace(value); 2155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 2156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project norm = xmlSchemaCollapseString(value); 2157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (norm != NULL) 2158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project value = norm; 2159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (type->builtInType) { 2163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_UNKNOWN: 2164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 2165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ANYTYPE: 2166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ANYSIMPLETYPE: 2167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((createStringValue) && (val != NULL)) { 2168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v = xmlSchemaNewValue(XML_SCHEMAS_ANYSIMPLETYPE); 2169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (v != NULL) { 2170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.str = xmlStrdup(value); 2171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *val = v; 2172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 2174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return0; 2177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_STRING: 2178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (! normOnTheFly) { 2179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *cur = value; 2180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ws == XML_SCHEMA_WHITESPACE_REPLACE) { 2182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (*cur != 0) { 2183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*cur == 0xd) || (*cur == 0xa) || (*cur == 0x9)) { 2184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 2187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE) { 2190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (*cur != 0) { 2191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*cur == 0xd) || (*cur == 0xa) || (*cur == 0x9)) { 2192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if IS_WSP_SPACE_CH(*cur) { 2194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 2195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if IS_WSP_SPACE_CH(*cur) 2196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 2199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (createStringValue && (val != NULL)) { 2204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (applyNorm) { 2205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE) 2206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project norm = xmlSchemaCollapseString(value); 2207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (ws == XML_SCHEMA_WHITESPACE_REPLACE) 2208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project norm = xmlSchemaWhiteSpaceReplace(value); 2209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (norm != NULL) 2210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project value = norm; 2211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v = xmlSchemaNewValue(XML_SCHEMAS_STRING); 2213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (v != NULL) { 2214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.str = xmlStrdup(value); 2215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *val = v; 2216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 2218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return0; 2221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NORMSTRING:{ 2222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (normOnTheFly) { 2223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (applyNorm) { 2224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE) 2225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project norm = xmlSchemaCollapseString(value); 2226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 2227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project norm = xmlSchemaWhiteSpaceReplace(value); 2228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (norm != NULL) 2229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project value = norm; 2230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *cur = value; 2233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (*cur != 0) { 2234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*cur == 0xd) || (*cur == 0xa) || (*cur == 0x9)) { 2235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 2238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val != NULL) { 2242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v = xmlSchemaNewValue(XML_SCHEMAS_NORMSTRING); 2243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (v != NULL) { 2244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.str = xmlStrdup(value); 2245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *val = v; 2246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 2248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return0; 2251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DECIMAL:{ 2253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *cur = value; 2254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int len, neg, integ, hasLeadingZeroes; 2255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar cval[25]; 2256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *cptr = cval; 2257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur == NULL) || (*cur == 0)) 2259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xs:decimal has a whitespace-facet value of 'collapse'. 2263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (normOnTheFly) 2265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while IS_WSP_BLANK_CH(*cur) cur++; 2266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * First we handle an optional sign. 2269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project neg = 0; 2271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur == '-') { 2272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project neg = 1; 2273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 2274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (*cur == '+') 2275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 2276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Disallow: "", "-", "- " 2278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur == 0) 2280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Next we "pre-parse" the number, in preparation for calling 2283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the common routine xmlSchemaParseUInt. We get rid of any 2284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * leading zeroes (because we have reserved only 25 chars), 2285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * and note the position of a decimal point. 2286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = 0; 2288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project integ = ~0u; 2289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project hasLeadingZeroes = 0; 2290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Skip leading zeroes. 2292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (*cur == '0') { 2294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 2295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project hasLeadingZeroes = 1; 2296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur != 0) { 2298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project do { 2299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*cur >= '0') && (*cur <= '9')) { 2300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *cptr++ = *cur++; 2301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len++; 2302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (*cur == '.') { 2303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 2304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project integ = len; 2305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project do { 2306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*cur >= '0') && (*cur <= '9')) { 2307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *cptr++ = *cur++; 2308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len++; 2309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 2310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } while (len < 24); 2312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Disallow "." but allow "00." 2314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((len == 0) && (!hasLeadingZeroes)) 2316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 2319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } while (len < 24); 2321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (normOnTheFly) 2323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while IS_WSP_BLANK_CH(*cur) cur++; 2324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur != 0) 2325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; /* error if any extraneous chars */ 2326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val != NULL) { 2327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v = xmlSchemaNewValue(XML_SCHEMAS_DECIMAL); 2328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (v != NULL) { 2329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Now evaluate the significant digits of the number 2331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len != 0) { 2333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (integ != ~0u) { 2335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Get rid of trailing zeroes in the 2337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * fractional part. 2338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((len != integ) && (*(cptr-1) == '0')) { 2340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cptr--; 2341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len--; 2342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Terminate the (preparsed) string. 2346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len != 0) { 234860a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott *cptr = 0; 2349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cptr = cval; 235060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott 2351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaParseUInt((const xmlChar **)&cptr, 2352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project &v->value.decimal.lo, 2353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project &v->value.decimal.mi, 2354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project &v->value.decimal.hi); 2355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Set the total digits to 1 if a zero value. 2359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.decimal.sign = neg; 2361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len == 0) { 2362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Speedup for zero values. */ 2363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.decimal.total = 1; 2364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.decimal.total = len; 2366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (integ == ~0u) 2367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.decimal.frac = 0; 2368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 2369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.decimal.frac = len - integ; 2370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *val = v; 2372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return0; 2375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_TIME: 2377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GDAY: 2378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GMONTH: 2379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GMONTHDAY: 2380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GYEAR: 2381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GYEARMONTH: 2382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DATE: 2383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DATETIME: 2384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlSchemaValidateDates(type->builtInType, value, val, 2385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project normOnTheFly); 2386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DURATION: 2388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlSchemaValidateDuration(type, value, val, 2389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project normOnTheFly); 2390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_FLOAT: 2392df143a5041f03a22808b59c76698770b74692815Selim Gurun case XML_SCHEMAS_DOUBLE: { 2393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *cur = value; 2394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int neg = 0; 2395df143a5041f03a22808b59c76698770b74692815Selim Gurun int digits_before = 0; 2396df143a5041f03a22808b59c76698770b74692815Selim Gurun int digits_after = 0; 2397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (normOnTheFly) 2399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while IS_WSP_BLANK_CH(*cur) cur++; 2400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur[0] == 'N') && (cur[1] == 'a') && (cur[2] == 'N')) { 2402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur += 3; 2403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur != 0) 2404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val != NULL) { 2406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (type == xmlSchemaTypeFloatDef) { 2407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v = xmlSchemaNewValue(XML_SCHEMAS_FLOAT); 2408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (v != NULL) { 2409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.f = (float) xmlXPathNAN; 2410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(v); 2412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 2413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v = xmlSchemaNewValue(XML_SCHEMAS_DOUBLE); 2416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (v != NULL) { 2417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.d = xmlXPathNAN; 2418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(v); 2420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 2421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *val = v; 2424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return0; 2426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur == '-') { 2428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project neg = 1; 2429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 2430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur[0] == 'I') && (cur[1] == 'N') && (cur[2] == 'F')) { 2432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur += 3; 2433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur != 0) 2434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val != NULL) { 2436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (type == xmlSchemaTypeFloatDef) { 2437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v = xmlSchemaNewValue(XML_SCHEMAS_FLOAT); 2438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (v != NULL) { 2439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (neg) 2440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.f = (float) xmlXPathNINF; 2441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 2442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.f = (float) xmlXPathPINF; 2443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(v); 2445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 2446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v = xmlSchemaNewValue(XML_SCHEMAS_DOUBLE); 2449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (v != NULL) { 2450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (neg) 2451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.d = xmlXPathNINF; 2452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 2453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.d = xmlXPathPINF; 2454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(v); 2456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 2457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *val = v; 2460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return0; 2462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((neg == 0) && (*cur == '+')) 2464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 2465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur[0] == 0) || (cur[0] == '+') || (cur[0] == '-')) 2466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*cur >= '0') && (*cur <= '9')) { 2468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 2469df143a5041f03a22808b59c76698770b74692815Selim Gurun digits_before++; 2470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur == '.') { 2472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 2473df143a5041f03a22808b59c76698770b74692815Selim Gurun while ((*cur >= '0') && (*cur <= '9')) { 2474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 2475df143a5041f03a22808b59c76698770b74692815Selim Gurun digits_after++; 2476df143a5041f03a22808b59c76698770b74692815Selim Gurun } 2477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2478df143a5041f03a22808b59c76698770b74692815Selim Gurun if ((digits_before == 0) && (digits_after == 0)) 2479df143a5041f03a22808b59c76698770b74692815Selim Gurun goto return1; 2480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*cur == 'e') || (*cur == 'E')) { 2481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 2482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*cur == '-') || (*cur == '+')) 2483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 2484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*cur >= '0') && (*cur <= '9')) 2485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 2486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (normOnTheFly) 2488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while IS_WSP_BLANK_CH(*cur) cur++; 2489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur != 0) 2491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val != NULL) { 2493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (type == xmlSchemaTypeFloatDef) { 2494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v = xmlSchemaNewValue(XML_SCHEMAS_FLOAT); 2495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (v != NULL) { 2496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TODO: sscanf seems not to give the correct 2498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * value for extremely high/low values. 2499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * E.g. "1E-149" results in zero. 2500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sscanf((const char *) value, "%f", 2502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project &(v->value.f)) == 1) { 2503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *val = v; 2504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(v); 2506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 2510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v = xmlSchemaNewValue(XML_SCHEMAS_DOUBLE); 2513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (v != NULL) { 2514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TODO: sscanf seems not to give the correct 2516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * value for extremely high/low values. 2517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sscanf((const char *) value, "%lf", 2519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project &(v->value.d)) == 1) { 2520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *val = v; 2521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(v); 2523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 2527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return0; 2531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_BOOLEAN:{ 2533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *cur = value; 2534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (normOnTheFly) { 2536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while IS_WSP_BLANK_CH(*cur) cur++; 2537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur == '0') { 2538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 0; 2539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 2540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (*cur == '1') { 2541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 1; 2542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 2543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (*cur == 't') { 2544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 2545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*cur++ == 'r') && (*cur++ == 'u') && 2546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (*cur++ == 'e')) { 2547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 1; 2548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 2549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (*cur == 'f') { 2551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 2552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*cur++ == 'a') && (*cur++ == 'l') && 2553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (*cur++ == 's') && (*cur++ == 'e')) { 2554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 0; 2555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 2556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 2558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur != 0) { 2560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while IS_WSP_BLANK_CH(*cur) cur++; 2561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur != 0) 2562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur[0] == '0') && (cur[1] == 0)) 2566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 0; 2567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if ((cur[0] == '1') && (cur[1] == 0)) 2568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 1; 2569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if ((cur[0] == 't') && (cur[1] == 'r') 2570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project && (cur[2] == 'u') && (cur[3] == 'e') 2571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project && (cur[4] == 0)) 2572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 1; 2573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if ((cur[0] == 'f') && (cur[1] == 'a') 2574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project && (cur[2] == 'l') && (cur[3] == 's') 2575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project && (cur[4] == 'e') && (cur[5] == 0)) 2576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 0; 2577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 2578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val != NULL) { 2581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v = xmlSchemaNewValue(XML_SCHEMAS_BOOLEAN); 2582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (v != NULL) { 2583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.b = ret; 2584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *val = v; 2585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 2587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return0; 2590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_TOKEN:{ 2592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *cur = value; 2593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (! normOnTheFly) { 2595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (*cur != 0) { 2596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*cur == 0xd) || (*cur == 0xa) || (*cur == 0x9)) { 2597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (*cur == ' ') { 2599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 2600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur == 0) 2601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur == ' ') 2603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 2606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val != NULL) { 2610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v = xmlSchemaNewValue(XML_SCHEMAS_TOKEN); 2611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (v != NULL) { 2612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.str = xmlStrdup(value); 2613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *val = v; 2614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 2616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return0; 2619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_LANGUAGE: 2621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (normOnTheFly) { 2622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project norm = xmlSchemaCollapseString(value); 2623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (norm != NULL) 2624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project value = norm; 2625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlCheckLanguageID(value) == 1) { 2627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val != NULL) { 2628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v = xmlSchemaNewValue(XML_SCHEMAS_LANGUAGE); 2629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (v != NULL) { 2630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.str = xmlStrdup(value); 2631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *val = v; 2632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 2634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return0; 2637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NMTOKEN: 2640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlValidateNMToken(value, 1) == 0) { 2641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val != NULL) { 2642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v = xmlSchemaNewValue(XML_SCHEMAS_NMTOKEN); 2643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (v != NULL) { 2644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.str = xmlStrdup(value); 2645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *val = v; 2646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 2648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return0; 2651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NMTOKENS: 2654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlSchemaValAtomicListNode(xmlSchemaTypeNmtokenDef, 2655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project value, val, node); 2656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret > 0) 2657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 0; 2658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 2659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 1; 2660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 2661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NAME: 2662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlValidateName(value, 1); 2663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret == 0) && (val != NULL) && (value != NULL)) { 2664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v = xmlSchemaNewValue(XML_SCHEMAS_NAME); 2665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (v != NULL) { 2666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *start = value, *end; 2667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (IS_BLANK_CH(*start)) start++; 2668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project end = start; 2669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*end != 0) && (!IS_BLANK_CH(*end))) end++; 2670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.str = xmlStrndup(start, end - start); 2671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *val = v; 2672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 2674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 2677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_QNAME:{ 2678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *uri = NULL; 2679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *local = NULL; 2680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlValidateQName(value, 1); 2682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != 0) 2683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 2684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (node != NULL) { 2685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *prefix; 2686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNsPtr ns; 2687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project local = xmlSplitQName2(value, &prefix); 2689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ns = xmlSearchNs(node->doc, node, prefix); 2690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ns == NULL) && (prefix != NULL)) { 2691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(prefix); 2692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (local != NULL) 2693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(local); 2694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ns != NULL) 2697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project uri = ns->href; 2698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (prefix != NULL) 2699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(prefix); 2700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val != NULL) { 2702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v = xmlSchemaNewValue(XML_SCHEMAS_QNAME); 2703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (v == NULL) { 2704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (local != NULL) 2705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(local); 2706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 2707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (local != NULL) 2709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.qname.name = local; 2710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 2711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.qname.name = xmlStrdup(value); 2712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (uri != NULL) 2713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.qname.uri = xmlStrdup(uri); 2714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *val = v; 2715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 2716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (local != NULL) 2717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(local); 2718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 2719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NCNAME: 2721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlValidateNCName(value, 1); 2722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret == 0) && (val != NULL)) { 2723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v = xmlSchemaNewValue(XML_SCHEMAS_NCNAME); 2724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (v != NULL) { 2725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.str = xmlStrdup(value); 2726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *val = v; 2727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 2729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 2732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ID: 2733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlValidateNCName(value, 1); 2734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret == 0) && (val != NULL)) { 2735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v = xmlSchemaNewValue(XML_SCHEMAS_ID); 2736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (v != NULL) { 2737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.str = xmlStrdup(value); 2738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *val = v; 2739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 2741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret == 0) && (node != NULL) && 2744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (node->type == XML_ATTRIBUTE_NODE)) { 2745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlAttrPtr attr = (xmlAttrPtr) node; 2746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * NOTE: the IDness might have already be declared in the DTD 2749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (attr->atype != XML_ATTRIBUTE_ID) { 2751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlIDPtr res; 2752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *strip; 2753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project strip = xmlSchemaStrip(value); 2755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (strip != NULL) { 2756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project res = xmlAddID(NULL, node->doc, strip, attr); 2757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(strip); 2758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 2759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project res = xmlAddID(NULL, node->doc, value, attr); 2760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (res == NULL) { 2761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 2; 2762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project attr->atype = XML_ATTRIBUTE_ID; 2764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 2768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_IDREF: 2769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlValidateNCName(value, 1); 2770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret == 0) && (val != NULL)) { 2771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v = xmlSchemaNewValue(XML_SCHEMAS_IDREF); 2772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (v == NULL) 2773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 2774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.str = xmlStrdup(value); 2775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *val = v; 2776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret == 0) && (node != NULL) && 2778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (node->type == XML_ATTRIBUTE_NODE)) { 2779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlAttrPtr attr = (xmlAttrPtr) node; 2780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *strip; 2781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project strip = xmlSchemaStrip(value); 2783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (strip != NULL) { 2784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlAddRef(NULL, node->doc, strip, attr); 2785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(strip); 2786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 2787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlAddRef(NULL, node->doc, value, attr); 2788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project attr->atype = XML_ATTRIBUTE_IDREF; 2789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 2791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_IDREFS: 2792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlSchemaValAtomicListNode(xmlSchemaTypeIdrefDef, 2793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project value, val, node); 2794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret < 0) 2795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 2; 2796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 2797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 0; 2798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret == 0) && (node != NULL) && 2799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (node->type == XML_ATTRIBUTE_NODE)) { 2800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlAttrPtr attr = (xmlAttrPtr) node; 2801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project attr->atype = XML_ATTRIBUTE_IDREFS; 2803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 2805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ENTITY:{ 2806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *strip; 2807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlValidateNCName(value, 1); 2809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((node == NULL) || (node->doc == NULL)) 2810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 3; 2811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == 0) { 2812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlEntityPtr ent; 2813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project strip = xmlSchemaStrip(value); 2815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (strip != NULL) { 2816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ent = xmlGetDocEntity(node->doc, strip); 2817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(strip); 2818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ent = xmlGetDocEntity(node->doc, value); 2820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ent == NULL) || 2822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ent->etype != 2823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_EXTERNAL_GENERAL_UNPARSED_ENTITY)) 2824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 4; 2825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret == 0) && (val != NULL)) { 2827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project TODO; 2828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret == 0) && (node != NULL) && 2830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (node->type == XML_ATTRIBUTE_NODE)) { 2831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlAttrPtr attr = (xmlAttrPtr) node; 2832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project attr->atype = XML_ATTRIBUTE_ENTITY; 2834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 2836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ENTITIES: 2838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((node == NULL) || (node->doc == NULL)) 2839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return3; 2840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlSchemaValAtomicListNode(xmlSchemaTypeEntityDef, 2841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project value, val, node); 2842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret <= 0) 2843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 1; 2844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 2845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 0; 2846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret == 0) && (node != NULL) && 2847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (node->type == XML_ATTRIBUTE_NODE)) { 2848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlAttrPtr attr = (xmlAttrPtr) node; 2849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project attr->atype = XML_ATTRIBUTE_ENTITIES; 2851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 2853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NOTATION:{ 2854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *uri = NULL; 2855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *local = NULL; 2856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlValidateQName(value, 1); 2858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret == 0) && (node != NULL)) { 2859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *prefix; 2860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project local = xmlSplitQName2(value, &prefix); 2862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (prefix != NULL) { 2863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNsPtr ns; 2864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ns = xmlSearchNs(node->doc, node, prefix); 2866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ns == NULL) 2867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 1; 2868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (val != NULL) 2869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project uri = xmlStrdup(ns->href); 2870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((local != NULL) && ((val == NULL) || (ret != 0))) 2872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(local); 2873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (prefix != NULL) 2874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(prefix); 2875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((node == NULL) || (node->doc == NULL)) 2877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 3; 2878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == 0) { 2879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlValidateNotationUse(NULL, node->doc, value); 2880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == 1) 2881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 0; 2882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 2883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 1; 2884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret == 0) && (val != NULL)) { 2886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v = xmlSchemaNewValue(XML_SCHEMAS_NOTATION); 2887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (v != NULL) { 2888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (local != NULL) 2889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.qname.name = local; 2890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 2891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.qname.name = xmlStrdup(value); 2892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (uri != NULL) 2893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.qname.uri = uri; 2894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *val = v; 2896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (local != NULL) 2898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(local); 2899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (uri != NULL) 2900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(uri); 2901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 2902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto done; 2905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ANYURI:{ 2907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*value != 0) { 2908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlURIPtr uri; 2909df143a5041f03a22808b59c76698770b74692815Selim Gurun xmlChar *tmpval, *cur; 2910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (normOnTheFly) { 2911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project norm = xmlSchemaCollapseString(value); 2912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (norm != NULL) 2913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project value = norm; 2914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2915df143a5041f03a22808b59c76698770b74692815Selim Gurun tmpval = xmlStrdup(value); 2916df143a5041f03a22808b59c76698770b74692815Selim Gurun for (cur = tmpval; *cur; ++cur) { 2917df143a5041f03a22808b59c76698770b74692815Selim Gurun if (*cur < 32 || *cur >= 127 || *cur == ' ' || 2918df143a5041f03a22808b59c76698770b74692815Selim Gurun *cur == '<' || *cur == '>' || *cur == '"' || 2919df143a5041f03a22808b59c76698770b74692815Selim Gurun *cur == '{' || *cur == '}' || *cur == '|' || 2920df143a5041f03a22808b59c76698770b74692815Selim Gurun *cur == '\\' || *cur == '^' || *cur == '`' || 2921df143a5041f03a22808b59c76698770b74692815Selim Gurun *cur == '\'') 2922df143a5041f03a22808b59c76698770b74692815Selim Gurun *cur = '_'; 2923df143a5041f03a22808b59c76698770b74692815Selim Gurun } 2924df143a5041f03a22808b59c76698770b74692815Selim Gurun uri = xmlParseURI((const char *) tmpval); 2925df143a5041f03a22808b59c76698770b74692815Selim Gurun xmlFree(tmpval); 2926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (uri == NULL) 2927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeURI(uri); 2929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val != NULL) { 2932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v = xmlSchemaNewValue(XML_SCHEMAS_ANYURI); 2933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (v == NULL) 2934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 2935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.str = xmlStrdup(value); 2936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *val = v; 2937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return0; 2939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_HEXBINARY:{ 2941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *cur = value, *start; 2942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *base; 2943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int total, i = 0; 2944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == NULL) 2946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (normOnTheFly) 2949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while IS_WSP_BLANK_CH(*cur) cur++; 2950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project start = cur; 2952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (((*cur >= '0') && (*cur <= '9')) || 2953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((*cur >= 'A') && (*cur <= 'F')) || 2954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((*cur >= 'a') && (*cur <= 'f'))) { 2955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project i++; 2956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 2957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (normOnTheFly) 2959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while IS_WSP_BLANK_CH(*cur) cur++; 2960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2961ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur != 0) 2962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((i % 2) != 0) 2964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val != NULL) { 2967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v = xmlSchemaNewValue(XML_SCHEMAS_HEXBINARY); 2969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (v == NULL) 2970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 2971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Copy only the normalized piece. 2973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * CRITICAL TODO: Check this. 2974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = xmlStrndup(start, i); 2976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == NULL) { 2977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeErrMemory(node, "allocating hexbin data"); 2978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(v); 2979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 2980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project total = i / 2; /* number of octets */ 2983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project base = (xmlChar *) cur; 2985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (i-- > 0) { 2986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*base >= 'a') 2987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *base = *base - ('a' - 'A'); 2988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project base++; 2989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.hex.str = (xmlChar *) cur; 2992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.hex.total = total; 2993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *val = v; 2994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return0; 2996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_BASE64BINARY:{ 2998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* ISSUE: 2999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Ignore all stray characters? (yes, currently) 3001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Worry about long lines? (no, currently) 3002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3003ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * rfc2045.txt: 3004ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * "The encoded output stream must be represented in lines of 3006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * no more than 76 characters each. All line breaks or other 3007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * characters not found in Table 1 must be ignored by decoding 3008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * software. In base64 data, characters other than those in 3009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Table 1, line breaks, and other white space probably 3010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * indicate a transmission error, about which a warning 3011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * message or even a message rejection might be appropriate 3012ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * under some circumstances." */ 3013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *cur = value; 3014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *base; 3015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int total, i = 0, pad = 0; 3016ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == NULL) 3018ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3020ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (; *cur; ++cur) { 3021ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int decc; 3022ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3023ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project decc = _xmlSchemaBase64Decode(*cur); 3024ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (decc < 0) ; 3025ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (decc < 64) 3026ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project i++; 3027ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 3028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 3029ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3030ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (; *cur; ++cur) { 3031ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int decc; 3032ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3033ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project decc = _xmlSchemaBase64Decode(*cur); 3034ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (decc < 0) ; 3035ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (decc < 64) 3036ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3037ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (decc == 64) 3038ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project pad++; 3039ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3040ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3041ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* rfc2045.txt: "Special processing is performed if fewer than 3042ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 24 bits are available at the end of the data being encoded. 3043ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * A full encoding quantum is always completed at the end of a 3044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * body. When fewer than 24 input bits are available in an 3045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * input group, zero bits are added (on the right) to form an 3046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * integral number of 6-bit groups. Padding at the end of the 3047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * data is performed using the "=" character. Since all 3048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * base64 input is an integral number of octets, only the 3049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * following cases can arise: (1) the final quantum of 3050ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * encoding input is an integral multiple of 24 bits; here, 3051ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the final unit of encoded output will be an integral 3052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * multiple ofindent: Standard input:701: Warning:old style 3053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * assignment ambiguity in "=*". Assuming "= *" 4 characters 3054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * with no "=" padding, (2) the final 3055ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * quantum of encoding input is exactly 8 bits; here, the 3056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * final unit of encoded output will be two characters 3057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * followed by two "=" padding characters, or (3) the final 3058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * quantum of encoding input is exactly 16 bits; here, the 3059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * final unit of encoded output will be three characters 3060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * followed by one "=" padding character." */ 3061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3062ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project total = 3 * (i / 4); 3063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (pad == 0) { 3064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (i % 4 != 0) 3065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3066ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (pad == 1) { 3067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int decc; 3068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3069ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (i % 4 != 3) 3070ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3071ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (decc = _xmlSchemaBase64Decode(*cur); 3072ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (decc < 0) || (decc > 63); 3073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project decc = _xmlSchemaBase64Decode(*cur)) 3074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project --cur; 3075ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 16bits in 24bits means 2 pad bits: nnnnnn nnmmmm mmmm00*/ 3076ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 00111100 -> 0x3c */ 3077ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (decc & ~0x3c) 3078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3079ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project total += 2; 3080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (pad == 2) { 3081ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int decc; 3082ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3083ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (i % 4 != 2) 3084ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3085ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (decc = _xmlSchemaBase64Decode(*cur); 3086ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (decc < 0) || (decc > 63); 3087ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project decc = _xmlSchemaBase64Decode(*cur)) 3088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project --cur; 3089ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 8bits in 12bits means 4 pad bits: nnnnnn nn0000 */ 3090ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 00110000 -> 0x30 */ 3091ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (decc & ~0x30) 3092ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3093ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project total += 1; 3094ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 3095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val != NULL) { 3098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v = xmlSchemaNewValue(XML_SCHEMAS_BASE64BINARY); 3099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (v == NULL) 3100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto error; 3101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project base = 3102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlChar *) xmlMallocAtomic((i + pad + 1) * 3103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project sizeof(xmlChar)); 3104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (base == NULL) { 3105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeErrMemory(node, "allocating base64 data"); 3106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(v); 3107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.base64.str = base; 3110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (cur = value; *cur; ++cur) 3111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (_xmlSchemaBase64Decode(*cur) >= 0) { 3112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *base = *cur; 3113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ++base; 3114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *base = 0; 3116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.base64.total = total; 3117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *val = v; 3118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return0; 3120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_INTEGER: 3122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_PINTEGER: 3123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NPINTEGER: 3124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NINTEGER: 3125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NNINTEGER:{ 3126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *cur = value; 3127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned long lo, mi, hi; 3128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int sign = 0; 3129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == NULL) 3131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (normOnTheFly) 3133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while IS_WSP_BLANK_CH(*cur) cur++; 3134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur == '-') { 3135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project sign = 1; 3136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 3137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (*cur == '+') 3138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 3139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlSchemaParseUInt(&cur, &lo, &mi, &hi); 314060a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ret < 0) 3141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (normOnTheFly) 3143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while IS_WSP_BLANK_CH(*cur) cur++; 3144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur != 0) 3145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (type->builtInType == XML_SCHEMAS_NPINTEGER) { 3147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((sign == 0) && 3148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((hi != 0) || (mi != 0) || (lo != 0))) 3149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (type->builtInType == XML_SCHEMAS_PINTEGER) { 3151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sign == 1) 3152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((hi == 0) && (mi == 0) && (lo == 0)) 3154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (type->builtInType == XML_SCHEMAS_NINTEGER) { 3156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sign == 0) 3157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((hi == 0) && (mi == 0) && (lo == 0)) 3159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (type->builtInType == XML_SCHEMAS_NNINTEGER) { 3161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((sign == 1) && 3162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((hi != 0) || (mi != 0) || (lo != 0))) 3163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val != NULL) { 3166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v = xmlSchemaNewValue(type->builtInType); 3167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (v != NULL) { 3168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == 0) 3169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret++; 3170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.decimal.lo = lo; 3171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.decimal.mi = mi; 3172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.decimal.hi = hi; 3173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.decimal.sign = sign; 3174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.decimal.frac = 0; 3175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.decimal.total = ret; 3176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *val = v; 3177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return0; 3180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_LONG: 3182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_BYTE: 3183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_SHORT: 3184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_INT:{ 318560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott const xmlChar *cur = value; 3186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned long lo, mi, hi; 3187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int sign = 0; 3188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == NULL) 3190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur == '-') { 3192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project sign = 1; 3193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 3194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (*cur == '+') 3195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 3196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlSchemaParseUInt(&cur, &lo, &mi, &hi); 3197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret < 0) 3198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur != 0) 3200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (type->builtInType == XML_SCHEMAS_LONG) { 3202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (hi >= 922) { 3203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (hi > 922) 3204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (mi >= 33720368) { 3206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (mi > 33720368) 3207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((sign == 0) && (lo > 54775807)) 3209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((sign == 1) && (lo > 54775808)) 3211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (type->builtInType == XML_SCHEMAS_INT) { 3215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (hi != 0) 3216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (mi >= 21) { 3218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (mi > 21) 3219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((sign == 0) && (lo > 47483647)) 3221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((sign == 1) && (lo > 47483648)) 3223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (type->builtInType == XML_SCHEMAS_SHORT) { 3226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((mi != 0) || (hi != 0)) 3227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((sign == 1) && (lo > 32768)) 3229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((sign == 0) && (lo > 32767)) 3231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (type->builtInType == XML_SCHEMAS_BYTE) { 3233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((mi != 0) || (hi != 0)) 3234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((sign == 1) && (lo > 128)) 3236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((sign == 0) && (lo > 127)) 3238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val != NULL) { 3241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v = xmlSchemaNewValue(type->builtInType); 3242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (v != NULL) { 3243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.decimal.lo = lo; 3244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.decimal.mi = mi; 3245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.decimal.hi = hi; 3246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.decimal.sign = sign; 3247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.decimal.frac = 0; 3248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.decimal.total = ret; 3249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *val = v; 3250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return0; 3253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_UINT: 3255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ULONG: 3256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_USHORT: 3257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_UBYTE:{ 3258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *cur = value; 3259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned long lo, mi, hi; 3260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == NULL) 3262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlSchemaParseUInt(&cur, &lo, &mi, &hi); 3264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret < 0) 3265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur != 0) 3267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (type->builtInType == XML_SCHEMAS_ULONG) { 3269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (hi >= 1844) { 3270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (hi > 1844) 3271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (mi >= 67440737) { 3273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (mi > 67440737) 3274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (lo > 9551615) 3276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (type->builtInType == XML_SCHEMAS_UINT) { 3280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (hi != 0) 3281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (mi >= 42) { 3283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (mi > 42) 3284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (lo > 94967295) 3286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (type->builtInType == XML_SCHEMAS_USHORT) { 3289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((mi != 0) || (hi != 0)) 3290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (lo > 65535) 3292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (type->builtInType == XML_SCHEMAS_UBYTE) { 3294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((mi != 0) || (hi != 0)) 3295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (lo > 255) 3297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return1; 3298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val != NULL) { 3300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v = xmlSchemaNewValue(type->builtInType); 3301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (v != NULL) { 3302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.decimal.lo = lo; 3303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.decimal.mi = mi; 3304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.decimal.hi = hi; 3305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.decimal.sign = 0; 3306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.decimal.frac = 0; 3307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project v->value.decimal.total = ret; 3308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *val = v; 3309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project goto return0; 3312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project done: 3316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (norm != NULL) 3317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(norm); 3318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (ret); 3319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return3: 3320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (norm != NULL) 3321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(norm); 3322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (3); 3323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return1: 3324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (norm != NULL) 3325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(norm); 3326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (1); 3327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return0: 3328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (norm != NULL) 3329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(norm); 3330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (0); 3331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project error: 3332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (norm != NULL) 3333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(norm); 3334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-1); 3335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaValPredefTypeNode: 3339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @type: the predefined type 3340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: the value to check 3341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @val: the return computed value 3342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node: the node containing the value 3343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check that a value conforms to the lexical space of the predefined type. 3345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * if true a value is computed and returned in @val. 3346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 if this validates, a positive error code number otherwise 3348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * and -1 in case of internal or API error. 3349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 3351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaValPredefTypeNode(xmlSchemaTypePtr type, const xmlChar *value, 3352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr *val, xmlNodePtr node) { 3353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlSchemaValAtomicType(type, value, val, node, 0, 3354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMA_WHITESPACE_UNKNOWN, 1, 1, 0)); 3355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaValPredefTypeNodeNoNorm: 3359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @type: the predefined type 3360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: the value to check 3361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @val: the return computed value 3362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node: the node containing the value 3363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check that a value conforms to the lexical space of the predefined type. 3365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * if true a value is computed and returned in @val. 3366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This one does apply any normalization to the value. 3367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 if this validates, a positive error code number otherwise 3369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * and -1 in case of internal or API error. 3370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 3372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaValPredefTypeNodeNoNorm(xmlSchemaTypePtr type, const xmlChar *value, 3373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr *val, xmlNodePtr node) { 3374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlSchemaValAtomicType(type, value, val, node, 1, 3375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMA_WHITESPACE_UNKNOWN, 1, 0, 1)); 3376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaValidatePredefinedType: 3380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @type: the predefined type 3381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: the value to check 3382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @val: the return computed value 3383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check that a value conforms to the lexical space of the predefined type. 3385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * if true a value is computed and returned in @val. 3386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 if this validates, a positive error code number otherwise 3388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * and -1 in case of internal or API error. 3389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 3391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaValidatePredefinedType(xmlSchemaTypePtr type, const xmlChar *value, 3392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr *val) { 3393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlSchemaValPredefTypeNode(type, value, val, NULL)); 3394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaCompareDecimals: 3398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @x: a first decimal value 3399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @y: a second decimal value 3400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Compare 2 decimals 3402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns -1 if x < y, 0 if x == y, 1 if x > y and -2 in case of error 3404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 3406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaCompareDecimals(xmlSchemaValPtr x, xmlSchemaValPtr y) 3407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 3408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr swp; 3409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int order = 1, integx, integy, dlen; 3410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned long hi, mi, lo; 3411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * First test: If x is -ve and not zero 3414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((x->value.decimal.sign) && 3416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((x->value.decimal.lo != 0) || 3417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (x->value.decimal.mi != 0) || 3418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (x->value.decimal.hi != 0))) { 3419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Then if y is -ve and not zero reverse the compare 3421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((y->value.decimal.sign) && 3423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((y->value.decimal.lo != 0) || 3424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (y->value.decimal.mi != 0) || 3425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (y->value.decimal.hi != 0))) 3426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project order = -1; 3427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Otherwise (y >= 0) we have the answer 3429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 3431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-1); 3432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * If x is not -ve and y is -ve we have the answer 3434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((y->value.decimal.sign) && 3436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((y->value.decimal.lo != 0) || 3437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (y->value.decimal.mi != 0) || 3438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (y->value.decimal.hi != 0))) { 3439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (1); 3440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * If it's not simply determined by a difference in sign, 3443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * then we need to compare the actual values of the two nums. 3444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * To do this, we start by looking at the integral parts. 3445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * If the number of integral digits differ, then we have our 3446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * answer. 3447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project integx = x->value.decimal.total - x->value.decimal.frac; 3449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project integy = y->value.decimal.total - y->value.decimal.frac; 3450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * NOTE: We changed the "total" for values like "0.1" 3452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * (or "-0.1" or ".1") to be 1, which was 2 previously. 3453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Therefore the special case, when such values are 3454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * compared with 0, needs to be handled separately; 3455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * otherwise a zero would be recognized incorrectly as 3456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * greater than those values. This has the nice side effect 3457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * that we gain an overall optimized comparison with zeroes. 3458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Note that a "0" has a "total" of 1 already. 3459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (integx == 1) { 3461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (x->value.decimal.lo == 0) { 3462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (integy != 1) 3463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -order; 3464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (y->value.decimal.lo != 0) 3465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -order; 3466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 3467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 3468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (integy == 1) { 3471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (y->value.decimal.lo == 0) { 3472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (integx != 1) 3473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return order; 3474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (x->value.decimal.lo != 0) 3475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return order; 3476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 3477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 3478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (integx > integy) 3482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return order; 3483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (integy > integx) 3484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -order; 3485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * If the number of integral digits is the same for both numbers, 3488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * then things get a little more complicated. We need to "normalize" 3489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the numbers in order to properly compare them. To do this, we 3490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * look at the total length of each number (length => number of 3491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * significant digits), and divide the "shorter" by 10 (decreasing 3492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the length) until they are of equal length. 3493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dlen = x->value.decimal.total - y->value.decimal.total; 3495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (dlen < 0) { /* y has more digits than x */ 3496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project swp = x; 3497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project hi = y->value.decimal.hi; 3498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project mi = y->value.decimal.mi; 3499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project lo = y->value.decimal.lo; 3500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dlen = -dlen; 3501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project order = -order; 3502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { /* x has more digits than y */ 3503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project swp = y; 3504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project hi = x->value.decimal.hi; 3505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project mi = x->value.decimal.mi; 3506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project lo = x->value.decimal.lo; 3507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (dlen > 8) { /* in effect, right shift by 10**8 */ 3509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project lo = mi; 3510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project mi = hi; 3511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project hi = 0; 3512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dlen -= 8; 3513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (dlen > 0) { 3515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned long rem1, rem2; 3516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project rem1 = (hi % 10) * 100000000L; 3517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project hi = hi / 10; 3518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project rem2 = (mi % 10) * 100000000L; 3519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project mi = (mi + rem1) / 10; 3520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project lo = (lo + rem2) / 10; 3521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dlen--; 3522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (hi > swp->value.decimal.hi) { 3524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return order; 3525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (hi == swp->value.decimal.hi) { 3526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (mi > swp->value.decimal.mi) { 3527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return order; 3528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (mi == swp->value.decimal.mi) { 3529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (lo > swp->value.decimal.lo) { 3530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return order; 3531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (lo == swp->value.decimal.lo) { 3532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (x->value.decimal.total == y->value.decimal.total) { 3533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 0; 3534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 3535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return order; 3536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -order; 3541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaCompareDurations: 3545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @x: a first duration value 3546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @y: a second duration value 3547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Compare 2 durations 3549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns -1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, and -2 in 3551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * case of error 3552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 3554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaCompareDurations(xmlSchemaValPtr x, xmlSchemaValPtr y) 3555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 3556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project long carry, mon, day; 3557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project double sec; 3558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int invert = 1; 3559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project long xmon, xday, myear, minday, maxday; 3560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project static const long dayRange [2][12] = { 3561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project { 0, 28, 59, 89, 120, 150, 181, 212, 242, 273, 303, 334, }, 3562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project { 0, 31, 62, 92, 123, 153, 184, 215, 245, 276, 306, 337} }; 3563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((x == NULL) || (y == NULL)) 3565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -2; 3566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* months */ 3568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project mon = x->value.dur.mon - y->value.dur.mon; 3569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* seconds */ 3571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project sec = x->value.dur.sec - y->value.dur.sec; 3572df143a5041f03a22808b59c76698770b74692815Selim Gurun carry = (long)(sec / SECS_PER_DAY); 3573df143a5041f03a22808b59c76698770b74692815Selim Gurun sec -= ((double)carry) * SECS_PER_DAY; 3574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* days */ 3576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project day = x->value.dur.day - y->value.dur.day + carry; 3577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* easy test */ 3579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (mon == 0) { 3580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (day == 0) 3581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sec == 0.0) 3582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 0; 3583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (sec < 0.0) 3584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -1; 3585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 3586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 1; 3587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (day < 0) 3588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -1; 3589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 3590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 1; 3591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (mon > 0) { 3594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((day >= 0) && (sec >= 0.0)) 3595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 1; 3596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 3597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmon = mon; 3598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xday = -day; 3599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((day <= 0) && (sec <= 0.0)) { 3601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -1; 3602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 3603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project invert = -1; 3604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmon = -mon; 3605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xday = day; 3606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project myear = xmon / 12; 3609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (myear == 0) { 3610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project minday = 0; 3611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project maxday = 0; 3612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 3613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project maxday = 366 * ((myear + 3) / 4) + 3614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 365 * ((myear - 1) % 4); 3615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project minday = maxday - 1; 3616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmon = xmon % 12; 3619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project minday += dayRange[0][xmon]; 3620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project maxday += dayRange[1][xmon]; 3621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((maxday == minday) && (maxday == xday)) 3623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); /* can this really happen ? */ 3624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (maxday < xday) 3625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-invert); 3626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (minday > xday) 3627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(invert); 3628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* indeterminate */ 3630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 2; 3631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* 3634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * macros for adding date/times and durations 3635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define FQUOTIENT(a,b) (floor(((double)a/(double)b))) 3637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define MODULO(a,b) (a - FQUOTIENT(a,b) * b) 3638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define FQUOTIENT_RANGE(a,low,high) (FQUOTIENT((a-low),(high-low))) 3639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define MODULO_RANGE(a,low,high) ((MODULO((a-low),(high-low)))+low) 3640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaDupVal: 3643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @v: the #xmlSchemaValPtr value to duplicate 3644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Makes a copy of @v. The calling program is responsible for freeing 3646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the returned value. 3647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * returns a pointer to a duplicated #xmlSchemaValPtr or NULL if error. 3649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaValPtr 3651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaDupVal (xmlSchemaValPtr v) 3652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 3653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr ret = xmlSchemaNewValue(v->type); 3654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == NULL) 3655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return NULL; 3656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memcpy(ret, v, sizeof(xmlSchemaVal)); 3658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->next = NULL; 3659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ret; 3660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaCopyValue: 3664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @val: the precomputed value to be copied 3665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Copies the precomputed value. This duplicates any string within. 3667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the copy or NULL if a copy for a data-type is not implemented. 3669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaValPtr 3671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaCopyValue(xmlSchemaValPtr val) 3672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 3673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr ret = NULL, prev = NULL, cur; 3674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Copy the string values. 3677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (val != NULL) { 3679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (val->type) { 3680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ANYTYPE: 3681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_IDREFS: 3682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ENTITIES: 3683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NMTOKENS: 3684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(ret); 3685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 3686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ANYSIMPLETYPE: 3687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_STRING: 3688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NORMSTRING: 3689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_TOKEN: 3690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_LANGUAGE: 3691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NAME: 3692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NCNAME: 3693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ID: 3694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_IDREF: 3695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ENTITY: 3696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NMTOKEN: 3697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ANYURI: 3698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = xmlSchemaDupVal(val); 3699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val->value.str != NULL) 3700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->value.str = xmlStrdup(BAD_CAST val->value.str); 3701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 3702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_QNAME: 3703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NOTATION: 3704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = xmlSchemaDupVal(val); 3705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val->value.qname.name != NULL) 3706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->value.qname.name = 3707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlStrdup(BAD_CAST val->value.qname.name); 3708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val->value.qname.uri != NULL) 3709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->value.qname.uri = 3710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlStrdup(BAD_CAST val->value.qname.uri); 3711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 3712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_HEXBINARY: 3713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = xmlSchemaDupVal(val); 3714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val->value.hex.str != NULL) 3715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->value.hex.str = xmlStrdup(BAD_CAST val->value.hex.str); 3716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 3717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_BASE64BINARY: 3718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = xmlSchemaDupVal(val); 3719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val->value.base64.str != NULL) 3720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->value.base64.str = 3721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlStrdup(BAD_CAST val->value.base64.str); 3722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 3723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 3724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = xmlSchemaDupVal(val); 3725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 3726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == NULL) 3728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = cur; 3729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 3730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project prev->next = cur; 3731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project prev = cur; 3732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val = val->next; 3733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (ret); 3735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * _xmlSchemaDateAdd: 3739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @dt: an #xmlSchemaValPtr 3740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @dur: an #xmlSchemaValPtr of type #XS_DURATION 3741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Compute a new date/time from @dt and @dur. This function assumes @dt 3743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * is either #XML_SCHEMAS_DATETIME, #XML_SCHEMAS_DATE, #XML_SCHEMAS_GYEARMONTH, 3744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * or #XML_SCHEMAS_GYEAR. The returned #xmlSchemaVal is the same type as 3745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @dt. The calling program is responsible for freeing the returned value. 3746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns a pointer to a new #xmlSchemaVal or NULL if error. 3748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaValPtr 3750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project_xmlSchemaDateAdd (xmlSchemaValPtr dt, xmlSchemaValPtr dur) 3751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 3752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr ret, tmp; 3753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project long carry, tempdays, temp; 3754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValDatePtr r, d; 3755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValDurationPtr u; 3756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((dt == NULL) || (dur == NULL)) 3758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return NULL; 3759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlSchemaNewValue(dt->type); 3761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == NULL) 3762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return NULL; 3763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* make a copy so we don't alter the original value */ 3765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = xmlSchemaDupVal(dt); 3766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp == NULL) { 3767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(ret); 3768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return NULL; 3769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project r = &(ret->value.date); 3772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project d = &(tmp->value.date); 3773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project u = &(dur->value.dur); 3774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* normalization */ 3776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (d->mon == 0) 3777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project d->mon = 1; 3778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* normalize for time zone offset */ 3780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project u->sec -= (d->tzo * 60); 3781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project d->tzo = 0; 3782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* normalization */ 3784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (d->day == 0) 3785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project d->day = 1; 3786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* month */ 3788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project carry = d->mon + u->mon; 3789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project r->mon = (unsigned int) MODULO_RANGE(carry, 1, 13); 3790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project carry = (long) FQUOTIENT_RANGE(carry, 1, 13); 3791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* year (may be modified later) */ 3793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project r->year = d->year + carry; 3794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (r->year == 0) { 3795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (d->year > 0) 3796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project r->year--; 3797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 3798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project r->year++; 3799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* time zone */ 3802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project r->tzo = d->tzo; 3803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project r->tz_flag = d->tz_flag; 3804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* seconds */ 3806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project r->sec = d->sec + u->sec; 3807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project carry = (long) FQUOTIENT((long)r->sec, 60); 3808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (r->sec != 0.0) { 3809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project r->sec = MODULO(r->sec, 60.0); 3810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* minute */ 3813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project carry += d->min; 3814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project r->min = (unsigned int) MODULO(carry, 60); 3815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project carry = (long) FQUOTIENT(carry, 60); 3816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* hours */ 3818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project carry += d->hour; 3819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project r->hour = (unsigned int) MODULO(carry, 24); 3820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project carry = (long)FQUOTIENT(carry, 24); 3821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * days 3824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Note we use tempdays because the temporary values may need more 3825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * than 5 bits 3826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((VALID_YEAR(r->year)) && (VALID_MONTH(r->mon)) && 3828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (d->day > MAX_DAYINMONTH(r->year, r->mon))) 3829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tempdays = MAX_DAYINMONTH(r->year, r->mon); 3830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (d->day < 1) 3831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tempdays = 1; 3832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 3833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tempdays = d->day; 3834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tempdays += u->day + carry; 3836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (1) { 3838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tempdays < 1) { 3839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project long tmon = (long) MODULO_RANGE((int)r->mon-1, 1, 13); 3840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project long tyr = r->year + (long)FQUOTIENT_RANGE((int)r->mon-1, 1, 13); 3841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tyr == 0) 3842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tyr--; 3843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Coverity detected an overrun in daysInMonth 3845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * of size 12 at position 12 with index variable "((r)->mon - 1)" 3846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmon < 0) 3848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmon = 0; 3849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmon > 12) 3850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmon = 12; 3851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tempdays += MAX_DAYINMONTH(tyr, tmon); 3852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project carry = -1; 3853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (tempdays > (long) MAX_DAYINMONTH(r->year, r->mon)) { 3854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tempdays = tempdays - MAX_DAYINMONTH(r->year, r->mon); 3855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project carry = 1; 3856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 3857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 3858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project temp = r->mon + carry; 3860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project r->mon = (unsigned int) MODULO_RANGE(temp, 1, 13); 3861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project r->year = r->year + (unsigned int) FQUOTIENT_RANGE(temp, 1, 13); 3862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (r->year == 0) { 3863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (temp < 1) 3864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project r->year--; 3865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 3866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project r->year++; 3867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project r->day = tempdays; 3871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * adjust the date/time type to the date values 3874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret->type != XML_SCHEMAS_DATETIME) { 3876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((r->hour) || (r->min) || (r->sec)) 3877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->type = XML_SCHEMAS_DATETIME; 3878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (ret->type != XML_SCHEMAS_DATE) { 3879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((r->mon != 1) && (r->day != 1)) 3880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->type = XML_SCHEMAS_DATE; 3881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if ((ret->type != XML_SCHEMAS_GYEARMONTH) && (r->mon != 1)) 3882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->type = XML_SCHEMAS_GYEARMONTH; 3883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(tmp); 3887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ret; 3889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaDateNormalize: 3893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @dt: an #xmlSchemaValPtr of a date/time type value. 3894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @offset: number of seconds to adjust @dt by. 3895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Normalize @dt to GMT time. The @offset parameter is subtracted from 3897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the return value is a time-zone offset is present on @dt. 3898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns a normalized copy of @dt or NULL if error. 3900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlSchemaValPtr 3902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaDateNormalize (xmlSchemaValPtr dt, double offset) 3903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 3904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr dur, ret; 3905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (dt == NULL) 3907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return NULL; 3908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (((dt->type != XML_SCHEMAS_TIME) && 3910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (dt->type != XML_SCHEMAS_DATETIME) && 3911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (dt->type != XML_SCHEMAS_DATE)) || (dt->value.date.tzo == 0)) 3912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return xmlSchemaDupVal(dt); 3913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dur = xmlSchemaNewValue(XML_SCHEMAS_DURATION); 3915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (dur == NULL) 3916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return NULL; 3917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dur->value.date.sec -= offset; 3919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = _xmlSchemaDateAdd(dt, dur); 3921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == NULL) 3922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return NULL; 3923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(dur); 3925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* ret->value.date.tzo = 0; */ 3927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ret; 3928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * _xmlSchemaDateCastYMToDays: 3932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @dt: an #xmlSchemaValPtr 3933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Convert mon and year of @dt to total number of days. Take the 3935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * number of years since (or before) 1 AD and add the number of leap 3936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * years. This is a function because negative 3937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * years must be handled a little differently and there is no zero year. 3938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns number of days. 3940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic long 3942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project_xmlSchemaDateCastYMToDays (const xmlSchemaValPtr dt) 3943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 3944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project long ret; 3945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int mon; 3946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project mon = dt->value.date.mon; 3948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (mon <= 0) mon = 1; /* normalization */ 3949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (dt->value.date.year <= 0) 3951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = (dt->value.date.year * 365) + 3952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (((dt->value.date.year+1)/4)-((dt->value.date.year+1)/100)+ 3953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((dt->value.date.year+1)/400)) + 3954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project DAY_IN_YEAR(0, mon, dt->value.date.year); 3955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 3956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = ((dt->value.date.year-1) * 365) + 3957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (((dt->value.date.year-1)/4)-((dt->value.date.year-1)/100)+ 3958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((dt->value.date.year-1)/400)) + 3959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project DAY_IN_YEAR(0, mon, dt->value.date.year); 3960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3961ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ret; 3962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TIME_TO_NUMBER: 3966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @dt: an #xmlSchemaValPtr 3967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Calculates the number of seconds in the time portion of @dt. 3969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns seconds. 3971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define TIME_TO_NUMBER(dt) \ 3973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((double)((dt->value.date.hour * SECS_PER_HOUR) + \ 3974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (dt->value.date.min * SECS_PER_MIN) + \ 3975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (dt->value.date.tzo * SECS_PER_MIN)) + \ 3976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dt->value.date.sec) 3977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaCompareDates: 3980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @x: a first date/time value 3981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @y: a second date/time value 3982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Compare 2 date/times 3984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns -1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, and -2 in 3986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * case of error 3987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 3989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaCompareDates (xmlSchemaValPtr x, xmlSchemaValPtr y) 3990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 3991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned char xmask, ymask, xor_mask, and_mask; 3992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr p1, p2, q1, q2; 3993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project long p1d, p2d, q1d, q2d; 3994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((x == NULL) || (y == NULL)) 3996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -2; 3997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (x->value.date.tz_flag) { 3999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!y->value.date.tz_flag) { 4001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project p1 = xmlSchemaDateNormalize(x, 0); 4002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project p1d = _xmlSchemaDateCastYMToDays(p1) + p1->value.date.day; 4003ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* normalize y + 14:00 */ 4004ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project q1 = xmlSchemaDateNormalize(y, (14 * SECS_PER_HOUR)); 4005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project q1d = _xmlSchemaDateCastYMToDays(q1) + q1->value.date.day; 4007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (p1d < q1d) { 4008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(p1); 4009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(q1); 4010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -1; 4011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (p1d == q1d) { 4012ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project double sec; 4013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project sec = TIME_TO_NUMBER(p1) - TIME_TO_NUMBER(q1); 4015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sec < 0.0) { 4016ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(p1); 4017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(q1); 4018ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -1; 4019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 4020ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret = 0; 4021ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* normalize y - 14:00 */ 4022ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project q2 = xmlSchemaDateNormalize(y, -(14 * SECS_PER_HOUR)); 4023ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project q2d = _xmlSchemaDateCastYMToDays(q2) + q2->value.date.day; 4024ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (p1d > q2d) 4025ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 1; 4026ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (p1d == q2d) { 4027ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project sec = TIME_TO_NUMBER(p1) - TIME_TO_NUMBER(q2); 4028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sec > 0.0) 4029ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 1; 4030ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4031ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 2; /* indeterminate */ 4032ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4033ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(p1); 4034ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(q1); 4035ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(q2); 4036ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != 0) 4037ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 4038ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4039ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 4040ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(p1); 4041ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(q1); 4042ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4043ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (y->value.date.tz_flag) { 4045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project q1 = xmlSchemaDateNormalize(y, 0); 4046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project q1d = _xmlSchemaDateCastYMToDays(q1) + q1->value.date.day; 4047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* normalize x - 14:00 */ 4049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project p1 = xmlSchemaDateNormalize(x, -(14 * SECS_PER_HOUR)); 4050ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project p1d = _xmlSchemaDateCastYMToDays(p1) + p1->value.date.day; 4051ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (p1d < q1d) { 4053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(p1); 4054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(q1); 4055ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -1; 4056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (p1d == q1d) { 4057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project double sec; 4058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project sec = TIME_TO_NUMBER(p1) - TIME_TO_NUMBER(q1); 4060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sec < 0.0) { 4061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(p1); 4062ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(q1); 4063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -1; 4064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 4065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret = 0; 4066ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* normalize x + 14:00 */ 4067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project p2 = xmlSchemaDateNormalize(x, (14 * SECS_PER_HOUR)); 4068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project p2d = _xmlSchemaDateCastYMToDays(p2) + p2->value.date.day; 4069ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4070ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (p2d > q1d) { 4071ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 1; 4072ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (p2d == q1d) { 4073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project sec = TIME_TO_NUMBER(p2) - TIME_TO_NUMBER(q1); 4074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sec > 0.0) 4075ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 1; 4076ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4077ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 2; /* indeterminate */ 4078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4079ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(p1); 4080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(q1); 4081ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(p2); 4082ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != 0) 4083ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 4084ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4085ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 4086ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(p1); 4087ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(q1); 4088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4089ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4090ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4091ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 4092ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * if the same type then calculate the difference 4093ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4094ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (x->type == y->type) { 4095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret = 0; 4096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project q1 = xmlSchemaDateNormalize(y, 0); 4097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project q1d = _xmlSchemaDateCastYMToDays(q1) + q1->value.date.day; 4098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project p1 = xmlSchemaDateNormalize(x, 0); 4100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project p1d = _xmlSchemaDateCastYMToDays(p1) + p1->value.date.day; 4101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (p1d < q1d) { 4103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = -1; 4104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (p1d > q1d) { 4105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 1; 4106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 4107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project double sec; 4108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project sec = TIME_TO_NUMBER(p1) - TIME_TO_NUMBER(q1); 4110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sec < 0.0) 4111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = -1; 4112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (sec > 0.0) 4113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = 1; 4114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(p1); 4117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(q1); 4118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 4119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (x->type) { 4122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DATETIME: 4123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmask = 0xf; 4124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 4125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DATE: 4126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmask = 0x7; 4127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 4128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GYEAR: 4129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmask = 0x1; 4130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 4131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GMONTH: 4132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmask = 0x2; 4133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 4134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GDAY: 4135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmask = 0x3; 4136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 4137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GYEARMONTH: 4138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmask = 0x3; 4139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 4140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GMONTHDAY: 4141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmask = 0x6; 4142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 4143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_TIME: 4144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmask = 0x8; 4145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 4146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 4147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmask = 0; 4148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 4149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (y->type) { 4152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DATETIME: 4153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ymask = 0xf; 4154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 4155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DATE: 4156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ymask = 0x7; 4157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 4158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GYEAR: 4159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ymask = 0x1; 4160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 4161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GMONTH: 4162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ymask = 0x2; 4163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 4164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GDAY: 4165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ymask = 0x3; 4166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 4167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GYEARMONTH: 4168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ymask = 0x3; 4169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 4170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GMONTHDAY: 4171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ymask = 0x6; 4172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 4173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_TIME: 4174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ymask = 0x8; 4175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 4176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 4177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ymask = 0; 4178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 4179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xor_mask = xmask ^ ymask; /* mark type differences */ 4182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project and_mask = xmask & ymask; /* mark field specification */ 4183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* year */ 4185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xor_mask & 1) 4186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 2; /* indeterminate */ 4187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (and_mask & 1) { 4188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (x->value.date.year < y->value.date.year) 4189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -1; 4190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (x->value.date.year > y->value.date.year) 4191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 1; 4192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* month */ 4195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xor_mask & 2) 4196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 2; /* indeterminate */ 4197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (and_mask & 2) { 4198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (x->value.date.mon < y->value.date.mon) 4199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -1; 4200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (x->value.date.mon > y->value.date.mon) 4201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 1; 4202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* day */ 4205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xor_mask & 4) 4206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 2; /* indeterminate */ 4207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (and_mask & 4) { 4208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (x->value.date.day < y->value.date.day) 4209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -1; 4210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (x->value.date.day > y->value.date.day) 4211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 1; 4212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* time */ 4215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xor_mask & 8) 4216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 2; /* indeterminate */ 4217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (and_mask & 8) { 4218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (x->value.date.hour < y->value.date.hour) 4219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -1; 4220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (x->value.date.hour > y->value.date.hour) 4221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 1; 4222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (x->value.date.min < y->value.date.min) 4223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -1; 4224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (x->value.date.min > y->value.date.min) 4225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 1; 4226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (x->value.date.sec < y->value.date.sec) 4227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -1; 4228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (x->value.date.sec > y->value.date.sec) 4229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 1; 4230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 0; 4233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 4234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 4236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaComparePreserveReplaceStrings: 4237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @x: a first string value 4238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @y: a second string value 4239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @invert: inverts the result if x < y or x > y. 4240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Compare 2 string for their normalized values. 4242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @x is a string with whitespace of "preserve", @y is 4243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * a string with a whitespace of "replace". I.e. @x could 4244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * be an "xsd:string" and @y an "xsd:normalizedString". 4245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns -1 if x < y, 0 if x == y, 1 if x > y, and -2 in 4247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * case of error 4248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 4250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaComparePreserveReplaceStrings(const xmlChar *x, 4251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *y, 4252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int invert) 4253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 4254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int tmp; 4255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*x != 0) && (*y != 0)) { 4257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (IS_WSP_REPLACE_CH(*y)) { 4258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (! IS_WSP_SPACE_CH(*x)) { 4259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*x - 0x20) < 0) { 4260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (invert) 4261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 4265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (invert) 4266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 4272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = *x - *y; 4273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp < 0) { 4274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (invert) 4275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp > 0) { 4280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (invert) 4281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project x++; 4287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project y++; 4288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*x != 0) { 4290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (invert) 4291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*y != 0) { 4296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (invert) 4297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 4302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 4303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 4305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaComparePreserveCollapseStrings: 4306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @x: a first string value 4307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @y: a second string value 4308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Compare 2 string for their normalized values. 4310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @x is a string with whitespace of "preserve", @y is 4311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * a string with a whitespace of "collapse". I.e. @x could 4312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * be an "xsd:string" and @y an "xsd:normalizedString". 4313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns -1 if x < y, 0 if x == y, 1 if x > y, and -2 in 4315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * case of error 4316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 4318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaComparePreserveCollapseStrings(const xmlChar *x, 4319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *y, 4320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int invert) 4321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 4322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int tmp; 4323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 4325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Skip leading blank chars of the collapsed string. 4326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while IS_WSP_BLANK_CH(*y) 4328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project y++; 4329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*x != 0) && (*y != 0)) { 4331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if IS_WSP_BLANK_CH(*y) { 4332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (! IS_WSP_SPACE_CH(*x)) { 4333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 4334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The yv character would have been replaced to 0x20. 4335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*x - 0x20) < 0) { 4337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (invert) 4338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 4342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (invert) 4343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project x++; 4349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project y++; 4350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 4351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Skip contiguous blank chars of the collapsed string. 4352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while IS_WSP_BLANK_CH(*y) 4354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project y++; 4355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 4356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = *x++ - *y++; 4357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp < 0) { 4358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (invert) 4359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp > 0) { 4364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (invert) 4365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*x != 0) { 4372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (invert) 4373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*y != 0) { 4378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 4379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Skip trailing blank chars of the collapsed string. 4380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while IS_WSP_BLANK_CH(*y) 4382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project y++; 4383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*y != 0) { 4384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (invert) 4385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 4391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 4392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 4394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaComparePreserveCollapseStrings: 4395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @x: a first string value 4396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @y: a second string value 4397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Compare 2 string for their normalized values. 4399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @x is a string with whitespace of "preserve", @y is 4400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * a string with a whitespace of "collapse". I.e. @x could 4401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * be an "xsd:string" and @y an "xsd:normalizedString". 4402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns -1 if x < y, 0 if x == y, 1 if x > y, and -2 in 4404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * case of error 4405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 4407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaCompareReplaceCollapseStrings(const xmlChar *x, 4408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *y, 4409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int invert) 4410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 4411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int tmp; 4412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 4414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Skip leading blank chars of the collapsed string. 4415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while IS_WSP_BLANK_CH(*y) 4417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project y++; 4418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*x != 0) && (*y != 0)) { 4420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if IS_WSP_BLANK_CH(*y) { 4421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (! IS_WSP_BLANK_CH(*x)) { 4422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 4423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The yv character would have been replaced to 0x20. 4424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*x - 0x20) < 0) { 4426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (invert) 4427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 4431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (invert) 4432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project x++; 4438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project y++; 4439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 4440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Skip contiguous blank chars of the collapsed string. 4441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while IS_WSP_BLANK_CH(*y) 4443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project y++; 4444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 4445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if IS_WSP_BLANK_CH(*x) { 4446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 4447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The xv character would have been replaced to 0x20. 4448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((0x20 - *y) < 0) { 4450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (invert) 4451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 4455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (invert) 4456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = *x++ - *y++; 4462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp < 0) 4463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp > 0) 4465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*x != 0) { 4469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (invert) 4470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*y != 0) { 4475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 4476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Skip trailing blank chars of the collapsed string. 4477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while IS_WSP_BLANK_CH(*y) 4479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project y++; 4480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*y != 0) { 4481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (invert) 4482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 4488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 4489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 4492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaCompareReplacedStrings: 4493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @x: a first string value 4494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @y: a second string value 4495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Compare 2 string for their normalized values. 4497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns -1 if x < y, 0 if x == y, 1 if x > y, and -2 in 4499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * case of error 4500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 4502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaCompareReplacedStrings(const xmlChar *x, 4503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *y) 4504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 4505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int tmp; 4506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*x != 0) && (*y != 0)) { 4508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if IS_WSP_BLANK_CH(*y) { 4509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (! IS_WSP_BLANK_CH(*x)) { 4510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*x - 0x20) < 0) 4511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 4516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if IS_WSP_BLANK_CH(*x) { 4517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((0x20 - *y) < 0) 4518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = *x - *y; 4523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp < 0) 4524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp > 0) 4526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project x++; 4529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project y++; 4530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*x != 0) 4532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*y != 0) 4534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 4536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 4537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 4539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaCompareNormStrings: 4540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @x: a first string value 4541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @y: a second string value 4542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Compare 2 string for their normalized values. 4544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns -1 if x < y, 0 if x == y, 1 if x > y, and -2 in 4546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * case of error 4547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 4549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaCompareNormStrings(const xmlChar *x, 4550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *y) { 4551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int tmp; 4552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (IS_BLANK_CH(*x)) x++; 4554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (IS_BLANK_CH(*y)) y++; 4555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*x != 0) && (*y != 0)) { 4556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (IS_BLANK_CH(*x)) { 4557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BLANK_CH(*y)) { 4558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = *x - *y; 4559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(tmp); 4560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (IS_BLANK_CH(*x)) x++; 4562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (IS_BLANK_CH(*y)) y++; 4563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 4564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = *x++ - *y++; 4565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp < 0) 4566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp > 0) 4568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*x != 0) { 4572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (IS_BLANK_CH(*x)) x++; 4573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*x != 0) 4574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*y != 0) { 4577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (IS_BLANK_CH(*y)) y++; 4578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*y != 0) 4579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 4582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 4583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 4585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaCompareFloats: 4586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @x: a first float or double value 4587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @y: a second float or double value 4588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Compare 2 values 4590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns -1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, and -2 in 4592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * case of error 4593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 4595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaCompareFloats(xmlSchemaValPtr x, xmlSchemaValPtr y) { 4596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project double d1, d2; 4597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((x == NULL) || (y == NULL)) 4599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-2); 4600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 4602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Cast everything to doubles. 4603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (x->type == XML_SCHEMAS_DOUBLE) 4605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project d1 = x->value.d; 4606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (x->type == XML_SCHEMAS_FLOAT) 4607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project d1 = x->value.f; 4608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-2); 4610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (y->type == XML_SCHEMAS_DOUBLE) 4612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project d2 = y->value.d; 4613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (y->type == XML_SCHEMAS_FLOAT) 4614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project d2 = y->value.f; 4615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-2); 4617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 4619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check for special cases. 4620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlXPathIsNaN(d1)) { 4622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlXPathIsNaN(d2)) 4623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 4624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlXPathIsNaN(d2)) 4627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (d1 == xmlXPathPINF) { 4629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (d2 == xmlXPathPINF) 4630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 4631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (d2 == xmlXPathPINF) 4634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (d1 == xmlXPathNINF) { 4636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (d2 == xmlXPathNINF) 4637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 4638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (d2 == xmlXPathNINF) 4641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 4644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * basic tests, the last one we should have equality, but 4645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * portability is more important than speed and handling 4646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * NaN or Inf in a portable way is always a challenge, so ... 4647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (d1 < d2) 4649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (d1 > d2) 4651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (d1 == d2) 4653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 4654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(2); 4655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 4656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 4658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaCompareValues: 4659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @x: a first value 4660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @xvalue: the first value as a string (optional) 4661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @xwtsp: the whitespace type 4662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @y: a second value 4663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @xvalue: the second value as a string (optional) 4664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ywtsp: the whitespace type 4665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Compare 2 values 4667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns -1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, 3 if not 4669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * comparable and -2 in case of error 4670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 4672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaCompareValuesInternal(xmlSchemaValType xtype, 4673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr x, 4674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *xvalue, 4675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaWhitespaceValueType xws, 4676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValType ytype, 4677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr y, 4678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *yvalue, 4679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaWhitespaceValueType yws) 4680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 4681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (xtype) { 4682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_UNKNOWN: 4683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ANYTYPE: 4684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-2); 4685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_INTEGER: 4686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NPINTEGER: 4687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NINTEGER: 4688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NNINTEGER: 4689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_PINTEGER: 4690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_INT: 4691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_UINT: 4692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_LONG: 4693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ULONG: 4694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_SHORT: 4695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_USHORT: 4696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_BYTE: 4697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_UBYTE: 4698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DECIMAL: 4699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((x == NULL) || (y == NULL)) 4700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-2); 4701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ytype == xtype) 4702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlSchemaCompareDecimals(x, y)); 4703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ytype == XML_SCHEMAS_DECIMAL) || 4704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_INTEGER) || 4705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_NPINTEGER) || 4706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_NINTEGER) || 4707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_NNINTEGER) || 4708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_PINTEGER) || 4709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_INT) || 4710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_UINT) || 4711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_LONG) || 4712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_ULONG) || 4713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_SHORT) || 4714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_USHORT) || 4715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_BYTE) || 4716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_UBYTE)) 4717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlSchemaCompareDecimals(x, y)); 4718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-2); 4719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DURATION: 4720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((x == NULL) || (y == NULL)) 4721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-2); 4722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ytype == XML_SCHEMAS_DURATION) 4723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlSchemaCompareDurations(x, y)); 4724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-2); 4725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_TIME: 4726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GDAY: 4727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GMONTH: 4728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GMONTHDAY: 4729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GYEAR: 4730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GYEARMONTH: 4731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DATE: 4732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DATETIME: 4733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((x == NULL) || (y == NULL)) 4734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-2); 4735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ytype == XML_SCHEMAS_DATETIME) || 4736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_TIME) || 4737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_GDAY) || 4738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_GMONTH) || 4739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_GMONTHDAY) || 4740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_GYEAR) || 4741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_DATE) || 4742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_GYEARMONTH)) 4743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaCompareDates(x, y)); 4744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-2); 4745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 4746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Note that we will support comparison of string types against 4747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * anySimpleType as well. 4748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ANYSIMPLETYPE: 4750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_STRING: 4751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NORMSTRING: 4752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_TOKEN: 4753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_LANGUAGE: 4754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NMTOKEN: 4755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NAME: 4756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NCNAME: 4757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ID: 4758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_IDREF: 4759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ENTITY: 4760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ANYURI: 4761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project { 4762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *xv, *yv; 4763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (x == NULL) 4765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xv = xvalue; 4766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xv = x->value.str; 4768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (y == NULL) 4769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project yv = yvalue; 4770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project yv = y->value.str; 4772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 4773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TODO: Compare those against QName. 4774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ytype == XML_SCHEMAS_QNAME) { 4776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project TODO 4777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (y == NULL) 4778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-2); 4779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-2); 4780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ytype == XML_SCHEMAS_ANYSIMPLETYPE) || 4782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_STRING) || 4783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_NORMSTRING) || 4784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_TOKEN) || 4785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_LANGUAGE) || 4786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_NMTOKEN) || 4787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_NAME) || 4788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_NCNAME) || 4789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_ID) || 4790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_IDREF) || 4791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_ENTITY) || 4792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_ANYURI)) { 4793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xws == XML_SCHEMA_WHITESPACE_PRESERVE) { 4795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (yws == XML_SCHEMA_WHITESPACE_PRESERVE) { 4797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* TODO: What about x < y or x > y. */ 4798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlStrEqual(xv, yv)) 4799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (0); 4800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (2); 4802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (yws == XML_SCHEMA_WHITESPACE_REPLACE) 4803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaComparePreserveReplaceStrings(xv, yv, 0)); 4804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (yws == XML_SCHEMA_WHITESPACE_COLLAPSE) 4805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaComparePreserveCollapseStrings(xv, yv, 0)); 4806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (xws == XML_SCHEMA_WHITESPACE_REPLACE) { 4808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (yws == XML_SCHEMA_WHITESPACE_PRESERVE) 4810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaComparePreserveReplaceStrings(yv, xv, 1)); 4811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (yws == XML_SCHEMA_WHITESPACE_REPLACE) 4812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaCompareReplacedStrings(xv, yv)); 4813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (yws == XML_SCHEMA_WHITESPACE_COLLAPSE) 4814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaCompareReplaceCollapseStrings(xv, yv, 0)); 4815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (xws == XML_SCHEMA_WHITESPACE_COLLAPSE) { 4817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (yws == XML_SCHEMA_WHITESPACE_PRESERVE) 4819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaComparePreserveCollapseStrings(yv, xv, 1)); 4820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (yws == XML_SCHEMA_WHITESPACE_REPLACE) 4821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaCompareReplaceCollapseStrings(yv, xv, 1)); 4822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (yws == XML_SCHEMA_WHITESPACE_COLLAPSE) 4823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaCompareNormStrings(xv, yv)); 4824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 4825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-2); 4826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-2); 4829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_QNAME: 4831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NOTATION: 4832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((x == NULL) || (y == NULL)) 4833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-2); 4834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ytype == XML_SCHEMAS_QNAME) || 4835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_NOTATION)) { 4836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((xmlStrEqual(x->value.qname.name, y->value.qname.name)) && 4837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlStrEqual(x->value.qname.uri, y->value.qname.uri))) 4838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 4839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(2); 4840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-2); 4842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_FLOAT: 4843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DOUBLE: 4844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((x == NULL) || (y == NULL)) 4845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-2); 4846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ytype == XML_SCHEMAS_FLOAT) || 4847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ytype == XML_SCHEMAS_DOUBLE)) 4848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaCompareFloats(x, y)); 4849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-2); 4850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_BOOLEAN: 4851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((x == NULL) || (y == NULL)) 4852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-2); 4853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ytype == XML_SCHEMAS_BOOLEAN) { 4854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (x->value.b == y->value.b) 4855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 4856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (x->value.b == 0) 4857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-2); 4861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_HEXBINARY: 4862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((x == NULL) || (y == NULL)) 4863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-2); 4864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ytype == XML_SCHEMAS_HEXBINARY) { 4865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (x->value.hex.total == y->value.hex.total) { 4866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret = xmlStrcmp(x->value.hex.str, y->value.hex.str); 4867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret > 0) 4868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (ret == 0) 4870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 4871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (x->value.hex.total > y->value.hex.total) 4873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-2); 4878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_BASE64BINARY: 4879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((x == NULL) || (y == NULL)) 4880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-2); 4881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ytype == XML_SCHEMAS_BASE64BINARY) { 4882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (x->value.base64.total == y->value.base64.total) { 4883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret = xmlStrcmp(x->value.base64.str, 4884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project y->value.base64.str); 4885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret > 0) 4886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (ret == 0) 4888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 4889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (x->value.base64.total > y->value.base64.total) 4893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 4894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 4896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-2); 4898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_IDREFS: 4899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ENTITIES: 4900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NMTOKENS: 4901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project TODO 4902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 4903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 4904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return -2; 4905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 4906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 4908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaCompareValues: 4909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @x: a first value 4910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @y: a second value 4911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Compare 2 values 4913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns -1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, and -2 in 4915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * case of error 4916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 4918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaCompareValues(xmlSchemaValPtr x, xmlSchemaValPtr y) { 4919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaWhitespaceValueType xws, yws; 4920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((x == NULL) || (y == NULL)) 4922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-2); 4923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (x->type == XML_SCHEMAS_STRING) 4924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xws = XML_SCHEMA_WHITESPACE_PRESERVE; 4925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (x->type == XML_SCHEMAS_NORMSTRING) 4926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xws = XML_SCHEMA_WHITESPACE_REPLACE; 4927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xws = XML_SCHEMA_WHITESPACE_COLLAPSE; 4929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (y->type == XML_SCHEMAS_STRING) 4931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project yws = XML_SCHEMA_WHITESPACE_PRESERVE; 4932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (x->type == XML_SCHEMAS_NORMSTRING) 4933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project yws = XML_SCHEMA_WHITESPACE_REPLACE; 4934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 4935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project yws = XML_SCHEMA_WHITESPACE_COLLAPSE; 4936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlSchemaCompareValuesInternal(x->type, x, NULL, xws, y->type, 4938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project y, NULL, yws)); 4939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 4940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 4942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaCompareValuesWhtsp: 4943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @x: a first value 4944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @xws: the whitespace value of x 4945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @y: a second value 4946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @yws: the whitespace value of y 4947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Compare 2 values 4949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns -1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, and -2 in 4951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * case of error 4952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 4954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaCompareValuesWhtsp(xmlSchemaValPtr x, 4955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaWhitespaceValueType xws, 4956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr y, 4957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaWhitespaceValueType yws) 4958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 4959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((x == NULL) || (y == NULL)) 4960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-2); 4961ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlSchemaCompareValuesInternal(x->type, x, NULL, xws, y->type, 4962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project y, NULL, yws)); 4963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 4964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 4966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaCompareValuesWhtspExt: 4967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @x: a first value 4968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @xws: the whitespace value of x 4969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @y: a second value 4970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @yws: the whitespace value of y 4971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Compare 2 values 4973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns -1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, and -2 in 4975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * case of error 4976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 4978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaCompareValuesWhtspExt(xmlSchemaValType xtype, 4979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr x, 4980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *xvalue, 4981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaWhitespaceValueType xws, 4982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValType ytype, 4983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr y, 4984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *yvalue, 4985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaWhitespaceValueType yws) 4986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 4987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlSchemaCompareValuesInternal(xtype, x, xvalue, xws, ytype, y, 4988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project yvalue, yws)); 4989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 4990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 4992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaNormLen: 4993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: a string 4994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Computes the UTF8 length of the normalized value of the string 4996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the length or -1 in case of error. 4998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 4999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 5000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaNormLen(const xmlChar *value) { 5001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *utf; 5002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret = 0; 5003ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5004ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (value == NULL) 5005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 5006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project utf = value; 5007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (IS_BLANK_CH(*utf)) utf++; 5008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (*utf != 0) { 5009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (utf[0] & 0x80) { 5010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((utf[1] & 0xc0) != 0x80) 5011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 5012ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((utf[0] & 0xe0) == 0xe0) { 5013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((utf[2] & 0xc0) != 0x80) 5014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 5015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((utf[0] & 0xf0) == 0xf0) { 5016ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((utf[0] & 0xf8) != 0xf0 || (utf[3] & 0xc0) != 0x80) 5017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 5018ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project utf += 4; 5019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5020ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project utf += 3; 5021ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5022ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5023ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project utf += 2; 5024ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5025ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (IS_BLANK_CH(*utf)) { 5026ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (IS_BLANK_CH(*utf)) utf++; 5027ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*utf == 0) 5028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5029ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5030ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project utf++; 5031ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5032ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret++; 5033ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5034ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 5035ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 5036ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5037ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 5038ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaGetFacetValueAsULong: 5039ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @facet: an schemas type facet 5040ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5041ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Extract the value of a facet 5042ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5043ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the value as a long 5044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectunsigned long 5046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaGetFacetValueAsULong(xmlSchemaFacetPtr facet) 5047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 5048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TODO: Check if this is a decimal. 5050ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5051ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (facet == NULL) 5052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return 0; 5053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ((unsigned long) facet->val->value.decimal.lo); 5054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 5055ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 5057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaValidateListSimpleTypeFacet: 5058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @facet: the facet to check 5059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: the lexical repr of the value to validate 5060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @actualLen: the number of list items 5061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @expectedLen: the resulting expected number of list items 5062ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Checks the value of a list simple type against a facet. 5064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 if the value is valid, a positive error code 5066ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * number otherwise and -1 in case of an internal error. 5067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 5069ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaValidateListSimpleTypeFacet(xmlSchemaFacetPtr facet, 5070ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *value, 5071ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned long actualLen, 5072ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned long *expectedLen) 5073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 5074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (facet == NULL) 5075ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 5076ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5077ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TODO: Check if this will work with large numbers. 5078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * (compare value.decimal.mi and value.decimal.hi as well?). 5079ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (facet->type == XML_SCHEMA_FACET_LENGTH) { 5081ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (actualLen != facet->val->value.decimal.lo) { 5082ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (expectedLen != NULL) 5083ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *expectedLen = facet->val->value.decimal.lo; 5084ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (XML_SCHEMAV_CVC_LENGTH_VALID); 5085ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5086ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (facet->type == XML_SCHEMA_FACET_MINLENGTH) { 5087ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (actualLen < facet->val->value.decimal.lo) { 5088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (expectedLen != NULL) 5089ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *expectedLen = facet->val->value.decimal.lo; 5090ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (XML_SCHEMAV_CVC_MINLENGTH_VALID); 5091ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5092ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (facet->type == XML_SCHEMA_FACET_MAXLENGTH) { 5093ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (actualLen > facet->val->value.decimal.lo) { 5094ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (expectedLen != NULL) 5095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *expectedLen = facet->val->value.decimal.lo; 5096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (XML_SCHEMAV_CVC_MAXLENGTH_VALID); 5097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 5099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * NOTE: That we can pass NULL as xmlSchemaValPtr to 5101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaValidateFacet, since the remaining facet types 5102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * are: XML_SCHEMA_FACET_PATTERN, XML_SCHEMA_FACET_ENUMERATION. 5103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlSchemaValidateFacet(NULL, facet, value, NULL)); 5105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (0); 5106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 5107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 5109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaValidateLengthFacet: 5110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @type: the built-in type 5111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @facet: the facet to check 5112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: the lexical repr. of the value to be validated 5113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @val: the precomputed value 5114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ws: the whitespace type of the value 5115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @length: the actual length of the value 5116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Checka a value against a "length", "minLength" and "maxLength" 5118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * facet; sets @length to the computed length of @value. 5119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 if the value is valid, a positive error code 5121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * otherwise and -1 in case of an internal or API error. 5122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 5124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaValidateLengthFacetInternal(xmlSchemaFacetPtr facet, 5125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaTypeType valType, 5126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *value, 5127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr val, 5128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned long *length, 5129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaWhitespaceValueType ws) 5130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 5131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int len = 0; 5132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((length == NULL) || (facet == NULL)) 5134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-1); 5135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *length = 0; 5136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((facet->type != XML_SCHEMA_FACET_LENGTH) && 5137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (facet->type != XML_SCHEMA_FACET_MAXLENGTH) && 5138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (facet->type != XML_SCHEMA_FACET_MINLENGTH)) 5139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-1); 5140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TODO: length, maxLength and minLength must be of type 5143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * nonNegativeInteger only. Check if decimal is used somehow. 5144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((facet->val == NULL) || 5146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((facet->val->type != XML_SCHEMAS_DECIMAL) && 5147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (facet->val->type != XML_SCHEMAS_NNINTEGER)) || 5148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (facet->val->value.decimal.frac != 0)) { 5149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 5150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((val != NULL) && (val->type == XML_SCHEMAS_HEXBINARY)) 5152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = val->value.hex.total; 5153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if ((val != NULL) && (val->type == XML_SCHEMAS_BASE64BINARY)) 5154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = val->value.base64.total; 5155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 5156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (valType) { 5157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_STRING: 5158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NORMSTRING: 5159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ws == XML_SCHEMA_WHITESPACE_UNKNOWN) { 5160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This is to ensure API compatibility with the old 5162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaValidateLengthFacet(). Anyway, this was and 5163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * is not the correct handling. 5164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TODO: Get rid of this case somehow. 5165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (valType == XML_SCHEMAS_STRING) 5167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = xmlUTF8Strlen(value); 5168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 5169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = xmlSchemaNormLen(value); 5170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (value != NULL) { 5171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE) 5172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = xmlSchemaNormLen(value); 5173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 5174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Should be OK for "preserve" as well. 5176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = xmlUTF8Strlen(value); 5178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_IDREF: 5181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_TOKEN: 5182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_LANGUAGE: 5183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NMTOKEN: 5184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NAME: 5185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NCNAME: 5186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ID: 5187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * FIXME: What exactly to do with anyURI? 5189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ANYURI: 5191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (value != NULL) 5192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = xmlSchemaNormLen(value); 5193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_QNAME: 5195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NOTATION: 5196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * For QName and NOTATION, those facets are 5198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * deprecated and should be ignored. 5199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (0); 5201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 5202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project TODO 5203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *length = (unsigned long) len; 5206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TODO: Return the whole expected value, i.e. "lo", "mi" and "hi". 5208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (facet->type == XML_SCHEMA_FACET_LENGTH) { 5210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len != facet->val->value.decimal.lo) 5211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_SCHEMAV_CVC_LENGTH_VALID); 5212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (facet->type == XML_SCHEMA_FACET_MINLENGTH) { 5213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len < facet->val->value.decimal.lo) 5214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_SCHEMAV_CVC_MINLENGTH_VALID); 5215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len > facet->val->value.decimal.lo) 5217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_SCHEMAV_CVC_MAXLENGTH_VALID); 5218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (0); 5221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 5222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 5224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaValidateLengthFacet: 5225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @type: the built-in type 5226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @facet: the facet to check 5227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: the lexical repr. of the value to be validated 5228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @val: the precomputed value 5229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @length: the actual length of the value 5230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Checka a value against a "length", "minLength" and "maxLength" 5232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * facet; sets @length to the computed length of @value. 5233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 if the value is valid, a positive error code 5235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * otherwise and -1 in case of an internal or API error. 5236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 5238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaValidateLengthFacet(xmlSchemaTypePtr type, 5239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFacetPtr facet, 5240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *value, 5241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr val, 5242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned long *length) 5243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 5244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (type == NULL) 5245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 5246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaValidateLengthFacetInternal(facet, 5247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type->builtInType, value, val, length, 5248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMA_WHITESPACE_UNKNOWN)); 5249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 5250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 5252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaValidateLengthFacetWhtsp: 5253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @facet: the facet to check 5254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @valType: the built-in type 5255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: the lexical repr. of the value to be validated 5256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @val: the precomputed value 5257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ws: the whitespace type of the value 5258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @length: the actual length of the value 5259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Checka a value against a "length", "minLength" and "maxLength" 5261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * facet; sets @length to the computed length of @value. 5262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 if the value is valid, a positive error code 5264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * otherwise and -1 in case of an internal or API error. 5265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 5267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaValidateLengthFacetWhtsp(xmlSchemaFacetPtr facet, 5268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValType valType, 5269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *value, 5270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr val, 5271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned long *length, 5272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaWhitespaceValueType ws) 5273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 5274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaValidateLengthFacetInternal(facet, valType, value, val, 5275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project length, ws)); 5276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 5277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 5279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaValidateFacetInternal: 5280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @facet: the facet to check 5281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @fws: the whitespace type of the facet's value 5282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @valType: the built-in type of the value 5283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: the lexical repr of the value to validate 5284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @val: the precomputed value 5285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ws: the whitespace type of the value 5286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check a value against a facet condition 5288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 if the element is schemas valid, a positive error code 5290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * number otherwise and -1 in case of internal or API error. 5291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 5293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaValidateFacetInternal(xmlSchemaFacetPtr facet, 5294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaWhitespaceValueType fws, 5295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValType valType, 5296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *value, 5297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr val, 5298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaWhitespaceValueType ws) 5299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 5300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret; 5301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (facet == NULL) 5303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 5304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (facet->type) { 5306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMA_FACET_PATTERN: 5307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * NOTE that for patterns, the @value needs to be the normalized 5309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * value, *not* the lexical initial value or the canonical value. 5310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (value == NULL) 5312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 5313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlRegexpExec(facet->regexp, value); 5314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == 1) 5315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 5316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == 0) 5317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_SCHEMAV_CVC_PATTERN_VALID); 5318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 5319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMA_FACET_MAXEXCLUSIVE: 5320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlSchemaCompareValues(val, facet->val); 5321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == -2) 5322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 5323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == -1) 5324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 5325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_SCHEMAV_CVC_MAXEXCLUSIVE_VALID); 5326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMA_FACET_MAXINCLUSIVE: 5327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlSchemaCompareValues(val, facet->val); 5328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == -2) 5329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 5330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret == -1) || (ret == 0)) 5331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 5332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_SCHEMAV_CVC_MAXINCLUSIVE_VALID); 5333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMA_FACET_MINEXCLUSIVE: 5334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlSchemaCompareValues(val, facet->val); 5335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == -2) 5336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 5337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == 1) 5338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 5339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_SCHEMAV_CVC_MINEXCLUSIVE_VALID); 5340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMA_FACET_MININCLUSIVE: 5341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlSchemaCompareValues(val, facet->val); 5342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == -2) 5343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 5344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret == 1) || (ret == 0)) 5345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 5346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_SCHEMAV_CVC_MININCLUSIVE_VALID); 5347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMA_FACET_WHITESPACE: 5348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* TODO whitespaces */ 5349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * NOTE: Whitespace should be handled to normalize 5351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the value to be validated against a the facets; 5352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * not to normalize the value in-between. 5353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 5355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMA_FACET_ENUMERATION: 5356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ws == XML_SCHEMA_WHITESPACE_UNKNOWN) { 5357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This is to ensure API compatibility with the old 5359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaValidateFacet(). 5360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TODO: Get rid of this case. 5361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((facet->value != NULL) && 5363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlStrEqual(facet->value, value))) 5364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 5365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlSchemaCompareValuesWhtspExt(facet->val->type, 5367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project facet->val, facet->value, fws, valType, val, 5368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project value, ws); 5369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == -2) 5370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 5371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == 0) 5372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 5373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_SCHEMAV_CVC_ENUMERATION_VALID); 5375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMA_FACET_LENGTH: 5376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * SPEC (1.3) "if {primitive type definition} is QName or NOTATION, 5378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * then any {value} is facet-valid." 5379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((valType == XML_SCHEMAS_QNAME) || 5381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (valType == XML_SCHEMAS_NOTATION)) 5382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (0); 5383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* No break on purpose. */ 5384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMA_FACET_MAXLENGTH: 5385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMA_FACET_MINLENGTH: { 5386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int len = 0; 5387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((valType == XML_SCHEMAS_QNAME) || 5389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (valType == XML_SCHEMAS_NOTATION)) 5390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (0); 5391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TODO: length, maxLength and minLength must be of type 5393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * nonNegativeInteger only. Check if decimal is used somehow. 5394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((facet->val == NULL) || 5396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((facet->val->type != XML_SCHEMAS_DECIMAL) && 5397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (facet->val->type != XML_SCHEMAS_NNINTEGER)) || 5398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (facet->val->value.decimal.frac != 0)) { 5399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 5400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((val != NULL) && (val->type == XML_SCHEMAS_HEXBINARY)) 5402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = val->value.hex.total; 5403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if ((val != NULL) && (val->type == XML_SCHEMAS_BASE64BINARY)) 5404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = val->value.base64.total; 5405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 5406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (valType) { 5407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_STRING: 5408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NORMSTRING: 5409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ws == XML_SCHEMA_WHITESPACE_UNKNOWN) { 5410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This is to ensure API compatibility with the old 5412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaValidateFacet(). Anyway, this was and 5413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * is not the correct handling. 5414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TODO: Get rid of this case somehow. 5415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (valType == XML_SCHEMAS_STRING) 5417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = xmlUTF8Strlen(value); 5418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 5419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = xmlSchemaNormLen(value); 5420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (value != NULL) { 5421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE) 5422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = xmlSchemaNormLen(value); 5423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 5424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Should be OK for "preserve" as well. 5426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = xmlUTF8Strlen(value); 5428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_IDREF: 5431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_TOKEN: 5432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_LANGUAGE: 5433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NMTOKEN: 5434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NAME: 5435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NCNAME: 5436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ID: 5437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ANYURI: 5438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (value != NULL) 5439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = xmlSchemaNormLen(value); 5440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 5442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project TODO 5443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (facet->type == XML_SCHEMA_FACET_LENGTH) { 5446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len != facet->val->value.decimal.lo) 5447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_SCHEMAV_CVC_LENGTH_VALID); 5448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (facet->type == XML_SCHEMA_FACET_MINLENGTH) { 5449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len < facet->val->value.decimal.lo) 5450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_SCHEMAV_CVC_MINLENGTH_VALID); 5451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len > facet->val->value.decimal.lo) 5453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_SCHEMAV_CVC_MAXLENGTH_VALID); 5454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMA_FACET_TOTALDIGITS: 5458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMA_FACET_FRACTIONDIGITS: 5459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((facet->val == NULL) || 5461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((facet->val->type != XML_SCHEMAS_PINTEGER) && 5462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (facet->val->type != XML_SCHEMAS_NNINTEGER)) || 5463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (facet->val->value.decimal.frac != 0)) { 5464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 5465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((val == NULL) || 5467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((val->type != XML_SCHEMAS_DECIMAL) && 5468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (val->type != XML_SCHEMAS_INTEGER) && 5469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (val->type != XML_SCHEMAS_NPINTEGER) && 5470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (val->type != XML_SCHEMAS_NINTEGER) && 5471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (val->type != XML_SCHEMAS_NNINTEGER) && 5472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (val->type != XML_SCHEMAS_PINTEGER) && 5473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (val->type != XML_SCHEMAS_INT) && 5474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (val->type != XML_SCHEMAS_UINT) && 5475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (val->type != XML_SCHEMAS_LONG) && 5476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (val->type != XML_SCHEMAS_ULONG) && 5477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (val->type != XML_SCHEMAS_SHORT) && 5478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (val->type != XML_SCHEMAS_USHORT) && 5479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (val->type != XML_SCHEMAS_BYTE) && 5480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (val->type != XML_SCHEMAS_UBYTE))) { 5481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 5482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (facet->type == XML_SCHEMA_FACET_TOTALDIGITS) { 5484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val->value.decimal.total > facet->val->value.decimal.lo) 5485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_SCHEMAV_CVC_TOTALDIGITS_VALID); 5486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (facet->type == XML_SCHEMA_FACET_FRACTIONDIGITS) { 5488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val->value.decimal.frac > facet->val->value.decimal.lo) 5489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_SCHEMAV_CVC_FRACTIONDIGITS_VALID); 5490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 5493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project TODO 5494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 5496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 5498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 5500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaValidateFacet: 5501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @base: the base type 5502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @facet: the facet to check 5503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: the lexical repr of the value to validate 5504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @val: the precomputed value 5505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check a value against a facet condition 5507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 if the element is schemas valid, a positive error code 5509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * number otherwise and -1 in case of internal or API error. 5510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 5512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaValidateFacet(xmlSchemaTypePtr base, 5513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFacetPtr facet, 5514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *value, 5515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr val) 5516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 5517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This tries to ensure API compatibility regarding the old 5519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaValidateFacet() and the new xmlSchemaValidateFacetInternal() and 5520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaValidateFacetWhtsp(). 5521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val != NULL) 5523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlSchemaValidateFacetInternal(facet, 5524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMA_WHITESPACE_UNKNOWN, val->type, value, val, 5525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMA_WHITESPACE_UNKNOWN)); 5526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (base != NULL) 5527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlSchemaValidateFacetInternal(facet, 5528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMA_WHITESPACE_UNKNOWN, base->builtInType, value, val, 5529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SCHEMA_WHITESPACE_UNKNOWN)); 5530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 5531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 5532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 5534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaValidateFacetWhtsp: 5535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @facet: the facet to check 5536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @fws: the whitespace type of the facet's value 5537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @valType: the built-in type of the value 5538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: the lexical (or normalized for pattern) repr of the value to validate 5539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @val: the precomputed value 5540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ws: the whitespace type of the value 5541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check a value against a facet condition. This takes value normalization 5543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * according to the specified whitespace types into account. 5544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Note that @value needs to be the *normalized* value if the facet 5545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * is of type "pattern". 5546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 if the element is schemas valid, a positive error code 5548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * number otherwise and -1 in case of internal or API error. 5549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 5551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaValidateFacetWhtsp(xmlSchemaFacetPtr facet, 5552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaWhitespaceValueType fws, 5553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValType valType, 5554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *value, 5555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr val, 5556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaWhitespaceValueType ws) 5557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 5558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlSchemaValidateFacetInternal(facet, fws, valType, 5559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project value, val, ws)); 5560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 5561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if 0 5563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifndef DBL_DIG 5564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define DBL_DIG 16 5565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 5566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifndef DBL_EPSILON 5567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define DBL_EPSILON 1E-9 5568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 5569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define INTEGER_DIGITS DBL_DIG 5571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define FRACTION_DIGITS (DBL_DIG + 1) 5572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define EXPONENT_DIGITS (3 + 2) 5573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 5575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlXPathFormatNumber: 5576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @number: number to format 5577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buffer: output buffer 5578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @buffersize: size of output buffer 5579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Convert the number into a string representation. 5581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 5583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaFormatFloat(double number, char buffer[], int buffersize) 5584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 5585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (xmlXPathIsInf(number)) { 5586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case 1: 5587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buffersize > (int)sizeof("INF")) 5588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf(buffer, buffersize, "INF"); 5589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case -1: 5591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buffersize > (int)sizeof("-INF")) 5592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf(buffer, buffersize, "-INF"); 5593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 5595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlXPathIsNaN(number)) { 5596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buffersize > (int)sizeof("NaN")) 5597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf(buffer, buffersize, "NaN"); 5598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (number == 0) { 5599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf(buffer, buffersize, "0.0E0"); 5600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3 is sign, decimal point, and terminating zero */ 5602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char work[DBL_DIG + EXPONENT_DIGITS + 3]; 5603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int integer_place, fraction_place; 5604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char *ptr; 5605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char *after_fraction; 5606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project double absolute_value; 5607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int size; 5608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project absolute_value = fabs(number); 5610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Result is in work, and after_fraction points 5613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * just past the fractional part. 5614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Use scientific notation 5615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project integer_place = DBL_DIG + EXPONENT_DIGITS + 1; 5617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fraction_place = DBL_DIG - 1; 5618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf(work, sizeof(work),"%*.*e", 5619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project integer_place, fraction_place, number); 5620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project after_fraction = strchr(work + DBL_DIG, 'e'); 5621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Remove fractional trailing zeroes */ 5622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ptr = after_fraction; 5623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (*(--ptr) == '0') 5624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ; 5625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*ptr != '.') 5626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ptr++; 5627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*ptr++ = *after_fraction++) != 0); 5628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Finally copy result back to caller */ 5630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project size = strlen(work) + 1; 5631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (size > buffersize) { 5632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project work[buffersize - 1] = 0; 5633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project size = buffersize; 5634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memmove(buffer, work, size); 5636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 5640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 5641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 5643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaGetCanonValue: 5644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @val: the precomputed value 5645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @retValue: the returned value 5646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Get a the cononical lexical representation of the value. 5648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The caller has to FREE the returned retValue. 5649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * WARNING: Some value types are not supported yet, resulting 5651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * in a @retValue of "???". 5652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TODO: XML Schema 1.0 does not define canonical representations 5654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * for: duration, gYearMonth, gYear, gMonthDay, gMonth, gDay, 5655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * anyURI, QName, NOTATION. This will be fixed in XML Schema 1.1. 5656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 5658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 if the value could be built, 1 if the value type is 5659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * not supported yet and -1 in case of API errors. 5660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 5662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue) 5663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 5664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((retValue == NULL) || (val == NULL)) 5665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-1); 5666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = NULL; 5667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (val->type) { 5668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_STRING: 5669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val->value.str == NULL) 5670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = BAD_CAST xmlStrdup(BAD_CAST ""); 5671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 5672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = 5673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST xmlStrdup((const xmlChar *) val->value.str); 5674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NORMSTRING: 5676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val->value.str == NULL) 5677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = BAD_CAST xmlStrdup(BAD_CAST ""); 5678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 5679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = xmlSchemaWhiteSpaceReplace( 5680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (const xmlChar *) val->value.str); 5681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*retValue) == NULL) 5682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = BAD_CAST xmlStrdup( 5683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (const xmlChar *) val->value.str); 5684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_TOKEN: 5687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_LANGUAGE: 5688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NMTOKEN: 5689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NAME: 5690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NCNAME: 5691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ID: 5692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_IDREF: 5693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ENTITY: 5694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NOTATION: /* Unclear */ 5695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ANYURI: /* Unclear */ 5696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val->value.str == NULL) 5697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-1); 5698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = 5699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST xmlSchemaCollapseString(BAD_CAST val->value.str); 5700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*retValue == NULL) 5701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = 5702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST xmlStrdup((const xmlChar *) val->value.str); 5703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_QNAME: 5705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* TODO: Unclear in XML Schema 1.0. */ 5706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val->value.qname.uri == NULL) { 5707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = BAD_CAST xmlStrdup(BAD_CAST val->value.qname.name); 5708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (0); 5709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = BAD_CAST xmlStrdup(BAD_CAST "{"); 5711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = BAD_CAST xmlStrcat((xmlChar *) (*retValue), 5712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST val->value.qname.uri); 5713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = BAD_CAST xmlStrcat((xmlChar *) (*retValue), 5714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST "}"); 5715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = BAD_CAST xmlStrcat((xmlChar *) (*retValue), 5716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST val->value.qname.uri); 5717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DECIMAL: 5720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TODO: Lookout for a more simple implementation. 5722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((val->value.decimal.total == 1) && 5724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (val->value.decimal.lo == 0)) { 5725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = xmlStrdup(BAD_CAST "0.0"); 5726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValDecimal dec = val->value.decimal; 5728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int bufsize; 5729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char *buf = NULL, *offs; 5730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Add room for the decimal point as well. */ 5732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project bufsize = dec.total + 2; 5733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (dec.sign) 5734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project bufsize++; 5735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Add room for leading/trailing zero. */ 5736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((dec.frac == 0) || (dec.frac == dec.total)) 5737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project bufsize++; 5738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = xmlMalloc(bufsize); 5739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf == NULL) 5740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 5741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project offs = buf; 5742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (dec.sign) 5743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *offs++ = '-'; 5744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (dec.frac == dec.total) { 5745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *offs++ = '0'; 5746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *offs++ = '.'; 5747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (dec.hi != 0) 5749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf(offs, bufsize - (offs - buf), 5750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "%lu%lu%lu", dec.hi, dec.mi, dec.lo); 5751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (dec.mi != 0) 5752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf(offs, bufsize - (offs - buf), 5753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "%lu%lu", dec.mi, dec.lo); 5754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 5755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf(offs, bufsize - (offs - buf), 5756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "%lu", dec.lo); 5757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (dec.frac != 0) { 5759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (dec.frac != dec.total) { 5760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int diff = dec.total - dec.frac; 5761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Insert the decimal point. 5763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memmove(offs + diff + 1, offs + diff, dec.frac +1); 5765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project offs[diff] = '.'; 5766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int i = 0; 5768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Insert missing zeroes behind the decimal point. 5770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (*(offs + i) != 0) 5772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project i++; 5773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (i < dec.total) { 5774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memmove(offs + (dec.total - i), offs, i +1); 5775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memset(offs, '0', dec.total - i); 5776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Append decimal point and zero. 5781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project offs = buf + bufsize - 1; 5783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *offs-- = 0; 5784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *offs-- = '0'; 5785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *offs-- = '.'; 5786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = BAD_CAST buf; 5788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_INTEGER: 5791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_PINTEGER: 5792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NPINTEGER: 5793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NINTEGER: 5794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NNINTEGER: 5795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_LONG: 5796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_BYTE: 5797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_SHORT: 5798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_INT: 5799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_UINT: 5800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_ULONG: 5801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_USHORT: 5802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_UBYTE: 5803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((val->value.decimal.total == 1) && 5804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (val->value.decimal.lo == 0)) 5805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = xmlStrdup(BAD_CAST "0"); 5806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 5807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValDecimal dec = val->value.decimal; 5808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int bufsize = dec.total + 1; 5809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Add room for the decimal point as well. */ 5811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (dec.sign) 5812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project bufsize++; 5813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = xmlMalloc(bufsize); 5814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*retValue == NULL) 5815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 5816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (dec.hi != 0) { 5817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (dec.sign) 5818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf((char *) *retValue, bufsize, 5819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "-%lu%lu%lu", dec.hi, dec.mi, dec.lo); 5820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 5821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf((char *) *retValue, bufsize, 5822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "%lu%lu%lu", dec.hi, dec.mi, dec.lo); 5823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (dec.mi != 0) { 5824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (dec.sign) 5825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf((char *) *retValue, bufsize, 5826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "-%lu%lu", dec.mi, dec.lo); 5827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 5828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf((char *) *retValue, bufsize, 5829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "%lu%lu", dec.mi, dec.lo); 5830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (dec.sign) 5832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf((char *) *retValue, bufsize, "-%lu", dec.lo); 5833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 5834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf((char *) *retValue, bufsize, "%lu", dec.lo); 5835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_BOOLEAN: 5839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val->value.b) 5840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = BAD_CAST xmlStrdup(BAD_CAST "true"); 5841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 5842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = BAD_CAST xmlStrdup(BAD_CAST "false"); 5843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DURATION: { 5845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char buf[100]; 5846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned long year; 5847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned long mon, day, hour = 0, min = 0; 5848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project double sec = 0, left; 5849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* TODO: Unclear in XML Schema 1.0 */ 5851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TODO: This results in a normalized output of the value 5853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * - which is NOT conformant to the spec - 5854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * since the exact values of each property are not 5855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * recoverable. Think about extending the structure to 5856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * provide a field for every property. 5857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project year = (unsigned long) FQUOTIENT(labs(val->value.dur.mon), 12); 5859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project mon = labs(val->value.dur.mon) - 12 * year; 5860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project day = (unsigned long) FQUOTIENT(fabs(val->value.dur.sec), 86400); 5862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project left = fabs(val->value.dur.sec) - day * 86400; 5863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (left > 0) { 5864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project hour = (unsigned long) FQUOTIENT(left, 3600); 5865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project left = left - (hour * 3600); 5866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (left > 0) { 5867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project min = (unsigned long) FQUOTIENT(left, 60); 5868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project sec = left - (min * 60); 5869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((val->value.dur.mon < 0) || (val->value.dur.sec < 0)) 5872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf(buf, 100, "P%luY%luM%luDT%luH%luM%.14gS", 5873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project year, mon, day, hour, min, sec); 5874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 5875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf(buf, 100, "-P%luY%luM%luDT%luH%luM%.14gS", 5876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project year, mon, day, hour, min, sec); 5877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = BAD_CAST xmlStrdup(BAD_CAST buf); 5878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GYEAR: { 5881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char buf[30]; 5882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* TODO: Unclear in XML Schema 1.0 */ 5883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* TODO: What to do with the timezone? */ 5884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf(buf, 30, "%04ld", val->value.date.year); 5885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = BAD_CAST xmlStrdup(BAD_CAST buf); 5886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GMONTH: { 5889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* TODO: Unclear in XML Schema 1.0 */ 5890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* TODO: What to do with the timezone? */ 5891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = xmlMalloc(6); 5892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*retValue == NULL) 5893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 5894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf((char *) *retValue, 6, "--%02u", 5895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val->value.date.mon); 5896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GDAY: { 5899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* TODO: Unclear in XML Schema 1.0 */ 5900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* TODO: What to do with the timezone? */ 5901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = xmlMalloc(6); 5902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*retValue == NULL) 5903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 5904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf((char *) *retValue, 6, "---%02u", 5905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val->value.date.day); 5906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GMONTHDAY: { 5909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* TODO: Unclear in XML Schema 1.0 */ 5910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* TODO: What to do with the timezone? */ 5911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = xmlMalloc(8); 5912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*retValue == NULL) 5913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 5914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf((char *) *retValue, 8, "--%02u-%02u", 5915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val->value.date.mon, val->value.date.day); 5916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_GYEARMONTH: { 5919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char buf[35]; 5920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* TODO: Unclear in XML Schema 1.0 */ 5921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* TODO: What to do with the timezone? */ 5922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val->value.date.year < 0) 5923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf(buf, 35, "-%04ld-%02u", 5924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project labs(val->value.date.year), 5925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val->value.date.mon); 5926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 5927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf(buf, 35, "%04ld-%02u", 5928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val->value.date.year, val->value.date.mon); 5929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = BAD_CAST xmlStrdup(BAD_CAST buf); 5930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_TIME: 5933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project { 5934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char buf[30]; 5935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val->value.date.tz_flag) { 5937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr norm; 5938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project norm = xmlSchemaDateNormalize(val, 0); 5940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (norm == NULL) 5941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-1); 5942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TODO: Check if "%.14g" is portable. 5944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf(buf, 30, 5946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "%02u:%02u:%02.14gZ", 5947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project norm->value.date.hour, 5948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project norm->value.date.min, 5949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project norm->value.date.sec); 5950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(norm); 5951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf(buf, 30, 5953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "%02u:%02u:%02.14g", 5954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val->value.date.hour, 5955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val->value.date.min, 5956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val->value.date.sec); 5957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = BAD_CAST xmlStrdup(BAD_CAST buf); 5959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5961ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DATE: 5962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project { 5963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char buf[30]; 5964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val->value.date.tz_flag) { 5966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr norm; 5967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project norm = xmlSchemaDateNormalize(val, 0); 5969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (norm == NULL) 5970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-1); 5971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 5972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TODO: Append the canonical value of the 5973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * recoverable timezone and not "Z". 5974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 5975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf(buf, 30, 5976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "%04ld:%02u:%02uZ", 5977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project norm->value.date.year, norm->value.date.mon, 5978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project norm->value.date.day); 5979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(norm); 5980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 5981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf(buf, 30, 5982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "%04ld:%02u:%02u", 5983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val->value.date.year, val->value.date.mon, 5984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val->value.date.day); 5985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = BAD_CAST xmlStrdup(BAD_CAST buf); 5987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 5988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 5989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DATETIME: 5990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project { 5991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char buf[50]; 5992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val->value.date.tz_flag) { 5994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaValPtr norm; 5995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 5996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project norm = xmlSchemaDateNormalize(val, 0); 5997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (norm == NULL) 5998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-1); 5999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 6000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TODO: Check if "%.14g" is portable. 6001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf(buf, 50, 6003ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "%04ld:%02u:%02uT%02u:%02u:%02.14gZ", 6004ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project norm->value.date.year, norm->value.date.mon, 6005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project norm->value.date.day, norm->value.date.hour, 6006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project norm->value.date.min, norm->value.date.sec); 6007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaFreeValue(norm); 6008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 6009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf(buf, 50, 6010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "%04ld:%02u:%02uT%02u:%02u:%02.14g", 6011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val->value.date.year, val->value.date.mon, 6012ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val->value.date.day, val->value.date.hour, 6013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project val->value.date.min, val->value.date.sec); 6014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = BAD_CAST xmlStrdup(BAD_CAST buf); 6016ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 6018ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_HEXBINARY: 6019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = BAD_CAST xmlStrdup(BAD_CAST val->value.hex.str); 6020ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 6021ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_BASE64BINARY: 6022ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 6023ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TODO: Is the following spec piece implemented?: 6024ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * SPEC: "Note: For some values the canonical form defined 6025ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * above does not conform to [RFC 2045], which requires breaking 6026ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * with linefeeds at appropriate intervals." 6027ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = BAD_CAST xmlStrdup(BAD_CAST val->value.base64.str); 6029ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 6030ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_FLOAT: { 6031ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char buf[30]; 6032ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 6033ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * |m| < 16777216, -149 <= e <= 104. 6034ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TODO: Handle, NaN, INF, -INF. The format is not 6035ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * yet conformant. The c type float does not cover 6036ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the whole range. 6037ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6038ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf(buf, 30, "%01.14e", val->value.f); 6039ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = BAD_CAST xmlStrdup(BAD_CAST buf); 6040ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6041ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 6042ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_DOUBLE: { 6043ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char buf[40]; 6044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* |m| < 9007199254740992, -1075 <= e <= 970 */ 6045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 6046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TODO: Handle, NaN, INF, -INF. The format is not 6047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * yet conformant. The c type float does not cover 6048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the whole range. 6049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6050ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf(buf, 40, "%01.14e", val->value.d); 6051ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = BAD_CAST xmlStrdup(BAD_CAST buf); 6052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 6054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 6055ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = BAD_CAST xmlStrdup(BAD_CAST "???"); 6056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (1); 6057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*retValue == NULL) 6059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 6060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (0); 6061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 6062ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 6064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaGetCanonValueWhtsp: 6065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @val: the precomputed value 6066ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @retValue: the returned value 6067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ws: the whitespace type of the value 6068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 6069ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Get a the cononical representation of the value. 6070ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The caller has to free the returned @retValue. 6071ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 6072ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 if the value could be built, 1 if the value type is 6073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * not supported yet and -1 in case of API errors. 6074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6075ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 6076ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaGetCanonValueWhtsp(xmlSchemaValPtr val, 6077ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar **retValue, 6078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSchemaWhitespaceValueType ws) 6079ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 6080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((retValue == NULL) || (val == NULL)) 6081ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-1); 6082ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ws == XML_SCHEMA_WHITESPACE_UNKNOWN) || 6083ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (ws > XML_SCHEMA_WHITESPACE_COLLAPSE)) 6084ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (-1); 6085ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6086ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = NULL; 6087ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (val->type) { 6088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_STRING: 6089ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val->value.str == NULL) 6090ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = BAD_CAST xmlStrdup(BAD_CAST ""); 6091ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE) 6092ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = xmlSchemaCollapseString(val->value.str); 6093ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (ws == XML_SCHEMA_WHITESPACE_REPLACE) 6094ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = xmlSchemaWhiteSpaceReplace(val->value.str); 6095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*retValue) == NULL) 6096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = BAD_CAST xmlStrdup(val->value.str); 6097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 6098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_SCHEMAS_NORMSTRING: 6099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val->value.str == NULL) 6100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = BAD_CAST xmlStrdup(BAD_CAST ""); 6101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 6102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE) 6103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = xmlSchemaCollapseString(val->value.str); 6104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 6105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = xmlSchemaWhiteSpaceReplace(val->value.str); 6106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*retValue) == NULL) 6107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *retValue = BAD_CAST xmlStrdup(val->value.str); 6108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 6110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 6111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (xmlSchemaGetCanonValue(val, retValue)); 6112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 6113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (0); 6114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 6115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 6117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlSchemaGetValType: 6118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @val: a schemas value 6119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 6120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Accessor for the type of a value 6121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 6122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the xmlSchemaValType of the value 6123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaValType 6125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlSchemaGetValType(xmlSchemaValPtr val) 6126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 6127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (val == NULL) 6128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_SCHEMAS_UNKNOWN); 6129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (val->type); 6130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 6131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 6132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define bottom_xmlschemastypes 6133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include "elfgcchack.h" 6134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_SCHEMAS_ENABLED */ 6135