1ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * catalog.c: set of generic Catalog related routines 3ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 4ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Reference: SGML Open Technical Resolution TR9401:1997. 5ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * http://www.jclark.com/sp/catalog.htm 6ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 7ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * XML Catalogs Working Draft 06 August 2001 8ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * http://www.oasis-open.org/committees/entity/spec-2001-08-06.html 9ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 10ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * See Copyright for the status of this software. 11ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 12ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Daniel.Veillard@imag.fr 13ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 14ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 15ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define IN_LIBXML 16ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include "libxml.h" 17ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 18ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_CATALOG_ENABLED 19ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_SYS_TYPES_H 20ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <sys/types.h> 21ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 22ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_SYS_STAT_H 23ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <sys/stat.h> 24ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 25ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_UNISTD_H 26ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <unistd.h> 27ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 28ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_FCNTL_H 29ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <fcntl.h> 30ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 31ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_STDLIB_H 32ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <stdlib.h> 33ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 34ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <string.h> 35ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/xmlmemory.h> 36ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/hash.h> 37ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/uri.h> 38ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/parserInternals.h> 39ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/catalog.h> 40ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/xmlerror.h> 41ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/threads.h> 42ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <libxml/globals.h> 43ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 4494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun#include "buf.h" 4594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun 46ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define MAX_DELEGATE 50 47ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define MAX_CATAL_DEPTH 50 48ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 49ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef _WIN32 50ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# define PATH_SEAPARATOR ';' 51ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 52ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project# define PATH_SEAPARATOR ':' 53ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 54ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 55ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 56ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * TODO: 57ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 58ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * macro to flag unimplemented blocks 59ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * XML_CATALOG_PREFER user env to select between system/public prefered 60ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * option. C.f. Richard Tobin <richard@cogsci.ed.ac.uk> 61ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *> Just FYI, I am using an environment variable XML_CATALOG_PREFER with 62ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *> values "system" and "public". I have made the default be "system" to 63ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *> match yours. 64ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 6594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun#define TODO \ 66ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, \ 67ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Unimplemented block at %s:%d\n", \ 68ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project __FILE__, __LINE__); 69ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 70ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define XML_URN_PUBID "urn:publicid:" 71ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define XML_CATAL_BREAK ((xmlChar *) -1) 72ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifndef XML_XML_DEFAULT_CATALOG 73ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define XML_XML_DEFAULT_CATALOG "file:///etc/xml/catalog" 74ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 75ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifndef XML_SGML_DEFAULT_CATALOG 76ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define XML_SGML_DEFAULT_CATALOG "file:///etc/sgml/catalog" 77ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 78ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 79ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined(_WIN32) && defined(_MSC_VER) 80ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#undef XML_XML_DEFAULT_CATALOG 81ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic char XML_XML_DEFAULT_CATALOG[256] = "file:///etc/xml/catalog"; 82ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined(_WIN32_WCE) 83ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* Windows CE don't have a A variant */ 84ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define GetModuleHandleA GetModuleHandle 85ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define GetModuleFileNameA GetModuleFileName 86ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 8794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun#if !defined(_WINDOWS_) 88ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid* __stdcall GetModuleHandleA(const char*); 89ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectunsigned long __stdcall GetModuleFileNameA(void*, char*, unsigned long); 90ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 91ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 9294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun#endif 93ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 94ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlChar *xmlCatalogNormalizePublic(const xmlChar *pubID); 95ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int xmlExpandCatalog(xmlCatalogPtr catal, const char *filename); 96ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 97ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 98ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 99ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Types, all private * 100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef enum { 104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_CATA_REMOVED = -1, 105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_CATA_NONE = 0, 106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_CATA_CATALOG, 107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_CATA_BROKEN_CATALOG, 108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_CATA_NEXT_CATALOG, 109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_CATA_GROUP, 110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_CATA_PUBLIC, 111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_CATA_SYSTEM, 112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_CATA_REWRITE_SYSTEM, 113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_CATA_DELEGATE_PUBLIC, 114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_CATA_DELEGATE_SYSTEM, 115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_CATA_URI, 116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_CATA_REWRITE_URI, 117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_CATA_DELEGATE_URI, 118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SGML_CATA_SYSTEM, 119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SGML_CATA_PUBLIC, 120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SGML_CATA_ENTITY, 121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SGML_CATA_PENTITY, 122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SGML_CATA_DOCTYPE, 123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SGML_CATA_LINKTYPE, 124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SGML_CATA_NOTATION, 125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SGML_CATA_DELEGATE, 126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SGML_CATA_BASE, 127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SGML_CATA_CATALOG, 128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SGML_CATA_DOCUMENT, 129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SGML_CATA_SGMLDECL 130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} xmlCatalogEntryType; 131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef struct _xmlCatalogEntry xmlCatalogEntry; 133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef xmlCatalogEntry *xmlCatalogEntryPtr; 134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstruct _xmlCatalogEntry { 135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project struct _xmlCatalogEntry *next; 136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project struct _xmlCatalogEntry *parent; 137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project struct _xmlCatalogEntry *children; 138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryType type; 139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *name; 140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *value; 141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *URL; /* The expanded URL using the base */ 142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogPrefer prefer; 143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int dealloc; 144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int depth; 145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project struct _xmlCatalogEntry *group; 146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}; 147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projecttypedef enum { 149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_XML_CATALOG_TYPE = 1, 150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_SGML_CATALOG_TYPE 151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} xmlCatalogType; 152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define XML_MAX_SGML_CATA_DEPTH 10 154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstruct _xmlCatalog { 155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogType type; /* either XML or SGML */ 156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * SGML Catalogs are stored as a simple hash table of catalog entries 159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Catalog stack to check against overflows when building the 160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * SGML catalog 161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char *catalTab[XML_MAX_SGML_CATA_DEPTH]; /* stack of catals */ 163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int catalNr; /* Number of current catal streams */ 164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int catalMax; /* Max number of catal streams */ 165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlHashTablePtr sgml; 166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * XML Catalogs are stored as a tree of Catalog entries 169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogPrefer prefer; 171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr xml; 172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}; 173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Global variables * 177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* 181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Those are preferences 182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int xmlDebugCatalogs = 0; /* used for debugging */ 184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlCatalogAllow xmlCatalogDefaultAllow = XML_CATA_ALLOW_ALL; 185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlCatalogPrefer xmlCatalogDefaultPrefer = XML_CATA_PREFER_PUBLIC; 186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* 188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Hash table containing all the trees of XML catalogs parsed by 189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the application. 190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlHashTablePtr xmlCatalogXMLFiles = NULL; 192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* 194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The default catalog in use by the application 195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlCatalogPtr xmlDefaultCatalog = NULL; 197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* 199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * A mutex for modifying the shared global catalog(s) 200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlDefaultCatalog tree. 201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * It also protects xmlCatalogXMLFiles 202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The core of this readers/writer scheme is in xmlFetchXMLCatalogFile() 203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlRMutexPtr xmlCatalogMutex = NULL; 205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/* 207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Whether the catalog support was initialized. 208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int xmlCatalogInitialized = 0; 210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 21394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * Catalog error handlers * 214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogErrMemory: 219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @extra: extra informations 220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handle an out of memory condition 222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogErrMemory(const char *extra) 225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_CATALOG, 227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_ERR_NO_MEMORY, XML_ERR_ERROR, NULL, 0, 228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project extra, NULL, NULL, 0, 0, 229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Memory allocation failed : %s\n", extra); 230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogErr: 234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catal: the Catalog entry 235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @node: the context node 236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @msg: the error message 237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @extra: extra informations 238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handle a catalog error 240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogErr(xmlCatalogEntryPtr catal, xmlNodePtr node, int error, 243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *msg, const xmlChar *str1, const xmlChar *str2, 244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *str3) 245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project __xmlRaiseError(NULL, NULL, NULL, catal, node, XML_FROM_CATALOG, 247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project error, XML_ERR_ERROR, NULL, 0, 248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (const char *) str1, (const char *) str2, 249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (const char *) str3, 0, 0, 250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project msg, str1, str2, str3); 251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Allocation and Freeing * 257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlNewCatalogEntry: 262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @type: type of entry 263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @name: name of the entry 264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: value of the entry 265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @prefer: the PUBLIC vs. SYSTEM current preference value 26694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * @group: for members of a group, the group entry 267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 26894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * create a new Catalog entry, this type is shared both by XML and 269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * SGML catalogs, but the acceptable types values differs. 270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the xmlCatalogEntryPtr or NULL in case of error 272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlCatalogEntryPtr 274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlNewCatalogEntry(xmlCatalogEntryType type, const xmlChar *name, 275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *value, const xmlChar *URL, xmlCatalogPrefer prefer, 276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr group) { 277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr ret; 278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *normid = NULL; 279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = (xmlCatalogEntryPtr) xmlMalloc(sizeof(xmlCatalogEntry)); 281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == NULL) { 282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogErrMemory("allocating catalog entry"); 283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->next = NULL; 286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->parent = NULL; 287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->children = NULL; 288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->type = type; 289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (type == XML_CATA_PUBLIC || type == XML_CATA_DELEGATE_PUBLIC) { 290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project normid = xmlCatalogNormalizePublic(name); 291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (normid != NULL) 292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = (*normid != 0 ? normid : NULL); 293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (name != NULL) 295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->name = xmlStrdup(name); 296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->name = NULL; 298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (normid != NULL) 299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(normid); 300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (value != NULL) 301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->value = xmlStrdup(value); 302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->value = NULL; 304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (URL == NULL) 305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project URL = value; 306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (URL != NULL) 307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->URL = xmlStrdup(URL); 308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->URL = NULL; 310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->prefer = prefer; 311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->dealloc = 0; 312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->depth = 0; 313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->group = group; 314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlFreeCatalogEntryList(xmlCatalogEntryPtr ret); 319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlFreeCatalogEntry: 322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ret: a Catalog entry 323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Free the memory allocated to a Catalog entry 325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlFreeCatalogEntry(xmlCatalogEntryPtr ret) { 328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == NULL) 329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Entries stored in the file hash must be deallocated 332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * only by the file hash cleaner ! 333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret->dealloc == 1) 335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) { 338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret->name != NULL) 339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Free catalog entry %s\n", ret->name); 341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (ret->value != NULL) 342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Free catalog entry %s\n", ret->value); 344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Free catalog entry\n"); 347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret->name != NULL) 350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(ret->name); 351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret->value != NULL) 352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(ret->value); 353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret->URL != NULL) 354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(ret->URL); 355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(ret); 356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlFreeCatalogEntryList: 360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ret: a Catalog entry list 361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Free the memory allocated to a full chained list of Catalog entries 363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlFreeCatalogEntryList(xmlCatalogEntryPtr ret) { 366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr next; 367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (ret != NULL) { 369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project next = ret->next; 370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeCatalogEntry(ret); 371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = next; 372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlFreeCatalogHashEntryList: 377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ret: a Catalog entry list 378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Free the memory allocated to list of Catalog entries from the 380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * catalog file hash. 381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlFreeCatalogHashEntryList(xmlCatalogEntryPtr catal) { 384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr children, next; 385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal == NULL) 387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project children = catal->children; 390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (children != NULL) { 391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project next = children->next; 392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project children->dealloc = 0; 393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project children->children = NULL; 394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeCatalogEntry(children); 395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project children = next; 396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal->dealloc = 0; 398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeCatalogEntry(catal); 399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCreateNewCatalog: 403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @type: type of catalog 404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @prefer: the PUBLIC vs. SYSTEM current preference value 405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 40694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * create a new Catalog, this type is shared both by XML and 407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * SGML catalogs, but the acceptable types values differs. 408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the xmlCatalogPtr or NULL in case of error 410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlCatalogPtr 412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCreateNewCatalog(xmlCatalogType type, xmlCatalogPrefer prefer) { 413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogPtr ret; 414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = (xmlCatalogPtr) xmlMalloc(sizeof(xmlCatalog)); 416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == NULL) { 417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogErrMemory("allocating catalog"); 418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project memset(ret, 0, sizeof(xmlCatalog)); 421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->type = type; 422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->catalNr = 0; 423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->catalMax = XML_MAX_SGML_CATA_DEPTH; 424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->prefer = prefer; 425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret->type == XML_SGML_CATALOG_TYPE) 426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret->sgml = xmlHashCreate(10); 427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlFreeCatalog: 432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catal: a Catalog 433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Free the memory allocated to a Catalog 435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlFreeCatalog(xmlCatalogPtr catal) { 438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal == NULL) 439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->xml != NULL) 441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeCatalogEntryList(catal->xml); 442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->sgml != NULL) 443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlHashFree(catal->sgml, 444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlHashDeallocator) xmlFreeCatalogEntry); 445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(catal); 446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Serializing Catalogs * 451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogDumpEntry: 457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @entry: the catalog entry 458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @out: the file. 459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Serialize an SGML Catalog entry 461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogDumpEntry(xmlCatalogEntryPtr entry, FILE *out) { 464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((entry == NULL) || (out == NULL)) 465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (entry->type) { 467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_ENTITY: 468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(out, "ENTITY "); break; 469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_PENTITY: 470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(out, "ENTITY %%"); break; 471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_DOCTYPE: 472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(out, "DOCTYPE "); break; 473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_LINKTYPE: 474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(out, "LINKTYPE "); break; 475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_NOTATION: 476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(out, "NOTATION "); break; 477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_PUBLIC: 478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(out, "PUBLIC "); break; 479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_SYSTEM: 480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(out, "SYSTEM "); break; 481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_DELEGATE: 482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(out, "DELEGATE "); break; 483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_BASE: 484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(out, "BASE "); break; 485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_CATALOG: 486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(out, "CATALOG "); break; 487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_DOCUMENT: 488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(out, "DOCUMENT "); break; 489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_SGMLDECL: 490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(out, "SGMLDECL "); break; 491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (entry->type) { 495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_ENTITY: 496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_PENTITY: 497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_DOCTYPE: 498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_LINKTYPE: 499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_NOTATION: 500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(out, "%s", (const char *) entry->name); break; 501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_PUBLIC: 502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_SYSTEM: 503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_SGMLDECL: 504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_DOCUMENT: 505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_CATALOG: 506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_BASE: 507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_DELEGATE: 508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(out, "\"%s\"", entry->name); break; 509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (entry->type) { 513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_ENTITY: 514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_PENTITY: 515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_DOCTYPE: 516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_LINKTYPE: 517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_NOTATION: 518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_PUBLIC: 519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_SYSTEM: 520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_DELEGATE: 521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(out, " \"%s\"", entry->value); break; 522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fprintf(out, "\n"); 526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlDumpXMLCatalogNode: 530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catal: top catalog entry 531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catalog: pointer to the xml tree 532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @doc: the containing document 533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @ns: the current namespace 534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cgroup: group node for group members 535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Serializes a Catalog entry, called by xmlDumpXMLCatalog and recursively 537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * for group entries 538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void xmlDumpXMLCatalogNode(xmlCatalogEntryPtr catal, xmlNodePtr catalog, 540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDocPtr doc, xmlNsPtr ns, xmlCatalogEntryPtr cgroup) { 541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNodePtr node; 542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr cur; 543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * add all the catalog entries 545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = catal; 547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (cur != NULL) { 548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur->group == cgroup) { 549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (cur->type) { 550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_REMOVED: 551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_BROKEN_CATALOG: 553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_CATALOG: 554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == catal) { 555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = cur->children; 556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project continue; 557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_NEXT_CATALOG: 560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project node = xmlNewDocNode(doc, ns, BAD_CAST "nextCatalog", NULL); 561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSetProp(node, BAD_CAST "catalog", cur->value); 562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlAddChild(catalog, node); 563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_NONE: 565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_GROUP: 567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project node = xmlNewDocNode(doc, ns, BAD_CAST "group", NULL); 568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSetProp(node, BAD_CAST "id", cur->name); 569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur->value != NULL) { 570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNsPtr xns; 571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xns = xmlSearchNsByHref(doc, node, XML_XML_NAMESPACE); 572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xns != NULL) 573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSetNsProp(node, xns, BAD_CAST "base", 57494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun cur->value); 575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (cur->prefer) { 577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_PREFER_NONE: 578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_PREFER_PUBLIC: 580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSetProp(node, BAD_CAST "prefer", BAD_CAST "public"); 581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_PREFER_SYSTEM: 583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSetProp(node, BAD_CAST "prefer", BAD_CAST "system"); 584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDumpXMLCatalogNode(cur->next, node, doc, ns, cur); 587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlAddChild(catalog, node); 588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_PUBLIC: 590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project node = xmlNewDocNode(doc, ns, BAD_CAST "public", NULL); 591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSetProp(node, BAD_CAST "publicId", cur->name); 592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSetProp(node, BAD_CAST "uri", cur->value); 593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlAddChild(catalog, node); 594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_SYSTEM: 596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project node = xmlNewDocNode(doc, ns, BAD_CAST "system", NULL); 597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSetProp(node, BAD_CAST "systemId", cur->name); 598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSetProp(node, BAD_CAST "uri", cur->value); 599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlAddChild(catalog, node); 600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_REWRITE_SYSTEM: 602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project node = xmlNewDocNode(doc, ns, BAD_CAST "rewriteSystem", NULL); 603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSetProp(node, BAD_CAST "systemIdStartString", cur->name); 604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSetProp(node, BAD_CAST "rewritePrefix", cur->value); 605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlAddChild(catalog, node); 606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_DELEGATE_PUBLIC: 608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project node = xmlNewDocNode(doc, ns, BAD_CAST "delegatePublic", NULL); 609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSetProp(node, BAD_CAST "publicIdStartString", cur->name); 610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSetProp(node, BAD_CAST "catalog", cur->value); 611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlAddChild(catalog, node); 612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_DELEGATE_SYSTEM: 614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project node = xmlNewDocNode(doc, ns, BAD_CAST "delegateSystem", NULL); 615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSetProp(node, BAD_CAST "systemIdStartString", cur->name); 616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSetProp(node, BAD_CAST "catalog", cur->value); 617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlAddChild(catalog, node); 618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_URI: 620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project node = xmlNewDocNode(doc, ns, BAD_CAST "uri", NULL); 621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSetProp(node, BAD_CAST "name", cur->name); 622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSetProp(node, BAD_CAST "uri", cur->value); 623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlAddChild(catalog, node); 624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_REWRITE_URI: 626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project node = xmlNewDocNode(doc, ns, BAD_CAST "rewriteURI", NULL); 627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSetProp(node, BAD_CAST "uriStartString", cur->name); 628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSetProp(node, BAD_CAST "rewritePrefix", cur->value); 629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlAddChild(catalog, node); 630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_DELEGATE_URI: 632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project node = xmlNewDocNode(doc, ns, BAD_CAST "delegateURI", NULL); 633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSetProp(node, BAD_CAST "uriStartString", cur->name); 634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlSetProp(node, BAD_CAST "catalog", cur->value); 635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlAddChild(catalog, node); 636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_SYSTEM: 638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_PUBLIC: 639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_ENTITY: 640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_PENTITY: 641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_DOCTYPE: 642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_LINKTYPE: 643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_NOTATION: 644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_DELEGATE: 645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_BASE: 646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_CATALOG: 647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_DOCUMENT: 648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_SGMLDECL: 649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = cur->next; 653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDumpXMLCatalog(FILE *out, xmlCatalogEntryPtr catal) { 658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret; 659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDocPtr doc; 660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNsPtr ns; 661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDtdPtr dtd; 662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNodePtr catalog; 663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlOutputBufferPtr buf; 664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Rebuild a catalog 667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project doc = xmlNewDoc(NULL); 669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (doc == NULL) 670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project dtd = xmlNewDtd(doc, BAD_CAST "catalog", 672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN", 673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectBAD_CAST "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd"); 674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlAddChild((xmlNodePtr) doc, (xmlNodePtr) dtd); 676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ns = xmlNewNs(NULL, XML_CATALOGS_NAMESPACE, NULL); 678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ns == NULL) { 679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDoc(doc); 680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catalog = xmlNewDocNode(doc, ns, BAD_CAST "catalog", NULL); 683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catalog == NULL) { 684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeNs(ns); 685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDoc(doc); 686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catalog->nsDef = ns; 689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlAddChild((xmlNodePtr) doc, catalog); 690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDumpXMLCatalogNode(catal, catalog, doc, ns, NULL); 69294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun 693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * reserialize it 695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = xmlOutputBufferCreateFile(out, NULL); 697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf == NULL) { 698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDoc(doc); 699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlSaveFormatFileTo(buf, doc, NULL, 1); 702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Free it 705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDoc(doc); 707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */ 711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Converting SGML Catalogs to XML * 715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogConvertEntry: 720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @entry: the entry 721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catal: pointer to the catalog being converted 722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Convert one entry from the catalog 724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogConvertEntry(xmlCatalogEntryPtr entry, xmlCatalogPtr catal) { 727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((entry == NULL) || (catal == NULL) || (catal->sgml == NULL) || 728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (catal->xml == NULL)) 729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (entry->type) { 731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_ENTITY: 732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project entry->type = XML_CATA_PUBLIC; 733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_PENTITY: 735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project entry->type = XML_CATA_PUBLIC; 736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_DOCTYPE: 738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project entry->type = XML_CATA_PUBLIC; 739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_LINKTYPE: 741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project entry->type = XML_CATA_PUBLIC; 742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_NOTATION: 744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project entry->type = XML_CATA_PUBLIC; 745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_PUBLIC: 747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project entry->type = XML_CATA_PUBLIC; 748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_SYSTEM: 750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project entry->type = XML_CATA_SYSTEM; 751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_DELEGATE: 753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project entry->type = XML_CATA_DELEGATE_PUBLIC; 754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_CATALOG: 756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project entry->type = XML_CATA_CATALOG; 757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlHashRemoveEntry(catal->sgml, entry->name, 760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlHashDeallocator) xmlFreeCatalogEntry); 761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Conversion successful, remove from the SGML catalog 765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * and add it to the default XML one 766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlHashRemoveEntry(catal->sgml, entry->name, NULL); 768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project entry->parent = catal->xml; 769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project entry->next = NULL; 770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->xml->children == NULL) 771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal->xml->children = entry; 772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr prev; 774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project prev = catal->xml->children; 776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (prev->next != NULL) 777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project prev = prev->next; 778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project prev->next = entry; 779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlConvertSGMLCatalog: 784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catal: the catalog 785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Convert all the SGML catalog entries as XML ones 787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of entries converted if successful, -1 otherwise 789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlConvertSGMLCatalog(xmlCatalogPtr catal) { 792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((catal == NULL) || (catal->type != XML_SGML_CATALOG_TYPE)) 794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) { 797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Converting SGML catalog to XML\n"); 799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlHashScan(catal->sgml, 801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlHashScanner) xmlCatalogConvertEntry, 802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project &catal); 803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Helper function * 809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogUnWrapURN: 814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @urn: an "urn:publicid:" to unwrap 815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Expand the URN into the equivalent Public Identifier 817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the new identifier or NULL, the string must be deallocated 819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * by the caller. 820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlChar * 822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogUnWrapURN(const xmlChar *urn) { 823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar result[2000]; 824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned int i = 0; 825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlStrncmp(urn, BAD_CAST XML_URN_PUBID, sizeof(XML_URN_PUBID) - 1)) 827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project urn += sizeof(XML_URN_PUBID) - 1; 82994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun 830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (*urn != 0) { 831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (i > sizeof(result) - 4) 832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*urn == '+') { 834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project result[i++] = ' '; 835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project urn++; 836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (*urn == ':') { 837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project result[i++] = '/'; 838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project result[i++] = '/'; 839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project urn++; 840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (*urn == ';') { 841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project result[i++] = ':'; 842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project result[i++] = ':'; 843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project urn++; 844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (*urn == '%') { 845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((urn[1] == '2') && (urn[2] == 'B')) 846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project result[i++] = '+'; 847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if ((urn[1] == '3') && (urn[2] == 'A')) 848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project result[i++] = ':'; 849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if ((urn[1] == '2') && (urn[2] == 'F')) 850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project result[i++] = '/'; 851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if ((urn[1] == '3') && (urn[2] == 'B')) 852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project result[i++] = ';'; 853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if ((urn[1] == '2') && (urn[2] == '7')) 854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project result[i++] = '\''; 855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if ((urn[1] == '3') && (urn[2] == 'F')) 856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project result[i++] = '?'; 857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if ((urn[1] == '2') && (urn[2] == '3')) 858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project result[i++] = '#'; 859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if ((urn[1] == '2') && (urn[2] == '5')) 860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project result[i++] = '%'; 861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project result[i++] = *urn; 863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project urn++; 864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project continue; 865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project urn += 3; 867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project result[i++] = *urn; 869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project urn++; 870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project result[i] = 0; 873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlStrdup(result)); 875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseCatalogFile: 879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: the filename 880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parse an XML file and build a tree. It's like xmlParseFile() 882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * except it bypass all catalog lookups. 883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resulting document tree or NULL in case of error 885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDocPtr 888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseCatalogFile(const char *filename) { 889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDocPtr ret; 890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserCtxtPtr ctxt; 891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char *directory = NULL; 892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputPtr inputStream; 893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParserInputBufferPtr buf; 894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt = xmlNewParserCtxt(); 896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt == NULL) { 897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_SAX1_ENABLED 898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDefaultSAXHandler.error != NULL) { 899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDefaultSAXHandler.error(NULL, "out of memory\n"); 900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = xmlParserInputBufferCreateFilename(filename, XML_CHAR_ENCODING_NONE); 906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf == NULL) { 907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputStream = xmlNewInputStream(ctxt); 912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (inputStream == NULL) { 913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputStream->filename = (char *) xmlCanonicPath((const xmlChar *)filename); 918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputStream->buf = buf; 91994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun xmlBufResetInput(buf->buffer, inputStream); 920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project inputPush(ctxt, inputStream); 922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->directory == NULL) && (directory == NULL)) 923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project directory = xmlParserGetDirectory(filename); 924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ctxt->directory == NULL) && (directory != NULL)) 925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->directory = directory; 926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->valid = 0; 927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->validate = 0; 928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->loadsubset = 0; 929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->pedantic = 0; 930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->dictNames = 1; 931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseDocument(ctxt); 933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ctxt->wellFormed) 935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = ctxt->myDoc; 936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = NULL; 938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDoc(ctxt->myDoc); 939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ctxt->myDoc = NULL; 940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeParserCtxt(ctxt); 94294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun 943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlLoadFileContent: 948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: a file path 949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Load a file content into memory. 951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns a pointer to the 0 terminated string or NULL in case of error 953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlChar * 955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlLoadFileContent(const char *filename) 956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_STAT 958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int fd; 959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project FILE *fd; 961ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int len; 963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project long size; 964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_STAT 966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project struct stat info; 967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *content; 969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (filename == NULL) 971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_STAT 974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (stat(filename, &info) < 0) 975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_STAT 979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((fd = open(filename, O_RDONLY)) < 0) 980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((fd = fopen(filename, "rb")) == NULL) 982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project { 984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_STAT 987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project size = info.st_size; 988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (fseek(fd, 0, SEEK_END) || (size = ftell(fd)) == EOF || fseek(fd, 0, SEEK_SET)) { /* File operations denied? ok, just close and return failure */ 990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project fclose(fd); 991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 99494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun content = (xmlChar*)xmlMallocAtomic(size + 10); 995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (content == NULL) { 996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogErrMemory("allocating catalog data"); 997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef HAVE_STAT 1000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = read(fd, content, size); 1001df143a5041f03a22808b59c76698770b74692815Selim Gurun close(fd); 1002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 1003ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = fread(content, 1, size, fd); 1004df143a5041f03a22808b59c76698770b74692815Selim Gurun fclose(fd); 1005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 1006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len < 0) { 1007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(content); 1008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 1009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project content[len] = 0; 1011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1012ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(content); 1013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1016ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogNormalizePublic: 1017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @pubID: the public ID string 1018ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Normalizes the Public Identifier 1020ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1021ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Implements 6.2. Public Identifier Normalization 1022ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * from http://www.oasis-open.org/committees/entity/spec-2001-08-06.html 1023ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1024ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the new string or NULL, the string must be deallocated 1025ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * by the caller. 1026ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1027ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlChar * 1028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogNormalizePublic(const xmlChar *pubID) 1029ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 1030ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ok = 1; 1031ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int white; 1032ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *p; 1033ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *ret; 1034ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *q; 1035ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1036ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (pubID == NULL) 1037ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 1038ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1039ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project white = 1; 1040ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (p = pubID;*p != 0 && ok;p++) { 1041ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlIsBlank_ch(*p)) 1042ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project white = 0; 1043ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (*p == 0x20 && !white) 1044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project white = 1; 1045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 1046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ok = 0; 1047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ok && !white) /* is normalized */ 1049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 1050ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1051ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlStrdup(pubID); 1052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project q = ret; 1053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project white = 0; 1054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (p = pubID;*p != 0;p++) { 1055ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlIsBlank_ch(*p)) { 1056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (q != ret) 1057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project white = 1; 1058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 1059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (white) { 1060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *(q++) = 0x20; 1061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project white = 0; 1062ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *(q++) = *p; 1064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1066ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *q = 0; 1067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 1068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1069ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1070ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 1071ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 1072ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The XML Catalog parser * 1073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 1074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 1075ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1076ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlCatalogEntryPtr 1077ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseXMLCatalogFile(xmlCatalogPrefer prefer, const xmlChar *filename); 1078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 1079ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseXMLCatalogNodeList(xmlNodePtr cur, xmlCatalogPrefer prefer, 1080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr parent, xmlCatalogEntryPtr cgroup); 1081ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlChar * 1082ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogListXMLResolve(xmlCatalogEntryPtr catal, const xmlChar *pubID, 1083ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *sysID); 1084ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlChar * 1085ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogListXMLResolveURI(xmlCatalogEntryPtr catal, const xmlChar *URI); 1086ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1087ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1089ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlGetXMLCatalogEntryType: 1090ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @name: the name 1091ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1092ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * lookup the internal type associated to an XML catalog entry name 1093ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1094ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the type associated with that name 1095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlCatalogEntryType 1097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlGetXMLCatalogEntryType(const xmlChar *name) { 1098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryType type = XML_CATA_NONE; 1099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlStrEqual(name, (const xmlChar *) "system")) 1100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = XML_CATA_SYSTEM; 1101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "public")) 1102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = XML_CATA_PUBLIC; 1103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "rewriteSystem")) 1104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = XML_CATA_REWRITE_SYSTEM; 1105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "delegatePublic")) 1106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = XML_CATA_DELEGATE_PUBLIC; 1107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "delegateSystem")) 1108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = XML_CATA_DELEGATE_SYSTEM; 1109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "uri")) 1110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = XML_CATA_URI; 1111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "rewriteURI")) 1112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = XML_CATA_REWRITE_URI; 1113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "delegateURI")) 1114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = XML_CATA_DELEGATE_URI; 1115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "nextCatalog")) 1116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = XML_CATA_NEXT_CATALOG; 1117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "catalog")) 1118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = XML_CATA_CATALOG; 1119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(type); 1120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseXMLCatalogOneNode: 1124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cur: the XML node 1125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @type: the type of Catalog entry 1126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @name: the name of the node 1127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @attrName: the attribute holding the value 1128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @uriAttrName: the attribute holding the URI-Reference 1129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @prefer: the PUBLIC vs. SYSTEM current preference value 1130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cgroup: the group which includes this node 1131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Finishes the examination of an XML tree node of a catalog and build 1133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * a Catalog entry from it. 1134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the new Catalog entry node or NULL in case of error. 1136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlCatalogEntryPtr 1138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseXMLCatalogOneNode(xmlNodePtr cur, xmlCatalogEntryType type, 1139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *name, const xmlChar *attrName, 1140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *uriAttrName, xmlCatalogPrefer prefer, 1141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr cgroup) { 1142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ok = 1; 1143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *uriValue; 1144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *nameValue = NULL; 1145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *base = NULL; 1146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *URL = NULL; 1147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr ret = NULL; 1148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (attrName != NULL) { 1150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nameValue = xmlGetProp(cur, attrName); 1151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nameValue == NULL) { 1152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogErr(ret, cur, XML_CATALOG_MISSING_ATTR, 1153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "%s entry lacks '%s'\n", name, attrName, NULL); 1154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ok = 0; 1155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project uriValue = xmlGetProp(cur, uriAttrName); 1158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (uriValue == NULL) { 1159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogErr(ret, cur, XML_CATALOG_MISSING_ATTR, 1160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "%s entry lacks '%s'\n", name, uriAttrName, NULL); 1161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ok = 0; 1162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!ok) { 1164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nameValue != NULL) 1165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(nameValue); 1166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (uriValue != NULL) 1167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(uriValue); 1168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 1169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project base = xmlNodeGetBase(cur->doc, cur); 1172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project URL = xmlBuildURI(uriValue, base); 1173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (URL != NULL) { 1174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs > 1) { 1175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nameValue != NULL) 1176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 1177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Found %s: '%s' '%s'\n", name, nameValue, URL); 1178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 1179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 1180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Found %s: '%s'\n", name, URL); 1181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlNewCatalogEntry(type, nameValue, uriValue, URL, prefer, cgroup); 1183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 1184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogErr(ret, cur, XML_CATALOG_ENTRY_BROKEN, 1185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "%s entry '%s' broken ?: %s\n", name, uriAttrName, uriValue); 1186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nameValue != NULL) 1188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(nameValue); 1189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (uriValue != NULL) 1190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(uriValue); 1191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (base != NULL) 1192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(base); 1193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (URL != NULL) 1194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(URL); 1195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 1196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseXMLCatalogNode: 1200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cur: the XML node 1201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @prefer: the PUBLIC vs. SYSTEM current preference value 1202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @parent: the parent Catalog entry 1203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cgroup: the group which includes this node 1204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Examines an XML tree node of a catalog and build 1206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * a Catalog entry from it adding it to its parent. The examination can 1207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * be recursive. 1208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 1210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseXMLCatalogNode(xmlNodePtr cur, xmlCatalogPrefer prefer, 1211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr parent, xmlCatalogEntryPtr cgroup) 1212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 1213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *base = NULL; 1214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr entry = NULL; 1215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == NULL) 1217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 1218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlStrEqual(cur->name, BAD_CAST "group")) { 1219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *prop; 1220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogPrefer pref = XML_CATA_PREFER_NONE; 1221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project prop = xmlGetProp(cur, BAD_CAST "prefer"); 1223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (prop != NULL) { 1224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlStrEqual(prop, BAD_CAST "system")) { 1225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project prefer = XML_CATA_PREFER_SYSTEM; 1226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (xmlStrEqual(prop, BAD_CAST "public")) { 1227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project prefer = XML_CATA_PREFER_PUBLIC; 1228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 1229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogErr(parent, cur, XML_CATALOG_PREFER_VALUE, 1230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Invalid value for prefer: '%s'\n", 1231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project prop, NULL, NULL); 1232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(prop); 1234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project pref = prefer; 1235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project prop = xmlGetProp(cur, BAD_CAST "id"); 1237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project base = xmlGetNsProp(cur, BAD_CAST "base", XML_XML_NAMESPACE); 1238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project entry = xmlNewCatalogEntry(XML_CATA_GROUP, prop, base, NULL, pref, cgroup); 1239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(prop); 1240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (xmlStrEqual(cur->name, BAD_CAST "public")) { 1241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_PUBLIC, 1242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST "public", BAD_CAST "publicId", BAD_CAST "uri", prefer, cgroup); 1243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (xmlStrEqual(cur->name, BAD_CAST "system")) { 1244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_SYSTEM, 1245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST "system", BAD_CAST "systemId", BAD_CAST "uri", prefer, cgroup); 1246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (xmlStrEqual(cur->name, BAD_CAST "rewriteSystem")) { 1247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_REWRITE_SYSTEM, 1248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST "rewriteSystem", BAD_CAST "systemIdStartString", 1249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST "rewritePrefix", prefer, cgroup); 1250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (xmlStrEqual(cur->name, BAD_CAST "delegatePublic")) { 1251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_DELEGATE_PUBLIC, 1252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST "delegatePublic", BAD_CAST "publicIdStartString", 1253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST "catalog", prefer, cgroup); 1254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (xmlStrEqual(cur->name, BAD_CAST "delegateSystem")) { 1255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_DELEGATE_SYSTEM, 1256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST "delegateSystem", BAD_CAST "systemIdStartString", 1257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST "catalog", prefer, cgroup); 1258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (xmlStrEqual(cur->name, BAD_CAST "uri")) { 1259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_URI, 1260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST "uri", BAD_CAST "name", 1261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST "uri", prefer, cgroup); 1262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (xmlStrEqual(cur->name, BAD_CAST "rewriteURI")) { 1263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_REWRITE_URI, 1264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST "rewriteURI", BAD_CAST "uriStartString", 1265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST "rewritePrefix", prefer, cgroup); 1266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (xmlStrEqual(cur->name, BAD_CAST "delegateURI")) { 1267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_DELEGATE_URI, 1268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST "delegateURI", BAD_CAST "uriStartString", 1269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST "catalog", prefer, cgroup); 1270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (xmlStrEqual(cur->name, BAD_CAST "nextCatalog")) { 1271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_NEXT_CATALOG, 1272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST "nextCatalog", NULL, 1273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BAD_CAST "catalog", prefer, cgroup); 1274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (entry != NULL) { 1276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (parent != NULL) { 1277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project entry->parent = parent; 1278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (parent->children == NULL) 1279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project parent->children = entry; 1280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 1281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr prev; 1282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project prev = parent->children; 1284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (prev->next != NULL) 1285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project prev = prev->next; 1286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project prev->next = entry; 1287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (entry->type == XML_CATA_GROUP) { 1290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Recurse to propagate prefer to the subtree 1292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * (xml:base handling is automated) 1293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseXMLCatalogNodeList(cur->children, prefer, parent, entry); 1295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (base != NULL) 1298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(base); 1299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseXMLCatalogNodeList: 1303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cur: the XML node list of siblings 1304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @prefer: the PUBLIC vs. SYSTEM current preference value 1305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @parent: the parent Catalog entry 1306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cgroup: the group which includes this list 1307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Examines a list of XML sibling nodes of a catalog and build 1309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * a list of Catalog entry from it adding it to the parent. 1310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The examination will recurse to examine node subtrees. 1311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 1313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseXMLCatalogNodeList(xmlNodePtr cur, xmlCatalogPrefer prefer, 1314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr parent, xmlCatalogEntryPtr cgroup) { 1315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (cur != NULL) { 1316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur->ns != NULL) && (cur->ns->href != NULL) && 1317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlStrEqual(cur->ns->href, XML_CATALOGS_NAMESPACE))) { 1318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseXMLCatalogNode(cur, prefer, parent, cgroup); 1319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = cur->next; 1321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* TODO: sort the list according to REWRITE lengths and prefer value */ 1323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseXMLCatalogFile: 1327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @prefer: the PUBLIC vs. SYSTEM current preference value 1328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: the filename for the catalog 1329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parses the catalog file to extract the XML tree and then analyze the 1331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * tree to build a list of Catalog entries corresponding to this catalog 133294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * 1333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resulting Catalog entries list 1334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlCatalogEntryPtr 1336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseXMLCatalogFile(xmlCatalogPrefer prefer, const xmlChar *filename) { 1337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDocPtr doc; 1338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlNodePtr cur; 1339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *prop; 1340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr parent = NULL; 1341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (filename == NULL) 1343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 1344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project doc = xmlParseCatalogFile((const char *) filename); 1346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (doc == NULL) { 1347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) 1348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 1349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Failed to parse catalog %s\n", filename); 1350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 1351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) 1354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 1355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "%d Parsing catalog %s\n", xmlGetThreadId(), filename); 1356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = xmlDocGetRootElement(doc); 1358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur != NULL) && (xmlStrEqual(cur->name, BAD_CAST "catalog")) && 1359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (cur->ns != NULL) && (cur->ns->href != NULL) && 1360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlStrEqual(cur->ns->href, XML_CATALOGS_NAMESPACE))) { 1361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project parent = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL, 1363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (const xmlChar *)filename, NULL, prefer, NULL); 1364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (parent == NULL) { 1365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDoc(doc); 1366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 1367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project prop = xmlGetProp(cur, BAD_CAST "prefer"); 1370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (prop != NULL) { 1371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlStrEqual(prop, BAD_CAST "system")) { 1372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project prefer = XML_CATA_PREFER_SYSTEM; 1373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (xmlStrEqual(prop, BAD_CAST "public")) { 1374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project prefer = XML_CATA_PREFER_PUBLIC; 1375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 1376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogErr(NULL, cur, XML_CATALOG_PREFER_VALUE, 1377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Invalid value for prefer: '%s'\n", 1378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project prop, NULL, NULL); 1379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(prop); 1381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = cur->children; 1383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlParseXMLCatalogNodeList(cur, prefer, parent, NULL); 1384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 1385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogErr(NULL, (xmlNodePtr) doc, XML_CATALOG_NOT_CATALOG, 1386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "File %s is not an XML Catalog\n", 1387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project filename, NULL, NULL); 1388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDoc(doc); 1389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 1390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeDoc(doc); 1392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(parent); 1393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlFetchXMLCatalogFile: 1397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catal: an existing but incomplete catalog entry 1398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Fetch and parse the subcatalog referenced by an entry 140094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * 1401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 in case of success, -1 otherwise 1402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 1404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlFetchXMLCatalogFile(xmlCatalogEntryPtr catal) { 1405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr doc; 1406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 140794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun if (catal == NULL) 1408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 1409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->URL == NULL) 1410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 1411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * lock the whole catalog for modification 1414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRMutexLock(xmlCatalogMutex); 1416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->children != NULL) { 1417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* Okay someone else did it in the meantime */ 1418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRMutexUnlock(xmlCatalogMutex); 1419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 1420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlCatalogXMLFiles != NULL) { 1423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project doc = (xmlCatalogEntryPtr) 1424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlHashLookup(xmlCatalogXMLFiles, catal->URL); 1425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (doc != NULL) { 1426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) 1427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 1428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Found %s in file hash\n", catal->URL); 1429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->type == XML_CATA_CATALOG) 1431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal->children = doc->children; 1432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 1433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal->children = doc; 1434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal->dealloc = 0; 1435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRMutexUnlock(xmlCatalogMutex); 1436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 1437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) 1439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 1440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "%s not found in file hash\n", catal->URL); 1441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Fetch and parse. Note that xmlParseXMLCatalogFile does not 1445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * use the existing catalog, there is no recursion allowed at 1446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * that level. 1447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project doc = xmlParseXMLCatalogFile(catal->prefer, catal->URL); 1449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (doc == NULL) { 1450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal->type = XML_CATA_BROKEN_CATALOG; 1451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRMutexUnlock(xmlCatalogMutex); 1452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 1453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->type == XML_CATA_CATALOG) 1456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal->children = doc->children; 1457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 1458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal->children = doc; 1459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project doc->dealloc = 1; 1461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlCatalogXMLFiles == NULL) 1463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogXMLFiles = xmlHashCreate(10); 1464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlCatalogXMLFiles != NULL) { 1465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) 1466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 1467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "%s added to file hash\n", catal->URL); 1468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlHashAddEntry(xmlCatalogXMLFiles, catal->URL, doc); 1469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRMutexUnlock(xmlCatalogMutex); 1471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 1472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 1475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 1476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * XML Catalog handling * 1477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 1478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 1479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlAddXMLCatalog: 1482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catal: top of an XML catalog 1483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @type: the type of record to add to the catalog 1484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @orig: the system, public or prefix to match (or NULL) 1485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @replace: the replacement value for the match 1486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Add an entry in the XML catalog, it may overwrite existing but 1488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * different entries. 1489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 if successful, -1 otherwise 1491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 1493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlAddXMLCatalog(xmlCatalogEntryPtr catal, const xmlChar *type, 1494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *orig, const xmlChar *replace) { 1495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr cur; 1496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryType typ; 1497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int doregister = 0; 1498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 149994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun if ((catal == NULL) || 1500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((catal->type != XML_CATA_CATALOG) && 1501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (catal->type != XML_CATA_BROKEN_CATALOG))) 1502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 1503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->children == NULL) { 1504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFetchXMLCatalogFile(catal); 1505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->children == NULL) 1507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project doregister = 1; 1508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project typ = xmlGetXMLCatalogEntryType(type); 1510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (typ == XML_CATA_NONE) { 1511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) 1512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 1513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Failed to add unknown element %s to catalog\n", type); 1514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 1515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = catal->children; 1518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Might be a simple "update in place" 1520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur != NULL) { 1522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (cur != NULL) { 1523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((orig != NULL) && (cur->type == typ) && 1524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlStrEqual(orig, cur->name))) { 1525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) 1526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 1527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Updating element %s to catalog\n", type); 1528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur->value != NULL) 1529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(cur->value); 1530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur->URL != NULL) 1531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(cur->URL); 1532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->value = xmlStrdup(replace); 1533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->URL = xmlStrdup(replace); 1534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 1535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur->next == NULL) 1537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = cur->next; 1539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) 1542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 1543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Adding element %s to catalog\n", type); 1544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == NULL) 1545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal->children = xmlNewCatalogEntry(typ, orig, replace, 1546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NULL, catal->prefer, NULL); 1547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 1548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->next = xmlNewCatalogEntry(typ, orig, replace, 1549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NULL, catal->prefer, NULL); 1550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (doregister) { 1551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal->type = XML_CATA_CATALOG; 155294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun cur = (xmlCatalogEntryPtr)xmlHashLookup(xmlCatalogXMLFiles, catal->URL); 1553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur != NULL) 1554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->children = catal->children; 1555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 1558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlDelXMLCatalog: 1562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catal: top of an XML catalog 1563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: the value to remove from the catalog 1564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Remove entries in the XML catalog where the value or the URI 1566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * is equal to @value 1567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of entries removed if successful, -1 otherwise 1569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 1571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlDelXMLCatalog(xmlCatalogEntryPtr catal, const xmlChar *value) { 1572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr cur; 1573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret = 0; 1574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 157594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun if ((catal == NULL) || 1576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((catal->type != XML_CATA_CATALOG) && 1577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (catal->type != XML_CATA_BROKEN_CATALOG))) 1578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 1579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (value == NULL) 1580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 1581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->children == NULL) { 1582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFetchXMLCatalogFile(catal); 1583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Scan the children 1587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = catal->children; 1589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (cur != NULL) { 1590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (((cur->name != NULL) && (xmlStrEqual(value, cur->name))) || 1591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlStrEqual(value, cur->value))) { 1592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) { 1593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur->name != NULL) 1594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 1595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Removing element %s from catalog\n", cur->name); 1596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 1597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 1598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Removing element %s from catalog\n", cur->value); 1599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->type = XML_CATA_REMOVED; 1601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = cur->next; 1603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 1605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogXMLResolve: 1609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catal: a catalog list 1610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @pubID: the public ID string 1611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @sysID: the system ID string 1612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Do a complete resolution lookup of an External Identifier for a 1614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * list of catalog entries. 1615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Implements (or tries to) 7.1. External Identifier Resolution 1617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * from http://www.oasis-open.org/committees/entity/spec-2001-08-06.html 1618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the URI of the resource or NULL if not found 1620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlChar * 1622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogXMLResolve(xmlCatalogEntryPtr catal, const xmlChar *pubID, 1623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *sysID) { 1624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *ret = NULL; 1625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr cur; 1626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int haveDelegate = 0; 1627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int haveNext = 0; 1628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * protection against loops 1631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->depth > MAX_CATAL_DEPTH) { 1633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogErr(catal, NULL, XML_CATALOG_RECURSION, 1634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Detected recursion in catalog %s\n", 1635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal->name, NULL, NULL); 1636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 1637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal->depth++; 1639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * First tries steps 2/ 3/ 4/ if a system ID is provided. 1642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sysID != NULL) { 1644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr rewrite = NULL; 1645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int lenrewrite = 0, len; 1646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = catal; 1647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project haveDelegate = 0; 1648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (cur != NULL) { 1649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (cur->type) { 1650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_SYSTEM: 1651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlStrEqual(sysID, cur->name)) { 1652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) 1653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 1654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Found system match %s, using %s\n", 1655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->name, cur->URL); 1656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal->depth--; 1657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlStrdup(cur->URL)); 1658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_REWRITE_SYSTEM: 1661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = xmlStrlen(cur->name); 1662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((len > lenrewrite) && 1663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!xmlStrncmp(sysID, cur->name, len))) { 1664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project lenrewrite = len; 1665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project rewrite = cur; 1666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_DELEGATE_SYSTEM: 1669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlStrncmp(sysID, cur->name, xmlStrlen(cur->name))) 1670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project haveDelegate++; 1671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_NEXT_CATALOG: 1673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project haveNext++; 1674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 1676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = cur->next; 1679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (rewrite != NULL) { 1681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) 1682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 1683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Using rewriting rule %s\n", rewrite->name); 1684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlStrdup(rewrite->URL); 1685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) 1686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlStrcat(ret, &sysID[lenrewrite]); 1687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal->depth--; 1688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 1689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (haveDelegate) { 1691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *delegates[MAX_DELEGATE]; 1692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int nbList = 0, i; 1693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Assume the entries have been sorted by decreasing substring 1696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * matches when the list was produced. 1697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = catal; 1699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (cur != NULL) { 1700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur->type == XML_CATA_DELEGATE_SYSTEM) && 1701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!xmlStrncmp(sysID, cur->name, xmlStrlen(cur->name)))) { 1702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (i = 0;i < nbList;i++) 1703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlStrEqual(cur->URL, delegates[i])) 1704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (i < nbList) { 1706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = cur->next; 1707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project continue; 1708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nbList < MAX_DELEGATE) 1710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project delegates[nbList++] = cur->URL; 1711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur->children == NULL) { 1713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFetchXMLCatalogFile(cur); 1714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur->children != NULL) { 1716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) 1717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 1718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Trying system delegate %s\n", cur->URL); 1719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogListXMLResolve( 1720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->children, NULL, sysID); 1721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) { 1722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal->depth--; 1723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 1724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = cur->next; 1728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Apply the cut algorithm explained in 4/ 1731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal->depth--; 1733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_CATAL_BREAK); 1734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Then tries 5/ 6/ if a public ID is provided 1738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (pubID != NULL) { 1740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = catal; 1741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project haveDelegate = 0; 1742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (cur != NULL) { 1743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (cur->type) { 1744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_PUBLIC: 1745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlStrEqual(pubID, cur->name)) { 1746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) 1747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 1748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Found public match %s\n", cur->name); 1749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal->depth--; 1750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlStrdup(cur->URL)); 1751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_DELEGATE_PUBLIC: 1754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlStrncmp(pubID, cur->name, xmlStrlen(cur->name)) && 1755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (cur->prefer == XML_CATA_PREFER_PUBLIC)) 1756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project haveDelegate++; 1757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_NEXT_CATALOG: 1759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sysID == NULL) 1760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project haveNext++; 1761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 1763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = cur->next; 1766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (haveDelegate) { 1768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *delegates[MAX_DELEGATE]; 1769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int nbList = 0, i; 1770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Assume the entries have been sorted by decreasing substring 1773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * matches when the list was produced. 1774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = catal; 1776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (cur != NULL) { 1777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur->type == XML_CATA_DELEGATE_PUBLIC) && 1778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (cur->prefer == XML_CATA_PREFER_PUBLIC) && 1779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!xmlStrncmp(pubID, cur->name, xmlStrlen(cur->name)))) { 1780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (i = 0;i < nbList;i++) 1782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlStrEqual(cur->URL, delegates[i])) 1783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (i < nbList) { 1785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = cur->next; 1786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project continue; 1787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nbList < MAX_DELEGATE) 1789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project delegates[nbList++] = cur->URL; 179094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun 1791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur->children == NULL) { 1792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFetchXMLCatalogFile(cur); 1793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur->children != NULL) { 1795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) 1796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 1797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Trying public delegate %s\n", cur->URL); 1798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogListXMLResolve( 1799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->children, pubID, NULL); 1800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) { 1801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal->depth--; 1802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 1803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = cur->next; 1807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Apply the cut algorithm explained in 4/ 1810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal->depth--; 1812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_CATAL_BREAK); 1813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (haveNext) { 1816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = catal; 1817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (cur != NULL) { 1818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur->type == XML_CATA_NEXT_CATALOG) { 1819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur->children == NULL) { 1820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFetchXMLCatalogFile(cur); 1821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur->children != NULL) { 1823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogListXMLResolve(cur->children, pubID, sysID); 1824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) { 1825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal->depth--; 1826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 1827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (catal->depth > MAX_CATAL_DEPTH) { 1828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 1829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = cur->next; 1833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal->depth--; 1837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 1838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogXMLResolveURI: 1842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catal: a catalog list 1843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URI: the URI 1844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @sysID: the system ID string 1845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Do a complete resolution lookup of an External Identifier for a 1847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * list of catalog entries. 1848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Implements (or tries to) 7.2.2. URI Resolution 1850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * from http://www.oasis-open.org/committees/entity/spec-2001-08-06.html 1851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the URI of the resource or NULL if not found 1853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlChar * 1855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogXMLResolveURI(xmlCatalogEntryPtr catal, const xmlChar *URI) { 1856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *ret = NULL; 1857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr cur; 1858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int haveDelegate = 0; 1859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int haveNext = 0; 1860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr rewrite = NULL; 1861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int lenrewrite = 0, len; 1862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal == NULL) 1864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 1865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (URI == NULL) 1867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 1868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->depth > MAX_CATAL_DEPTH) { 1870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogErr(catal, NULL, XML_CATALOG_RECURSION, 1871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Detected recursion in catalog %s\n", 1872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal->name, NULL, NULL); 1873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 1874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * First tries steps 2/ 3/ 4/ if a system ID is provided. 1878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = catal; 1880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project haveDelegate = 0; 1881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (cur != NULL) { 1882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (cur->type) { 1883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_URI: 1884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlStrEqual(URI, cur->name)) { 1885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) 1886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 1887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Found URI match %s\n", cur->name); 1888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlStrdup(cur->URL)); 1889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_REWRITE_URI: 1892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project len = xmlStrlen(cur->name); 1893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((len > lenrewrite) && 1894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!xmlStrncmp(URI, cur->name, len))) { 1895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project lenrewrite = len; 1896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project rewrite = cur; 1897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_DELEGATE_URI: 1900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlStrncmp(URI, cur->name, xmlStrlen(cur->name))) 1901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project haveDelegate++; 1902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_NEXT_CATALOG: 1904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project haveNext++; 1905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 1907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = cur->next; 1910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (rewrite != NULL) { 1912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) 1913ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 1914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Using rewriting rule %s\n", rewrite->name); 1915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlStrdup(rewrite->URL); 1916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) 1917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlStrcat(ret, &URI[lenrewrite]); 1918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 1919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (haveDelegate) { 1921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *delegates[MAX_DELEGATE]; 1922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int nbList = 0, i; 1923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Assume the entries have been sorted by decreasing substring 1926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * matches when the list was produced. 1927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = catal; 1929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (cur != NULL) { 1930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (((cur->type == XML_CATA_DELEGATE_SYSTEM) || 1931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (cur->type == XML_CATA_DELEGATE_URI)) && 1932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!xmlStrncmp(URI, cur->name, xmlStrlen(cur->name)))) { 1933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for (i = 0;i < nbList;i++) 1934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlStrEqual(cur->URL, delegates[i])) 1935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 1936ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (i < nbList) { 1937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = cur->next; 1938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project continue; 1939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (nbList < MAX_DELEGATE) 1941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project delegates[nbList++] = cur->URL; 1942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur->children == NULL) { 1944ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFetchXMLCatalogFile(cur); 1945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur->children != NULL) { 1947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) 1948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 1949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Trying URI delegate %s\n", cur->URL); 1950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogListXMLResolveURI( 1951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->children, URI); 1952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) 1953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 1954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = cur->next; 1957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 1959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Apply the cut algorithm explained in 4/ 1960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1961ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(XML_CATAL_BREAK); 1962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (haveNext) { 1964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = catal; 1965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (cur != NULL) { 1966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur->type == XML_CATA_NEXT_CATALOG) { 1967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur->children == NULL) { 1968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFetchXMLCatalogFile(cur); 1969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur->children != NULL) { 1971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogListXMLResolveURI(cur->children, URI); 1972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) 1973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 1974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = cur->next; 1977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 1979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 1981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 1982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 1983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 1984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogListXMLResolve: 1985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catal: a catalog list 1986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @pubID: the public ID string 1987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @sysID: the system ID string 1988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Do a complete resolution lookup of an External Identifier for a 1990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * list of catalogs 1991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Implements (or tries to) 7.1. External Identifier Resolution 1993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * from http://www.oasis-open.org/committees/entity/spec-2001-08-06.html 1994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 1995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the URI of the resource or NULL if not found 1996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 1997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlChar * 1998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogListXMLResolve(xmlCatalogEntryPtr catal, const xmlChar *pubID, 1999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *sysID) { 2000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *ret = NULL; 2001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *urnID = NULL; 2002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *normid; 200394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun 2004ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal == NULL) 2005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((pubID == NULL) && (sysID == NULL)) 2007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project normid = xmlCatalogNormalizePublic(pubID); 2010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (normid != NULL) 2011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project pubID = (*normid != 0 ? normid : NULL); 201294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun 2013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlStrncmp(pubID, BAD_CAST XML_URN_PUBID, sizeof(XML_URN_PUBID) - 1)) { 2014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project urnID = xmlCatalogUnWrapURN(pubID); 2015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) { 2016ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (urnID == NULL) 2017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 2018ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Public URN ID %s expanded to NULL\n", pubID); 2019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 2020ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 2021ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Public URN ID expanded to %s\n", urnID); 2022ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2023ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogListXMLResolve(catal, urnID, sysID); 2024ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (urnID != NULL) 2025ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(urnID); 2026ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (normid != NULL) 2027ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(normid); 2028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 2029ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2030ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlStrncmp(sysID, BAD_CAST XML_URN_PUBID, sizeof(XML_URN_PUBID) - 1)) { 2031ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project urnID = xmlCatalogUnWrapURN(sysID); 2032ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) { 2033ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (urnID == NULL) 2034ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 2035ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "System URN ID %s expanded to NULL\n", sysID); 2036ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 2037ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 2038ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "System URN ID expanded to %s\n", urnID); 2039ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2040ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (pubID == NULL) 2041ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogListXMLResolve(catal, urnID, NULL); 2042ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(pubID, urnID)) 2043ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogListXMLResolve(catal, pubID, NULL); 2044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 2045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogListXMLResolve(catal, pubID, urnID); 2046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (urnID != NULL) 2048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(urnID); 2049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (normid != NULL) 2050ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(normid); 2051ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 2052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (catal != NULL) { 2054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->type == XML_CATA_CATALOG) { 2055ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->children == NULL) { 2056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFetchXMLCatalogFile(catal); 2057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->children != NULL) { 2059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogXMLResolve(catal->children, pubID, sysID); 2060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) { 2061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2062ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((catal->children != NULL) && 2063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (catal->children->depth > MAX_CATAL_DEPTH)) { 2064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = NULL; 2065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2066ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2069ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal = catal->next; 2070ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2071ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (normid != NULL) 2072ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(normid); 2073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 2074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2075ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2076ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2077ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogListXMLResolveURI: 2078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catal: a catalog list 2079ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URI: the URI 2080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2081ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Do a complete resolution lookup of an URI for a list of catalogs 2082ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2083ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Implements (or tries to) 7.2. URI Resolution 2084ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * from http://www.oasis-open.org/committees/entity/spec-2001-08-06.html 2085ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2086ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the URI of the resource or NULL if not found 2087ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlChar * 2089ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogListXMLResolveURI(xmlCatalogEntryPtr catal, const xmlChar *URI) { 2090ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *ret = NULL; 2091ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *urnID = NULL; 209294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun 2093ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal == NULL) 2094ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (URI == NULL) 2096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlStrncmp(URI, BAD_CAST XML_URN_PUBID, sizeof(XML_URN_PUBID) - 1)) { 2099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project urnID = xmlCatalogUnWrapURN(URI); 2100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) { 2101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (urnID == NULL) 2102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 2103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "URN ID %s expanded to NULL\n", URI); 2104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 2105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 2106ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "URN ID expanded to %s\n", urnID); 2107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogListXMLResolve(catal, urnID, NULL); 2109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (urnID != NULL) 2110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(urnID); 2111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 2112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (catal != NULL) { 2114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->type == XML_CATA_CATALOG) { 2115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->children == NULL) { 2116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFetchXMLCatalogFile(catal); 2117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->children != NULL) { 2119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogXMLResolveURI(catal->children, URI); 2120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) 2121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 2122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal = catal->next; 2125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 2127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2129ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 2130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 2131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * The SGML Catalog parser * 2132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 2133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 2134ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define RAW *cur 2137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define NEXT cur++; 2138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define SKIP(x) cur += x; 2139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define SKIP_BLANKS while (IS_BLANK_CH(*cur)) NEXT; 2141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseSGMLCatalogComment: 2144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cur: the current character 2145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Skip a comment in an SGML catalog 2147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2148ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns new current character 2149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic const xmlChar * 2151ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseSGMLCatalogComment(const xmlChar *cur) { 215294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun if ((cur[0] != '-') || (cur[1] != '-')) 2153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(cur); 2154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP(2); 2155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((cur[0] != 0) && ((cur[0] != '-') || ((cur[1] != '-')))) 2156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 2157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur[0] == 0) { 2158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(cur + 2); 2161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseSGMLCatalogPubid: 2165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cur: the current character 2166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @id: the return location 2167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parse an SGML catalog ID 2169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns new current character and store the value in @id 2171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic const xmlChar * 2173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseSGMLCatalogPubid(const xmlChar *cur, xmlChar **id) { 2174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *buf = NULL, *tmp; 2175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int len = 0; 2176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int size = 50; 2177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar stop; 2178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int count = 0; 2179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *id = NULL; 2181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (RAW == '"') { 2183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 2184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project stop = '"'; 2185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (RAW == '\'') { 2186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 2187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project stop = '\''; 2188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project stop = ' '; 2190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar)); 2192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (buf == NULL) { 2193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogErrMemory("allocating public ID"); 2194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (IS_PUBIDCHAR_CH(*cur) || (*cur == '?')) { 2197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((*cur == stop) && (stop != ' ')) 2198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((stop == ' ') && (IS_BLANK_CH(*cur))) 2200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len + 1 >= size) { 2202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project size *= 2; 2203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar)); 2204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (tmp == NULL) { 2205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogErrMemory("allocating public ID"); 2206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(buf); 2207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf = tmp; 2210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len++] = *cur; 2212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project count++; 2213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 2214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len] = 0; 2216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (stop == ' ') { 2217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BLANK_CH(*cur)) { 2218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(buf); 2219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur != stop) { 2223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(buf); 2224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NEXT; 2227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *id = buf; 2229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(cur); 2230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseSGMLCatalogName: 2234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @cur: the current character 2235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @name: the return location 2236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parse an SGML catalog name 2238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns new current character and store the value in @name 2240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic const xmlChar * 2242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseSGMLCatalogName(const xmlChar *cur, xmlChar **name) { 2243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar buf[XML_MAX_NAMELEN + 5]; 2244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int len = 0; 2245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int c; 2246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *name = NULL; 2248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Handler for more complex cases 2251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project c = *cur; 2253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((!IS_LETTER(c) && (c != '_') && (c != ':'))) { 2254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (((IS_LETTER(c)) || (IS_DIGIT(c)) || 2258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (c == '.') || (c == '-') || 2259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (c == '_') || (c == ':'))) { 2260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project buf[len++] = c; 2261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 2262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project c = *cur; 2263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len >= XML_MAX_NAMELEN) 2264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *name = xmlStrndup(buf, len); 2267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(cur); 2268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlGetSGMLCatalogEntryType: 2272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @name: the entry name 2273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Get the Catalog entry type for a given SGML Catalog name 2275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns Catalog entry type 2277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic xmlCatalogEntryType 2279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlGetSGMLCatalogEntryType(const xmlChar *name) { 2280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryType type = XML_CATA_NONE; 2281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlStrEqual(name, (const xmlChar *) "SYSTEM")) 2282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = SGML_CATA_SYSTEM; 2283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "PUBLIC")) 2284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = SGML_CATA_PUBLIC; 2285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "DELEGATE")) 2286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = SGML_CATA_DELEGATE; 2287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "ENTITY")) 2288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = SGML_CATA_ENTITY; 2289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "DOCTYPE")) 2290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = SGML_CATA_DOCTYPE; 2291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "LINKTYPE")) 2292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = SGML_CATA_LINKTYPE; 2293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "NOTATION")) 2294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = SGML_CATA_NOTATION; 2295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "SGMLDECL")) 2296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = SGML_CATA_SGMLDECL; 2297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "DOCUMENT")) 2298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = SGML_CATA_DOCUMENT; 2299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "CATALOG")) 2300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = SGML_CATA_CATALOG; 2301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "BASE")) 2302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = SGML_CATA_BASE; 2303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(type); 2304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlParseSGMLCatalog: 2308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catal: the SGML Catalog 2309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: the content of the SGML Catalog serialization 2310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @file: the filepath for the catalog 2311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @super: should this be handled as a Super Catalog in which case 2312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * parsing is not recursive 2313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Parse an SGML catalog content and fill up the @catal hash table with 2315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * the new entries found. 2316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 in case of success, -1 in case of error. 2318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 2320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlParseSGMLCatalog(xmlCatalogPtr catal, const xmlChar *value, 2321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *file, int super) { 2322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *cur = value; 2323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *base = NULL; 2324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int res; 2325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur == NULL) || (file == NULL)) 2327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 2328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project base = xmlStrdup((const xmlChar *) file); 2329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((cur != NULL) && (cur[0] != 0)) { 2331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 2332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur[0] == 0) 2333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((cur[0] == '-') && (cur[1] == '-')) { 2335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = xmlParseSGMLCatalogComment(cur); 2336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == NULL) { 2337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* error */ 2338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *sysid = NULL; 2342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *name = NULL; 2343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryType type = XML_CATA_NONE; 2344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = xmlParseSGMLCatalogName(cur, &name); 2346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (name == NULL) { 2347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* error */ 2348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BLANK_CH(*cur)) { 2351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* error */ 2352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 2355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlStrEqual(name, (const xmlChar *) "SYSTEM")) 2356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = SGML_CATA_SYSTEM; 2357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "PUBLIC")) 2358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = SGML_CATA_PUBLIC; 2359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "DELEGATE")) 2360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = SGML_CATA_DELEGATE; 2361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "ENTITY")) 2362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = SGML_CATA_ENTITY; 2363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "DOCTYPE")) 2364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = SGML_CATA_DOCTYPE; 2365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "LINKTYPE")) 2366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = SGML_CATA_LINKTYPE; 2367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "NOTATION")) 2368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = SGML_CATA_NOTATION; 2369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "SGMLDECL")) 2370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = SGML_CATA_SGMLDECL; 2371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "DOCUMENT")) 2372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = SGML_CATA_DOCUMENT; 2373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "CATALOG")) 2374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = SGML_CATA_CATALOG; 2375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "BASE")) 2376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = SGML_CATA_BASE; 2377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else if (xmlStrEqual(name, (const xmlChar *) "OVERRIDE")) { 2378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(name); 2379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = xmlParseSGMLCatalogName(cur, &name); 2380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (name == NULL) { 2381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* error */ 2382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(name); 2385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project continue; 2386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(name); 2388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = NULL; 2389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch(type) { 2391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_ENTITY: 2392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur == '%') 2393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type = SGML_CATA_PENTITY; 2394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_PENTITY: 2395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_DOCTYPE: 2396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_LINKTYPE: 2397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_NOTATION: 2398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = xmlParseSGMLCatalogName(cur, &name); 2399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == NULL) { 2400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* error */ 2401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BLANK_CH(*cur)) { 2404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* error */ 2405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 2408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = xmlParseSGMLCatalogPubid(cur, &sysid); 2409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == NULL) { 2410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* error */ 2411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_PUBLIC: 2415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_SYSTEM: 2416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_DELEGATE: 2417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = xmlParseSGMLCatalogPubid(cur, &name); 2418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == NULL) { 2419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* error */ 2420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (type != SGML_CATA_SYSTEM) { 2423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *normid; 2424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project normid = xmlCatalogNormalizePublic(name); 2426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (normid != NULL) { 2427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (name != NULL) 2428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(name); 2429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*normid != 0) 2430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = normid; 2431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else { 2432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(normid); 2433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project name = NULL; 2434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IS_BLANK_CH(*cur)) { 2438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* error */ 2439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SKIP_BLANKS; 2442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = xmlParseSGMLCatalogPubid(cur, &sysid); 2443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == NULL) { 2444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* error */ 2445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_BASE: 2449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_CATALOG: 2450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_DOCUMENT: 2451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case SGML_CATA_SGMLDECL: 2452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = xmlParseSGMLCatalogPubid(cur, &sysid); 2453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == NULL) { 2454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* error */ 2455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project default: 2459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == NULL) { 2462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (name != NULL) 2463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(name); 2464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sysid != NULL) 2465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(sysid); 2466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 2467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (type == SGML_CATA_BASE) { 2468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (base != NULL) 2469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(base); 2470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project base = xmlStrdup(sysid); 2471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if ((type == SGML_CATA_PUBLIC) || 2472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (type == SGML_CATA_SYSTEM)) { 2473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *filename; 2474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project filename = xmlBuildURI(sysid, base); 2476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (filename != NULL) { 2477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr entry; 2478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project entry = xmlNewCatalogEntry(type, name, filename, 2480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NULL, XML_CATA_PREFER_NONE, NULL); 2481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project res = xmlHashAddEntry(catal->sgml, name, entry); 2482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (res < 0) { 2483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeCatalogEntry(entry); 2484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(filename); 2486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (type == SGML_CATA_CATALOG) { 2489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (super) { 2490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr entry; 2491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project entry = xmlNewCatalogEntry(type, sysid, NULL, NULL, 2493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_CATA_PREFER_NONE, NULL); 2494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project res = xmlHashAddEntry(catal->sgml, sysid, entry); 2495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (res < 0) { 2496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeCatalogEntry(entry); 2497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *filename; 2500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project filename = xmlBuildURI(sysid, base); 2502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (filename != NULL) { 2503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlExpandCatalog(catal, (const char *)filename); 2504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(filename); 2505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 2509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * drop anything else we won't handle it 2510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (name != NULL) 2512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(name); 2513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sysid != NULL) 2514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(sysid); 2515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (base != NULL) 2518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(base); 2519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == NULL) 2520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 2521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 2522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 2525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 2526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * SGML Catalog handling * 2527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 2528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 2529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogGetSGMLPublic: 2532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catal: an SGML catalog hash 2533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @pubID: the public ID string 2534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Try to lookup the catalog local reference associated to a public ID 2536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the local resource if found or NULL otherwise. 2538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic const xmlChar * 2540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogGetSGMLPublic(xmlHashTablePtr catal, const xmlChar *pubID) { 2541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr entry; 2542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *normid; 2543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal == NULL) 2545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project normid = xmlCatalogNormalizePublic(pubID); 2548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (normid != NULL) 2549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project pubID = (*normid != 0 ? normid : NULL); 2550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project entry = (xmlCatalogEntryPtr) xmlHashLookup(catal, pubID); 2552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (entry == NULL) { 2553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (normid != NULL) 2554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(normid); 2555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (entry->type == SGML_CATA_PUBLIC) { 2558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (normid != NULL) 2559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(normid); 2560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(entry->URL); 2561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (normid != NULL) 2563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(normid); 2564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogGetSGMLSystem: 2569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catal: an SGML catalog hash 2570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @sysID: the system ID string 2571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Try to lookup the catalog local reference for a system ID 2573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the local resource if found or NULL otherwise. 2575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic const xmlChar * 2577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogGetSGMLSystem(xmlHashTablePtr catal, const xmlChar *sysID) { 2578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr entry; 2579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal == NULL) 2581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project entry = (xmlCatalogEntryPtr) xmlHashLookup(catal, sysID); 2584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (entry == NULL) 2585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (entry->type == SGML_CATA_SYSTEM) 2587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(entry->URL); 2588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogSGMLResolve: 2593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catal: the SGML catalog 2594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @pubID: the public ID string 2595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @sysID: the system ID string 2596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Do a complete resolution lookup of an External Identifier 2598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the URI of the resource or NULL if not found 2600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic const xmlChar * 2602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogSGMLResolve(xmlCatalogPtr catal, const xmlChar *pubID, 2603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *sysID) { 2604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *ret = NULL; 2605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->sgml == NULL) 2607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (pubID != NULL) 2610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogGetSGMLPublic(catal->sgml, pubID); 2611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret != NULL) 2612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 2613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sysID != NULL) 2614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogGetSGMLSystem(catal->sgml, sysID); 261560a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott if (ret != NULL) 261660a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott return(ret); 2617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 2621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 2622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Specific Public interfaces * 2623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 2624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 2625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlLoadSGMLSuperCatalog: 2628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: a file path 2629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Load an SGML super catalog. It won't expand CATALOG or DELEGATE 2631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * references. This is only needed for manipulating SGML Super Catalogs 2632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * like adding and removing CATALOG or DELEGATE entries. 2633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the catalog parsed or NULL in case of error 2635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogPtr 2637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlLoadSGMLSuperCatalog(const char *filename) 2638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 2639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *content; 2640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogPtr catal; 2641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret; 2642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project content = xmlLoadFileContent(filename); 2644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (content == NULL) 2645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal = xmlCreateNewCatalog(XML_SGML_CATALOG_TYPE, xmlCatalogDefaultPrefer); 2648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal == NULL) { 2649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(content); 2650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlParseSGMLCatalog(catal, content, filename, 1); 2654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(content); 2655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret < 0) { 2656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeCatalog(catal); 2657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (catal); 2660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlLoadACatalog: 2664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: a file path 2665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Load the catalog and build the associated data structures. 2667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This can be either an XML Catalog or an SGML Catalog 2668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * It will recurse in SGML CATALOG entries. On the other hand XML 2669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Catalogs are not handled recursively. 2670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the catalog parsed or NULL in case of error 2672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogPtr 2674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlLoadACatalog(const char *filename) 2675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 2676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *content; 2677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *first; 2678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogPtr catal; 2679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret; 2680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project content = xmlLoadFileContent(filename); 2682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (content == NULL) 2683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project first = content; 268794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun 2688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*first != 0) && (*first != '-') && (*first != '<') && 2689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (!(((*first >= 'A') && (*first <= 'Z')) || 2690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ((*first >= 'a') && (*first <= 'z'))))) 2691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project first++; 2692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*first != '<') { 2694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal = xmlCreateNewCatalog(XML_SGML_CATALOG_TYPE, xmlCatalogDefaultPrefer); 2695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal == NULL) { 2696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(content); 2697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlParseSGMLCatalog(catal, content, filename, 0); 2700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret < 0) { 2701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeCatalog(catal); 2702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(content); 2703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal = xmlCreateNewCatalog(XML_XML_CATALOG_TYPE, xmlCatalogDefaultPrefer); 2707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal == NULL) { 2708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(content); 2709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal->xml = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL, 2712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NULL, BAD_CAST filename, xmlCatalogDefaultPrefer, NULL); 2713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(content); 2715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (catal); 2716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlExpandCatalog: 2720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catal: a catalog 2721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: a file path 2722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Load the catalog and expand the existing catal structure. 2724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * This can be either an XML Catalog or an SGML Catalog 2725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 in case of success, -1 in case of error 2727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic int 2729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlExpandCatalog(xmlCatalogPtr catal, const char *filename) 2730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 2731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret; 2732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((catal == NULL) || (filename == NULL)) 2734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 2735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->type == XML_SGML_CATALOG_TYPE) { 2738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *content; 2739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project content = xmlLoadFileContent(filename); 2741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (content == NULL) 2742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 2743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlParseSGMLCatalog(catal, content, filename, 0); 2745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret < 0) { 2746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(content); 2747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 2748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(content); 2750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr tmp, cur; 2752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project tmp = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL, 2753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NULL, BAD_CAST filename, xmlCatalogDefaultPrefer, NULL); 2754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = catal->xml; 2756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cur == NULL) { 2757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal->xml = tmp; 2758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (cur->next != NULL) cur = cur->next; 2760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur->next = tmp; 2761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (0); 2764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlACatalogResolveSystem: 2768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catal: a Catalog 2769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @sysID: the system ID string 2770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Try to lookup the catalog resource for a system ID 2772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resource if found or NULL otherwise, the value returned 2774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * must be freed by the caller. 2775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlChar * 2777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlACatalogResolveSystem(xmlCatalogPtr catal, const xmlChar *sysID) { 2778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *ret = NULL; 2779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((sysID == NULL) || (catal == NULL)) 2781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 278294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun 2783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) 2784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 2785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Resolve sysID %s\n", sysID); 2786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->type == XML_XML_CATALOG_TYPE) { 2788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogListXMLResolve(catal->xml, NULL, sysID); 2789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == XML_CATAL_BREAK) 2790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = NULL; 2791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *sgml; 2793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project sgml = xmlCatalogGetSGMLSystem(catal->sgml, sysID); 2795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sgml != NULL) 2796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlStrdup(sgml); 2797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 2799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlACatalogResolvePublic: 2803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catal: a Catalog 2804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @pubID: the public ID string 2805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Try to lookup the catalog local reference associated to a public ID in that catalog 2807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the local resource if found or NULL otherwise, the value returned 2809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * must be freed by the caller. 2810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlChar * 2812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlACatalogResolvePublic(xmlCatalogPtr catal, const xmlChar *pubID) { 2813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *ret = NULL; 2814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((pubID == NULL) || (catal == NULL)) 2816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 281794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun 2818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) 2819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 2820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Resolve pubID %s\n", pubID); 2821ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2822ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->type == XML_XML_CATALOG_TYPE) { 2823ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogListXMLResolve(catal->xml, pubID, NULL); 2824ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == XML_CATAL_BREAK) 2825ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = NULL; 2826ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2827ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *sgml; 2828ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2829ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project sgml = xmlCatalogGetSGMLPublic(catal->sgml, pubID); 2830ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sgml != NULL) 2831ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlStrdup(sgml); 2832ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2833ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 2834ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2835ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2836ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2837ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlACatalogResolve: 2838ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catal: a Catalog 2839ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @pubID: the public ID string 2840ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @sysID: the system ID string 2841ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2842ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Do a complete resolution lookup of an External Identifier 2843ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2844ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the URI of the resource or NULL if not found, it must be freed 2845ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * by the caller. 2846ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2847ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlChar * 2848ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlACatalogResolve(xmlCatalogPtr catal, const xmlChar * pubID, 2849ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar * sysID) 2850ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 2851ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *ret = NULL; 2852ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2853ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (((pubID == NULL) && (sysID == NULL)) || (catal == NULL)) 2854ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (NULL); 2855ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2856ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) { 2857ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((pubID != NULL) && (sysID != NULL)) { 2858ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 2859ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Resolve: pubID %s sysID %s\n", pubID, sysID); 2860ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (pubID != NULL) { 2861ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 2862ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Resolve: pubID %s\n", pubID); 2863ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2864ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 2865ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Resolve: sysID %s\n", sysID); 2866ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2867ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2868ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2869ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->type == XML_XML_CATALOG_TYPE) { 2870ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogListXMLResolve(catal->xml, pubID, sysID); 2871ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == XML_CATAL_BREAK) 2872ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = NULL; 2873ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2874ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *sgml; 2875ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2876ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project sgml = xmlCatalogSGMLResolve(catal, pubID, sysID); 2877ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sgml != NULL) 2878ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlStrdup(sgml); 2879ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2880ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (ret); 2881ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2882ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2883ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2884ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlACatalogResolveURI: 2885ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catal: a Catalog 2886ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URI: the URI 2887ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2888ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Do a complete resolution lookup of an URI 2889ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2890ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the URI of the resource or NULL if not found, it must be freed 2891ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * by the caller. 2892ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2893ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlChar * 2894ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlACatalogResolveURI(xmlCatalogPtr catal, const xmlChar *URI) { 2895ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *ret = NULL; 2896ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2897ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((URI == NULL) || (catal == NULL)) 2898ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 2899ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2900ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) 2901ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 2902ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Resolve URI %s\n", URI); 2903ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2904ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->type == XML_XML_CATALOG_TYPE) { 2905ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogListXMLResolveURI(catal->xml, URI); 2906ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (ret == XML_CATAL_BREAK) 2907ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = NULL; 2908ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2909ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *sgml; 2910ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2911ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project sgml = xmlCatalogSGMLResolve(catal, NULL, URI); 2912ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sgml != NULL) 291360a4c356ee9ce5e9ccb23347c0381f0436192691Patrick Scott ret = xmlStrdup(sgml); 2914ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2915ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 2916ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2917ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2918ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 2919ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2920ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlACatalogDump: 2921ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catal: a Catalog 2922ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @out: the file. 2923ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2924ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Dump the given catalog to the given file. 2925ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2926ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 2927ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlACatalogDump(xmlCatalogPtr catal, FILE *out) { 2928ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((out == NULL) || (catal == NULL)) 2929ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 2930ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2931ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->type == XML_XML_CATALOG_TYPE) { 2932ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDumpXMLCatalog(out, catal->xml); 2933ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2934ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlHashScan(catal->sgml, 2935ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlHashScanner) xmlCatalogDumpEntry, out); 293694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun } 2937ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2938ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */ 2939ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2940ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2941ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlACatalogAdd: 2942ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catal: a Catalog 2943ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @type: the type of record to add to the catalog 294494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * @orig: the system, public or prefix to match 2945ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @replace: the replacement value for the match 2946ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2947ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Add an entry in the catalog, it may overwrite existing but 2948ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * different entries. 2949ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2950ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 if successful, -1 otherwise 2951ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2952ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 2953ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlACatalogAdd(xmlCatalogPtr catal, const xmlChar * type, 2954ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar * orig, const xmlChar * replace) 2955ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 2956ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int res = -1; 2957ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2958ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal == NULL) 2959ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 2960ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2961ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->type == XML_XML_CATALOG_TYPE) { 2962ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project res = xmlAddXMLCatalog(catal->xml, type, orig, replace); 2963ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2964ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryType cattype; 2965ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2966ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cattype = xmlGetSGMLCatalogEntryType(type); 2967ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (cattype != XML_CATA_NONE) { 2968ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr entry; 2969ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2970ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project entry = xmlNewCatalogEntry(cattype, orig, replace, NULL, 2971ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project XML_CATA_PREFER_NONE, NULL); 2972ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->sgml == NULL) 2973ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal->sgml = xmlHashCreate(10); 2974ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project res = xmlHashAddEntry(catal->sgml, orig, entry); 2975ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2976ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 2977ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return (res); 2978ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 2979ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2980ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 2981ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlACatalogRemove: 2982ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catal: a Catalog 2983ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: the value to remove 2984ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2985ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Remove an entry from the catalog 2986ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 2987ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of entries removed if successful, -1 otherwise 2988ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 2989ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 2990ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlACatalogRemove(xmlCatalogPtr catal, const xmlChar *value) { 2991ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int res = -1; 2992ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2993ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((catal == NULL) || (value == NULL)) 2994ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 2995ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 2996ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->type == XML_XML_CATALOG_TYPE) { 2997ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project res = xmlDelXMLCatalog(catal->xml, value); 2998ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 2999ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project res = xmlHashRemoveEntry(catal->sgml, value, 3000ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlHashDeallocator) xmlFreeCatalogEntry); 3001ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (res == 0) 3002ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project res = 1; 300394442ad4107000e6d49f9b85a46a591495a57632Selim Gurun } 3004ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(res); 3005ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3006ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3007ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3008ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlNewCatalog: 3009ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @sgml: should this create an SGML catalog 3010ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3011ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * create a new Catalog. 3012ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3013ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the xmlCatalogPtr or NULL in case of error 3014ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3015ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogPtr 3016ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlNewCatalog(int sgml) { 3017ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogPtr catal = NULL; 3018ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3019ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sgml) { 3020ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal = xmlCreateNewCatalog(XML_SGML_CATALOG_TYPE, 3021ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogDefaultPrefer); 3022ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((catal != NULL) && (catal->sgml == NULL)) 3023ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal->sgml = xmlHashCreate(10); 3024ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else 3025ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal = xmlCreateNewCatalog(XML_XML_CATALOG_TYPE, 3026ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogDefaultPrefer); 3027ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(catal); 3028ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3029ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3030ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3031ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogIsEmpty: 3032ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catal: should this create an SGML catalog 3033ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3034ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check is a catalog is empty 3035ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3036ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 1 if the catalog is empty, 0 if not, amd -1 in case of error. 3037ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3038ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 3039ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogIsEmpty(xmlCatalogPtr catal) { 3040ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal == NULL) 3041ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 3042ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3043ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->type == XML_XML_CATALOG_TYPE) { 3044ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->xml == NULL) 3045ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 3046ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((catal->xml->type != XML_CATA_CATALOG) && 3047ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (catal->xml->type != XML_CATA_BROKEN_CATALOG)) 3048ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 3049ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->xml->children == NULL) 3050ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 3051ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 3052ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 3053ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int res; 3054ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3055ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal->sgml == NULL) 3056ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 3057ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project res = xmlHashSize(catal->sgml); 3058ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (res == 0) 3059ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(1); 3060ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (res < 0) 3061ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 306294442ad4107000e6d49f9b85a46a591495a57632Selim Gurun } 3063ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 3064ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3065ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3066ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 3067ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 3068ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Public interfaces manipulating the global shared default catalog * 3069ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 3070ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 3071ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3072ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3073ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlInitializeCatalogData: 3074ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3075ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Do the catalog initialization only of global data, doesn't try to load 3076ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * any catalog actually. 3077ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * this function is not thread safe, catalog initialization should 3078ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * preferably be done once at startup 3079ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3080ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectstatic void 3081ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlInitializeCatalogData(void) { 3082ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlCatalogInitialized != 0) 3083ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 3084ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 308594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun if (getenv("XML_DEBUG_CATALOG")) 3086ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDebugCatalogs = 1; 3087ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogMutex = xmlNewRMutex(); 3088ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3089ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogInitialized = 1; 3090ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3091ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3092ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlInitializeCatalog: 3093ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3094ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Do the catalog initialization. 3095ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * this function is not thread safe, catalog initialization should 3096ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * preferably be done once at startup 3097ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3098ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 3099ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlInitializeCatalog(void) { 3100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlCatalogInitialized != 0) 3101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 3102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInitializeCatalogData(); 3104ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRMutexLock(xmlCatalogMutex); 3105ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 310694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun if (getenv("XML_DEBUG_CATALOG")) 3107ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDebugCatalogs = 1; 3108ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3109ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDefaultCatalog == NULL) { 3110ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *catalogs; 3111ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char *path; 3112ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *cur, *paths; 3113ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogPtr catal; 3114ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr *nextent; 3115ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3116ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catalogs = (const char *) getenv("XML_CATALOG_FILES"); 3117ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catalogs == NULL) 3118ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#if defined(_WIN32) && defined(_MSC_VER) 3119ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project { 3120ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void* hmodule; 3121ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project hmodule = GetModuleHandleA("libxml2.dll"); 3122ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (hmodule == NULL) 3123ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project hmodule = GetModuleHandleA(NULL); 3124ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (hmodule != NULL) { 3125ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char buf[256]; 3126ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned long len = GetModuleFileNameA(hmodule, buf, 255); 3127ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (len != 0) { 3128ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project char* p = &(buf[len]); 312994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun while (*p != '\\' && p > buf) 3130ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project p--; 3131ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (p != buf) { 3132ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar* uri; 3133ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project strncpy(p, "\\..\\etc\\catalog", 255 - (p - buf)); 313494442ad4107000e6d49f9b85a46a591495a57632Selim Gurun uri = xmlCanonicPath((const xmlChar*)buf); 3135ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (uri != NULL) { 3136ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project strncpy(XML_XML_DEFAULT_CATALOG, uri, 255); 3137ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(uri); 3138ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3139ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3140ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3141ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3142ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catalogs = XML_XML_DEFAULT_CATALOG; 3143ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3144ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#else 3145ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catalogs = XML_XML_DEFAULT_CATALOG; 3146ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 3147ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 314894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun catal = xmlCreateNewCatalog(XML_XML_CATALOG_TYPE, 3149ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogDefaultPrefer); 3150ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal != NULL) { 315194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun /* the XML_CATALOG_FILES envvar is allowed to contain a 3152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project space-separated list of entries. */ 3153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = catalogs; 3154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nextent = &catal->xml; 3155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (*cur != '\0') { 315694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun while (xmlIsBlank_ch(*cur)) 3157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 3158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur != 0) { 3159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project paths = cur; 3160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*cur != 0) && (!xmlIsBlank_ch(*cur))) 3161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 3162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = (char *) xmlStrndup((const xmlChar *)paths, cur - paths); 3163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (path != NULL) { 3164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project *nextent = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL, 3165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NULL, BAD_CAST path, xmlCatalogDefaultPrefer, NULL); 3166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*nextent != NULL) 3167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project nextent = &((*nextent)->next); 3168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(path); 3169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDefaultCatalog = catal; 3173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRMutexUnlock(xmlCatalogMutex); 3177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlLoadCatalog: 3182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @filename: a file path 3183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Load the catalog and makes its definitions effective for the default 3185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * external entity loader. It will recurse in SGML CATALOG entries. 3186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * this function is not thread safe, catalog initialization should 3187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * preferably be done once at startup 3188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 in case of success -1 in case of error 3190ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 3192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlLoadCatalog(const char *filename) 3193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project{ 3194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret; 3195ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogPtr catal; 3196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlCatalogInitialized) 3198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInitializeCatalogData(); 3199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRMutexLock(xmlCatalogMutex); 3201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDefaultCatalog == NULL) { 3203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal = xmlLoadACatalog(filename); 3204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal == NULL) { 3205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRMutexUnlock(xmlCatalogMutex); 3206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(-1); 3207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDefaultCatalog = catal; 3210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRMutexUnlock(xmlCatalogMutex); 3211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 3212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlExpandCatalog(xmlDefaultCatalog, filename); 3215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRMutexUnlock(xmlCatalogMutex); 3216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 3217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlLoadCatalogs: 3221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @pathss: a list of directories separated by a colon or a space. 3222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Load the catalogs and makes their definitions effective for the default 3224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * external entity loader. 3225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * this function is not thread safe, catalog initialization should 3226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * preferably be done once at startup 3227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 3229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlLoadCatalogs(const char *pathss) { 3230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *cur; 3231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const char *paths; 3232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *path; 3233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef _WIN32 3234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int i, iLen; 3235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 3236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (pathss == NULL) 3238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 3239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur = pathss; 3241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (*cur != 0) { 3242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (xmlIsBlank_ch(*cur)) cur++; 3243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (*cur != 0) { 3244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project paths = cur; 3245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while ((*cur != 0) && (*cur != PATH_SEAPARATOR) && (!xmlIsBlank_ch(*cur))) 3246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 3247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path = xmlStrndup((const xmlChar *)paths, cur - paths); 3248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef _WIN32 324994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun iLen = strlen((const char*)path); 3250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project for(i = 0; i < iLen; i++) { 3251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if(path[i] == '\\') { 3252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project path[i] = '/'; 3253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 3256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (path != NULL) { 3257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlLoadCatalog((const char *) path); 3258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFree(path); 3259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3261ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (*cur == PATH_SEAPARATOR) 3262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project cur++; 3263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogCleanup: 3268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Free up all the memory associated with catalogs 3270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 3272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogCleanup(void) { 3273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlCatalogInitialized == 0) 3274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 3275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRMutexLock(xmlCatalogMutex); 3277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) 3278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 3279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Catalogs cleanup\n"); 3280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlCatalogXMLFiles != NULL) 328194442ad4107000e6d49f9b85a46a591495a57632Selim Gurun xmlHashFree(xmlCatalogXMLFiles, 3282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlHashDeallocator)xmlFreeCatalogHashEntryList); 3283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogXMLFiles = NULL; 3284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDefaultCatalog != NULL) 3285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeCatalog(xmlDefaultCatalog); 3286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDefaultCatalog = NULL; 3287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDebugCatalogs = 0; 3288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogInitialized = 0; 3289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRMutexUnlock(xmlCatalogMutex); 3290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeRMutex(xmlCatalogMutex); 3291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogResolveSystem: 3295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @sysID: the system ID string 3296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Try to lookup the catalog resource for a system ID 3298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resource if found or NULL otherwise, the value returned 3300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * must be freed by the caller. 3301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlChar * 3303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogResolveSystem(const xmlChar *sysID) { 3304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *ret; 3305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlCatalogInitialized) 3307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInitializeCatalog(); 3308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlACatalogResolveSystem(xmlDefaultCatalog, sysID); 3310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 3311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogResolvePublic: 3315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @pubID: the public ID string 3316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Try to lookup the catalog reference associated to a public ID 3318ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3319ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resource if found or NULL otherwise, the value returned 3320ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * must be freed by the caller. 3321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3322ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlChar * 3323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogResolvePublic(const xmlChar *pubID) { 3324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *ret; 3325ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3326ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlCatalogInitialized) 3327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInitializeCatalog(); 3328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3329ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlACatalogResolvePublic(xmlDefaultCatalog, pubID); 3330ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 3331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogResolve: 3335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @pubID: the public ID string 3336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @sysID: the system ID string 3337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Do a complete resolution lookup of an External Identifier 3339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the URI of the resource or NULL if not found, it must be freed 3341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * by the caller. 3342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlChar * 3344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogResolve(const xmlChar *pubID, const xmlChar *sysID) { 3345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *ret; 3346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlCatalogInitialized) 3348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInitializeCatalog(); 3349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlACatalogResolve(xmlDefaultCatalog, pubID, sysID); 3351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 3352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogResolveURI: 3356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URI: the URI 3357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Do a complete resolution lookup of an URI 3359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the URI of the resource or NULL if not found, it must be freed 3361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * by the caller. 3362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlChar * 3364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogResolveURI(const xmlChar *URI) { 3365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *ret; 3366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlCatalogInitialized) 3368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInitializeCatalog(); 3369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlACatalogResolveURI(xmlDefaultCatalog, URI); 3371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 3372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifdef LIBXML_OUTPUT_ENABLED 3375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogDump: 3377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @out: the file. 3378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Dump all the global catalog content to the given file. 3380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 3382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogDump(FILE *out) { 3383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (out == NULL) 3384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return; 3385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlCatalogInitialized) 3387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInitializeCatalog(); 3388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlACatalogDump(xmlDefaultCatalog, out); 3390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_OUTPUT_ENABLED */ 3392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogAdd: 3395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @type: the type of record to add to the catalog 339694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * @orig: the system, public or prefix to match 3397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @replace: the replacement value for the match 3398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Add an entry in the catalog, it may overwrite existing but 3400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * different entries. 3401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * If called before any other catalog routine, allows to override the 3402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * default shared catalog put in place by xmlInitializeCatalog(); 3403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns 0 if successful, -1 otherwise 3405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 3407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogAdd(const xmlChar *type, const xmlChar *orig, const xmlChar *replace) { 3408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int res = -1; 3409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlCatalogInitialized) 3411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInitializeCatalogData(); 3412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRMutexLock(xmlCatalogMutex); 3414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Specific case where one want to override the default catalog 3416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * put in place by xmlInitializeCatalog(); 3417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((xmlDefaultCatalog == NULL) && 3419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project (xmlStrEqual(type, BAD_CAST "catalog"))) { 3420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDefaultCatalog = xmlCreateNewCatalog(XML_XML_CATALOG_TYPE, 3421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogDefaultPrefer); 3422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDefaultCatalog->xml = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL, 3423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project orig, NULL, xmlCatalogDefaultPrefer, NULL); 3424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRMutexUnlock(xmlCatalogMutex); 3426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(0); 342794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun } 3428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project res = xmlACatalogAdd(xmlDefaultCatalog, type, orig, replace); 3430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRMutexUnlock(xmlCatalogMutex); 3431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(res); 3432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3434ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogRemove: 3436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @value: the value to remove 3437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Remove an entry from the catalog 3439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of entries removed if successful, -1 otherwise 3441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 3443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogRemove(const xmlChar *value) { 3444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int res; 3445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlCatalogInitialized) 3447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInitializeCatalog(); 3448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRMutexLock(xmlCatalogMutex); 3450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project res = xmlACatalogRemove(xmlDefaultCatalog, value); 3451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRMutexUnlock(xmlCatalogMutex); 3452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(res); 3453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogConvert: 3457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Convert all the SGML catalog entries as XML ones 3459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the number of entries converted if successful, -1 otherwise 3461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 3463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogConvert(void) { 3464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int res = -1; 3465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlCatalogInitialized) 3467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInitializeCatalog(); 3468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRMutexLock(xmlCatalogMutex); 3470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project res = xmlConvertSGMLCatalog(xmlDefaultCatalog); 3471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlRMutexUnlock(xmlCatalogMutex); 3472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(res); 3473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 3476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 3477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Public interface manipulating the common preferences * 3478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 3479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 3480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogGetDefaults: 3483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Used to get the user preference w.r.t. to what catalogs should 3485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * be accepted 3486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the current xmlCatalogAllow value 3488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogAllow 3490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogGetDefaults(void) { 3491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlCatalogDefaultAllow); 3492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogSetDefaults: 3496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @allow: what catalogs should be accepted 3497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Used to set the user preference w.r.t. to what catalogs should 3499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * be accepted 3500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 3502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogSetDefaults(xmlCatalogAllow allow) { 3503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) { 3504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (allow) { 3505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_ALLOW_NONE: 3506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 3507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Disabling catalog usage\n"); 3508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 3509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_ALLOW_GLOBAL: 3510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 3511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Allowing only global catalogs\n"); 3512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 3513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_ALLOW_DOCUMENT: 3514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 3515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Allowing only catalogs from the document\n"); 3516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 3517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_ALLOW_ALL: 3518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 3519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Allowing all catalogs\n"); 3520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 3521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogDefaultAllow = allow; 3524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogSetDefaultPrefer: 3528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @prefer: the default preference for delegation 3529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Allows to set the preference between public and system for deletion 3531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * in XML Catalog resolution. C.f. section 4.1.1 of the spec 3532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Values accepted are XML_CATA_PREFER_PUBLIC or XML_CATA_PREFER_SYSTEM 3533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the previous value of the default preference for delegation 3535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogPrefer 3537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogSetDefaultPrefer(xmlCatalogPrefer prefer) { 3538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogPrefer ret = xmlCatalogDefaultPrefer; 3539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (prefer == XML_CATA_PREFER_NONE) 3541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 3542ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) { 3544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project switch (prefer) { 3545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_PREFER_PUBLIC: 3546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 3547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Setting catalog preference to PUBLIC\n"); 3548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 3549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_PREFER_SYSTEM: 3550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 3551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Setting catalog preference to SYSTEM\n"); 3552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 3553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project case XML_CATA_PREFER_NONE: 3554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project break; 3555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogDefaultPrefer = prefer; 3558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 3559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogSetDebug: 3563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @level: the debug level of catalogs required 3564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Used to set the debug level for catalog operation, 0 disable 3566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * debugging, 1 enable it 3567ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the previous value of the catalog debugging level 3569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectint 3571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogSetDebug(int level) { 3572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int ret = xmlDebugCatalogs; 3573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (level <= 0) 3575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDebugCatalogs = 0; 3576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project else 3577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlDebugCatalogs = level; 3578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 3579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 3582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 3583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Minimal interfaces used for per-document catalogs by the parser * 3584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 3585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 3586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogFreeLocal: 3589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catalogs: a document's list of catalogs 3590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Free up the memory associated to the catalog list 3592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectvoid 3594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogFreeLocal(void *catalogs) { 3595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr catal; 3596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlCatalogInitialized) 3598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInitializeCatalog(); 3599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal = (xmlCatalogEntryPtr) catalogs; 3601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal != NULL) 3602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlFreeCatalogEntryList(catal); 3603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogAddLocal: 3608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catalogs: a document's list of catalogs 3609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URL: the URL to a new local catalog 3610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Add the new entry to the catalog list 3612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3613ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the updated list 3614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 361594442ad4107000e6d49f9b85a46a591495a57632Selim Gurunvoid * 3616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogAddLocal(void *catalogs, const xmlChar *URL) { 3617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr catal, add; 3618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlCatalogInitialized) 3620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInitializeCatalog(); 3621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (URL == NULL) 3623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(catalogs); 3624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) 3626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 3627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Adding document catalog %s\n", URL); 3628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project add = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL, URL, NULL, 3630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogDefaultPrefer, NULL); 3631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (add == NULL) 3632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(catalogs); 3633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal = (xmlCatalogEntryPtr) catalogs; 363594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun if (catal == NULL) 3636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return((void *) add); 3637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project while (catal->next != NULL) 3639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal = catal->next; 3640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal->next = add; 3641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(catalogs); 3642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogLocalResolve: 3646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catalogs: a document's list of catalogs 3647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @pubID: the public ID string 3648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @sysID: the system ID string 3649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 365094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * Do a complete resolution lookup of an External Identifier using a 3651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * document's private catalog list 3652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the URI of the resource or NULL if not found, it must be freed 3654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * by the caller. 3655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlChar * 3657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogLocalResolve(void *catalogs, const xmlChar *pubID, 3658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const xmlChar *sysID) { 3659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr catal; 3660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *ret; 3661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlCatalogInitialized) 3663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInitializeCatalog(); 3664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((pubID == NULL) && (sysID == NULL)) 3666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 3667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) { 3669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((pubID != NULL) && (sysID != NULL)) { 3670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 3671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Local Resolve: pubID %s sysID %s\n", pubID, sysID); 3672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else if (pubID != NULL) { 3673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 3674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Local Resolve: pubID %s\n", pubID); 3675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } else { 3676ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 3677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Local Resolve: sysID %s\n", sysID); 3678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal = (xmlCatalogEntryPtr) catalogs; 3682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal == NULL) 3683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 3684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogListXMLResolve(catal, pubID, sysID); 3685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret != NULL) && (ret != XML_CATAL_BREAK)) 3686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 3687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 3688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogLocalResolveURI: 3692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @catalogs: a document's list of catalogs 3693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @URI: the URI 3694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 369594442ad4107000e6d49f9b85a46a591495a57632Selim Gurun * Do a complete resolution lookup of an URI using a 3696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * document's private catalog list 3697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the URI of the resource or NULL if not found, it must be freed 3699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * by the caller. 3700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlChar * 3702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogLocalResolveURI(void *catalogs, const xmlChar *URI) { 3703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlCatalogEntryPtr catal; 3704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *ret; 3705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlCatalogInitialized) 3707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInitializeCatalog(); 3708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (URI == NULL) 3710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 3711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDebugCatalogs) 3713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 3714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Resolve URI %s\n", URI); 3715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project catal = (xmlCatalogEntryPtr) catalogs; 3717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (catal == NULL) 3718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 3719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogListXMLResolveURI(catal, URI); 3720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret != NULL) && (ret != XML_CATAL_BREAK)) 3721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(ret); 3722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 3723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/************************************************************************ 3726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 3727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Deprecated interfaces * 3728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * * 3729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ************************************************************************/ 3730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogGetSystem: 3732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @sysID: the system ID string 3733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Try to lookup the catalog reference associated to a system ID 3735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * DEPRECATED, use xmlCatalogResolveSystem() 3736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resource if found or NULL otherwise. 3738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectconst xmlChar * 3740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogGetSystem(const xmlChar *sysID) { 3741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *ret; 3742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project static xmlChar result[1000]; 3743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project static int msg = 0; 3744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlCatalogInitialized) 3746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInitializeCatalog(); 3747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3748ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (msg == 0) { 3749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 3750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Use of deprecated xmlCatalogGetSystem() call\n"); 3751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project msg++; 3752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (sysID == NULL) 3755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 375694442ad4107000e6d49f9b85a46a591495a57632Selim Gurun 3757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check first the XML catalogs 3759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDefaultCatalog != NULL) { 3761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogListXMLResolve(xmlDefaultCatalog->xml, NULL, sysID); 3762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret != NULL) && (ret != XML_CATAL_BREAK)) { 3763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf((char *) result, sizeof(result) - 1, "%s", (char *) ret); 3764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project result[sizeof(result) - 1] = 0; 3765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(result); 3766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDefaultCatalog != NULL) 3770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlCatalogGetSGMLSystem(xmlDefaultCatalog->sgml, sysID)); 3771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 3772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/** 3775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * xmlCatalogGetPublic: 3776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * @pubID: the public ID string 3777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3778ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Try to lookup the catalog reference associated to a public ID 3779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * DEPRECATED, use xmlCatalogResolvePublic() 3780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * 3781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Returns the resource if found or NULL otherwise. 3782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectconst xmlChar * 3784ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source ProjectxmlCatalogGetPublic(const xmlChar *pubID) { 3785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlChar *ret; 3786ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project static xmlChar result[1000]; 3787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project static int msg = 0; 3788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!xmlCatalogInitialized) 3790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlInitializeCatalog(); 3791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (msg == 0) { 3793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project xmlGenericError(xmlGenericErrorContext, 3794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project "Use of deprecated xmlCatalogGetPublic() call\n"); 3795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project msg++; 3796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (pubID == NULL) 3799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 380094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun 3801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /* 3802ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project * Check first the XML catalogs 3803ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project */ 3804ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDefaultCatalog != NULL) { 3805ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ret = xmlCatalogListXMLResolve(xmlDefaultCatalog->xml, pubID, NULL); 3806ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if ((ret != NULL) && (ret != XML_CATAL_BREAK)) { 3807ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project snprintf((char *) result, sizeof(result) - 1, "%s", (char *) ret); 3808ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project result[sizeof(result) - 1] = 0; 3809ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(result); 3810ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3811ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 3812ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3813ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (xmlDefaultCatalog != NULL) 3814ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(xmlCatalogGetSGMLPublic(xmlDefaultCatalog->sgml, pubID)); 3815ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return(NULL); 3816ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 3817ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 3818ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define bottom_catalog 3819ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include "elfgcchack.h" 3820ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif /* LIBXML_CATALOG_ENABLED */ 3821