MCPcopy Create free account
hub / github.com/CyanogenMod/android_frameworks_base / parseFromZip

Method parseFromZip

tools/aapt/XMLNode.cpp:551–585  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

549}
550
551sp<XMLNode> XMLNode::parseFromZip(const sp<AaptFile>& file) {
552 AssetManager assets;
553 void* cookie;
554
555 if (!assets.addAssetPath(file->getZipFile(), &cookie)) {
556 fprintf(stderr, "Error: Could not open path %s\n", file->getZipFile().string());
557 return NULL;
558 }
559
560 Asset* asset = assets.openNonAsset(cookie, file->getSourceFile(), Asset::ACCESS_BUFFER);
561 ssize_t len = asset->getLength();
562 const void* buf = asset->getBuffer(false);
563
564 XML_Parser parser = XML_ParserCreateNS(NULL, 1);
565 ParseState state;
566 state.filename = file->getPrintableSource();
567 state.parser = parser;
568 XML_SetUserData(parser, &state);
569 XML_SetElementHandler(parser, startElement, endElement);
570 XML_SetNamespaceDeclHandler(parser, startNamespace, endNamespace);
571 XML_SetCharacterDataHandler(parser, characterData);
572 XML_SetCommentHandler(parser, commentData);
573
574 bool done = true;
575 if (XML_Parse(parser, (char*) buf, len, done) == XML_STATUS_ERROR) {
576 SourcePos(file->getSourceFile(), (int)XML_GetCurrentLineNumber(parser)).error(
577 "Error parsing XML: %s\n", XML_ErrorString(XML_GetErrorCode(parser)));
578 return NULL;
579 }
580 XML_ParserFree(parser);
581 if (state.root == NULL) {
582 SourcePos(file->getSourceFile(), -1).error("No XML data generated when parsing");
583 }
584 return state.root;
585}
586
587sp<XMLNode> XMLNode::parse(const sp<AaptFile>& file)
588{

Callers

nothing calls this directly

Calls 8

SourcePosClass · 0.85
stringMethod · 0.80
getPrintableSourceMethod · 0.80
getLengthMethod · 0.65
errorMethod · 0.65
addAssetPathMethod · 0.45
openNonAssetMethod · 0.45
getBufferMethod · 0.45

Tested by

no test coverage detected