hello,
I have problem to parse xml string with ffi and libxml2.
My code is in the test file libxml-raw.scm :
(c-declare #<<end
#include <stdlib.h>
#include <libxml/xmlreader.h>
xmlTextReaderPtr create_reader(const char* buffer, size_t len) {
return xmlReaderForMemory(buffer, len, "_.xml", NULL, 0);
}
int first_type_prime(xmlTextReaderPtr reader) {
int type;
if( reader != NULL ) {
int cont = xmlTextReaderRead(reader);
if( cont ) {
type = xmlTextReaderNodeType(reader);
printf("read %d\n", type);
xmlFreeTextReader(reader);
return type;
}
xmlFreeTextReader(reader);
return -1;
}
}
int first_type(const char* s, size_t len) {
return first_type_prime(create_reader(s, len));
}
end
)
(c-define-type xmlTextReader "xmlTextReader")
(c-define-type xmlTextReaderPtr (pointer xmlTextReader))
(define create-reader
(c-lambda (nonnull-char-string unsigned-int) xmlTextReaderPtr
"create_reader"))
(define first-type-prime
(c-lambda (xmlTextReaderPtr) int "first_type_prime"))
(define first-type
(c-lambda (nonnull-char-string unsigned-int) int "first_type"))
Two test functions are defined here :
The first-type function take xml body and create the parser within the c
body.
The first-type-prime uses a pointer on xmlTextReader structure stored and
the scheme-side.
The first-type-prime function fails and I don't know what's going on :
@ gsc-gambit
Gambit v4.6.4
> (compile-file "libxml-raw.scm" 'cc-options: "-Wno-write-strings
-U___SINGLE_HOST -I/usr/local/include/libxml2" 'ld-options:
"-L/usr/local/lib/ -lxml2")
"/usr/users/cydu/programming/scheme/modules/xml/libxml-raw.o1"
> (load "libxml-raw")
"/usr/users/cydu/programming/scheme/modules/xml/libxml-raw.o1"
> (define r (create-reader "<xml>toto</xml>" 15))
> r
#<xmlTextReader* #2 0x801781300>
> (first-type-prime r)
_.xml:1: parser error : Char 0x0 out of allowed range
<xml
^
_.xml:1: parser error : Couldn't find end of Start Tag xml
<xml
^
read 0
0
>
while this call works :
> (first-type "<xml>toto</xml>" 15)
read 1
1
Any idea what's happened ?
thanks a lot
cyrille