Edit

kc3-lang/libxml2/testReader.c

Branch :

  • Show log

    Commit

  • Author : Daniel Veillard
    Date : 2005-07-28 23:49:35
    Hash : 24505b0f
    Message : a lot of small cleanups based on Linus' sparse check output. Daniel * HTMLparser.c SAX2.c encoding.c globals.c parser.c relaxng.c runsuite.c runtest.c schematron.c testHTML.c testReader.c testRegexp.c testSAX.c testThreads.c valid.c xinclude.c xmlIO.c xmllint.c xmlmodule.c xmlschemas.c xpath.c xpointer.c: a lot of small cleanups based on Linus' sparse check output. Daniel

  • testReader.c
  • /*
     * testSAX.c : a small tester program for parsing using the SAX API.
     *
     * See Copyright for the status of this software.
     *
     * daniel@veillard.com
     */
    
    #include "libxml.h"
    
    #ifdef LIBXML_READER_ENABLED
    #include <string.h>
    #include <stdarg.h>
    
    #ifdef HAVE_SYS_TYPES_H
    #include <sys/types.h>
    #endif
    #ifdef HAVE_SYS_STAT_H
    #include <sys/stat.h>
    #endif
    #ifdef HAVE_FCNTL_H
    #include <fcntl.h>
    #endif
    #ifdef HAVE_UNISTD_H
    #include <unistd.h>
    #endif
    #ifdef HAVE_STDLIB_H
    #include <stdlib.h>
    #endif
    #ifdef HAVE_STRING_H
    #include <string.h>
    #endif
    
    
    #include <libxml/xmlreader.h>
    
    static int debug = 0;
    static int dump = 0;
    static int noent = 0;
    static int count = 0;
    static int valid = 0;
    static int consumed = 0;
    
    static void usage(const char *progname) {
        printf("Usage : %s [options] XMLfiles ...\n", progname);
        printf("\tParse the XML files using the xmlTextReader API\n");
        printf("\t --count: count the number of attribute and elements\n");
        printf("\t --valid: validate the document\n");
        printf("\t --consumed: count the number of bytes consumed\n");
        exit(1);
    }
    static int elem, attrs;
    
    static void processNode(xmlTextReaderPtr reader) {
        int type;
    
        type = xmlTextReaderNodeType(reader);
        if (count) {
    	if (type == 1) {
    	    elem++;
    	    attrs += xmlTextReaderAttributeCount(reader);
    	}
        }
    }
    
    static void handleFile(const char *filename) {
        xmlTextReaderPtr reader;
        int ret;
    
        if (count) {
    	elem = 0;
    	attrs = 0;
        }
    
        reader = xmlNewTextReaderFilename(filename);
        if (reader != NULL) {
    	if (valid)
    	    xmlTextReaderSetParserProp(reader, XML_PARSER_VALIDATE, 1);
    
    	/*
    	 * Process all nodes in sequence
    	 */
    	ret = xmlTextReaderRead(reader);
    	while (ret == 1) {
    	    processNode(reader);
    	    ret = xmlTextReaderRead(reader);
    	}
    
    	/*
    	 * Done, cleanup and status
    	 */
    	if (consumed)
    		printf("%ld bytes consumed by parser\n", xmlTextReaderByteConsumed(reader));
    	xmlFreeTextReader(reader);
    	if (ret != 0) {
    	    printf("%s : failed to parse\n", filename);
    	} else if (count)
    	    printf("%s : %d elements, %d attributes\n", filename, elem, attrs);
        } else {
    	fprintf(stderr, "Unable to open %s\n", filename);
        }
    }
    
    int main(int argc, char **argv) {
        int i;
        int files = 0;
    
        if (argc <= 1) {
    	usage(argv[0]);
    	return(1);
        }
        LIBXML_TEST_VERSION
        for (i = 1; i < argc ; i++) {
    	if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))
    	    debug++;
    	else if ((!strcmp(argv[i], "-dump")) || (!strcmp(argv[i], "--dump")))
    	    dump++;
    	else if ((!strcmp(argv[i], "-count")) || (!strcmp(argv[i], "--count")))
    	    count++;
    	else if ((!strcmp(argv[i], "-consumed")) || (!strcmp(argv[i], "--consumed")))
    	    consumed++;
    	else if ((!strcmp(argv[i], "-valid")) || (!strcmp(argv[i], "--valid")))
    	    valid++;
    	else if ((!strcmp(argv[i], "-noent")) ||
    	         (!strcmp(argv[i], "--noent")))
    	    noent++;
        }
        if (noent != 0) xmlSubstituteEntitiesDefault(1);
        for (i = 1; i < argc ; i++) {
    	if (argv[i][0] != '-') {
    	    handleFile(argv[i]);
    	    files ++;
    	}
        }
        xmlCleanupParser();
        xmlMemoryDump();
    
        return(0);
    }
    #else
    int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
        printf("%s : xmlReader parser support not compiled in\n", argv[0]);
        return(0);
    }
    #endif /* LIBXML_READER_ENABLED */