Blame testSAX.c

Packit Service a31ea6
/*
Packit Service a31ea6
 * testSAX.c : a small tester program for parsing using the SAX API.
Packit Service a31ea6
 *
Packit Service a31ea6
 * See Copyright for the status of this software.
Packit Service a31ea6
 *
Packit Service a31ea6
 * daniel@veillard.com
Packit Service a31ea6
 */
Packit Service a31ea6
Packit Service a31ea6
#include "libxml.h"
Packit Service a31ea6
Packit Service a31ea6
#ifdef HAVE_SYS_TIME_H
Packit Service a31ea6
#include <sys/time.h>
Packit Service a31ea6
#endif
Packit Service a31ea6
#ifdef HAVE_SYS_TIMEB_H
Packit Service a31ea6
#include <sys/timeb.h>
Packit Service a31ea6
#endif
Packit Service a31ea6
#ifdef HAVE_TIME_H
Packit Service a31ea6
#include <time.h>
Packit Service a31ea6
#endif
Packit Service a31ea6
Packit Service a31ea6
#ifdef LIBXML_SAX1_ENABLED
Packit Service a31ea6
#include <string.h>
Packit Service a31ea6
#include <stdarg.h>
Packit Service a31ea6
Packit Service a31ea6
#ifdef HAVE_SYS_TYPES_H
Packit Service a31ea6
#include <sys/types.h>
Packit Service a31ea6
#endif
Packit Service a31ea6
#ifdef HAVE_SYS_STAT_H
Packit Service a31ea6
#include <sys/stat.h>
Packit Service a31ea6
#endif
Packit Service a31ea6
#ifdef HAVE_FCNTL_H
Packit Service a31ea6
#include <fcntl.h>
Packit Service a31ea6
#endif
Packit Service a31ea6
#ifdef HAVE_UNISTD_H
Packit Service a31ea6
#include <unistd.h>
Packit Service a31ea6
#endif
Packit Service a31ea6
#ifdef HAVE_STDLIB_H
Packit Service a31ea6
#include <stdlib.h>
Packit Service a31ea6
#endif
Packit Service a31ea6
#ifdef HAVE_STRING_H
Packit Service a31ea6
#include <string.h>
Packit Service a31ea6
#endif
Packit Service a31ea6
Packit Service a31ea6
Packit Service a31ea6
#include <libxml/globals.h>
Packit Service a31ea6
#include <libxml/xmlerror.h>
Packit Service a31ea6
#include <libxml/parser.h>
Packit Service a31ea6
#include <libxml/parserInternals.h> /* only for xmlNewInputFromFile() */
Packit Service a31ea6
#include <libxml/tree.h>
Packit Service a31ea6
#include <libxml/debugXML.h>
Packit Service a31ea6
#include <libxml/xmlmemory.h>
Packit Service a31ea6
Packit Service a31ea6
static int debug = 0;
Packit Service a31ea6
static int copy = 0;
Packit Service a31ea6
static int recovery = 0;
Packit Service a31ea6
static int push = 0;
Packit Service a31ea6
static int speed = 0;
Packit Service a31ea6
static int noent = 0;
Packit Service a31ea6
static int quiet = 0;
Packit Service a31ea6
static int nonull = 0;
Packit Service a31ea6
static int sax2 = 0;
Packit Service a31ea6
static int repeat = 0;
Packit Service a31ea6
static int callbacks = 0;
Packit Service a31ea6
static int timing = 0;
Packit Service a31ea6
Packit Service a31ea6
/*
Packit Service a31ea6
 * Timing routines.
Packit Service a31ea6
 */
Packit Service a31ea6
/*
Packit Service a31ea6
 * Internal timing routines to remove the necessity to have unix-specific
Packit Service a31ea6
 * function calls
Packit Service a31ea6
 */
Packit Service a31ea6
Packit Service a31ea6
#ifndef HAVE_GETTIMEOFDAY
Packit Service a31ea6
#ifdef HAVE_SYS_TIMEB_H
Packit Service a31ea6
#ifdef HAVE_SYS_TIME_H
Packit Service a31ea6
#ifdef HAVE_FTIME
Packit Service a31ea6
Packit Service a31ea6
static int
Packit Service a31ea6
my_gettimeofday(struct timeval *tvp, void *tzp)
Packit Service a31ea6
{
Packit Service a31ea6
	struct timeb timebuffer;
Packit Service a31ea6
Packit Service a31ea6
	ftime(&timebuffer);
Packit Service a31ea6
	if (tvp) {
Packit Service a31ea6
		tvp->tv_sec = timebuffer.time;
Packit Service a31ea6
		tvp->tv_usec = timebuffer.millitm * 1000L;
Packit Service a31ea6
	}
Packit Service a31ea6
	return (0);
Packit Service a31ea6
}
Packit Service a31ea6
#define HAVE_GETTIMEOFDAY 1
Packit Service a31ea6
#define gettimeofday my_gettimeofday
Packit Service a31ea6
Packit Service a31ea6
#endif /* HAVE_FTIME */
Packit Service a31ea6
#endif /* HAVE_SYS_TIME_H */
Packit Service a31ea6
#endif /* HAVE_SYS_TIMEB_H */
Packit Service a31ea6
#endif /* !HAVE_GETTIMEOFDAY */
Packit Service a31ea6
Packit Service a31ea6
#if defined(HAVE_GETTIMEOFDAY)
Packit Service a31ea6
static struct timeval begin, end;
Packit Service a31ea6
Packit Service a31ea6
/*
Packit Service a31ea6
 * startTimer: call where you want to start timing
Packit Service a31ea6
 */
Packit Service a31ea6
static void
Packit Service a31ea6
startTimer(void)
Packit Service a31ea6
{
Packit Service a31ea6
    gettimeofday(&begin, NULL);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/*
Packit Service a31ea6
 * endTimer: call where you want to stop timing and to print out a
Packit Service a31ea6
 *           message about the timing performed; format is a printf
Packit Service a31ea6
 *           type argument
Packit Service a31ea6
 */
Packit Service a31ea6
static void XMLCDECL
Packit Service a31ea6
endTimer(const char *fmt, ...)
Packit Service a31ea6
{
Packit Service a31ea6
    long msec;
Packit Service a31ea6
    va_list ap;
Packit Service a31ea6
Packit Service a31ea6
    gettimeofday(&end, NULL);
Packit Service a31ea6
    msec = end.tv_sec - begin.tv_sec;
Packit Service a31ea6
    msec *= 1000;
Packit Service a31ea6
    msec += (end.tv_usec - begin.tv_usec) / 1000;
Packit Service a31ea6
Packit Service a31ea6
#ifndef HAVE_STDARG_H
Packit Service a31ea6
#error "endTimer required stdarg functions"
Packit Service a31ea6
#endif
Packit Service a31ea6
    va_start(ap, fmt);
Packit Service a31ea6
    vfprintf(stderr, fmt, ap);
Packit Service a31ea6
    va_end(ap);
Packit Service a31ea6
Packit Service a31ea6
    fprintf(stderr, " took %ld ms\n", msec);
Packit Service a31ea6
}
Packit Service a31ea6
#elif defined(HAVE_TIME_H)
Packit Service a31ea6
/*
Packit Service a31ea6
 * No gettimeofday function, so we have to make do with calling clock.
Packit Service a31ea6
 * This is obviously less accurate, but there's little we can do about
Packit Service a31ea6
 * that.
Packit Service a31ea6
 */
Packit Service a31ea6
#ifndef CLOCKS_PER_SEC
Packit Service a31ea6
#define CLOCKS_PER_SEC 100
Packit Service a31ea6
#endif
Packit Service a31ea6
Packit Service a31ea6
static clock_t begin, end;
Packit Service a31ea6
static void
Packit Service a31ea6
startTimer(void)
Packit Service a31ea6
{
Packit Service a31ea6
    begin = clock();
Packit Service a31ea6
}
Packit Service a31ea6
static void XMLCDECL
Packit Service a31ea6
endTimer(const char *fmt, ...)
Packit Service a31ea6
{
Packit Service a31ea6
    long msec;
Packit Service a31ea6
    va_list ap;
Packit Service a31ea6
Packit Service a31ea6
    end = clock();
Packit Service a31ea6
    msec = ((end - begin) * 1000) / CLOCKS_PER_SEC;
Packit Service a31ea6
Packit Service a31ea6
#ifndef HAVE_STDARG_H
Packit Service a31ea6
#error "endTimer required stdarg functions"
Packit Service a31ea6
#endif
Packit Service a31ea6
    va_start(ap, fmt);
Packit Service a31ea6
    vfprintf(stderr, fmt, ap);
Packit Service a31ea6
    va_end(ap);
Packit Service a31ea6
    fprintf(stderr, " took %ld ms\n", msec);
Packit Service a31ea6
}
Packit Service a31ea6
#else
Packit Service a31ea6
Packit Service a31ea6
/*
Packit Service a31ea6
 * We don't have a gettimeofday or time.h, so we just don't do timing
Packit Service a31ea6
 */
Packit Service a31ea6
static void
Packit Service a31ea6
startTimer(void)
Packit Service a31ea6
{
Packit Service a31ea6
    /*
Packit Service a31ea6
     * Do nothing
Packit Service a31ea6
     */
Packit Service a31ea6
}
Packit Service a31ea6
static void XMLCDECL
Packit Service a31ea6
endTimer(char *format, ...)
Packit Service a31ea6
{
Packit Service a31ea6
    /*
Packit Service a31ea6
     * We cannot do anything because we don't have a timing function
Packit Service a31ea6
     */
Packit Service a31ea6
#ifdef HAVE_STDARG_H
Packit Service a31ea6
    va_start(ap, format);
Packit Service a31ea6
    vfprintf(stderr, format, ap);
Packit Service a31ea6
    va_end(ap);
Packit Service a31ea6
    fprintf(stderr, " was not timed\n", msec);
Packit Service a31ea6
#else
Packit Service a31ea6
    /* We don't have gettimeofday, time or stdarg.h, what crazy world is
Packit Service a31ea6
     * this ?!
Packit Service a31ea6
     */
Packit Service a31ea6
#endif
Packit Service a31ea6
}
Packit Service a31ea6
#endif
Packit Service a31ea6
Packit Service a31ea6
/*
Packit Service a31ea6
 * empty SAX block
Packit Service a31ea6
 */
Packit Service a31ea6
static xmlSAXHandler emptySAXHandlerStruct = {
Packit Service a31ea6
    NULL, /* internalSubset */
Packit Service a31ea6
    NULL, /* isStandalone */
Packit Service a31ea6
    NULL, /* hasInternalSubset */
Packit Service a31ea6
    NULL, /* hasExternalSubset */
Packit Service a31ea6
    NULL, /* resolveEntity */
Packit Service a31ea6
    NULL, /* getEntity */
Packit Service a31ea6
    NULL, /* entityDecl */
Packit Service a31ea6
    NULL, /* notationDecl */
Packit Service a31ea6
    NULL, /* attributeDecl */
Packit Service a31ea6
    NULL, /* elementDecl */
Packit Service a31ea6
    NULL, /* unparsedEntityDecl */
Packit Service a31ea6
    NULL, /* setDocumentLocator */
Packit Service a31ea6
    NULL, /* startDocument */
Packit Service a31ea6
    NULL, /* endDocument */
Packit Service a31ea6
    NULL, /* startElement */
Packit Service a31ea6
    NULL, /* endElement */
Packit Service a31ea6
    NULL, /* reference */
Packit Service a31ea6
    NULL, /* characters */
Packit Service a31ea6
    NULL, /* ignorableWhitespace */
Packit Service a31ea6
    NULL, /* processingInstruction */
Packit Service a31ea6
    NULL, /* comment */
Packit Service a31ea6
    NULL, /* xmlParserWarning */
Packit Service a31ea6
    NULL, /* xmlParserError */
Packit Service a31ea6
    NULL, /* xmlParserError */
Packit Service a31ea6
    NULL, /* getParameterEntity */
Packit Service a31ea6
    NULL, /* cdataBlock; */
Packit Service a31ea6
    NULL, /* externalSubset; */
Packit Service a31ea6
    1,
Packit Service a31ea6
    NULL,
Packit Service a31ea6
    NULL, /* startElementNs */
Packit Service a31ea6
    NULL, /* endElementNs */
Packit Service a31ea6
    NULL  /* xmlStructuredErrorFunc */
Packit Service a31ea6
};
Packit Service a31ea6
Packit Service a31ea6
static xmlSAXHandlerPtr emptySAXHandler = &emptySAXHandlerStruct;
Packit Service a31ea6
extern xmlSAXHandlerPtr debugSAXHandler;
Packit Service a31ea6
Packit Service a31ea6
/************************************************************************
Packit Service a31ea6
 *									*
Packit Service a31ea6
 *				Debug Handlers				*
Packit Service a31ea6
 *									*
Packit Service a31ea6
 ************************************************************************/
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * isStandaloneDebug:
Packit Service a31ea6
 * @ctxt:  An XML parser context
Packit Service a31ea6
 *
Packit Service a31ea6
 * Is this document tagged standalone ?
Packit Service a31ea6
 *
Packit Service a31ea6
 * Returns 1 if true
Packit Service a31ea6
 */
Packit Service a31ea6
static int
Packit Service a31ea6
isStandaloneDebug(void *ctx ATTRIBUTE_UNUSED)
Packit Service a31ea6
{
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
	return(0);
Packit Service a31ea6
    fprintf(stdout, "SAX.isStandalone()\n");
Packit Service a31ea6
    return(0);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * hasInternalSubsetDebug:
Packit Service a31ea6
 * @ctxt:  An XML parser context
Packit Service a31ea6
 *
Packit Service a31ea6
 * Does this document has an internal subset
Packit Service a31ea6
 *
Packit Service a31ea6
 * Returns 1 if true
Packit Service a31ea6
 */
Packit Service a31ea6
static int
Packit Service a31ea6
hasInternalSubsetDebug(void *ctx ATTRIBUTE_UNUSED)
Packit Service a31ea6
{
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
	return(0);
Packit Service a31ea6
    fprintf(stdout, "SAX.hasInternalSubset()\n");
Packit Service a31ea6
    return(0);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * hasExternalSubsetDebug:
Packit Service a31ea6
 * @ctxt:  An XML parser context
Packit Service a31ea6
 *
Packit Service a31ea6
 * Does this document has an external subset
Packit Service a31ea6
 *
Packit Service a31ea6
 * Returns 1 if true
Packit Service a31ea6
 */
Packit Service a31ea6
static int
Packit Service a31ea6
hasExternalSubsetDebug(void *ctx ATTRIBUTE_UNUSED)
Packit Service a31ea6
{
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
	return(0);
Packit Service a31ea6
    fprintf(stdout, "SAX.hasExternalSubset()\n");
Packit Service a31ea6
    return(0);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * internalSubsetDebug:
Packit Service a31ea6
 * @ctxt:  An XML parser context
Packit Service a31ea6
 *
Packit Service a31ea6
 * Does this document has an internal subset
Packit Service a31ea6
 */
Packit Service a31ea6
static void
Packit Service a31ea6
internalSubsetDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
Packit Service a31ea6
	       const xmlChar *ExternalID, const xmlChar *SystemID)
Packit Service a31ea6
{
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
	return;
Packit Service a31ea6
    fprintf(stdout, "SAX.internalSubset(%s,", name);
Packit Service a31ea6
    if (ExternalID == NULL)
Packit Service a31ea6
	fprintf(stdout, " ,");
Packit Service a31ea6
    else
Packit Service a31ea6
	fprintf(stdout, " %s,", ExternalID);
Packit Service a31ea6
    if (SystemID == NULL)
Packit Service a31ea6
	fprintf(stdout, " )\n");
Packit Service a31ea6
    else
Packit Service a31ea6
	fprintf(stdout, " %s)\n", SystemID);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * externalSubsetDebug:
Packit Service a31ea6
 * @ctxt:  An XML parser context
Packit Service a31ea6
 *
Packit Service a31ea6
 * Does this document has an external subset
Packit Service a31ea6
 */
Packit Service a31ea6
static void
Packit Service a31ea6
externalSubsetDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
Packit Service a31ea6
	       const xmlChar *ExternalID, const xmlChar *SystemID)
Packit Service a31ea6
{
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
	return;
Packit Service a31ea6
    fprintf(stdout, "SAX.externalSubset(%s,", name);
Packit Service a31ea6
    if (ExternalID == NULL)
Packit Service a31ea6
	fprintf(stdout, " ,");
Packit Service a31ea6
    else
Packit Service a31ea6
	fprintf(stdout, " %s,", ExternalID);
Packit Service a31ea6
    if (SystemID == NULL)
Packit Service a31ea6
	fprintf(stdout, " )\n");
Packit Service a31ea6
    else
Packit Service a31ea6
	fprintf(stdout, " %s)\n", SystemID);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * resolveEntityDebug:
Packit Service a31ea6
 * @ctxt:  An XML parser context
Packit Service a31ea6
 * @publicId: The public ID of the entity
Packit Service a31ea6
 * @systemId: The system ID of the entity
Packit Service a31ea6
 *
Packit Service a31ea6
 * Special entity resolver, better left to the parser, it has
Packit Service a31ea6
 * more context than the application layer.
Packit Service a31ea6
 * The default behaviour is to NOT resolve the entities, in that case
Packit Service a31ea6
 * the ENTITY_REF nodes are built in the structure (and the parameter
Packit Service a31ea6
 * values).
Packit Service a31ea6
 *
Packit Service a31ea6
 * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
Packit Service a31ea6
 */
Packit Service a31ea6
static xmlParserInputPtr
Packit Service a31ea6
resolveEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *publicId, const xmlChar *systemId)
Packit Service a31ea6
{
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
	return(NULL);
Packit Service a31ea6
    /* xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; */
Packit Service a31ea6
Packit Service a31ea6
Packit Service a31ea6
    fprintf(stdout, "SAX.resolveEntity(");
Packit Service a31ea6
    if (publicId != NULL)
Packit Service a31ea6
	fprintf(stdout, "%s", (char *)publicId);
Packit Service a31ea6
    else
Packit Service a31ea6
	fprintf(stdout, " ");
Packit Service a31ea6
    if (systemId != NULL)
Packit Service a31ea6
	fprintf(stdout, ", %s)\n", (char *)systemId);
Packit Service a31ea6
    else
Packit Service a31ea6
	fprintf(stdout, ", )\n");
Packit Service a31ea6
/*********
Packit Service a31ea6
    if (systemId != NULL) {
Packit Service a31ea6
        return(xmlNewInputFromFile(ctxt, (char *) systemId));
Packit Service a31ea6
    }
Packit Service a31ea6
 *********/
Packit Service a31ea6
    return(NULL);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * getEntityDebug:
Packit Service a31ea6
 * @ctxt:  An XML parser context
Packit Service a31ea6
 * @name: The entity name
Packit Service a31ea6
 *
Packit Service a31ea6
 * Get an entity by name
Packit Service a31ea6
 *
Packit Service a31ea6
 * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
Packit Service a31ea6
 */
Packit Service a31ea6
static xmlEntityPtr
Packit Service a31ea6
getEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
Packit Service a31ea6
{
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
	return(NULL);
Packit Service a31ea6
    fprintf(stdout, "SAX.getEntity(%s)\n", name);
Packit Service a31ea6
    return(NULL);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * getParameterEntityDebug:
Packit Service a31ea6
 * @ctxt:  An XML parser context
Packit Service a31ea6
 * @name: The entity name
Packit Service a31ea6
 *
Packit Service a31ea6
 * Get a parameter entity by name
Packit Service a31ea6
 *
Packit Service a31ea6
 * Returns the xmlParserInputPtr
Packit Service a31ea6
 */
Packit Service a31ea6
static xmlEntityPtr
Packit Service a31ea6
getParameterEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
Packit Service a31ea6
{
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
	return(NULL);
Packit Service a31ea6
    fprintf(stdout, "SAX.getParameterEntity(%s)\n", name);
Packit Service a31ea6
    return(NULL);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * entityDeclDebug:
Packit Service a31ea6
 * @ctxt:  An XML parser context
Packit Service a31ea6
 * @name:  the entity name
Packit Service a31ea6
 * @type:  the entity type
Packit Service a31ea6
 * @publicId: The public ID of the entity
Packit Service a31ea6
 * @systemId: The system ID of the entity
Packit Service a31ea6
 * @content: the entity value (without processing).
Packit Service a31ea6
 *
Packit Service a31ea6
 * An entity definition has been parsed
Packit Service a31ea6
 */
Packit Service a31ea6
static void
Packit Service a31ea6
entityDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, int type,
Packit Service a31ea6
          const xmlChar *publicId, const xmlChar *systemId, xmlChar *content)
Packit Service a31ea6
{
Packit Service a31ea6
const xmlChar *nullstr = BAD_CAST "(null)";
Packit Service a31ea6
    /* not all libraries handle printing null pointers nicely */
Packit Service a31ea6
    if (publicId == NULL)
Packit Service a31ea6
        publicId = nullstr;
Packit Service a31ea6
    if (systemId == NULL)
Packit Service a31ea6
        systemId = nullstr;
Packit Service a31ea6
    if (content == NULL)
Packit Service a31ea6
        content = (xmlChar *)nullstr;
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
	return;
Packit Service a31ea6
    fprintf(stdout, "SAX.entityDecl(%s, %d, %s, %s, %s)\n",
Packit Service a31ea6
            name, type, publicId, systemId, content);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * attributeDeclDebug:
Packit Service a31ea6
 * @ctxt:  An XML parser context
Packit Service a31ea6
 * @name:  the attribute name
Packit Service a31ea6
 * @type:  the attribute type
Packit Service a31ea6
 *
Packit Service a31ea6
 * An attribute definition has been parsed
Packit Service a31ea6
 */
Packit Service a31ea6
static void
Packit Service a31ea6
attributeDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar * elem,
Packit Service a31ea6
                   const xmlChar * name, int type, int def,
Packit Service a31ea6
                   const xmlChar * defaultValue, xmlEnumerationPtr tree)
Packit Service a31ea6
{
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
        return;
Packit Service a31ea6
    if (defaultValue == NULL)
Packit Service a31ea6
        fprintf(stdout, "SAX.attributeDecl(%s, %s, %d, %d, NULL, ...)\n",
Packit Service a31ea6
                elem, name, type, def);
Packit Service a31ea6
    else
Packit Service a31ea6
        fprintf(stdout, "SAX.attributeDecl(%s, %s, %d, %d, %s, ...)\n",
Packit Service a31ea6
                elem, name, type, def, defaultValue);
Packit Service a31ea6
    xmlFreeEnumeration(tree);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * elementDeclDebug:
Packit Service a31ea6
 * @ctxt:  An XML parser context
Packit Service a31ea6
 * @name:  the element name
Packit Service a31ea6
 * @type:  the element type
Packit Service a31ea6
 * @content: the element value (without processing).
Packit Service a31ea6
 *
Packit Service a31ea6
 * An element definition has been parsed
Packit Service a31ea6
 */
Packit Service a31ea6
static void
Packit Service a31ea6
elementDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, int type,
Packit Service a31ea6
	    xmlElementContentPtr content ATTRIBUTE_UNUSED)
Packit Service a31ea6
{
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
	return;
Packit Service a31ea6
    fprintf(stdout, "SAX.elementDecl(%s, %d, ...)\n",
Packit Service a31ea6
            name, type);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * notationDeclDebug:
Packit Service a31ea6
 * @ctxt:  An XML parser context
Packit Service a31ea6
 * @name: The name of the notation
Packit Service a31ea6
 * @publicId: The public ID of the entity
Packit Service a31ea6
 * @systemId: The system ID of the entity
Packit Service a31ea6
 *
Packit Service a31ea6
 * What to do when a notation declaration has been parsed.
Packit Service a31ea6
 */
Packit Service a31ea6
static void
Packit Service a31ea6
notationDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
Packit Service a31ea6
	     const xmlChar *publicId, const xmlChar *systemId)
Packit Service a31ea6
{
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
	return;
Packit Service a31ea6
    fprintf(stdout, "SAX.notationDecl(%s, %s, %s)\n",
Packit Service a31ea6
            (char *) name, (char *) publicId, (char *) systemId);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * unparsedEntityDeclDebug:
Packit Service a31ea6
 * @ctxt:  An XML parser context
Packit Service a31ea6
 * @name: The name of the entity
Packit Service a31ea6
 * @publicId: The public ID of the entity
Packit Service a31ea6
 * @systemId: The system ID of the entity
Packit Service a31ea6
 * @notationName: the name of the notation
Packit Service a31ea6
 *
Packit Service a31ea6
 * What to do when an unparsed entity declaration is parsed
Packit Service a31ea6
 */
Packit Service a31ea6
static void
Packit Service a31ea6
unparsedEntityDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
Packit Service a31ea6
		   const xmlChar *publicId, const xmlChar *systemId,
Packit Service a31ea6
		   const xmlChar *notationName)
Packit Service a31ea6
{
Packit Service a31ea6
const xmlChar *nullstr = BAD_CAST "(null)";
Packit Service a31ea6
Packit Service a31ea6
    if (publicId == NULL)
Packit Service a31ea6
        publicId = nullstr;
Packit Service a31ea6
    if (systemId == NULL)
Packit Service a31ea6
        systemId = nullstr;
Packit Service a31ea6
    if (notationName == NULL)
Packit Service a31ea6
        notationName = nullstr;
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
	return;
Packit Service a31ea6
    fprintf(stdout, "SAX.unparsedEntityDecl(%s, %s, %s, %s)\n",
Packit Service a31ea6
            (char *) name, (char *) publicId, (char *) systemId,
Packit Service a31ea6
	    (char *) notationName);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * setDocumentLocatorDebug:
Packit Service a31ea6
 * @ctxt:  An XML parser context
Packit Service a31ea6
 * @loc: A SAX Locator
Packit Service a31ea6
 *
Packit Service a31ea6
 * Receive the document locator at startup, actually xmlDefaultSAXLocator
Packit Service a31ea6
 * Everything is available on the context, so this is useless in our case.
Packit Service a31ea6
 */
Packit Service a31ea6
static void
Packit Service a31ea6
setDocumentLocatorDebug(void *ctx ATTRIBUTE_UNUSED, xmlSAXLocatorPtr loc ATTRIBUTE_UNUSED)
Packit Service a31ea6
{
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
	return;
Packit Service a31ea6
    fprintf(stdout, "SAX.setDocumentLocator()\n");
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * startDocumentDebug:
Packit Service a31ea6
 * @ctxt:  An XML parser context
Packit Service a31ea6
 *
Packit Service a31ea6
 * called when the document start being processed.
Packit Service a31ea6
 */
Packit Service a31ea6
static void
Packit Service a31ea6
startDocumentDebug(void *ctx ATTRIBUTE_UNUSED)
Packit Service a31ea6
{
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
	return;
Packit Service a31ea6
    fprintf(stdout, "SAX.startDocument()\n");
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * endDocumentDebug:
Packit Service a31ea6
 * @ctxt:  An XML parser context
Packit Service a31ea6
 *
Packit Service a31ea6
 * called when the document end has been detected.
Packit Service a31ea6
 */
Packit Service a31ea6
static void
Packit Service a31ea6
endDocumentDebug(void *ctx ATTRIBUTE_UNUSED)
Packit Service a31ea6
{
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
	return;
Packit Service a31ea6
    fprintf(stdout, "SAX.endDocument()\n");
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * startElementDebug:
Packit Service a31ea6
 * @ctxt:  An XML parser context
Packit Service a31ea6
 * @name:  The element name
Packit Service a31ea6
 *
Packit Service a31ea6
 * called when an opening tag has been processed.
Packit Service a31ea6
 */
Packit Service a31ea6
static void
Packit Service a31ea6
startElementDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, const xmlChar **atts)
Packit Service a31ea6
{
Packit Service a31ea6
    int i;
Packit Service a31ea6
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
	return;
Packit Service a31ea6
    fprintf(stdout, "SAX.startElement(%s", (char *) name);
Packit Service a31ea6
    if (atts != NULL) {
Packit Service a31ea6
        for (i = 0;(atts[i] != NULL);i++) {
Packit Service a31ea6
	    fprintf(stdout, ", %s='", atts[i++]);
Packit Service a31ea6
	    if (atts[i] != NULL)
Packit Service a31ea6
	        fprintf(stdout, "%s'", atts[i]);
Packit Service a31ea6
	}
Packit Service a31ea6
    }
Packit Service a31ea6
    fprintf(stdout, ")\n");
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * endElementDebug:
Packit Service a31ea6
 * @ctxt:  An XML parser context
Packit Service a31ea6
 * @name:  The element name
Packit Service a31ea6
 *
Packit Service a31ea6
 * called when the end of an element has been detected.
Packit Service a31ea6
 */
Packit Service a31ea6
static void
Packit Service a31ea6
endElementDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
Packit Service a31ea6
{
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
	return;
Packit Service a31ea6
    fprintf(stdout, "SAX.endElement(%s)\n", (char *) name);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * charactersDebug:
Packit Service a31ea6
 * @ctxt:  An XML parser context
Packit Service a31ea6
 * @ch:  a xmlChar string
Packit Service a31ea6
 * @len: the number of xmlChar
Packit Service a31ea6
 *
Packit Service a31ea6
 * receiving some chars from the parser.
Packit Service a31ea6
 * Question: how much at a time ???
Packit Service a31ea6
 */
Packit Service a31ea6
static void
Packit Service a31ea6
charactersDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
Packit Service a31ea6
{
Packit Service a31ea6
    char output[40];
Packit Service a31ea6
    int i;
Packit Service a31ea6
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
	return;
Packit Service a31ea6
    for (i = 0;(i
Packit Service a31ea6
	output[i] = ch[i];
Packit Service a31ea6
    output[i] = 0;
Packit Service a31ea6
Packit Service a31ea6
    fprintf(stdout, "SAX.characters(%s, %d)\n", output, len);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * referenceDebug:
Packit Service a31ea6
 * @ctxt:  An XML parser context
Packit Service a31ea6
 * @name:  The entity name
Packit Service a31ea6
 *
Packit Service a31ea6
 * called when an entity reference is detected.
Packit Service a31ea6
 */
Packit Service a31ea6
static void
Packit Service a31ea6
referenceDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
Packit Service a31ea6
{
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
	return;
Packit Service a31ea6
    fprintf(stdout, "SAX.reference(%s)\n", name);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * ignorableWhitespaceDebug:
Packit Service a31ea6
 * @ctxt:  An XML parser context
Packit Service a31ea6
 * @ch:  a xmlChar string
Packit Service a31ea6
 * @start: the first char in the string
Packit Service a31ea6
 * @len: the number of xmlChar
Packit Service a31ea6
 *
Packit Service a31ea6
 * receiving some ignorable whitespaces from the parser.
Packit Service a31ea6
 * Question: how much at a time ???
Packit Service a31ea6
 */
Packit Service a31ea6
static void
Packit Service a31ea6
ignorableWhitespaceDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
Packit Service a31ea6
{
Packit Service a31ea6
    char output[40];
Packit Service a31ea6
    int i;
Packit Service a31ea6
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
	return;
Packit Service a31ea6
    for (i = 0;(i
Packit Service a31ea6
	output[i] = ch[i];
Packit Service a31ea6
    output[i] = 0;
Packit Service a31ea6
    fprintf(stdout, "SAX.ignorableWhitespace(%s, %d)\n", output, len);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * processingInstructionDebug:
Packit Service a31ea6
 * @ctxt:  An XML parser context
Packit Service a31ea6
 * @target:  the target name
Packit Service a31ea6
 * @data: the PI data's
Packit Service a31ea6
 * @len: the number of xmlChar
Packit Service a31ea6
 *
Packit Service a31ea6
 * A processing instruction has been parsed.
Packit Service a31ea6
 */
Packit Service a31ea6
static void
Packit Service a31ea6
processingInstructionDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *target,
Packit Service a31ea6
                      const xmlChar *data)
Packit Service a31ea6
{
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
	return;
Packit Service a31ea6
    if (data != NULL)
Packit Service a31ea6
	fprintf(stdout, "SAX.processingInstruction(%s, %s)\n",
Packit Service a31ea6
		(char *) target, (char *) data);
Packit Service a31ea6
    else
Packit Service a31ea6
	fprintf(stdout, "SAX.processingInstruction(%s, NULL)\n",
Packit Service a31ea6
		(char *) target);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * cdataBlockDebug:
Packit Service a31ea6
 * @ctx: the user data (XML parser context)
Packit Service a31ea6
 * @value:  The pcdata content
Packit Service a31ea6
 * @len:  the block length
Packit Service a31ea6
 *
Packit Service a31ea6
 * called when a pcdata block has been parsed
Packit Service a31ea6
 */
Packit Service a31ea6
static void
Packit Service a31ea6
cdataBlockDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *value, int len)
Packit Service a31ea6
{
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
	return;
Packit Service a31ea6
    fprintf(stdout, "SAX.pcdata(%.20s, %d)\n",
Packit Service a31ea6
	    (char *) value, len);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * commentDebug:
Packit Service a31ea6
 * @ctxt:  An XML parser context
Packit Service a31ea6
 * @value:  the comment content
Packit Service a31ea6
 *
Packit Service a31ea6
 * A comment has been parsed.
Packit Service a31ea6
 */
Packit Service a31ea6
static void
Packit Service a31ea6
commentDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *value)
Packit Service a31ea6
{
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
	return;
Packit Service a31ea6
    fprintf(stdout, "SAX.comment(%s)\n", value);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * warningDebug:
Packit Service a31ea6
 * @ctxt:  An XML parser context
Packit Service a31ea6
 * @msg:  the message to display/transmit
Packit Service a31ea6
 * @...:  extra parameters for the message display
Packit Service a31ea6
 *
Packit Service a31ea6
 * Display and format a warning messages, gives file, line, position and
Packit Service a31ea6
 * extra parameters.
Packit Service a31ea6
 */
Packit Service a31ea6
static void XMLCDECL
Packit Service a31ea6
warningDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
Packit Service a31ea6
{
Packit Service a31ea6
    va_list args;
Packit Service a31ea6
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
	return;
Packit Service a31ea6
    va_start(args, msg);
Packit Service a31ea6
    fprintf(stdout, "SAX.warning: ");
Packit Service a31ea6
    vfprintf(stdout, msg, args);
Packit Service a31ea6
    va_end(args);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * errorDebug:
Packit Service a31ea6
 * @ctxt:  An XML parser context
Packit Service a31ea6
 * @msg:  the message to display/transmit
Packit Service a31ea6
 * @...:  extra parameters for the message display
Packit Service a31ea6
 *
Packit Service a31ea6
 * Display and format a error messages, gives file, line, position and
Packit Service a31ea6
 * extra parameters.
Packit Service a31ea6
 */
Packit Service a31ea6
static void XMLCDECL
Packit Service a31ea6
errorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
Packit Service a31ea6
{
Packit Service a31ea6
    va_list args;
Packit Service a31ea6
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
	return;
Packit Service a31ea6
    va_start(args, msg);
Packit Service a31ea6
    fprintf(stdout, "SAX.error: ");
Packit Service a31ea6
    vfprintf(stdout, msg, args);
Packit Service a31ea6
    va_end(args);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * fatalErrorDebug:
Packit Service a31ea6
 * @ctxt:  An XML parser context
Packit Service a31ea6
 * @msg:  the message to display/transmit
Packit Service a31ea6
 * @...:  extra parameters for the message display
Packit Service a31ea6
 *
Packit Service a31ea6
 * Display and format a fatalError messages, gives file, line, position and
Packit Service a31ea6
 * extra parameters.
Packit Service a31ea6
 */
Packit Service a31ea6
static void XMLCDECL
Packit Service a31ea6
fatalErrorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
Packit Service a31ea6
{
Packit Service a31ea6
    va_list args;
Packit Service a31ea6
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
	return;
Packit Service a31ea6
    va_start(args, msg);
Packit Service a31ea6
    fprintf(stdout, "SAX.fatalError: ");
Packit Service a31ea6
    vfprintf(stdout, msg, args);
Packit Service a31ea6
    va_end(args);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
static xmlSAXHandler debugSAXHandlerStruct = {
Packit Service a31ea6
    internalSubsetDebug,
Packit Service a31ea6
    isStandaloneDebug,
Packit Service a31ea6
    hasInternalSubsetDebug,
Packit Service a31ea6
    hasExternalSubsetDebug,
Packit Service a31ea6
    resolveEntityDebug,
Packit Service a31ea6
    getEntityDebug,
Packit Service a31ea6
    entityDeclDebug,
Packit Service a31ea6
    notationDeclDebug,
Packit Service a31ea6
    attributeDeclDebug,
Packit Service a31ea6
    elementDeclDebug,
Packit Service a31ea6
    unparsedEntityDeclDebug,
Packit Service a31ea6
    setDocumentLocatorDebug,
Packit Service a31ea6
    startDocumentDebug,
Packit Service a31ea6
    endDocumentDebug,
Packit Service a31ea6
    startElementDebug,
Packit Service a31ea6
    endElementDebug,
Packit Service a31ea6
    referenceDebug,
Packit Service a31ea6
    charactersDebug,
Packit Service a31ea6
    ignorableWhitespaceDebug,
Packit Service a31ea6
    processingInstructionDebug,
Packit Service a31ea6
    commentDebug,
Packit Service a31ea6
    warningDebug,
Packit Service a31ea6
    errorDebug,
Packit Service a31ea6
    fatalErrorDebug,
Packit Service a31ea6
    getParameterEntityDebug,
Packit Service a31ea6
    cdataBlockDebug,
Packit Service a31ea6
    externalSubsetDebug,
Packit Service a31ea6
    1,
Packit Service a31ea6
    NULL,
Packit Service a31ea6
    NULL,
Packit Service a31ea6
    NULL,
Packit Service a31ea6
    NULL
Packit Service a31ea6
};
Packit Service a31ea6
Packit Service a31ea6
xmlSAXHandlerPtr debugSAXHandler = &debugSAXHandlerStruct;
Packit Service a31ea6
Packit Service a31ea6
/*
Packit Service a31ea6
 * SAX2 specific callbacks
Packit Service a31ea6
 */
Packit Service a31ea6
/**
Packit Service a31ea6
 * startElementNsDebug:
Packit Service a31ea6
 * @ctxt:  An XML parser context
Packit Service a31ea6
 * @name:  The element name
Packit Service a31ea6
 *
Packit Service a31ea6
 * called when an opening tag has been processed.
Packit Service a31ea6
 */
Packit Service a31ea6
static void
Packit Service a31ea6
startElementNsDebug(void *ctx ATTRIBUTE_UNUSED,
Packit Service a31ea6
                    const xmlChar *localname,
Packit Service a31ea6
                    const xmlChar *prefix,
Packit Service a31ea6
                    const xmlChar *URI,
Packit Service a31ea6
		    int nb_namespaces,
Packit Service a31ea6
		    const xmlChar **namespaces,
Packit Service a31ea6
		    int nb_attributes,
Packit Service a31ea6
		    int nb_defaulted,
Packit Service a31ea6
		    const xmlChar **attributes)
Packit Service a31ea6
{
Packit Service a31ea6
    int i;
Packit Service a31ea6
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
	return;
Packit Service a31ea6
    fprintf(stdout, "SAX.startElementNs(%s", (char *) localname);
Packit Service a31ea6
    if (prefix == NULL)
Packit Service a31ea6
	fprintf(stdout, ", NULL");
Packit Service a31ea6
    else
Packit Service a31ea6
	fprintf(stdout, ", %s", (char *) prefix);
Packit Service a31ea6
    if (URI == NULL)
Packit Service a31ea6
	fprintf(stdout, ", NULL");
Packit Service a31ea6
    else
Packit Service a31ea6
	fprintf(stdout, ", '%s'", (char *) URI);
Packit Service a31ea6
    fprintf(stdout, ", %d", nb_namespaces);
Packit Service a31ea6
Packit Service a31ea6
    if (namespaces != NULL) {
Packit Service a31ea6
        for (i = 0;i < nb_namespaces * 2;i++) {
Packit Service a31ea6
	    fprintf(stdout, ", xmlns");
Packit Service a31ea6
	    if (namespaces[i] != NULL)
Packit Service a31ea6
	        fprintf(stdout, ":%s", namespaces[i]);
Packit Service a31ea6
	    i++;
Packit Service a31ea6
	    fprintf(stdout, "='%s'", namespaces[i]);
Packit Service a31ea6
	}
Packit Service a31ea6
    }
Packit Service a31ea6
    fprintf(stdout, ", %d, %d", nb_attributes, nb_defaulted);
Packit Service a31ea6
    if (attributes != NULL) {
Packit Service a31ea6
        for (i = 0;i < nb_attributes * 5;i += 5) {
Packit Service a31ea6
	    if (attributes[i + 1] != NULL)
Packit Service a31ea6
		fprintf(stdout, ", %s:%s='", attributes[i + 1], attributes[i]);
Packit Service a31ea6
	    else
Packit Service a31ea6
		fprintf(stdout, ", %s='", attributes[i]);
Packit Service a31ea6
	    fprintf(stdout, "%.4s...', %d", attributes[i + 3],
Packit Service a31ea6
		    (int)(attributes[i + 4] - attributes[i + 3]));
Packit Service a31ea6
	}
Packit Service a31ea6
    }
Packit Service a31ea6
    fprintf(stdout, ")\n");
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * endElementDebug:
Packit Service a31ea6
 * @ctxt:  An XML parser context
Packit Service a31ea6
 * @name:  The element name
Packit Service a31ea6
 *
Packit Service a31ea6
 * called when the end of an element has been detected.
Packit Service a31ea6
 */
Packit Service a31ea6
static void
Packit Service a31ea6
endElementNsDebug(void *ctx ATTRIBUTE_UNUSED,
Packit Service a31ea6
                  const xmlChar *localname,
Packit Service a31ea6
                  const xmlChar *prefix,
Packit Service a31ea6
                  const xmlChar *URI)
Packit Service a31ea6
{
Packit Service a31ea6
    callbacks++;
Packit Service a31ea6
    if (quiet)
Packit Service a31ea6
	return;
Packit Service a31ea6
    fprintf(stdout, "SAX.endElementNs(%s", (char *) localname);
Packit Service a31ea6
    if (prefix == NULL)
Packit Service a31ea6
	fprintf(stdout, ", NULL");
Packit Service a31ea6
    else
Packit Service a31ea6
	fprintf(stdout, ", %s", (char *) prefix);
Packit Service a31ea6
    if (URI == NULL)
Packit Service a31ea6
	fprintf(stdout, ", NULL)\n");
Packit Service a31ea6
    else
Packit Service a31ea6
	fprintf(stdout, ", '%s')\n", (char *) URI);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
static xmlSAXHandler debugSAX2HandlerStruct = {
Packit Service a31ea6
    internalSubsetDebug,
Packit Service a31ea6
    isStandaloneDebug,
Packit Service a31ea6
    hasInternalSubsetDebug,
Packit Service a31ea6
    hasExternalSubsetDebug,
Packit Service a31ea6
    resolveEntityDebug,
Packit Service a31ea6
    getEntityDebug,
Packit Service a31ea6
    entityDeclDebug,
Packit Service a31ea6
    notationDeclDebug,
Packit Service a31ea6
    attributeDeclDebug,
Packit Service a31ea6
    elementDeclDebug,
Packit Service a31ea6
    unparsedEntityDeclDebug,
Packit Service a31ea6
    setDocumentLocatorDebug,
Packit Service a31ea6
    startDocumentDebug,
Packit Service a31ea6
    endDocumentDebug,
Packit Service a31ea6
    NULL,
Packit Service a31ea6
    NULL,
Packit Service a31ea6
    referenceDebug,
Packit Service a31ea6
    charactersDebug,
Packit Service a31ea6
    ignorableWhitespaceDebug,
Packit Service a31ea6
    processingInstructionDebug,
Packit Service a31ea6
    commentDebug,
Packit Service a31ea6
    warningDebug,
Packit Service a31ea6
    errorDebug,
Packit Service a31ea6
    fatalErrorDebug,
Packit Service a31ea6
    getParameterEntityDebug,
Packit Service a31ea6
    cdataBlockDebug,
Packit Service a31ea6
    externalSubsetDebug,
Packit Service a31ea6
    XML_SAX2_MAGIC,
Packit Service a31ea6
    NULL,
Packit Service a31ea6
    startElementNsDebug,
Packit Service a31ea6
    endElementNsDebug,
Packit Service a31ea6
    NULL
Packit Service a31ea6
};
Packit Service a31ea6
Packit Service a31ea6
static xmlSAXHandlerPtr debugSAX2Handler = &debugSAX2HandlerStruct;
Packit Service a31ea6
Packit Service a31ea6
/************************************************************************
Packit Service a31ea6
 *									*
Packit Service a31ea6
 *				Debug					*
Packit Service a31ea6
 *									*
Packit Service a31ea6
 ************************************************************************/
Packit Service a31ea6
Packit Service a31ea6
static void
Packit Service a31ea6
parseAndPrintFile(char *filename) {
Packit Service a31ea6
    int res;
Packit Service a31ea6
Packit Service a31ea6
#ifdef LIBXML_PUSH_ENABLED
Packit Service a31ea6
    if (push) {
Packit Service a31ea6
	FILE *f;
Packit Service a31ea6
Packit Service a31ea6
        if ((!quiet) && (!nonull)) {
Packit Service a31ea6
	    /*
Packit Service a31ea6
	     * Empty callbacks for checking
Packit Service a31ea6
	     */
Packit Service a31ea6
#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
Packit Service a31ea6
	    f = fopen(filename, "rb");
Packit Service a31ea6
#else
Packit Service a31ea6
	    f = fopen(filename, "r");
Packit Service a31ea6
#endif
Packit Service a31ea6
	    if (f != NULL) {
Packit Service a31ea6
		int ret;
Packit Service a31ea6
		char chars[10];
Packit Service a31ea6
		xmlParserCtxtPtr ctxt;
Packit Service a31ea6
Packit Service a31ea6
		ret = fread(chars, 1, 4, f);
Packit Service a31ea6
		if (ret > 0) {
Packit Service a31ea6
		    ctxt = xmlCreatePushParserCtxt(emptySAXHandler, NULL,
Packit Service a31ea6
				chars, ret, filename);
Packit Service a31ea6
		    while ((ret = fread(chars, 1, 3, f)) > 0) {
Packit Service a31ea6
			xmlParseChunk(ctxt, chars, ret, 0);
Packit Service a31ea6
		    }
Packit Service a31ea6
		    xmlParseChunk(ctxt, chars, 0, 1);
Packit Service a31ea6
		    xmlFreeParserCtxt(ctxt);
Packit Service a31ea6
		}
Packit Service a31ea6
		fclose(f);
Packit Service a31ea6
	    } else {
Packit Service a31ea6
		xmlGenericError(xmlGenericErrorContext,
Packit Service a31ea6
			"Cannot read file %s\n", filename);
Packit Service a31ea6
	    }
Packit Service a31ea6
	}
Packit Service a31ea6
	/*
Packit Service a31ea6
	 * Debug callback
Packit Service a31ea6
	 */
Packit Service a31ea6
#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
Packit Service a31ea6
	f = fopen(filename, "rb");
Packit Service a31ea6
#else
Packit Service a31ea6
	f = fopen(filename, "r");
Packit Service a31ea6
#endif
Packit Service a31ea6
	if (f != NULL) {
Packit Service a31ea6
	    int ret;
Packit Service a31ea6
	    char chars[10];
Packit Service a31ea6
	    xmlParserCtxtPtr ctxt;
Packit Service a31ea6
Packit Service a31ea6
	    ret = fread(chars, 1, 4, f);
Packit Service a31ea6
	    if (ret > 0) {
Packit Service a31ea6
	        if (sax2)
Packit Service a31ea6
		    ctxt = xmlCreatePushParserCtxt(debugSAX2Handler, NULL,
Packit Service a31ea6
				chars, ret, filename);
Packit Service a31ea6
		else
Packit Service a31ea6
		    ctxt = xmlCreatePushParserCtxt(debugSAXHandler, NULL,
Packit Service a31ea6
				chars, ret, filename);
Packit Service a31ea6
		while ((ret = fread(chars, 1, 3, f)) > 0) {
Packit Service a31ea6
		    xmlParseChunk(ctxt, chars, ret, 0);
Packit Service a31ea6
		}
Packit Service a31ea6
		ret = xmlParseChunk(ctxt, chars, 0, 1);
Packit Service a31ea6
		xmlFreeParserCtxt(ctxt);
Packit Service a31ea6
		if (ret != 0) {
Packit Service a31ea6
		    fprintf(stdout,
Packit Service a31ea6
		            "xmlSAXUserParseFile returned error %d\n", ret);
Packit Service a31ea6
		}
Packit Service a31ea6
	    }
Packit Service a31ea6
	    fclose(f);
Packit Service a31ea6
	}
Packit Service a31ea6
    } else {
Packit Service a31ea6
#endif /* LIBXML_PUSH_ENABLED */
Packit Service a31ea6
	if (!speed) {
Packit Service a31ea6
	    /*
Packit Service a31ea6
	     * Empty callbacks for checking
Packit Service a31ea6
	     */
Packit Service a31ea6
	    if ((!quiet) && (!nonull)) {
Packit Service a31ea6
		res = xmlSAXUserParseFile(emptySAXHandler, NULL, filename);
Packit Service a31ea6
		if (res != 0) {
Packit Service a31ea6
		    fprintf(stdout, "xmlSAXUserParseFile returned error %d\n", res);
Packit Service a31ea6
		}
Packit Service a31ea6
	    }
Packit Service a31ea6
Packit Service a31ea6
	    /*
Packit Service a31ea6
	     * Debug callback
Packit Service a31ea6
	     */
Packit Service a31ea6
	    callbacks = 0;
Packit Service a31ea6
	    if (repeat) {
Packit Service a31ea6
	        int i;
Packit Service a31ea6
		for (i = 0;i < 99;i++) {
Packit Service a31ea6
		    if (sax2)
Packit Service a31ea6
			res = xmlSAXUserParseFile(debugSAX2Handler, NULL,
Packit Service a31ea6
			                          filename);
Packit Service a31ea6
		    else
Packit Service a31ea6
			res = xmlSAXUserParseFile(debugSAXHandler, NULL,
Packit Service a31ea6
			                          filename);
Packit Service a31ea6
		}
Packit Service a31ea6
	    }
Packit Service a31ea6
	    if (sax2)
Packit Service a31ea6
	        res = xmlSAXUserParseFile(debugSAX2Handler, NULL, filename);
Packit Service a31ea6
	    else
Packit Service a31ea6
		res = xmlSAXUserParseFile(debugSAXHandler, NULL, filename);
Packit Service a31ea6
	    if (res != 0) {
Packit Service a31ea6
		fprintf(stdout, "xmlSAXUserParseFile returned error %d\n", res);
Packit Service a31ea6
	    }
Packit Service a31ea6
	    if (quiet)
Packit Service a31ea6
		fprintf(stdout, "%d callbacks generated\n", callbacks);
Packit Service a31ea6
	} else {
Packit Service a31ea6
	    /*
Packit Service a31ea6
	     * test 100x the SAX parse
Packit Service a31ea6
	     */
Packit Service a31ea6
	    int i;
Packit Service a31ea6
Packit Service a31ea6
	    for (i = 0; i<100;i++)
Packit Service a31ea6
		res = xmlSAXUserParseFile(emptySAXHandler, NULL, filename);
Packit Service a31ea6
	    if (res != 0) {
Packit Service a31ea6
		fprintf(stdout, "xmlSAXUserParseFile returned error %d\n", res);
Packit Service a31ea6
	    }
Packit Service a31ea6
	}
Packit Service a31ea6
#ifdef LIBXML_PUSH_ENABLED
Packit Service a31ea6
    }
Packit Service a31ea6
#endif
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
Packit Service a31ea6
int main(int argc, char **argv) {
Packit Service a31ea6
    int i;
Packit Service a31ea6
    int files = 0;
Packit Service a31ea6
Packit Service a31ea6
    LIBXML_TEST_VERSION	/* be safe, plus calls xmlInitParser */
Packit Service a31ea6
Packit Service a31ea6
    for (i = 1; i < argc ; i++) {
Packit Service a31ea6
	if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))
Packit Service a31ea6
	    debug++;
Packit Service a31ea6
	else if ((!strcmp(argv[i], "-copy")) || (!strcmp(argv[i], "--copy")))
Packit Service a31ea6
	    copy++;
Packit Service a31ea6
	else if ((!strcmp(argv[i], "-recover")) ||
Packit Service a31ea6
	         (!strcmp(argv[i], "--recover")))
Packit Service a31ea6
	    recovery++;
Packit Service a31ea6
	else if ((!strcmp(argv[i], "-push")) ||
Packit Service a31ea6
	         (!strcmp(argv[i], "--push")))
Packit Service a31ea6
#ifdef LIBXML_PUSH_ENABLED
Packit Service a31ea6
	    push++;
Packit Service a31ea6
#else
Packit Service a31ea6
	    fprintf(stderr,"'push' not enabled in library - ignoring\n");
Packit Service a31ea6
#endif /* LIBXML_PUSH_ENABLED */
Packit Service a31ea6
	else if ((!strcmp(argv[i], "-speed")) ||
Packit Service a31ea6
	         (!strcmp(argv[i], "--speed")))
Packit Service a31ea6
	    speed++;
Packit Service a31ea6
	else if ((!strcmp(argv[i], "-timing")) ||
Packit Service a31ea6
	         (!strcmp(argv[i], "--timing"))) {
Packit Service a31ea6
	    nonull++;
Packit Service a31ea6
	    timing++;
Packit Service a31ea6
	    quiet++;
Packit Service a31ea6
	} else if ((!strcmp(argv[i], "-repeat")) ||
Packit Service a31ea6
	         (!strcmp(argv[i], "--repeat"))) {
Packit Service a31ea6
	    repeat++;
Packit Service a31ea6
	    quiet++;
Packit Service a31ea6
	} else if ((!strcmp(argv[i], "-noent")) ||
Packit Service a31ea6
	         (!strcmp(argv[i], "--noent")))
Packit Service a31ea6
	    noent++;
Packit Service a31ea6
	else if ((!strcmp(argv[i], "-quiet")) ||
Packit Service a31ea6
	         (!strcmp(argv[i], "--quiet")))
Packit Service a31ea6
	    quiet++;
Packit Service a31ea6
	else if ((!strcmp(argv[i], "-sax2")) ||
Packit Service a31ea6
	         (!strcmp(argv[i], "--sax2")))
Packit Service a31ea6
	    sax2++;
Packit Service a31ea6
	else if ((!strcmp(argv[i], "-nonull")) ||
Packit Service a31ea6
	         (!strcmp(argv[i], "--nonull")))
Packit Service a31ea6
	    nonull++;
Packit Service a31ea6
    }
Packit Service a31ea6
    if (noent != 0) xmlSubstituteEntitiesDefault(1);
Packit Service a31ea6
    for (i = 1; i < argc ; i++) {
Packit Service a31ea6
	if (argv[i][0] != '-') {
Packit Service a31ea6
	    if (timing) {
Packit Service a31ea6
		startTimer();
Packit Service a31ea6
	    }
Packit Service a31ea6
	    parseAndPrintFile(argv[i]);
Packit Service a31ea6
	    if (timing) {
Packit Service a31ea6
		endTimer("Parsing");
Packit Service a31ea6
	    }
Packit Service a31ea6
	    files ++;
Packit Service a31ea6
	}
Packit Service a31ea6
    }
Packit Service a31ea6
    xmlCleanupParser();
Packit Service a31ea6
    xmlMemoryDump();
Packit Service a31ea6
Packit Service a31ea6
    return(0);
Packit Service a31ea6
}
Packit Service a31ea6
#else
Packit Service a31ea6
int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
Packit Service a31ea6
    printf("%s : SAX1 parsing support not compiled in\n", argv[0]);
Packit Service a31ea6
    return(0);
Packit Service a31ea6
}
Packit Service a31ea6
#endif /* LIBXML_SAX1_ENABLED */