1309
1309
xmlTextReaderPtr reader;
1310
1310
xar_file_t f = NULL;
1311
1311
const xmlChar *name, *prefix, *uri;
1312
int type, noattr, ret;
1314
1314
reader = xmlReaderForIO(toc_read_callback, close_callback, XAR(x), NULL, NULL, 0);
1315
1315
if( !reader ) return -1;
1317
while( xmlTextReaderRead(reader) == 1 ) {
1317
while( (ret = xmlTextReaderRead(reader)) == 1 ) {
1318
1318
type = xmlTextReaderNodeType(reader);
1319
1319
noattr = xmlTextReaderAttributeCount(reader);
1320
1320
name = xmlTextReaderConstLocalName(reader);
1321
if( type == XML_READER_TYPE_ELEMENT ) {
1322
if(strcmp((const char*)name, "xar") == 0) {
1323
while( xmlTextReaderRead(reader) == 1 ) {
1324
type = xmlTextReaderNodeType(reader);
1325
noattr = xmlTextReaderAttributeCount(reader);
1326
name = xmlTextReaderConstLocalName(reader);
1327
if( type == XML_READER_TYPE_ELEMENT ) {
1328
if(strcmp((const char*)name, "toc") == 0) {
1329
while( xmlTextReaderRead(reader) == 1 ) {
1330
type = xmlTextReaderNodeType(reader);
1331
noattr = xmlTextReaderAttributeCount(reader);
1332
name = xmlTextReaderConstLocalName(reader);
1333
if( type == XML_READER_TYPE_ELEMENT ) {
1334
if(strcmp((const char*)name, "file") == 0) {
1335
f = xar_file_unserialize(x, NULL, reader);
1336
XAR_FILE(f)->next = XAR(x)->files;
1338
} else if( strcmp((const char*)name, "signature") == 0 ){
1339
xar_signature_t sig = NULL;
1340
sig = xar_signature_unserialize(x, reader );
1345
if( XAR(x)->signatures )
1346
XAR_SIGNATURE(XAR(x)->signatures)->next = XAR_SIGNATURE(sig);
1348
XAR(x)->signatures = sig;
1351
xar_prop_unserialize(XAR_FILE(x), NULL, reader);
1321
if( type != XML_READER_TYPE_ELEMENT )
1323
if(strcmp((const char*)name, "xar") != 0)
1325
while( (ret = xmlTextReaderRead(reader)) == 1 ) {
1326
type = xmlTextReaderNodeType(reader);
1327
noattr = xmlTextReaderAttributeCount(reader);
1328
name = xmlTextReaderConstLocalName(reader);
1329
if( type == XML_READER_TYPE_ELEMENT ) {
1330
if(strcmp((const char*)name, "toc") == 0) {
1331
while( (ret = xmlTextReaderRead(reader)) == 1 ) {
1332
type = xmlTextReaderNodeType(reader);
1333
noattr = xmlTextReaderAttributeCount(reader);
1334
name = xmlTextReaderConstLocalName(reader);
1335
if( type == XML_READER_TYPE_ELEMENT ) {
1336
if(strcmp((const char*)name, "file") == 0) {
1337
f = xar_file_unserialize(x, NULL, reader);
1338
XAR_FILE(f)->next = XAR(x)->files;
1340
} else if( strcmp((const char*)name, "signature") == 0 ){
1341
xar_signature_t sig = NULL;
1342
sig = xar_signature_unserialize(x, reader );
1345
xmlFreeTextReader(reader);
1347
xmlCleanupCharEncodingHandlers();
1359
prefix = xmlTextReaderPrefix(reader);
1360
uri = xmlTextReaderNamespaceUri(reader);
1362
i = xmlTextReaderAttributeCount(reader);
1364
for(i = xmlTextReaderMoveToFirstAttribute(reader); i == 1; i = xmlTextReaderMoveToNextAttribute(reader)) {
1366
const char *aname = (const char *)xmlTextReaderConstLocalName(reader);
1367
const char *avalue = (const char *)xmlTextReaderConstValue(reader);
1351
if( XAR(x)->signatures )
1352
XAR_SIGNATURE(XAR(x)->signatures)->next = XAR_SIGNATURE(sig);
1354
XAR(x)->signatures = sig;
1369
if( aname && (strcmp("subdoc_name", aname) == 0) ) {
1370
name = (const unsigned char *)avalue;
1373
XAR_ATTR(a)->key = strdup(aname);
1374
XAR_ATTR(a)->value = strdup(avalue);
1375
XAR_ATTR(a)->next = XAR_SUBDOC(s)->attrs;
1376
XAR_SUBDOC(s)->attrs = XAR_ATTR(a);
1381
s = xar_subdoc_new(x, (const char *)name);
1382
xar_subdoc_unserialize(s, reader);
1385
if( (type == XML_READER_TYPE_END_ELEMENT) && (strcmp((const char *)name, "toc")==0) ) {
1357
xar_prop_unserialize(XAR_FILE(x), NULL, reader);
1362
xmlFreeTextReader(reader);
1364
xmlCleanupCharEncodingHandlers();
1371
prefix = xmlTextReaderPrefix(reader);
1372
uri = xmlTextReaderNamespaceUri(reader);
1374
i = xmlTextReaderAttributeCount(reader);
1376
for(i = xmlTextReaderMoveToFirstAttribute(reader); i == 1; i = xmlTextReaderMoveToNextAttribute(reader)) {
1378
const char *aname = (const char *)xmlTextReaderConstLocalName(reader);
1379
const char *avalue = (const char *)xmlTextReaderConstValue(reader);
1381
if( aname && (strcmp("subdoc_name", aname) == 0) ) {
1382
name = (const unsigned char *)avalue;
1385
XAR_ATTR(a)->key = strdup(aname);
1386
XAR_ATTR(a)->value = strdup(avalue);
1387
XAR_ATTR(a)->next = XAR_SUBDOC(s)->attrs;
1388
XAR_SUBDOC(s)->attrs = XAR_ATTR(a);
1393
s = xar_subdoc_new(x, (const char *)name);
1394
xar_subdoc_unserialize(s, reader);
1397
if( (type == XML_READER_TYPE_END_ELEMENT) && (strcmp((const char *)name, "toc")==0) ) {
1402
xmlFreeTextReader(reader);
1404
xmlCleanupCharEncodingHandlers();
1410
xmlFreeTextReader(reader);
1412
xmlCleanupCharEncodingHandlers();
1394
1416
xmlFreeTextReader(reader);
1418
xmlCleanupCharEncodingHandlers();