Example #1
0
XMLCH XMLAPI *XMLStringbuf_InitUsePool(LPXMLSTRINGBUF sbuf, int blockSize, int initSize, LPXMLPOOL pool)
{
	if (initSize > pool->itemSize) 
		return XMLStringbuf_Init(sbuf, blockSize, initSize);
	
	sbuf->pool = pool;
	sbuf->usePool = 1;
	sbuf->len = sbuf->capacity = 0;
	sbuf->blocksize = blockSize;
	return (sbuf->str = (XMLCH*)XMLPool_Alloc(pool));
}
Example #2
0
struct XMLReader_t *XMLReader_Create(struct XMLReader_t *r, int validating)
{	
	int i;
	if (!r) {
		r=malloc(sizeof(*r));
		ASSERT_MEM_SETERR(r);
		r->dynamicalloc = 1;
	}
	memset(r, 0, sizeof *r);
	ASSERT_MEM_SETERR(XMLParser_Create(&r->parser));
	XMLVector_Create(&r->atts, 0, sizeof(struct XMLReaderAttribute_t));
	ASSERT_MEM_SETERR(r->atts);
	XMLVector_Create(&r->eventbuffer, 0, sizeof(union XMLReaderNode_t));
	ASSERT_MEM_SETERR(r->eventbuffer);
	for (i=0; i<sizeof(r->buf)/sizeof(r->buf[0]); i++) {
		ASSERT_MEM_SETERR(XMLStringbuf_Init(&r->buf[i], 256, 256));
	}
	_XMLParser_SetFlag(r->parser, XMLFLAG_USE_SIMPLEPULL, 1);
	
	if (validating) {
		ASSERT_MEM_SETERR(r->dtdv = XMLParser_CreateDTDValidator());
		r->dtdv->UserData = r;
		r->parser->errorHandler = ErrorHandlerV;
		r->parser->startElementHandler = StartElementV;
		r->parser->endElementHandler = EndElementV;
		r->parser->charactersHandler = CharsV;
		r->parser->commentHandler = CommentV;
		r->parser->processingInstructionHandler = PiV;
		r->parser->endDocumentHandler = EndDocumentV;
	}
	else {
		r->parser->UserData = r;
		r->parser->errorHandler = ErrorHandlerN;		
		r->parser->startElementHandler = StartElementN;
		r->parser->endElementHandler = EndElementN;
		r->parser->charactersHandler = CharsN;
		r->parser->commentHandler = CommentN;
		r->parser->processingInstructionHandler = PiN;
	}
	return r;
}
Example #3
0
CURLREADER *Curlreader_Create(void)
{
	CURLREADER *r = malloc(sizeof(CURLREADER));
	if (r==NULL) return NULL;
	r->curlh = NULL;
	r->curlmh = NULL;
	r->flags = 0;
	XMLStringbuf_Init(&r->sbuf, 1024, 0);
	r->curlh = curl_easy_init();
	if (!r->curlh) {
		Curlreader_Free(r);
		return NULL;
	}
    curl_easy_setopt(r->curlh, CURLOPT_WRITEDATA, r);
    curl_easy_setopt(r->curlh, CURLOPT_WRITEFUNCTION, getdata);
	r->curlmh = curl_multi_init();
	if (!r->curlmh) {
		Curlreader_Free(r);
		return NULL;
	}
	return r;
}
Example #4
0
int main(int argc, char* argv[])
{	
	BOOKPARSER bparser;
	BOOK *b;
	LPXMLPARSER parser;	
	LPXMLDTDVALIDATOR vp;
	int i, success;
	
	if (!XMLParser_Create(&parser)) {
		puts("Error creating parser!");
		return 1;
	}
	
	vp = XMLParser_CreateDTDValidator();
	if (!vp) {
		puts("Error creating DTDValidator in main()");
		return 1;
	}
	
	if (!XMLVector_Create(&bparser.books, 6, sizeof(BOOK))) {
		puts("Error creating books vector in main()");
		return 1;
	}
	
	/* init Stringbuf: blockSize 256, no pre-allocation: */
	XMLStringbuf_Init(&bparser.textBuf, 256, 0);

	vp->UserData = &bparser;
	
	parser->errorHandler = ErrorHandler;
	parser->startElementHandler = StartElement;
	parser->endElementHandler = EndElement;
	parser->charactersHandler = Characters;

	success = XMLParser_ParseValidateDTD(vp, parser, cstream, stdin, 0);
				
	for (i=0; i<bparser.books->length; i++) {
		b = XMLVector_Get(bparser.books, i);
		if (success)
			printf("id: %d\n"
			   "author: %s\n"
			   "title: %s\n"
			   "genre: %s\n"
			   "price: %f\n"
			   "publish_date: %s\n"
			   "description: %s\n\n",
			   b->id, b->author, b->title, b->genre, 
			   b->price, b->publish_date, b->description
			);
		SAFE_FREE(b->author);
		SAFE_FREE(b->title);
		SAFE_FREE(b->genre);
		SAFE_FREE(b->publish_date);
		SAFE_FREE(b->description);
	}
	
	XMLParser_FreeDTDValidator(vp);
	XMLParser_Free(parser);	
	XMLStringbuf_Free(&bparser.textBuf);
	XMLVector_Free(bparser.books);
	return 0;
}