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