--- /dev/null
+#include <stdio.h>
+#include <sys/time.h>
+#include <expat.h>
+
+static void XMLCALL
+startElement(void *userData, const char *name, const char **atts) { return; }
+
+static void XMLCALL
+endElement(void *userData, const char *name) { return; }
+
+static void XMLCALL
+characterData(void *userData, const char *s, int len) { return; }
+
+static void XMLCALL
+startCdata(void *userData) { return; }
+
+static void XMLCALL
+endCdata(void *userData) { return; }
+
+int
+main(int argc, char *argv[])
+{
+ char buf[BUFSIZ];
+ int done;
+ FILE *xmlfile = stdin;
+ struct timeval timing1, timing2;
+ XML_Parser parser = XML_ParserCreateNS(NULL,' ');
+ XML_SetElementHandler(parser, startElement, endElement);
+ XML_SetCharacterDataHandler(parser, characterData);
+ XML_SetCdataSectionHandler(parser, startCdata, endCdata);
+ gettimeofday(&timing1, NULL);
+ do {
+ size_t len = fread(buf, 1, sizeof(buf), xmlfile);
+ done = len < sizeof(buf);
+ if (XML_Parse(parser, buf, len, done) == XML_STATUS_ERROR) {
+ fprintf(stderr,
+ "%s at line %d\n",
+ XML_ErrorString(XML_GetErrorCode(parser)),
+ XML_GetCurrentLineNumber(parser));
+ return 1;
+ }
+ } while (!done);
+ gettimeofday(&timing2, NULL) != 0;
+ XML_ParserFree(parser);
+ fprintf(stdout, "%d\n",
+ ((timing2.tv_sec * 1000000 + timing2.tv_usec) -
+ (timing1.tv_sec * 1000000 + timing1.tv_usec)) / 1000);
+ return 0;
+}
+