123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- #include <stdio.h>
- #include <libxml/parser.h>
- #include <libxml/tree.h>
- #ifdef LIBXML_PUSH_ENABLED
- static FILE *desc;
- static int
- readPacket(char *mem, int size) {
- int res;
- res = fread(mem, 1, size, desc);
- return(res);
- }
- static void
- example4Func(const char *filename) {
- xmlParserCtxtPtr ctxt;
- char chars[4];
- xmlDocPtr doc;
- int res;
-
- res = readPacket(chars, 4);
- if (res <= 0) {
- fprintf(stderr, "Failed to parse %s\n", filename);
- return;
- }
-
- ctxt = xmlCreatePushParserCtxt(NULL, NULL,
- chars, res, filename);
- if (ctxt == NULL) {
- fprintf(stderr, "Failed to create parser context !\n");
- return;
- }
-
- while ((res = readPacket(chars, 4)) > 0) {
- xmlParseChunk(ctxt, chars, res, 0);
- }
-
- xmlParseChunk(ctxt, chars, 0, 1);
-
- doc = ctxt->myDoc;
- res = ctxt->wellFormed;
- xmlFreeParserCtxt(ctxt);
- if (!res) {
- fprintf(stderr, "Failed to parse %s\n", filename);
- }
-
- xmlFreeDoc(doc);
- }
- int main(int argc, char **argv) {
- if (argc != 2)
- return(1);
-
- LIBXML_TEST_VERSION
-
- desc = fopen(argv[1], "rb");
- if (desc != NULL) {
- example4Func(argv[1]);
- fclose(desc);
- } else {
- fprintf(stderr, "Failed to parse %s\n", argv[1]);
- }
-
- xmlCleanupParser();
-
- xmlMemoryDump();
- return(0);
- }
- #else
- int main(int argc, char **argv) {
- fprintf(stderr, "Library not compiled with push parser support\n");
- return(1);
- }
- #endif
|