15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmllint.c : a small tester program for XML input. 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * See Copyright for the status of this software. 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * daniel@veillard.com 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "libxml.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string.h> 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdarg.h> 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <assert.h> 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined (_WIN32) && !defined(__CYGWIN__) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined (_MSC_VER) || defined(__BORLANDC__) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <winsock2.h> 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#pragma comment(lib, "ws2_32.lib") 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define gettimeofday(p1,p2) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* _MSC_VER */ 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* _WIN32 */ 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_SYS_TIME_H 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <sys/time.h> 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_TIME_H 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <time.h> 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __MINGW32__ 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _WINSOCKAPI_ 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <wsockcompat.h> 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <winsock2.h> 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef XML_SOCKLEN_T 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define XML_SOCKLEN_T unsigned int 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_SYS_TIMEB_H 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <sys/timeb.h> 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_SYS_TYPES_H 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <sys/types.h> 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_SYS_STAT_H 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <sys/stat.h> 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_FCNTL_H 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <fcntl.h> 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_UNISTD_H 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <unistd.h> 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_SYS_MMAN_H 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <sys/mman.h> 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* seems needed for Solaris */ 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef MAP_FAILED 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAP_FAILED ((void *) -1) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_STDLIB_H 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdlib.h> 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_LIBREADLINE 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <readline/readline.h> 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_LIBHISTORY 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <readline/history.h> 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/xmlmemory.h> 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/parser.h> 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/parserInternals.h> 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/HTMLparser.h> 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/HTMLtree.h> 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/tree.h> 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/xpath.h> 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/debugXML.h> 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/xmlerror.h> 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_XINCLUDE_ENABLED 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/xinclude.h> 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_CATALOG_ENABLED 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/catalog.h> 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/globals.h> 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/xmlreader.h> 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SCHEMATRON_ENABLED 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/schematron.h> 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SCHEMAS_ENABLED 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/relaxng.h> 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/xmlschemas.h> 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_PATTERN_ENABLED 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/pattern.h> 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_C14N_ENABLED 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/c14n.h> 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_OUTPUT_ENABLED 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <libxml/xmlsave.h> 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef XML_XML_DEFAULT_CATALOG 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define XML_XML_DEFAULT_CATALOG "file:///etc/xml/catalog" 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef enum { 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XMLLINT_RETURN_OK = 0, /* No error */ 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XMLLINT_ERR_UNCLASS = 1, /* Unclassified */ 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XMLLINT_ERR_DTD = 2, /* Error in DTD */ 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XMLLINT_ERR_VALID = 3, /* Validation error */ 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XMLLINT_ERR_RDFILE = 4, /* CtxtReadFile error */ 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XMLLINT_ERR_SCHEMACOMP = 5, /* Schema compilation */ 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XMLLINT_ERR_OUT = 6, /* Error writing output */ 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XMLLINT_ERR_SCHEMAPAT = 7, /* Error in schema pattern */ 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XMLLINT_ERR_RDREGIS = 8, /* Error in Reader registration */ 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XMLLINT_ERR_MEM = 9, /* Out of memory error */ 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XMLLINT_ERR_XPATH = 10 /* XPath evaluation error */ 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} xmllintReturnCode; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_DEBUG_ENABLED 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int shell = 0; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int debugent = 0; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int debug = 0; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int maxmem = 0; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_TREE_ENABLED 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int copy = 0; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_TREE_ENABLED */ 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int recovery = 0; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int noent = 0; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int noblanks = 0; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int noout = 0; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int nowrap = 0; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_OUTPUT_ENABLED 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int format = 0; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char *output = NULL; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int compress = 0; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int oldout = 0; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_OUTPUT_ENABLED */ 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_VALID_ENABLED 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int valid = 0; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int postvalid = 0; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static char * dtdvalid = NULL; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static char * dtdvalidfpi = NULL; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SCHEMAS_ENABLED 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static char * relaxng = NULL; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static xmlRelaxNGPtr relaxngschemas = NULL; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static char * schema = NULL; 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static xmlSchemaPtr wxschemas = NULL; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SCHEMATRON_ENABLED 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static char * schematron = NULL; 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static xmlSchematronPtr wxschematron = NULL; 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int repeat = 0; 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int insert = 0; 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(LIBXML_HTML_ENABLED) || defined(LIBXML_VALID_ENABLED) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int html = 0; 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int xmlout = 0; 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int htmlout = 0; 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_PUSH_ENABLED 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int push = 0; 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_PUSH_ENABLED */ 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_SYS_MMAN_H 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int memory = 0; 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int testIO = 0; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static char *encoding = NULL; 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_XINCLUDE_ENABLED 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int xinclude = 0; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int dtdattrs = 0; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int loaddtd = 0; 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static xmllintReturnCode progresult = XMLLINT_RETURN_OK; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int timing = 0; 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int generate = 0; 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int dropdtd = 0; 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_CATALOG_ENABLED 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int catalogs = 0; 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int nocatalogs = 0; 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_C14N_ENABLED 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int canonical = 0; 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int canonical_11 = 0; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int exc_canonical = 0; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_READER_ENABLED 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int stream = 0; 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int walker = 0; 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_READER_ENABLED */ 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int chkregister = 0; 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int nbregister = 0; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SAX1_ENABLED 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int sax1 = 0; 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_SAX1_ENABLED */ 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_PATTERN_ENABLED 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char *pattern = NULL; 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static xmlPatternPtr patternc = NULL; 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static xmlStreamCtxtPtr patstream = NULL; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_XPATH_ENABLED 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char *xpathquery = NULL; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int options = XML_PARSE_COMPACT; 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int sax = 0; 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int oldxml10 = 0; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Entity loading control and customization. * 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ************************************************************************/ 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAX_PATHS 64 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef _WIN32 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define PATH_SEPARATOR ';' 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define PATH_SEPARATOR ':' 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static xmlChar *paths[MAX_PATHS + 1]; 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int nbpaths = 0; 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int load_trace = 0; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void parsePath(const xmlChar *path) { 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const xmlChar *cur; 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (path == NULL) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (*path != 0) { 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (nbpaths >= MAX_PATHS) { 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "MAX_PATHS reached: too many paths\n"); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cur = path; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while ((*cur == ' ') || (*cur == PATH_SEPARATOR)) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cur++; 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = cur; 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while ((*cur != 0) && (*cur != ' ') && (*cur != PATH_SEPARATOR)) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cur++; 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cur != path) { 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) paths[nbpaths] = xmlStrndup(path, cur - path); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (paths[nbpaths] != NULL) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nbpaths++; 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = cur; 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static xmlExternalEntityLoader defaultEntityLoader = NULL; 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static xmlParserInputPtr 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmllintExternalEntityLoader(const char *URL, const char *ID, 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlParserCtxtPtr ctxt) { 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlParserInputPtr ret; 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) warningSAXFunc warning = NULL; 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errorSAXFunc err = NULL; 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int i; 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *lastsegment = URL; 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *iter = URL; 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((nbpaths > 0) && (iter != NULL)) { 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (*iter != 0) { 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (*iter == '/') 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lastsegment = iter + 1; 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter++; 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((ctxt != NULL) && (ctxt->sax != NULL)) { 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) warning = ctxt->sax->warning; 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) err = ctxt->sax->error; 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->sax->warning = NULL; 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->sax->error = NULL; 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (defaultEntityLoader != NULL) { 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = defaultEntityLoader(URL, ID, ctxt); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret != NULL) { 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (warning != NULL) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->sax->warning = warning; 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (err != NULL) 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->sax->error = err; 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (load_trace) { 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf \ 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (stderr, 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Loaded URL=\"%s\" ID=\"%s\"\n", 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URL ? URL : "(null)", 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ID ? ID : "(null)"); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(ret); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (i = 0;i < nbpaths;i++) { 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlChar *newURL; 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) newURL = xmlStrdup((const xmlChar *) paths[i]); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) newURL = xmlStrcat(newURL, (const xmlChar *) "/"); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) newURL = xmlStrcat(newURL, (const xmlChar *) lastsegment); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (newURL != NULL) { 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = defaultEntityLoader((const char *)newURL, ID, ctxt); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret != NULL) { 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (warning != NULL) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->sax->warning = warning; 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (err != NULL) 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->sax->error = err; 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (load_trace) { 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf \ 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (stderr, 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Loaded URL=\"%s\" ID=\"%s\"\n", 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) newURL, 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ID ? ID : "(null)"); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFree(newURL); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(ret); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFree(newURL); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (err != NULL) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->sax->error = err; 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (warning != NULL) { 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->sax->warning = warning; 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (URL != NULL) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) warning(ctxt, "failed to load external entity \"%s\"\n", URL); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (ID != NULL) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) warning(ctxt, "failed to load external entity \"%s\"\n", ID); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(NULL); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Memory allocation consumption debugging * 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ************************************************************************/ 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)OOM(void) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "Ran out of memory needs > %d bytes\n", maxmem); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_MEM; 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)myFreeFunc(void *mem) 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlMemFree(mem); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void * 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)myMallocFunc(size_t size) 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void *ret; 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = xmlMemMalloc(size); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret != NULL) { 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlMemUsed() > maxmem) { 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OOM(); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlMemFree(ret); 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (NULL); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (ret); 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void * 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)myReallocFunc(void *mem, size_t size) 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void *ret; 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = xmlMemRealloc(mem, size); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret != NULL) { 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlMemUsed() > maxmem) { 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OOM(); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlMemFree(ret); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (NULL); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (ret); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static char * 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)myStrdupFunc(const char *str) 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char *ret; 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = xmlMemoryStrdup(str); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret != NULL) { 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlMemUsed() > maxmem) { 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OOM(); 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFree(ret); 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (NULL); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (ret); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Internal timing routines to remove the necessity to have * 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * unix-specific function calls. * 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ************************************************************************/ 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef HAVE_GETTIMEOFDAY 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_SYS_TIMEB_H 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_SYS_TIME_H 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_FTIME 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)my_gettimeofday(struct timeval *tvp, void *tzp) 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct timeb timebuffer; 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ftime(&timebuffer); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (tvp) { 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tvp->tv_sec = timebuffer.time; 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tvp->tv_usec = timebuffer.millitm * 1000L; 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (0); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define HAVE_GETTIMEOFDAY 1 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define gettimeofday my_gettimeofday 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* HAVE_FTIME */ 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* HAVE_SYS_TIME_H */ 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* HAVE_SYS_TIMEB_H */ 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* !HAVE_GETTIMEOFDAY */ 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(HAVE_GETTIMEOFDAY) 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static struct timeval begin, end; 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * startTimer: call where you want to start timing 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)startTimer(void) 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gettimeofday(&begin, NULL); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * endTimer: call where you want to stop timing and to print out a 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * message about the timing performed; format is a printf 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * type argument 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void XMLCDECL 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)endTimer(const char *fmt, ...) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) long msec; 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_list ap; 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gettimeofday(&end, NULL); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) msec = end.tv_sec - begin.tv_sec; 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) msec *= 1000; 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) msec += (end.tv_usec - begin.tv_usec) / 1000; 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef HAVE_STDARG_H 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error "endTimer required stdarg functions" 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_start(ap, fmt); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vfprintf(stderr, fmt, ap); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_end(ap); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, " took %ld ms\n", msec); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(HAVE_TIME_H) 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * No gettimeofday function, so we have to make do with calling clock. 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This is obviously less accurate, but there's little we can do about 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * that. 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CLOCKS_PER_SEC 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CLOCKS_PER_SEC 100 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static clock_t begin, end; 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)startTimer(void) 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) begin = clock(); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void XMLCDECL 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)endTimer(const char *fmt, ...) 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) long msec; 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_list ap; 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) end = clock(); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) msec = ((end - begin) * 1000) / CLOCKS_PER_SEC; 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef HAVE_STDARG_H 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error "endTimer required stdarg functions" 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_start(ap, fmt); 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vfprintf(stderr, fmt, ap); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_end(ap); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, " took %ld ms\n", msec); 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * We don't have a gettimeofday or time.h, so we just don't do timing 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)startTimer(void) 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Do nothing 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void XMLCDECL 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)endTimer(char *format, ...) 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * We cannot do anything because we don't have a timing function 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_STDARG_H 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_start(ap, format); 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vfprintf(stderr, format, ap); 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_end(ap); 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, " was not timed\n", msec); 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* We don't have gettimeofday, time or stdarg.h, what crazy world is 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * this ?! 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * HTML ouput * 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ************************************************************************/ 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static char buffer[50000]; 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlHTMLEncodeSend(void) { 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char *result; 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result = (char *) xmlEncodeEntitiesReentrant(NULL, BAD_CAST buffer); 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (result) { 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, "%s", result); 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFree(result); 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) buffer[0] = 0; 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlHTMLPrintFileInfo: 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @input: an xmlParserInputPtr input 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Displays the associated file and line informations for the current input 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlHTMLPrintFileInfo(xmlParserInputPtr input) { 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int len; 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, "<p>"); 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) len = strlen(buffer); 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (input != NULL) { 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (input->filename) { 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) snprintf(&buffer[len], sizeof(buffer) - len, "%s:%d: ", input->filename, 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input->line); 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) snprintf(&buffer[len], sizeof(buffer) - len, "Entity: line %d: ", input->line); 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlHTMLEncodeSend(); 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlHTMLPrintFileContext: 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @input: an xmlParserInputPtr input 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Displays current context within the input content for error tracking 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlHTMLPrintFileContext(xmlParserInputPtr input) { 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const xmlChar *cur, *base; 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int len; 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int n; 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (input == NULL) return; 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, "<pre>\n"); 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cur = input->cur; 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base = input->base; 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while ((cur > base) && ((*cur == '\n') || (*cur == '\r'))) { 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cur--; 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) n = 0; 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while ((n++ < 80) && (cur > base) && (*cur != '\n') && (*cur != '\r')) 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cur--; 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((*cur == '\n') || (*cur == '\r')) cur++; 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base = cur; 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) n = 0; 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while ((*cur != 0) && (*cur != '\n') && (*cur != '\r') && (n < 79)) { 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) len = strlen(buffer); 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) snprintf(&buffer[len], sizeof(buffer) - len, "%c", 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (unsigned char) *cur++); 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) n++; 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) len = strlen(buffer); 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) snprintf(&buffer[len], sizeof(buffer) - len, "\n"); 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cur = input->cur; 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while ((*cur == '\n') || (*cur == '\r')) 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cur--; 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) n = 0; 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while ((cur != base) && (n++ < 80)) { 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) len = strlen(buffer); 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) snprintf(&buffer[len], sizeof(buffer) - len, " "); 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base++; 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) len = strlen(buffer); 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) snprintf(&buffer[len], sizeof(buffer) - len, "^\n"); 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlHTMLEncodeSend(); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, "</pre>"); 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlHTMLError: 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctx: an XML parser context 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @msg: the message to display/transmit 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @...: extra parameters for the message display 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Display and format an error messages, gives file, line, position and 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * extra parameters. 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void XMLCDECL 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlHTMLError(void *ctx, const char *msg, ...) 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlParserInputPtr input; 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_list args; 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int len; 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) buffer[0] = 0; 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input = ctxt->input; 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((input != NULL) && (input->filename == NULL) && (ctxt->inputNr > 1)) { 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input = ctxt->inputTab[ctxt->inputNr - 2]; 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlHTMLPrintFileInfo(input); 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, "<b>error</b>: "); 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_start(args, msg); 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) len = strlen(buffer); 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vsnprintf(&buffer[len], sizeof(buffer) - len, msg, args); 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_end(args); 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlHTMLEncodeSend(); 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, "</p>\n"); 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlHTMLPrintFileContext(input); 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlHTMLEncodeSend(); 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlHTMLWarning: 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctx: an XML parser context 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @msg: the message to display/transmit 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @...: extra parameters for the message display 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Display and format a warning messages, gives file, line, position and 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * extra parameters. 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void XMLCDECL 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlHTMLWarning(void *ctx, const char *msg, ...) 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlParserInputPtr input; 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_list args; 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int len; 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) buffer[0] = 0; 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input = ctxt->input; 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((input != NULL) && (input->filename == NULL) && (ctxt->inputNr > 1)) { 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input = ctxt->inputTab[ctxt->inputNr - 2]; 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlHTMLPrintFileInfo(input); 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, "<b>warning</b>: "); 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_start(args, msg); 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) len = strlen(buffer); 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vsnprintf(&buffer[len], sizeof(buffer) - len, msg, args); 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_end(args); 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlHTMLEncodeSend(); 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, "</p>\n"); 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlHTMLPrintFileContext(input); 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlHTMLEncodeSend(); 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlHTMLValidityError: 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctx: an XML parser context 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @msg: the message to display/transmit 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @...: extra parameters for the message display 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Display and format an validity error messages, gives file, 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * line, position and extra parameters. 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void XMLCDECL 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlHTMLValidityError(void *ctx, const char *msg, ...) 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlParserInputPtr input; 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_list args; 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int len; 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) buffer[0] = 0; 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input = ctxt->input; 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((input->filename == NULL) && (ctxt->inputNr > 1)) 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input = ctxt->inputTab[ctxt->inputNr - 2]; 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlHTMLPrintFileInfo(input); 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, "<b>validity error</b>: "); 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) len = strlen(buffer); 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_start(args, msg); 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vsnprintf(&buffer[len], sizeof(buffer) - len, msg, args); 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_end(args); 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlHTMLEncodeSend(); 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, "</p>\n"); 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlHTMLPrintFileContext(input); 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlHTMLEncodeSend(); 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_VALID; 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlHTMLValidityWarning: 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctx: an XML parser context 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @msg: the message to display/transmit 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @...: extra parameters for the message display 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Display and format a validity warning messages, gives file, line, 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * position and extra parameters. 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void XMLCDECL 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlHTMLValidityWarning(void *ctx, const char *msg, ...) 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlParserInputPtr input; 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_list args; 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int len; 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) buffer[0] = 0; 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input = ctxt->input; 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((input->filename == NULL) && (ctxt->inputNr > 1)) 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input = ctxt->inputTab[ctxt->inputNr - 2]; 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlHTMLPrintFileInfo(input); 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, "<b>validity warning</b>: "); 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_start(args, msg); 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) len = strlen(buffer); 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vsnprintf(&buffer[len], sizeof(buffer) - len, msg, args); 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_end(args); 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlHTMLEncodeSend(); 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, "</p>\n"); 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlHTMLPrintFileContext(input); 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlHTMLEncodeSend(); 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Shell Interface * 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ************************************************************************/ 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_DEBUG_ENABLED 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_XPATH_ENABLED 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xmlShellReadline: 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @prompt: the prompt value 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Read a string 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns a pointer to it or NULL on EOF the caller is expected to 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * free the returned string. 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static char * 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlShellReadline(char *prompt) { 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_LIBREADLINE 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char *line_read; 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* Get a line from the user. */ 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) line_read = readline (prompt); 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* If the line has any text in it, save it on the history. */ 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (line_read && *line_read) 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) add_history (line_read); 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (line_read); 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char line_read[501]; 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char *ret; 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int len; 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (prompt != NULL) 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "%s", prompt); 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!fgets(line_read, 500, stdin)) 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(NULL); 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) line_read[500] = 0; 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) len = strlen(line_read); 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = (char *) malloc(len + 1); 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret != NULL) { 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memcpy (ret, line_read, len + 1); 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(ret); 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_XPATH_ENABLED */ 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_DEBUG_ENABLED */ 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * I/O Interfaces * 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ************************************************************************/ 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int myRead(FILE *f, char * buf, int len) { 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(fread(buf, 1, len, f)); 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void myClose(FILE *f) { 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (f != stdin) { 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fclose(f); 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * SAX based tests * 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ************************************************************************/ 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * empty SAX block 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static xmlSAXHandler emptySAXHandlerStruct = { 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* internalSubset */ 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* isStandalone */ 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* hasInternalSubset */ 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* hasExternalSubset */ 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* resolveEntity */ 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* getEntity */ 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* entityDecl */ 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* notationDecl */ 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* attributeDecl */ 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* elementDecl */ 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* unparsedEntityDecl */ 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* setDocumentLocator */ 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* startDocument */ 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* endDocument */ 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* startElement */ 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* endElement */ 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* reference */ 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* characters */ 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* ignorableWhitespace */ 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* processingInstruction */ 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* comment */ 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* xmlParserWarning */ 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* xmlParserError */ 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* xmlParserError */ 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* getParameterEntity */ 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* cdataBlock; */ 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* externalSubset; */ 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XML_SAX2_MAGIC, 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* startElementNs */ 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* endElementNs */ 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL /* xmlStructuredErrorFunc */ 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static xmlSAXHandlerPtr emptySAXHandler = &emptySAXHandlerStruct; 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern xmlSAXHandlerPtr debugSAXHandler; 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int callbacks; 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * isStandaloneDebug: 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: An XML parser context 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Is this document tagged standalone ? 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns 1 if true 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)isStandaloneDebug(void *ctx ATTRIBUTE_UNUSED) 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(0); 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.isStandalone()\n"); 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(0); 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * hasInternalSubsetDebug: 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: An XML parser context 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Does this document has an internal subset 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns 1 if true 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hasInternalSubsetDebug(void *ctx ATTRIBUTE_UNUSED) 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(0); 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.hasInternalSubset()\n"); 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(0); 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * hasExternalSubsetDebug: 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: An XML parser context 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Does this document has an external subset 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns 1 if true 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hasExternalSubsetDebug(void *ctx ATTRIBUTE_UNUSED) 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(0); 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.hasExternalSubset()\n"); 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(0); 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * internalSubsetDebug: 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: An XML parser context 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Does this document has an internal subset 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)internalSubsetDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const xmlChar *ExternalID, const xmlChar *SystemID) 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.internalSubset(%s,", name); 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ExternalID == NULL) 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, " ,"); 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, " %s,", ExternalID); 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (SystemID == NULL) 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, " )\n"); 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, " %s)\n", SystemID); 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * externalSubsetDebug: 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: An XML parser context 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Does this document has an external subset 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)externalSubsetDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const xmlChar *ExternalID, const xmlChar *SystemID) 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.externalSubset(%s,", name); 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ExternalID == NULL) 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, " ,"); 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, " %s,", ExternalID); 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (SystemID == NULL) 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, " )\n"); 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, " %s)\n", SystemID); 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * resolveEntityDebug: 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: An XML parser context 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @publicId: The public ID of the entity 9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @systemId: The system ID of the entity 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Special entity resolver, better left to the parser, it has 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * more context than the application layer. 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The default behaviour is to NOT resolve the entities, in that case 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the ENTITY_REF nodes are built in the structure (and the parameter 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * values). 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour. 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static xmlParserInputPtr 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)resolveEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *publicId, const xmlChar *systemId) 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(NULL); 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; */ 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.resolveEntity("); 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (publicId != NULL) 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "%s", (char *)publicId); 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, " "); 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (systemId != NULL) 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, ", %s)\n", (char *)systemId); 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, ", )\n"); 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(NULL); 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * getEntityDebug: 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: An XML parser context 10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @name: The entity name 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Get an entity by name 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour. 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static xmlEntityPtr 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)getEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name) 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(NULL); 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.getEntity(%s)\n", name); 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(NULL); 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * getParameterEntityDebug: 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: An XML parser context 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @name: The entity name 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Get a parameter entity by name 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns the xmlParserInputPtr 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static xmlEntityPtr 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)getParameterEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name) 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(NULL); 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.getParameterEntity(%s)\n", name); 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(NULL); 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * entityDeclDebug: 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: An XML parser context 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @name: the entity name 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type: the entity type 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @publicId: The public ID of the entity 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @systemId: The system ID of the entity 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @content: the entity value (without processing). 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * An entity definition has been parsed 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)entityDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, int type, 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const xmlChar *publicId, const xmlChar *systemId, xmlChar *content) 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const xmlChar *nullstr = BAD_CAST "(null)"; 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* not all libraries handle printing null pointers nicely */ 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (publicId == NULL) 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) publicId = nullstr; 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (systemId == NULL) 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) systemId = nullstr; 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (content == NULL) 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content = (xmlChar *)nullstr; 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.entityDecl(%s, %d, %s, %s, %s)\n", 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name, type, publicId, systemId, content); 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * attributeDeclDebug: 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: An XML parser context 10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @name: the attribute name 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type: the attribute type 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * An attribute definition has been parsed 10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)attributeDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar * elem, 10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const xmlChar * name, int type, int def, 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const xmlChar * defaultValue, xmlEnumerationPtr tree) 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (defaultValue == NULL) 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.attributeDecl(%s, %s, %d, %d, NULL, ...)\n", 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) elem, name, type, def); 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.attributeDecl(%s, %s, %d, %d, %s, ...)\n", 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) elem, name, type, def, defaultValue); 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeEnumeration(tree); 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * elementDeclDebug: 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: An XML parser context 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @name: the element name 11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type: the element type 11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @content: the element value (without processing). 11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * An element definition has been parsed 11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)elementDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, int type, 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlElementContentPtr content ATTRIBUTE_UNUSED) 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.elementDecl(%s, %d, ...)\n", 11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name, type); 11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * notationDeclDebug: 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: An XML parser context 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @name: The name of the notation 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @publicId: The public ID of the entity 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @systemId: The system ID of the entity 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * What to do when a notation declaration has been parsed. 11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)notationDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const xmlChar *publicId, const xmlChar *systemId) 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.notationDecl(%s, %s, %s)\n", 11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (char *) name, (char *) publicId, (char *) systemId); 11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * unparsedEntityDeclDebug: 11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: An XML parser context 11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @name: The name of the entity 11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @publicId: The public ID of the entity 11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @systemId: The system ID of the entity 11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @notationName: the name of the notation 11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * What to do when an unparsed entity declaration is parsed 11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)unparsedEntityDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, 11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const xmlChar *publicId, const xmlChar *systemId, 11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const xmlChar *notationName) 11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const xmlChar *nullstr = BAD_CAST "(null)"; 11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (publicId == NULL) 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) publicId = nullstr; 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (systemId == NULL) 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) systemId = nullstr; 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (notationName == NULL) 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notationName = nullstr; 11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.unparsedEntityDecl(%s, %s, %s, %s)\n", 11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (char *) name, (char *) publicId, (char *) systemId, 11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (char *) notationName); 11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * setDocumentLocatorDebug: 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: An XML parser context 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @loc: A SAX Locator 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Receive the document locator at startup, actually xmlDefaultSAXLocator 11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Everything is available on the context, so this is useless in our case. 11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)setDocumentLocatorDebug(void *ctx ATTRIBUTE_UNUSED, xmlSAXLocatorPtr loc ATTRIBUTE_UNUSED) 11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.setDocumentLocator()\n"); 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * startDocumentDebug: 12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: An XML parser context 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * called when the document start being processed. 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)startDocumentDebug(void *ctx ATTRIBUTE_UNUSED) 12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.startDocument()\n"); 12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * endDocumentDebug: 12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: An XML parser context 12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * called when the document end has been detected. 12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)endDocumentDebug(void *ctx ATTRIBUTE_UNUSED) 12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 12275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.endDocument()\n"); 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * startElementDebug: 12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: An XML parser context 12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @name: The element name 12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * called when an opening tag has been processed. 12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)startElementDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, const xmlChar **atts) 12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int i; 12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.startElement(%s", (char *) name); 12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (atts != NULL) { 12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (i = 0;(atts[i] != NULL);i++) { 12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, ", %s='", atts[i++]); 12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (atts[i] != NULL) 12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "%s'", atts[i]); 12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, ")\n"); 12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * endElementDebug: 12605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: An XML parser context 12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @name: The element name 12625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * called when the end of an element has been detected. 12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)endElementDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name) 12675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.endElement(%s)\n", (char *) name); 12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * charactersDebug: 12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: An XML parser context 12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ch: a xmlChar string 12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @len: the number of xmlChar 12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * receiving some chars from the parser. 12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Question: how much at a time ??? 12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)charactersDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len) 12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char out[40]; 12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int i; 12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 12915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 12925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (i = 0;(i<len) && (i < 30);i++) 12935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) out[i] = ch[i]; 12945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) out[i] = 0; 12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.characters(%s, %d)\n", out, len); 12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * referenceDebug: 13015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: An XML parser context 13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @name: The entity name 13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 13045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * called when an entity reference is detected. 13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 13065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 13075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)referenceDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name) 13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 13095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.reference(%s)\n", name); 13135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 13165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ignorableWhitespaceDebug: 13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: An XML parser context 13185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ch: a xmlChar string 13195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @start: the first char in the string 13205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @len: the number of xmlChar 13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * receiving some ignorable whitespaces from the parser. 13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Question: how much at a time ??? 13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ignorableWhitespaceDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len) 13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 13285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char out[40]; 13295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int i; 13305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 13335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 13345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (i = 0;(i<len) && (i < 30);i++) 13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) out[i] = ch[i]; 13365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) out[i] = 0; 13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.ignorableWhitespace(%s, %d)\n", out, len); 13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * processingInstructionDebug: 13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: An XML parser context 13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @target: the target name 13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @data: the PI data's 13455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @len: the number of xmlChar 13465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 13475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * A processing instruction has been parsed. 13485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 13495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 13505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)processingInstructionDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *target, 13515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const xmlChar *data) 13525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 13535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 13555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data != NULL) 13575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.processingInstruction(%s, %s)\n", 13585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (char *) target, (char *) data); 13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.processingInstruction(%s, NULL)\n", 13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (char *) target); 13625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * cdataBlockDebug: 13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctx: the user data (XML parser context) 13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @value: The pcdata content 13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @len: the block length 13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * called when a pcdata block has been parsed 13715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 13725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 13735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cdataBlockDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *value, int len) 13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 13755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 13765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 13785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.pcdata(%.20s, %d)\n", 13795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (char *) value, len); 13805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 13835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * commentDebug: 13845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: An XML parser context 13855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @value: the comment content 13865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 13875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * A comment has been parsed. 13885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 13895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 13905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)commentDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *value) 13915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 13925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 13935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 13945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 13955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.comment(%s)\n", value); 13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 13995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * warningDebug: 14005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: An XML parser context 14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @msg: the message to display/transmit 14025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @...: extra parameters for the message display 14035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 14045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Display and format a warning messages, gives file, line, position and 14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * extra parameters. 14065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void XMLCDECL 14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)warningDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) 14095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_list args; 14115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 14145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 14155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_start(args, msg); 14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.warning: "); 14175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vfprintf(stdout, msg, args); 14185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_end(args); 14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 14225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * errorDebug: 14235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: An XML parser context 14245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @msg: the message to display/transmit 14255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @...: extra parameters for the message display 14265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Display and format a error messages, gives file, line, position and 14285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * extra parameters. 14295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 14305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void XMLCDECL 14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)errorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) 14325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_list args; 14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 14365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 14375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 14385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_start(args, msg); 14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.error: "); 14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vfprintf(stdout, msg, args); 14415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_end(args); 14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * fatalErrorDebug: 14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: An XML parser context 14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @msg: the message to display/transmit 14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @...: extra parameters for the message display 14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Display and format a fatalError messages, gives file, line, position and 14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * extra parameters. 14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void XMLCDECL 14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)fatalErrorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) 14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_list args; 14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_start(args, msg); 14625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.fatalError: "); 14635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vfprintf(stdout, msg, args); 14645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) va_end(args); 14655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static xmlSAXHandler debugSAXHandlerStruct = { 14685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) internalSubsetDebug, 14695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) isStandaloneDebug, 14705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hasInternalSubsetDebug, 14715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hasExternalSubsetDebug, 14725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resolveEntityDebug, 14735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getEntityDebug, 14745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entityDeclDebug, 14755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notationDeclDebug, 14765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attributeDeclDebug, 14775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) elementDeclDebug, 14785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unparsedEntityDeclDebug, 14795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setDocumentLocatorDebug, 14805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startDocumentDebug, 14815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) endDocumentDebug, 14825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startElementDebug, 14835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) endElementDebug, 14845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) referenceDebug, 14855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) charactersDebug, 14865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ignorableWhitespaceDebug, 14875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) processingInstructionDebug, 14885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) commentDebug, 14895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) warningDebug, 14905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errorDebug, 14915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fatalErrorDebug, 14925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getParameterEntityDebug, 14935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cdataBlockDebug, 14945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) externalSubsetDebug, 14955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1, 14965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, 14975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, 14985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, 14995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL 15005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 15015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xmlSAXHandlerPtr debugSAXHandler = &debugSAXHandlerStruct; 15035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 15055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * SAX2 specific callbacks 15065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 15085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * startElementNsDebug: 15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: An XML parser context 15105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @name: The element name 15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 15125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * called when an opening tag has been processed. 15135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)startElementNsDebug(void *ctx ATTRIBUTE_UNUSED, 15165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const xmlChar *localname, 15175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const xmlChar *prefix, 15185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const xmlChar *URI, 15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int nb_namespaces, 15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const xmlChar **namespaces, 15215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int nb_attributes, 15225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int nb_defaulted, 15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const xmlChar **attributes) 15245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int i; 15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 15285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 15295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.startElementNs(%s", (char *) localname); 15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (prefix == NULL) 15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, ", NULL"); 15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, ", %s", (char *) prefix); 15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (URI == NULL) 15365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, ", NULL"); 15375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 15385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, ", '%s'", (char *) URI); 15395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, ", %d", nb_namespaces); 15405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (namespaces != NULL) { 15425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (i = 0;i < nb_namespaces * 2;i++) { 15435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, ", xmlns"); 15445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (namespaces[i] != NULL) 15455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, ":%s", namespaces[i]); 15465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i++; 15475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "='%s'", namespaces[i]); 15485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, ", %d, %d", nb_attributes, nb_defaulted); 15515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (attributes != NULL) { 15525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (i = 0;i < nb_attributes * 5;i += 5) { 15535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (attributes[i + 1] != NULL) 15545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, ", %s:%s='", attributes[i + 1], attributes[i]); 15555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 15565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, ", %s='", attributes[i]); 15575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "%.4s...', %d", attributes[i + 3], 15585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (int)(attributes[i + 4] - attributes[i + 3])); 15595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, ")\n"); 15625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 15655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * endElementDebug: 15665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ctxt: An XML parser context 15675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @name: The element name 15685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 15695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * called when the end of an element has been detected. 15705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 15715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 15725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)endElementNsDebug(void *ctx ATTRIBUTE_UNUSED, 15735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const xmlChar *localname, 15745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const xmlChar *prefix, 15755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const xmlChar *URI) 15765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 15775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks++; 15785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 15795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 15805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, "SAX.endElementNs(%s", (char *) localname); 15815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (prefix == NULL) 15825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, ", NULL"); 15835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 15845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, ", %s", (char *) prefix); 15855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (URI == NULL) 15865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, ", NULL)\n"); 15875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 15885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stdout, ", '%s')\n", (char *) URI); 15895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static xmlSAXHandler debugSAX2HandlerStruct = { 15925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) internalSubsetDebug, 15935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) isStandaloneDebug, 15945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hasInternalSubsetDebug, 15955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hasExternalSubsetDebug, 15965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resolveEntityDebug, 15975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getEntityDebug, 15985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entityDeclDebug, 15995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notationDeclDebug, 16005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attributeDeclDebug, 16015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) elementDeclDebug, 16025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unparsedEntityDeclDebug, 16035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setDocumentLocatorDebug, 16045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startDocumentDebug, 16055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) endDocumentDebug, 16065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, 16075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, 16085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) referenceDebug, 16095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) charactersDebug, 16105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ignorableWhitespaceDebug, 16115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) processingInstructionDebug, 16125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) commentDebug, 16135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) warningDebug, 16145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errorDebug, 16155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fatalErrorDebug, 16165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getParameterEntityDebug, 16175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cdataBlockDebug, 16185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) externalSubsetDebug, 16195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XML_SAX2_MAGIC, 16205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, 16215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startElementNsDebug, 16225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) endElementNsDebug, 16235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL 16245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 16255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static xmlSAXHandlerPtr debugSAX2Handler = &debugSAX2HandlerStruct; 16275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void 16295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)testSAX(const char *filename) { 16305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSAXHandlerPtr handler; 16315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *user_data = "user_data"; /* mostly for debugging */ 16325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlParserInputBufferPtr buf = NULL; 16335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlParserInputPtr inputStream; 16345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlParserCtxtPtr ctxt = NULL; 16355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSAXHandlerPtr old_sax = NULL; 16365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callbacks = 0; 16385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) { 16405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handler = emptySAXHandler; 16415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SAX1_ENABLED 16425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (sax1) { 16435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handler = debugSAXHandler; 16445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 16455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 16465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handler = debugSAX2Handler; 16475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 16505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * it's not the simplest code but the most generic in term of I/O 16515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 16525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) buf = xmlParserInputBufferCreateFilename(filename, XML_CHAR_ENCODING_NONE); 16535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (buf == NULL) { 16545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) goto error; 16555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SCHEMAS_ENABLED 16585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (wxschemas != NULL) { 16595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int ret; 16605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSchemaValidCtxtPtr vctxt; 16615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vctxt = xmlSchemaNewValidCtxt(wxschemas); 16635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSchemaSetValidErrors(vctxt, 16645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (xmlSchemaValidityErrorFunc) fprintf, 16655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (xmlSchemaValidityWarningFunc) fprintf, 16665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) stderr); 16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = xmlSchemaValidateStream(vctxt, buf, 0, handler, 16695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (void *)user_data); 16705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (repeat == 0) { 16715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret == 0) { 16725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "%s validates\n", filename); 16735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (ret > 0) { 16745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "%s fails to validate\n", filename); 16755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_VALID; 16765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 16775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "%s validation generated an internal error\n", 16785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filename); 16795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_VALID; 16805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSchemaFreeValidCtxt(vctxt); 16835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else 16845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 16855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 16865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 16875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Create the parser context amd hook the input 16885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 16895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt = xmlNewParserCtxt(); 16905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ctxt == NULL) { 16915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeParserInputBuffer(buf); 16925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) goto error; 16935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) old_sax = ctxt->sax; 16955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->sax = handler; 16965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->userData = (void *) user_data; 16975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inputStream = xmlNewIOInputStream(ctxt, buf, XML_CHAR_ENCODING_NONE); 16985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (inputStream == NULL) { 16995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeParserInputBuffer(buf); 17005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) goto error; 17015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inputPush(ctxt, inputStream); 17035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* do the parsing */ 17055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlParseDocument(ctxt); 17065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ctxt->myDoc != NULL) { 17085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "SAX generated a doc !\n"); 17095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeDoc(ctxt->myDoc); 17105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->myDoc = NULL; 17115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error: 17155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ctxt != NULL) { 17165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->sax = old_sax; 17175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeParserCtxt(ctxt); 17185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 17225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 17235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Stream Test processing * 17245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 17255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ************************************************************************/ 17265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_READER_ENABLED 17275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void processNode(xmlTextReaderPtr reader) { 17285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const xmlChar *name, *value; 17295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int type, empty; 17305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type = xmlTextReaderNodeType(reader); 17325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) empty = xmlTextReaderIsEmptyElement(reader); 17335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (debug) { 17355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name = xmlTextReaderConstName(reader); 17365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (name == NULL) 17375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name = BAD_CAST "--"; 17385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value = xmlTextReaderConstValue(reader); 17405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("%d %d %s %d %d", 17435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlTextReaderDepth(reader), 17445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type, 17455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name, 17465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) empty, 17475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlTextReaderHasValue(reader)); 17485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (value == NULL) 17495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\n"); 17505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else { 17515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf(" %s\n", value); 17525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_PATTERN_ENABLED 17555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (patternc) { 17565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlChar *path = NULL; 17575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int match = -1; 17585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (type == XML_READER_TYPE_ELEMENT) { 17605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* do the check only on element start */ 17615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match = xmlPatternMatch(patternc, xmlTextReaderCurrentNode(reader)); 17625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (match) { 17645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED) 17655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = xmlGetNodePath(xmlTextReaderCurrentNode(reader)); 17665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("Node %s matches pattern %s\n", path, pattern); 17675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 17685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("Node %s matches pattern %s\n", 17695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlTextReaderConstName(reader), pattern); 17705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 17715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (patstream != NULL) { 17745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int ret; 17755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (type == XML_READER_TYPE_ELEMENT) { 17775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = xmlStreamPush(patstream, 17785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlTextReaderConstLocalName(reader), 17795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlTextReaderConstNamespaceUri(reader)); 17805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret < 0) { 17815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "xmlStreamPush() failure\n"); 17825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeStreamCtxt(patstream); 17835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) patstream = NULL; 17845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (ret != match) { 17855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED) 17865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (path == NULL) { 17875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = xmlGetNodePath( 17885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlTextReaderCurrentNode(reader)); 17895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 17915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, 17925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "xmlPatternMatch and xmlStreamPush disagree\n"); 17935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (path != NULL) 17945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, " pattern %s node %s\n", 17955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern, path); 17965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 17975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, " pattern %s node %s\n", 17985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern, xmlTextReaderConstName(reader)); 17995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((type == XML_READER_TYPE_END_ELEMENT) || 18035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ((type == XML_READER_TYPE_ELEMENT) && (empty))) { 18045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = xmlStreamPop(patstream); 18055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret < 0) { 18065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "xmlStreamPop() failure\n"); 18075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeStreamCtxt(patstream); 18085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) patstream = NULL; 18095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (path != NULL) 18135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFree(path); 18145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 18165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void streamFile(char *filename) { 18195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlTextReaderPtr reader; 18205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int ret; 18215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_SYS_MMAN_H 18225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int fd = -1; 18235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct stat info; 18245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *base = NULL; 18255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlParserInputBufferPtr input = NULL; 18265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (memory) { 18285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (stat(filename, &info) < 0) 18295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 18305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((fd = open(filename, O_RDONLY)) < 0) 18315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 18325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base = mmap(NULL, info.st_size, PROT_READ, MAP_SHARED, fd, 0) ; 18335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (base == (void *) MAP_FAILED) 18345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 18355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reader = xmlReaderForMemory(base, info.st_size, filename, 18375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, options); 18385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else 18395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 18405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reader = xmlReaderForFile(filename, NULL, options); 18415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_PATTERN_ENABLED 18425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (pattern != NULL) { 18435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) patternc = xmlPatterncompile((const xmlChar *) pattern, NULL, 0, NULL); 18445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (patternc == NULL) { 18455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 18465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Pattern %s failed to compile\n", pattern); 18475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_SCHEMAPAT; 18485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern = NULL; 18495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (patternc != NULL) { 18525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) patstream = xmlPatternGetStreamCtxt(patternc); 18535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (patstream != NULL) { 18545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = xmlStreamPush(patstream, NULL, NULL); 18555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret < 0) { 18565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "xmlStreamPush() failure\n"); 18575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeStreamCtxt(patstream); 18585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) patstream = NULL; 18595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 18635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (reader != NULL) { 18665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_VALID_ENABLED 18675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (valid) 18685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlTextReaderSetParserProp(reader, XML_PARSER_VALIDATE, 1); 18695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 18705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_VALID_ENABLED */ 18715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlTextReaderSetParserProp(reader, XML_PARSER_LOADDTD, 1); 18725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SCHEMAS_ENABLED 18735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (relaxng != NULL) { 18745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) { 18755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTimer(); 18765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = xmlTextReaderRelaxNGValidate(reader, relaxng); 18785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret < 0) { 18795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 18805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Relax-NG schema %s failed to compile\n", relaxng); 18815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_SCHEMACOMP; 18825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) relaxng = NULL; 18835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) { 18855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) endTimer("Compiling the schemas"); 18865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (schema != NULL) { 18895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) { 18905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTimer(); 18915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = xmlTextReaderSchemaValidate(reader, schema); 18935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret < 0) { 18945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 18955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "XSD schema %s failed to compile\n", schema); 18965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_SCHEMACOMP; 18975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) schema = NULL; 18985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) { 19005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) endTimer("Compiling the schemas"); 19015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 19045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 19065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Process all nodes in sequence 19075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 19085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) { 19095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTimer(); 19105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = xmlTextReaderRead(reader); 19125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (ret == 1) { 19135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((debug) 19145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_PATTERN_ENABLED 19155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) || (patternc) 19165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 19175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ) 19185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) processNode(reader); 19195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = xmlTextReaderRead(reader); 19205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) { 19225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SCHEMAS_ENABLED 19235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (relaxng != NULL) 19245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) endTimer("Parsing and validating"); 19255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 19265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 19275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_VALID_ENABLED 19285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (valid) 19295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) endTimer("Parsing and validating"); 19305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 19315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 19325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) endTimer("Parsing"); 19335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_VALID_ENABLED 19365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (valid) { 19375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlTextReaderIsValid(reader) != 1) { 19385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 19395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Document %s does not validate\n", filename); 19405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_VALID; 19415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_VALID_ENABLED */ 19445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SCHEMAS_ENABLED 19455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((relaxng != NULL) || (schema != NULL)) { 19465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlTextReaderIsValid(reader) != 1) { 19475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "%s fails to validate\n", filename); 19485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_VALID; 19495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 19505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "%s validates\n", filename); 19515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 19545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 19555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Done, cleanup and status 19565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 19575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeTextReader(reader); 19585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret != 0) { 19595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "%s : failed to parse\n", filename); 19605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_UNCLASS; 19615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 19635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "Unable to open %s\n", filename); 19645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_UNCLASS; 19655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_PATTERN_ENABLED 19675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (patstream != NULL) { 19685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeStreamCtxt(patstream); 19695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) patstream = NULL; 19705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 19725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_SYS_MMAN_H 19735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (memory) { 19745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeParserInputBuffer(input); 19755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) munmap((char *) base, info.st_size); 19765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) close(fd); 19775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 19795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void walkDoc(xmlDocPtr doc) { 19825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlTextReaderPtr reader; 19835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int ret; 19845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_PATTERN_ENABLED 19865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr root; 19875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const xmlChar *namespaces[22]; 19885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int i; 19895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNsPtr ns; 19905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) root = xmlDocGetRootElement(doc); 19925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (ns = root->nsDef, i = 0;ns != NULL && i < 20;ns=ns->next) { 19935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) namespaces[i++] = ns->href; 19945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) namespaces[i++] = ns->prefix; 19955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) namespaces[i++] = NULL; 19975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) namespaces[i] = NULL; 19985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (pattern != NULL) { 20005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) patternc = xmlPatterncompile((const xmlChar *) pattern, doc->dict, 20015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, &namespaces[0]); 20025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (patternc == NULL) { 20035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 20045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Pattern %s failed to compile\n", pattern); 20055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_SCHEMAPAT; 20065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern = NULL; 20075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (patternc != NULL) { 20105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) patstream = xmlPatternGetStreamCtxt(patternc); 20115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (patstream != NULL) { 20125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = xmlStreamPush(patstream, NULL, NULL); 20135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret < 0) { 20145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "xmlStreamPush() failure\n"); 20155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeStreamCtxt(patstream); 20165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) patstream = NULL; 20175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_PATTERN_ENABLED */ 20215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reader = xmlReaderWalker(doc); 20225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (reader != NULL) { 20235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) { 20245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTimer(); 20255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = xmlTextReaderRead(reader); 20275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (ret == 1) { 20285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((debug) 20295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_PATTERN_ENABLED 20305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) || (patternc) 20315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 20325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ) 20335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) processNode(reader); 20345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = xmlTextReaderRead(reader); 20355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) { 20375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) endTimer("walking through the doc"); 20385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeTextReader(reader); 20405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret != 0) { 20415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "failed to walk through the doc\n"); 20425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_UNCLASS; 20435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 20455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "Failed to crate a reader from the document\n"); 20465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_UNCLASS; 20475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_PATTERN_ENABLED 20495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (patstream != NULL) { 20505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeStreamCtxt(patstream); 20515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) patstream = NULL; 20525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 20545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_READER_ENABLED */ 20565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_XPATH_ENABLED 20585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 20595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 20605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * XPath Query * 20615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 20625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ************************************************************************/ 20635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void doXPathDump(xmlXPathObjectPtr cur) { 20655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch(cur->type) { 20665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_NODESET: { 20675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int i; 20685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr node; 20695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_OUTPUT_ENABLED 20705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSaveCtxtPtr ctxt; 20715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cur->nodesetval->nodeNr <= 0) { 20735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "XPath set is empty\n"); 20745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_XPATH; 20755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 20765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt = xmlSaveToFd(1, NULL, 0); 20785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ctxt == NULL) { 20795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "Out of memory for XPath\n"); 20805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_MEM; 20815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 20825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (i = 0;i < cur->nodesetval->nodeNr;i++) { 20845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node = cur->nodesetval->nodeTab[i]; 20855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSaveTree(ctxt, node); 20865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSaveClose(ctxt); 20885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 20895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("xpath returned %d nodes\n", cur->nodesetval->nodeNr); 20905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 20915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 20925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_BOOLEAN: 20945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cur->boolval) printf("true"); 20955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else printf("false"); 20965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 20975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_NUMBER: 20985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (xmlXPathIsInf(cur->floatval)) { 20995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 1: 21005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("Infinity"); 21015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 21025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case -1: 21035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("-Infinity"); 21045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 21055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 21065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlXPathIsNaN(cur->floatval)) { 21075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("NaN"); 21085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 21095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("%0g", cur->floatval); 21105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 21135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_STRING: 21145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("%s", (const char *) cur->stringval); 21155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 21165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case XPATH_UNDEFINED: 21175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "XPath Object is uninitialized\n"); 21185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_XPATH; 21195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 21205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 21215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "XPath object of unexpected type\n"); 21225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_XPATH; 21235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 21245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void doXPathQuery(xmlDocPtr doc, const char *query) { 21285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlXPathContextPtr ctxt; 21295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlXPathObjectPtr res; 21305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt = xmlXPathNewContext(doc); 21325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ctxt == NULL) { 21335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "Out of memory for XPath\n"); 21345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_MEM; 21355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 21365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->node = xmlDocGetRootElement(doc); 21385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) res = xmlXPathEval(BAD_CAST query, ctxt); 21395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlXPathFreeContext(ctxt); 21405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (res == NULL) { 21425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "XPath evaluation failure\n"); 21435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_XPATH; 21445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 21455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doXPathDump(res); 21475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlXPathFreeObject(res); 21485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_XPATH_ENABLED */ 21505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 21525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 21535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Tree Test processing * 21545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 21555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ************************************************************************/ 21565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) { 21575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDocPtr doc = NULL; 21585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_TREE_ENABLED 21595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDocPtr tmp; 21605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_TREE_ENABLED */ 21615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) 21635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTimer(); 21645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_TREE_ENABLED 21675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (filename == NULL) { 21685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (generate) { 21695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr n; 21705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doc = xmlNewDoc(BAD_CAST "1.0"); 21725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) n = xmlNewDocNode(doc, NULL, BAD_CAST "info", NULL); 21735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodeSetContent(n, BAD_CAST "abc"); 21745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDocSetRootElement(doc, n); 21755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_TREE_ENABLED */ 21785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_HTML_ENABLED 21795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_PUSH_ENABLED 21805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((html) && (push)) { 21815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE *f; 21825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__) 21845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) f = fopen(filename, "rb"); 21855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 21865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) f = fopen(filename, "r"); 21875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 21885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (f != NULL) { 21895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int res, size = 3; 21905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char chars[4096]; 21915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) htmlParserCtxtPtr ctxt; 21925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* if (repeat) */ 21945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size = 4096; 21955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) res = fread(chars, 1, 4, f); 21965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (res > 0) { 21975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt = htmlCreatePushParserCtxt(NULL, NULL, 21985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chars, res, filename, XML_CHAR_ENCODING_NONE); 21995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while ((res = fread(chars, 1, size, f)) > 0) { 22005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) htmlParseChunk(ctxt, chars, res, 0); 22015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) htmlParseChunk(ctxt, chars, 0, 1); 22035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doc = ctxt->myDoc; 22045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) htmlFreeParserCtxt(ctxt); 22055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fclose(f); 22075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_PUSH_ENABLED */ 22105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_SYS_MMAN_H 22115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((html) && (memory)) { 22125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int fd; 22135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct stat info; 22145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *base; 22155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (stat(filename, &info) < 0) 22165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 22175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((fd = open(filename, O_RDONLY)) < 0) 22185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 22195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base = mmap(NULL, info.st_size, PROT_READ, MAP_SHARED, fd, 0) ; 22205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (base == (void *) MAP_FAILED) 22215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 22225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doc = htmlReadMemory((char *) base, info.st_size, filename, 22245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, options); 22255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) munmap((char *) base, info.st_size); 22275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) close(fd); 22285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 22305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (html) { 22315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doc = htmlReadFile(filename, NULL, options); 22325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_HTML_ENABLED */ 22345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else { 22355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_PUSH_ENABLED 22365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 22375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * build an XML tree from a string; 22385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 22395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (push) { 22405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE *f; 22415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* '-' Usually means stdin -<sven@zen.org> */ 22435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((filename[0] == '-') && (filename[1] == 0)) { 22445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) f = stdin; 22455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 22465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__) 22475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) f = fopen(filename, "rb"); 22485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 22495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) f = fopen(filename, "r"); 22505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 22515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (f != NULL) { 22535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int ret; 22545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int res, size = 1024; 22555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char chars[1024]; 22565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlParserCtxtPtr ctxt; 22575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* if (repeat) size = 1024; */ 22595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) res = fread(chars, 1, 4, f); 22605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (res > 0) { 22615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt = xmlCreatePushParserCtxt(NULL, NULL, 22625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chars, res, filename); 22635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCtxtUseOptions(ctxt, options); 22645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while ((res = fread(chars, 1, size, f)) > 0) { 22655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlParseChunk(ctxt, chars, res, 0); 22665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlParseChunk(ctxt, chars, 0, 1); 22685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doc = ctxt->myDoc; 22695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = ctxt->wellFormed; 22705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeParserCtxt(ctxt); 22715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ret) { 22725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeDoc(doc); 22735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doc = NULL; 22745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (f != stdin) 22775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fclose(f); 22785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else 22805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_PUSH_ENABLED */ 22815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (testIO) { 22825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((filename[0] == '-') && (filename[1] == 0)) { 22835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doc = xmlReadFd(0, NULL, NULL, options); 22845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 22855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE *f; 22865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__) 22885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) f = fopen(filename, "rb"); 22895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 22905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) f = fopen(filename, "r"); 22915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 22925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (f != NULL) { 22935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (rectxt == NULL) 22945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doc = xmlReadIO((xmlInputReadCallback) myRead, 22955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (xmlInputCloseCallback) myClose, f, 22965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filename, NULL, options); 22975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 22985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doc = xmlCtxtReadIO(rectxt, 22995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (xmlInputReadCallback) myRead, 23005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (xmlInputCloseCallback) myClose, f, 23015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filename, NULL, options); 23025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else 23035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doc = NULL; 23045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (htmlout) { 23065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlParserCtxtPtr ctxt; 23075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (rectxt == NULL) 23095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt = xmlNewParserCtxt(); 23105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 23115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt = rectxt; 23125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ctxt == NULL) { 23135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doc = NULL; 23145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 23155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->sax->error = xmlHTMLError; 23165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->sax->warning = xmlHTMLWarning; 23175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->vctxt.error = xmlHTMLValidityError; 23185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt->vctxt.warning = xmlHTMLValidityWarning; 23195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doc = xmlCtxtReadFile(ctxt, filename, NULL, options); 23215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (rectxt == NULL) 23235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeParserCtxt(ctxt); 23245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_SYS_MMAN_H 23265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (memory) { 23275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int fd; 23285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct stat info; 23295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *base; 23305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (stat(filename, &info) < 0) 23315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 23325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((fd = open(filename, O_RDONLY)) < 0) 23335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 23345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base = mmap(NULL, info.st_size, PROT_READ, MAP_SHARED, fd, 0) ; 23355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (base == (void *) MAP_FAILED) 23365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 23375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (rectxt == NULL) 23395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doc = xmlReadMemory((char *) base, info.st_size, 23405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filename, NULL, options); 23415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 23425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doc = xmlCtxtReadMemory(rectxt, (char *) base, info.st_size, 23435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filename, NULL, options); 23445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) munmap((char *) base, info.st_size); 23465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) close(fd); 23475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 23485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_VALID_ENABLED 23495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (valid) { 23505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlParserCtxtPtr ctxt = NULL; 23515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (rectxt == NULL) 23535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt = xmlNewParserCtxt(); 23545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 23555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt = rectxt; 23565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ctxt == NULL) { 23575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doc = NULL; 23585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 23595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doc = xmlCtxtReadFile(ctxt, filename, NULL, options); 23605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ctxt->valid == 0) 23625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_RDFILE; 23635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (rectxt == NULL) 23645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeParserCtxt(ctxt); 23655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_VALID_ENABLED */ 23675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 23685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (rectxt != NULL) 23695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doc = xmlCtxtReadFile(rectxt, filename, NULL, options); 23705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else { 23715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SAX1_ENABLED 23725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (sax1) 23735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doc = xmlParseFile(filename); 23745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 23755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_SAX1_ENABLED */ 23765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doc = xmlReadFile(filename, NULL, options); 23775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 23825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * If we don't have a document we might as well give up. Do we 23835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * want an error message here? <sven@zen.org> */ 23845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (doc == NULL) { 23855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_UNCLASS; 23865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 23875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) { 23905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) endTimer("Parsing"); 23915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 23925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 23945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Remove DOCTYPE nodes 23955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 23965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (dropdtd) { 23975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDtdPtr dtd; 23985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dtd = xmlGetIntSubset(doc); 24005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (dtd != NULL) { 24015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlUnlinkNode((xmlNodePtr)dtd); 24025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeDtd(dtd); 24035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_XINCLUDE_ENABLED 24075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xinclude) { 24085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) { 24095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTimer(); 24105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlXIncludeProcessFlags(doc, options) < 0) 24125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_UNCLASS; 24135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) { 24145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) endTimer("Xinclude processing"); 24155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 24185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_XPATH_ENABLED 24205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xpathquery != NULL) { 24215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doXPathQuery(doc, xpathquery); 24225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 24245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_DEBUG_ENABLED 24265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_XPATH_ENABLED 24275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 24285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * shell interaction 24295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 24305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (shell) { 24315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlXPathOrderDocElems(doc); 24325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlShell(doc, filename, xmlShellReadline, stdout); 24335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 24355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 24365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_TREE_ENABLED 24385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 24395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * test intermediate copy if needed. 24405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 24415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (copy) { 24425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tmp = doc; 24435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (timing) { 24445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTimer(); 24455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) doc = xmlCopyDoc(doc, 1); 24475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (timing) { 24485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) endTimer("Copying"); 24495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (timing) { 24515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTimer(); 24525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeDoc(tmp); 24545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (timing) { 24555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) endTimer("Freeing original"); 24565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_TREE_ENABLED */ 24595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_VALID_ENABLED 24615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((insert) && (!html)) { 24625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const xmlChar* list[256]; 24635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int nb, i; 24645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlNodePtr node; 24655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (doc->children != NULL) { 24675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node = doc->children; 24685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while ((node != NULL) && (node->last == NULL)) node = node->next; 24695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (node != NULL) { 24705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nb = xmlValidGetValidElements(node->last, NULL, list, 256); 24715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (nb < 0) { 24725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "could not get valid list of elements\n"); 24735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (nb == 0) { 24745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "No element can be inserted under root\n"); 24755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 24765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "%d element types can be inserted under root:\n", 24775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nb); 24785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (i = 0;i < nb;i++) { 24795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "%s\n", (char *) list[i]); 24805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }else 24855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_VALID_ENABLED */ 24865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_READER_ENABLED 24875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (walker) { 24885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) walkDoc(doc); 24895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 24905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_READER_ENABLED */ 24915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_OUTPUT_ENABLED 24925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout == 0) { 24935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int ret; 24945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 24965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * print it. 24975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 24985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_DEBUG_ENABLED 24995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!debug) { 25005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 25015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) { 25025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTimer(); 25035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_HTML_ENABLED 25055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((html) && (!xmlout)) { 25065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (compress) { 25075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) htmlSaveFile(output ? output : "-", doc); 25085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (encoding != NULL) { 25105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ( format ) { 25115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) htmlSaveFileFormat(output ? output : "-", doc, encoding, 1); 25125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else { 25145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) htmlSaveFileFormat(output ? output : "-", doc, encoding, 0); 25155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (format) { 25185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) htmlSaveFileFormat(output ? output : "-", doc, NULL, 1); 25195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else { 25215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE *out; 25225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (output == NULL) 25235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) out = stdout; 25245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else { 25255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) out = fopen(output,"wb"); 25265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (out != NULL) { 25285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (htmlDocDump(out, doc) < 0) 25295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_OUT; 25305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (output != NULL) 25325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fclose(out); 25335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 25345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "failed to open %s\n", output); 25355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_OUT; 25365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) { 25395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) endTimer("Saving"); 25405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else 25425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 25435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_C14N_ENABLED 25445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (canonical) { 25455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlChar *result = NULL; 25465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int size; 25475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size = xmlC14NDocDumpMemory(doc, NULL, XML_C14N_1_0, NULL, 1, &result); 25495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (size >= 0) { 25505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) write(1, result, size); 25515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFree(result); 25525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 25535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "Failed to canonicalize\n"); 25545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_OUT; 25555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (canonical) { 25575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlChar *result = NULL; 25585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int size; 25595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size = xmlC14NDocDumpMemory(doc, NULL, XML_C14N_1_1, NULL, 1, &result); 25615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (size >= 0) { 25625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) write(1, result, size); 25635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFree(result); 25645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 25655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "Failed to canonicalize\n"); 25665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_OUT; 25675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else 25695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (exc_canonical) { 25705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlChar *result = NULL; 25715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int size; 25725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size = xmlC14NDocDumpMemory(doc, NULL, XML_C14N_EXCLUSIVE_1_0, NULL, 1, &result); 25745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (size >= 0) { 25755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) write(1, result, size); 25765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFree(result); 25775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 25785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "Failed to canonicalize\n"); 25795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_OUT; 25805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else 25825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 25835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_SYS_MMAN_H 25845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (memory) { 25855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlChar *result; 25865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int len; 25875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (encoding != NULL) { 25895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ( format ) { 25905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDocDumpFormatMemoryEnc(doc, &result, &len, encoding, 1); 25915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 25925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDocDumpMemoryEnc(doc, &result, &len, encoding); 25935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 25955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (format) 25965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDocDumpFormatMemory(doc, &result, &len, 1); 25975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 25985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDocDumpMemory(doc, &result, &len); 25995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (result == NULL) { 26015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "Failed to save\n"); 26025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_OUT; 26035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 26045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) write(1, result, len); 26055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFree(result); 26065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else 26095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* HAVE_SYS_MMAN_H */ 26105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (compress) { 26115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSaveFile(output ? output : "-", doc); 26125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (oldout) { 26135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (encoding != NULL) { 26145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ( format ) { 26155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = xmlSaveFormatFileEnc(output ? output : "-", doc, 26165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) encoding, 1); 26175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else { 26195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = xmlSaveFileEnc(output ? output : "-", doc, 26205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) encoding); 26215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret < 0) { 26235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "failed save to %s\n", 26245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) output ? output : "-"); 26255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_OUT; 26265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (format) { 26285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = xmlSaveFormatFile(output ? output : "-", doc, 1); 26295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret < 0) { 26305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "failed save to %s\n", 26315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) output ? output : "-"); 26325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_OUT; 26335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 26355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE *out; 26365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (output == NULL) 26375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) out = stdout; 26385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else { 26395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) out = fopen(output,"wb"); 26405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (out != NULL) { 26425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlDocDump(out, doc) < 0) 26435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_OUT; 26445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (output != NULL) 26465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fclose(out); 26475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 26485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "failed to open %s\n", output); 26495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_OUT; 26505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 26535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSaveCtxtPtr ctxt; 26545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int saveOpts = 0; 26555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (format) 26575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) saveOpts |= XML_SAVE_FORMAT; 26585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(LIBXML_HTML_ENABLED) || defined(LIBXML_VALID_ENABLED) 26605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlout) 26615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) saveOpts |= XML_SAVE_AS_XML; 26625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 26635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (output == NULL) 26655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt = xmlSaveToFd(1, encoding, saveOpts); 26665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 26675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt = xmlSaveToFilename(output, encoding, saveOpts); 26685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ctxt != NULL) { 26705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlSaveDoc(ctxt, doc) < 0) { 26715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "failed save to %s\n", 26725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) output ? output : "-"); 26735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_OUT; 26745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSaveClose(ctxt); 26765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 26775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_OUT; 26785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) { 26815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) endTimer("Saving"); 26825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_DEBUG_ENABLED 26845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 26855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE *out; 26865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (output == NULL) 26875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) out = stdout; 26885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else { 26895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) out = fopen(output,"wb"); 26905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 26915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (out != NULL) { 26925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugDumpDocument(out, doc); 26935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (output != NULL) 26955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fclose(out); 26965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 26975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "failed to open %s\n", output); 26985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_OUT; 26995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 27025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_OUTPUT_ENABLED */ 27045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_VALID_ENABLED 27065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 27075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * A posteriori validation test 27085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 27095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((dtdvalid != NULL) || (dtdvalidfpi != NULL)) { 27105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDtdPtr dtd; 27115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) { 27135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTimer(); 27145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (dtdvalid != NULL) 27165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dtd = xmlParseDTD(NULL, (const xmlChar *)dtdvalid); 27175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 27185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dtd = xmlParseDTD((const xmlChar *)dtdvalidfpi, NULL); 27195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) { 27205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) endTimer("Parsing DTD"); 27215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (dtd == NULL) { 27235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (dtdvalid != NULL) 27245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 27255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Could not parse DTD %s\n", dtdvalid); 27265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 27275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 27285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Could not parse DTD %s\n", dtdvalidfpi); 27295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_DTD; 27305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 27315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlValidCtxtPtr cvp; 27325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((cvp = xmlNewValidCtxt()) == NULL) { 27345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 27355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Couldn't allocate validation context\n"); 27365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exit(-1); 27375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cvp->userData = (void *) stderr; 27395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cvp->error = (xmlValidityErrorFunc) fprintf; 27405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cvp->warning = (xmlValidityWarningFunc) fprintf; 27415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) { 27435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTimer(); 27445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!xmlValidateDtd(cvp, doc, dtd)) { 27465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (dtdvalid != NULL) 27475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 27485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Document %s does not validate against %s\n", 27495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filename, dtdvalid); 27505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 27515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 27525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Document %s does not validate against %s\n", 27535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filename, dtdvalidfpi); 27545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_VALID; 27555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) { 27575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) endTimer("Validating against DTD"); 27585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeValidCtxt(cvp); 27605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeDtd(dtd); 27615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (postvalid) { 27635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlValidCtxtPtr cvp; 27645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((cvp = xmlNewValidCtxt()) == NULL) { 27665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 27675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Couldn't allocate validation context\n"); 27685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exit(-1); 27695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) { 27725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTimer(); 27735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cvp->userData = (void *) stderr; 27755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cvp->error = (xmlValidityErrorFunc) fprintf; 27765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cvp->warning = (xmlValidityWarningFunc) fprintf; 27775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!xmlValidateDocument(cvp, doc)) { 27785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 27795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Document %s does not validate\n", filename); 27805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_VALID; 27815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) { 27835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) endTimer("Validating"); 27845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeValidCtxt(cvp); 27865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_VALID_ENABLED */ 27885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SCHEMATRON_ENABLED 27895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (wxschematron != NULL) { 27905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSchematronValidCtxtPtr ctxt; 27915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int ret; 27925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int flag; 27935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) { 27955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTimer(); 27965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 27975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (debug) 27995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flag = XML_SCHEMATRON_OUT_XML; 28005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 28015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flag = XML_SCHEMATRON_OUT_TEXT; 28025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noout) 28035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flag |= XML_SCHEMATRON_OUT_QUIET; 28045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt = xmlSchematronNewValidCtxt(wxschematron, flag); 28055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if 0 28065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSchematronSetValidErrors(ctxt, 28075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (xmlSchematronValidityErrorFunc) fprintf, 28085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (xmlSchematronValidityWarningFunc) fprintf, 28095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) stderr); 28105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 28115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = xmlSchematronValidateDoc(ctxt, doc); 28125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret == 0) { 28135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "%s validates\n", filename); 28145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (ret > 0) { 28155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "%s fails to validate\n", filename); 28165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_VALID; 28175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 28185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "%s validation generated an internal error\n", 28195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filename); 28205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_VALID; 28215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSchematronFreeValidCtxt(ctxt); 28235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) { 28245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) endTimer("Validating"); 28255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 28285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SCHEMAS_ENABLED 28295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (relaxngschemas != NULL) { 28305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlRelaxNGValidCtxtPtr ctxt; 28315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int ret; 28325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) { 28345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTimer(); 28355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt = xmlRelaxNGNewValidCtxt(relaxngschemas); 28385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlRelaxNGSetValidErrors(ctxt, 28395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (xmlRelaxNGValidityErrorFunc) fprintf, 28405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (xmlRelaxNGValidityWarningFunc) fprintf, 28415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) stderr); 28425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = xmlRelaxNGValidateDoc(ctxt, doc); 28435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret == 0) { 28445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "%s validates\n", filename); 28455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (ret > 0) { 28465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "%s fails to validate\n", filename); 28475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_VALID; 28485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 28495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "%s validation generated an internal error\n", 28505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filename); 28515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_VALID; 28525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlRelaxNGFreeValidCtxt(ctxt); 28545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) { 28555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) endTimer("Validating"); 28565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (wxschemas != NULL) { 28585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSchemaValidCtxtPtr ctxt; 28595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int ret; 28605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) { 28625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTimer(); 28635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt = xmlSchemaNewValidCtxt(wxschemas); 28665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSchemaSetValidErrors(ctxt, 28675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (xmlSchemaValidityErrorFunc) fprintf, 28685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (xmlSchemaValidityWarningFunc) fprintf, 28695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) stderr); 28705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = xmlSchemaValidateDoc(ctxt, doc); 28715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret == 0) { 28725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "%s validates\n", filename); 28735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (ret > 0) { 28745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "%s fails to validate\n", filename); 28755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_VALID; 28765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 28775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "%s validation generated an internal error\n", 28785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filename); 28795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_VALID; 28805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSchemaFreeValidCtxt(ctxt); 28825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) { 28835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) endTimer("Validating"); 28845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 28865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 28875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_DEBUG_ENABLED 28895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(LIBXML_HTML_ENABLED) || defined(LIBXML_VALID_ENABLED) 28905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((debugent) && (!html)) 28915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDebugDumpEntities(stderr, doc); 28925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 28935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 28945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 28965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * free it. 28975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 28985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) { 28995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTimer(); 29005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 29015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeDoc(doc); 29025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (!repeat)) { 29035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) endTimer("Freeing"); 29045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 29055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 29065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 29085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 29095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Usage and Main * 29105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * * 29115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ************************************************************************/ 29125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void showVersion(const char *name) { 29145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "%s: using libxml version %s\n", name, xmlParserVersion); 29155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, " compiled with: "); 29165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_THREAD)) fprintf(stderr, "Threads "); 29175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_TREE)) fprintf(stderr, "Tree "); 29185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_OUTPUT)) fprintf(stderr, "Output "); 29195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_PUSH)) fprintf(stderr, "Push "); 29205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_READER)) fprintf(stderr, "Reader "); 29215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_PATTERN)) fprintf(stderr, "Patterns "); 29225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_WRITER)) fprintf(stderr, "Writer "); 29235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_SAX1)) fprintf(stderr, "SAXv1 "); 29245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_FTP)) fprintf(stderr, "FTP "); 29255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_HTTP)) fprintf(stderr, "HTTP "); 29265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_VALID)) fprintf(stderr, "DTDValid "); 29275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_HTML)) fprintf(stderr, "HTML "); 29285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_LEGACY)) fprintf(stderr, "Legacy "); 29295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_C14N)) fprintf(stderr, "C14N "); 29305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_CATALOG)) fprintf(stderr, "Catalog "); 29315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_XPATH)) fprintf(stderr, "XPath "); 29325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_XPTR)) fprintf(stderr, "XPointer "); 29335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_XINCLUDE)) fprintf(stderr, "XInclude "); 29345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_ICONV)) fprintf(stderr, "Iconv "); 29355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_ISO8859X)) fprintf(stderr, "ISO8859X "); 29365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_UNICODE)) fprintf(stderr, "Unicode "); 29375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_REGEXP)) fprintf(stderr, "Regexps "); 29385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_AUTOMATA)) fprintf(stderr, "Automata "); 29395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_EXPR)) fprintf(stderr, "Expr "); 29405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_SCHEMAS)) fprintf(stderr, "Schemas "); 29415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_SCHEMATRON)) fprintf(stderr, "Schematron "); 29425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_MODULES)) fprintf(stderr, "Modules "); 29435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_DEBUG)) fprintf(stderr, "Debug "); 29445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_DEBUG_MEM)) fprintf(stderr, "MemDebug "); 29455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_DEBUG_RUN)) fprintf(stderr, "RunDebug "); 29465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (xmlHasFeature(XML_WITH_ZLIB)) fprintf(stderr, "Zlib "); 29475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "\n"); 29485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 29495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void usage(const char *name) { 29515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("Usage : %s [options] XMLfiles ...\n", name); 29525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_OUTPUT_ENABLED 29535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\tParse the XML files and output the result of the parsing\n"); 29545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 29555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\tParse the XML files\n"); 29565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_OUTPUT_ENABLED */ 29575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--version : display the version of the XML library used\n"); 29585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_DEBUG_ENABLED 29595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--debug : dump a debug tree of the in-memory document\n"); 29605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--shell : run a navigating shell\n"); 29615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--debugent : debug the entities defined in the document\n"); 29625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 29635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_READER_ENABLED 29645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--debug : dump the nodes content when using --stream\n"); 29655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_READER_ENABLED */ 29665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 29675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_TREE_ENABLED 29685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--copy : used to test the internal copy implementation\n"); 29695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_TREE_ENABLED */ 29705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--recover : output what was parsable on broken XML documents\n"); 29715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--huge : remove any internal arbitrary parser limits\n"); 29725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--noent : substitute entity references by their value\n"); 29735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--noout : don't output the result tree\n"); 29745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--path 'paths': provide a set of paths for resources\n"); 29755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--load-trace : print trace of all external entites loaded\n"); 29765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--nonet : refuse to fetch DTDs or entities over network\n"); 29775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--nocompact : do not generate compact text nodes\n"); 29785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--htmlout : output results as HTML\n"); 29795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--nowrap : do not put HTML doc wrapper\n"); 29805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_VALID_ENABLED 29815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--valid : validate the document in addition to std well-formed check\n"); 29825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--postvalid : do a posteriori validation, i.e after parsing\n"); 29835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--dtdvalid URL : do a posteriori validation against a given DTD\n"); 29845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--dtdvalidfpi FPI : same but name the DTD with a Public Identifier\n"); 29855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_VALID_ENABLED */ 29865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--timing : print some timings\n"); 29875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--output file or -o file: save to a given file\n"); 29885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--repeat : repeat 100 times, for timing or profiling\n"); 29895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--insert : ad-hoc test for valid insertions\n"); 29905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_OUTPUT_ENABLED 29915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_ZLIB_H 29925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--compress : turn on gzip compression of output\n"); 29935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 29945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_OUTPUT_ENABLED */ 29955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_HTML_ENABLED 29965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--html : use the HTML parser\n"); 29975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--xmlout : force to use the XML serializer when using --html\n"); 29985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 29995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_PUSH_ENABLED 30005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--push : use the push mode of the parser\n"); 30015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_PUSH_ENABLED */ 30025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_SYS_MMAN_H 30035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--memory : parse from memory\n"); 30045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 30055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--maxmem nbbytes : limits memory allocation to nbbytes bytes\n"); 30065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--nowarning : do not emit warnings from parser/validator\n"); 30075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--noblanks : drop (ignorable?) blanks spaces\n"); 30085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--nocdata : replace cdata section with text nodes\n"); 30095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_OUTPUT_ENABLED 30105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--format : reformat/reindent the input\n"); 30115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--encode encoding : output in the given encoding\n"); 30125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--dropdtd : remove the DOCTYPE of the input docs\n"); 30135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_OUTPUT_ENABLED */ 30145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--c14n : save in W3C canonical format v1.0 (with comments)\n"); 30155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--c14n11 : save in W3C canonical format v1.1 (with comments)\n"); 30165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--exc-c14n : save in W3C exclusive canonical format (with comments)\n"); 30175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_C14N_ENABLED 30185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_C14N_ENABLED */ 30195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--nsclean : remove redundant namespace declarations\n"); 30205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--testIO : test user I/O support\n"); 30215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_CATALOG_ENABLED 30225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--catalogs : use SGML catalogs from $SGML_CATALOG_FILES\n"); 30235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t otherwise XML Catalogs starting from \n"); 30245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t %s are activated by default\n", XML_XML_DEFAULT_CATALOG); 30255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--nocatalogs: deactivate all catalogs\n"); 30265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 30275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--auto : generate a small doc on the fly\n"); 30285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_XINCLUDE_ENABLED 30295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--xinclude : do XInclude processing\n"); 30305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--noxincludenode : same but do not generate XInclude nodes\n"); 30315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--nofixup-base-uris : do not fixup xml:base uris\n"); 30325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 30335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--loaddtd : fetch external DTD\n"); 30345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--dtdattr : loaddtd + populate the tree with inherited attributes \n"); 30355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_READER_ENABLED 30365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--stream : use the streaming interface to process very large files\n"); 30375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--walker : create a reader and walk though the resulting doc\n"); 30385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_READER_ENABLED */ 30395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_PATTERN_ENABLED 30405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--pattern pattern_value : test the pattern support\n"); 30415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 30425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--chkregister : verify the node registration code\n"); 30435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SCHEMAS_ENABLED 30445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--relaxng schema : do RelaxNG validation against the schema\n"); 30455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--schema schema : do validation against the WXS schema\n"); 30465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 30475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SCHEMATRON_ENABLED 30485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--schematron schema : do validation against a schematron\n"); 30495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 30505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SAX1_ENABLED 30515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--sax1: use the old SAX1 interfaces for processing\n"); 30525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 30535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--sax: do not build a tree but work just at the SAX level\n"); 30545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--oldxml10: use XML-1.0 parsing rules before the 5th edition\n"); 30555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_XPATH_ENABLED 30565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\t--xpath expr: evaluate the XPath expression, inply --noout\n"); 30575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 30585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("\nLibxml project home page: http://xmlsoft.org/\n"); 30605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("To report bugs or get some help check: http://xmlsoft.org/bugs.html\n"); 30615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 30625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void registerNode(xmlNodePtr node) 30645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 30655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node->_private = malloc(sizeof(long)); 30665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *(long*)node->_private = (long) 0x81726354; 30675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nbregister++; 30685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 30695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void deregisterNode(xmlNodePtr node) 30715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 30725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(node->_private != NULL); 30735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(*(long*)node->_private == (long) 0x81726354); 30745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) free(node->_private); 30755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nbregister--; 30765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 30775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int 30795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)main(int argc, char **argv) { 30805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int i, acount; 30815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int files = 0; 30825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int version = 0; 30835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* indent; 30845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (argc <= 1) { 30865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) usage(argv[0]); 30875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(1); 30885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 30895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LIBXML_TEST_VERSION 30905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (i = 1; i < argc ; i++) { 30915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!strcmp(argv[i], "-")) 30925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 30935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (argv[i][0] != '-') 30955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 30965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug"))) 30975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) debug++; 30985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 30995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_DEBUG_ENABLED 31005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((!strcmp(argv[i], "-shell")) || 31015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--shell"))) { 31025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shell++; 31035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) noout = 1; 31045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else 31055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 31065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_TREE_ENABLED 31075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((!strcmp(argv[i], "-copy")) || (!strcmp(argv[i], "--copy"))) 31085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) copy++; 31095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 31105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_TREE_ENABLED */ 31115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((!strcmp(argv[i], "-recover")) || 31125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--recover"))) { 31135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) recovery++; 31145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= XML_PARSE_RECOVER; 31155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((!strcmp(argv[i], "-huge")) || 31165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--huge"))) { 31175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= XML_PARSE_HUGE; 31185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((!strcmp(argv[i], "-noent")) || 31195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--noent"))) { 31205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) noent++; 31215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= XML_PARSE_NOENT; 31225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((!strcmp(argv[i], "-nsclean")) || 31235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--nsclean"))) { 31245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= XML_PARSE_NSCLEAN; 31255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((!strcmp(argv[i], "-nocdata")) || 31265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--nocdata"))) { 31275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= XML_PARSE_NOCDATA; 31285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((!strcmp(argv[i], "-nodict")) || 31295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--nodict"))) { 31305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= XML_PARSE_NODICT; 31315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((!strcmp(argv[i], "-version")) || 31325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--version"))) { 31335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) showVersion(argv[0]); 31345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) version = 1; 31355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((!strcmp(argv[i], "-noout")) || 31365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--noout"))) 31375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) noout++; 31385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_OUTPUT_ENABLED 31395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-o")) || 31405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "-output")) || 31415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--output"))) { 31425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i++; 31435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) output = argv[i]; 31445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 31455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_OUTPUT_ENABLED */ 31465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-htmlout")) || 31475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--htmlout"))) 31485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) htmlout++; 31495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-nowrap")) || 31505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--nowrap"))) 31515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nowrap++; 31525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_HTML_ENABLED 31535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-html")) || 31545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--html"))) { 31555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) html++; 31565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 31575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-xmlout")) || 31585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--xmlout"))) { 31595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlout++; 31605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 31615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_HTML_ENABLED */ 31625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-loaddtd")) || 31635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--loaddtd"))) { 31645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loaddtd++; 31655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= XML_PARSE_DTDLOAD; 31665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((!strcmp(argv[i], "-dtdattr")) || 31675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--dtdattr"))) { 31685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loaddtd++; 31695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dtdattrs++; 31705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= XML_PARSE_DTDATTR; 31715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 31725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_VALID_ENABLED 31735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-valid")) || 31745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--valid"))) { 31755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) valid++; 31765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= XML_PARSE_DTDVALID; 31775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((!strcmp(argv[i], "-postvalid")) || 31785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--postvalid"))) { 31795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) postvalid++; 31805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loaddtd++; 31815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= XML_PARSE_DTDLOAD; 31825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((!strcmp(argv[i], "-dtdvalid")) || 31835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--dtdvalid"))) { 31845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i++; 31855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dtdvalid = argv[i]; 31865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loaddtd++; 31875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= XML_PARSE_DTDLOAD; 31885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((!strcmp(argv[i], "-dtdvalidfpi")) || 31895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--dtdvalidfpi"))) { 31905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i++; 31915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dtdvalidfpi = argv[i]; 31925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loaddtd++; 31935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= XML_PARSE_DTDLOAD; 31945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 31955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_VALID_ENABLED */ 31965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-dropdtd")) || 31975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--dropdtd"))) 31985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dropdtd++; 31995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-insert")) || 32005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--insert"))) 32015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) insert++; 32025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-timing")) || 32035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--timing"))) 32045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) timing++; 32055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-auto")) || 32065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--auto"))) 32075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) generate++; 32085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-repeat")) || 32095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--repeat"))) { 32105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (repeat) 32115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) repeat *= 10; 32125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 32135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) repeat = 100; 32145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 32155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_PUSH_ENABLED 32165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-push")) || 32175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--push"))) 32185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) push++; 32195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_PUSH_ENABLED */ 32205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_SYS_MMAN_H 32215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-memory")) || 32225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--memory"))) 32235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memory++; 32245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 32255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-testIO")) || 32265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--testIO"))) 32275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testIO++; 32285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_XINCLUDE_ENABLED 32295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-xinclude")) || 32305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--xinclude"))) { 32315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xinclude++; 32325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= XML_PARSE_XINCLUDE; 32335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 32345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-noxincludenode")) || 32355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--noxincludenode"))) { 32365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xinclude++; 32375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= XML_PARSE_XINCLUDE; 32385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= XML_PARSE_NOXINCNODE; 32395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 32405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-nofixup-base-uris")) || 32415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--nofixup-base-uris"))) { 32425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xinclude++; 32435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= XML_PARSE_XINCLUDE; 32445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= XML_PARSE_NOBASEFIX; 32455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 32465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 32475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_OUTPUT_ENABLED 32485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_ZLIB_H 32495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-compress")) || 32505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--compress"))) { 32515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) compress++; 32525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSetCompressMode(9); 32535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 32545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 32555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_OUTPUT_ENABLED */ 32565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-nowarning")) || 32575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--nowarning"))) { 32585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGetWarningsDefaultValue = 0; 32595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlPedanticParserDefault(0); 32605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= XML_PARSE_NOWARNING; 32615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 32625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-pedantic")) || 32635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--pedantic"))) { 32645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGetWarningsDefaultValue = 1; 32655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlPedanticParserDefault(1); 32665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= XML_PARSE_PEDANTIC; 32675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 32685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_DEBUG_ENABLED 32695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-debugent")) || 32705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--debugent"))) { 32715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) debugent++; 32725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlParserDebugEntities = 1; 32735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 32745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 32755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_C14N_ENABLED 32765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-c14n")) || 32775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--c14n"))) { 32785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) canonical++; 32795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= XML_PARSE_NOENT | XML_PARSE_DTDATTR | XML_PARSE_DTDLOAD; 32805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 32815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-c14n11")) || 32825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--c14n11"))) { 32835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) canonical_11++; 32845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= XML_PARSE_NOENT | XML_PARSE_DTDATTR | XML_PARSE_DTDLOAD; 32855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 32865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-exc-c14n")) || 32875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--exc-c14n"))) { 32885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exc_canonical++; 32895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= XML_PARSE_NOENT | XML_PARSE_DTDATTR | XML_PARSE_DTDLOAD; 32905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 32915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 32925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_CATALOG_ENABLED 32935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-catalogs")) || 32945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--catalogs"))) { 32955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) catalogs++; 32965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((!strcmp(argv[i], "-nocatalogs")) || 32975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--nocatalogs"))) { 32985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nocatalogs++; 32995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 33005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 33015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-encode")) || 33025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--encode"))) { 33035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i++; 33045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) encoding = argv[i]; 33055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 33065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * OK it's for testing purposes 33075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 33085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlAddEncodingAlias("UTF-8", "DVEnc"); 33095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 33105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-noblanks")) || 33115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--noblanks"))) { 33125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) noblanks++; 33135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlKeepBlanksDefault(0); 33145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 33155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-maxmem")) || 33165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--maxmem"))) { 33175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i++; 33185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (sscanf(argv[i], "%d", &maxmem) == 1) { 33195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlMemSetup(myFreeFunc, myMallocFunc, myReallocFunc, 33205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) myStrdupFunc); 33215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 33225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) maxmem = 0; 33235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 33245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 33255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-format")) || 33265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--format"))) { 33275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) noblanks++; 33285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_OUTPUT_ENABLED 33295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) format++; 33305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_OUTPUT_ENABLED */ 33315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlKeepBlanksDefault(0); 33325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 33335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_READER_ENABLED 33345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-stream")) || 33355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--stream"))) { 33365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) stream++; 33375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 33385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-walker")) || 33395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--walker"))) { 33405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) walker++; 33415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) noout++; 33425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 33435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_READER_ENABLED */ 33445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SAX1_ENABLED 33455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-sax1")) || 33465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--sax1"))) { 33475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sax1++; 33485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= XML_PARSE_SAX1; 33495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 33505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_SAX1_ENABLED */ 33515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-sax")) || 33525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--sax"))) { 33535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sax++; 33545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 33555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if ((!strcmp(argv[i], "-chkregister")) || 33565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--chkregister"))) { 33575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chkregister++; 33585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SCHEMAS_ENABLED 33595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((!strcmp(argv[i], "-relaxng")) || 33605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--relaxng"))) { 33615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i++; 33625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) relaxng = argv[i]; 33635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) noent++; 33645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= XML_PARSE_NOENT; 33655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((!strcmp(argv[i], "-schema")) || 33665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--schema"))) { 33675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i++; 33685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) schema = argv[i]; 33695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) noent++; 33705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 33715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SCHEMATRON_ENABLED 33725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((!strcmp(argv[i], "-schematron")) || 33735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--schematron"))) { 33745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i++; 33755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) schematron = argv[i]; 33765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) noent++; 33775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 33785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((!strcmp(argv[i], "-nonet")) || 33795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--nonet"))) { 33805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= XML_PARSE_NONET; 33815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSetExternalEntityLoader(xmlNoNetExternalEntityLoader); 33825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((!strcmp(argv[i], "-nocompact")) || 33835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--nocompact"))) { 33845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options &= ~XML_PARSE_COMPACT; 33855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((!strcmp(argv[i], "-load-trace")) || 33865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--load-trace"))) { 33875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_trace++; 33885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((!strcmp(argv[i], "-path")) || 33895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--path"))) { 33905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i++; 33915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parsePath(BAD_CAST argv[i]); 33925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_PATTERN_ENABLED 33935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((!strcmp(argv[i], "-pattern")) || 33945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--pattern"))) { 33955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i++; 33965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern = argv[i]; 33975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 33985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_XPATH_ENABLED 33995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((!strcmp(argv[i], "-xpath")) || 34005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--xpath"))) { 34015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i++; 34025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) noout++; 34035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xpathquery = argv[i]; 34045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 34055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((!strcmp(argv[i], "-oldxml10")) || 34065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--oldxml10"))) { 34075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) oldxml10++; 34085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= XML_PARSE_OLD10; 34095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 34105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "Unknown option %s\n", argv[i]); 34115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) usage(argv[0]); 34125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(1); 34135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 34145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 34155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_CATALOG_ENABLED 34175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (nocatalogs == 0) { 34185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (catalogs) { 34195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *catal; 34205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) catal = getenv("SGML_CATALOG_FILES"); 34225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (catal != NULL) { 34235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlLoadCatalogs(catal); 34245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 34255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "Variable $SGML_CATALOG_FILES not set\n"); 34265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 34275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 34285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 34295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 34305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SAX1_ENABLED 34325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (sax1) 34335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSAXDefaultVersion(1); 34345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 34355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSAXDefaultVersion(2); 34365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_SAX1_ENABLED */ 34375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (chkregister) { 34395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlRegisterNodeDefault(registerNode); 34405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlDeregisterNodeDefault(deregisterNode); 34415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 34425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) indent = getenv("XMLLINT_INDENT"); 34445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if(indent != NULL) { 34455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlTreeIndentString = indent; 34465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 34475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) defaultEntityLoader = xmlGetExternalEntityLoader(); 34505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSetExternalEntityLoader(xmllintExternalEntityLoader); 34515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlLineNumbersDefault(1); 34535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (loaddtd != 0) 34545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlLoadExtDtdDefaultValue |= XML_DETECT_IDS; 34555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (dtdattrs) 34565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlLoadExtDtdDefaultValue |= XML_COMPLETE_ATTRS; 34575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (noent != 0) xmlSubstituteEntitiesDefault(1); 34585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_VALID_ENABLED 34595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (valid != 0) xmlDoValidityCheckingDefaultValue = 1; 34605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_VALID_ENABLED */ 34615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((htmlout) && (!nowrap)) { 34625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 34635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"\n"); 34645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 34655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\t\"http://www.w3.org/TR/REC-html40/loose.dtd\">\n"); 34665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 34675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<html><head><title>%s output</title></head>\n", 34685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) argv[0]); 34695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 34705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<body bgcolor=\"#ffffff\"><h1 align=\"center\">%s output</h1>\n", 34715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) argv[0]); 34725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 34735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SCHEMATRON_ENABLED 34755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((schematron != NULL) && (sax == 0) 34765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_READER_ENABLED 34775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) && (stream == 0) 34785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_READER_ENABLED */ 34795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ) { 34805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSchematronParserCtxtPtr ctxt; 34815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* forces loading the DTDs */ 34835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlLoadExtDtdDefaultValue |= 1; 34845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= XML_PARSE_DTDLOAD; 34855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (timing) { 34865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTimer(); 34875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 34885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt = xmlSchematronNewParserCtxt(schematron); 34895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if 0 34905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSchematronSetParserErrors(ctxt, 34915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (xmlSchematronValidityErrorFunc) fprintf, 34925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (xmlSchematronValidityWarningFunc) fprintf, 34935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) stderr); 34945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 34955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wxschematron = xmlSchematronParse(ctxt); 34965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (wxschematron == NULL) { 34975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 34985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Schematron schema %s failed to compile\n", schematron); 34995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_SCHEMACOMP; 35005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) schematron = NULL; 35015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 35025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSchematronFreeParserCtxt(ctxt); 35035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (timing) { 35045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) endTimer("Compiling the schemas"); 35055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 35065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 35075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 35085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SCHEMAS_ENABLED 35095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((relaxng != NULL) && (sax == 0) 35105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_READER_ENABLED 35115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) && (stream == 0) 35125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_READER_ENABLED */ 35135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ) { 35145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlRelaxNGParserCtxtPtr ctxt; 35155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* forces loading the DTDs */ 35175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlLoadExtDtdDefaultValue |= 1; 35185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options |= XML_PARSE_DTDLOAD; 35195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (timing) { 35205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTimer(); 35215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 35225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt = xmlRelaxNGNewParserCtxt(relaxng); 35235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlRelaxNGSetParserErrors(ctxt, 35245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (xmlRelaxNGValidityErrorFunc) fprintf, 35255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (xmlRelaxNGValidityWarningFunc) fprintf, 35265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) stderr); 35275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) relaxngschemas = xmlRelaxNGParse(ctxt); 35285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (relaxngschemas == NULL) { 35295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 35305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Relax-NG schema %s failed to compile\n", relaxng); 35315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_SCHEMACOMP; 35325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) relaxng = NULL; 35335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 35345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlRelaxNGFreeParserCtxt(ctxt); 35355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (timing) { 35365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) endTimer("Compiling the schemas"); 35375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 35385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((schema != NULL) 35395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_READER_ENABLED 35405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) && (stream == 0) 35415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 35425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ) { 35435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSchemaParserCtxtPtr ctxt; 35445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (timing) { 35465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTimer(); 35475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 35485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt = xmlSchemaNewParserCtxt(schema); 35495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSchemaSetParserErrors(ctxt, 35505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (xmlSchemaValidityErrorFunc) fprintf, 35515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (xmlSchemaValidityWarningFunc) fprintf, 35525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) stderr); 35535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wxschemas = xmlSchemaParse(ctxt); 35545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (wxschemas == NULL) { 35555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 35565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "WXS schema %s failed to compile\n", schema); 35575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_SCHEMACOMP; 35585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) schema = NULL; 35595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 35605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSchemaFreeParserCtxt(ctxt); 35615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (timing) { 35625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) endTimer("Compiling the schemas"); 35635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 35645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 35655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_SCHEMAS_ENABLED */ 35665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_PATTERN_ENABLED 35675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((pattern != NULL) 35685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_READER_ENABLED 35695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) && (walker == 0) 35705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 35715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ) { 35725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) patternc = xmlPatterncompile((const xmlChar *) pattern, NULL, 0, NULL); 35735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (patternc == NULL) { 35745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, 35755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Pattern %s failed to compile\n", pattern); 35765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_SCHEMAPAT; 35775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern = NULL; 35785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 35795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 35805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_PATTERN_ENABLED */ 35815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (i = 1; i < argc ; i++) { 35825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((!strcmp(argv[i], "-encode")) || 35835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--encode"))) { 35845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i++; 35855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 35865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if ((!strcmp(argv[i], "-o")) || 35875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "-output")) || 35885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--output"))) { 35895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i++; 35905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 35915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 35925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_VALID_ENABLED 35935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((!strcmp(argv[i], "-dtdvalid")) || 35945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--dtdvalid"))) { 35955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i++; 35965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 35975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 35985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((!strcmp(argv[i], "-path")) || 35995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--path"))) { 36005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i++; 36015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 36025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 36035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((!strcmp(argv[i], "-dtdvalidfpi")) || 36045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--dtdvalidfpi"))) { 36055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i++; 36065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 36075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 36085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_VALID_ENABLED */ 36095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((!strcmp(argv[i], "-relaxng")) || 36105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--relaxng"))) { 36115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i++; 36125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 36135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 36145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((!strcmp(argv[i], "-maxmem")) || 36155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--maxmem"))) { 36165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i++; 36175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 36185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 36195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((!strcmp(argv[i], "-schema")) || 36205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--schema"))) { 36215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i++; 36225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 36235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 36245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((!strcmp(argv[i], "-schematron")) || 36255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--schematron"))) { 36265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i++; 36275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 36285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 36295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_PATTERN_ENABLED 36305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((!strcmp(argv[i], "-pattern")) || 36315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--pattern"))) { 36325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i++; 36335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 36345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 36355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 36365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_XPATH_ENABLED 36375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((!strcmp(argv[i], "-xpath")) || 36385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!strcmp(argv[i], "--xpath"))) { 36395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i++; 36405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 36415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 36425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 36435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (repeat)) 36445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startTimer(); 36455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* Remember file names. "-" means stdin. <sven@zen.org> */ 36465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((argv[i][0] != '-') || (strcmp(argv[i], "-") == 0)) { 36475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (repeat) { 36485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlParserCtxtPtr ctxt = NULL; 36495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 36505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (acount = 0;acount < repeat;acount++) { 36515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_READER_ENABLED 36525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (stream != 0) { 36535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) streamFile(argv[i]); 36545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 36555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_READER_ENABLED */ 36565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (sax) { 36575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testSAX(argv[i]); 36585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 36595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ctxt == NULL) 36605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctxt = xmlNewParserCtxt(); 36615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parseAndPrintFile(argv[i], ctxt); 36625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 36635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_READER_ENABLED 36645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 36655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_READER_ENABLED */ 36665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 36675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ctxt != NULL) 36685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreeParserCtxt(ctxt); 36695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 36705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nbregister = 0; 36715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 36725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_READER_ENABLED 36735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (stream != 0) 36745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) streamFile(argv[i]); 36755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 36765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* LIBXML_READER_ENABLED */ 36775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (sax) { 36785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testSAX(argv[i]); 36795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 36805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parseAndPrintFile(argv[i], NULL); 36815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 36825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 36835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((chkregister) && (nbregister != 0)) { 36845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fprintf(stderr, "Registration count off: %d\n", nbregister); 36855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) progresult = XMLLINT_ERR_RDREGIS; 36865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 36875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 36885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) files ++; 36895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((timing) && (repeat)) { 36905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) endTimer("%d iterations", repeat); 36915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 36925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 36935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 36945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (generate) 36955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parseAndPrintFile(NULL, NULL); 36965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((htmlout) && (!nowrap)) { 36975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlGenericError(xmlGenericErrorContext, "</body></html>\n"); 36985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 36995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((files == 0) && (!generate) && (version == 0)) { 37005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) usage(argv[0]); 37015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 37025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SCHEMATRON_ENABLED 37035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (wxschematron != NULL) 37045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSchematronFree(wxschematron); 37055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 37065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_SCHEMAS_ENABLED 37075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (relaxngschemas != NULL) 37085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlRelaxNGFree(relaxngschemas); 37095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (wxschemas != NULL) 37105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlSchemaFree(wxschemas); 37115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlRelaxNGCleanupTypes(); 37125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 37135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef LIBXML_PATTERN_ENABLED 37145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (patternc != NULL) 37155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlFreePattern(patternc); 37165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 37175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlCleanupParser(); 37185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xmlMemoryDump(); 37195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 37205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return(progresult); 37215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 37225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3723