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

Method parse

tools/aapt/XMLNode.cpp:587–637  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

585}
586
587sp<XMLNode> XMLNode::parse(const sp<AaptFile>& file)
588{
589 char buf[16384];
590
591 //Check for zip first
592 if (file->getZipFile().length() > 0) {
593 return parseFromZip(file);
594 }
595
596 int fd = open(file->getSourceFile().string(), O_RDONLY | O_BINARY);
597 if (fd < 0) {
598 SourcePos(file->getSourceFile(), -1).error("Unable to open file for read: %s",
599 strerror(errno));
600 return NULL;
601 }
602
603 XML_Parser parser = XML_ParserCreateNS(NULL, 1);
604 ParseState state;
605 state.filename = file->getPrintableSource();
606 state.parser = parser;
607 XML_SetUserData(parser, &state);
608 XML_SetElementHandler(parser, startElement, endElement);
609 XML_SetNamespaceDeclHandler(parser, startNamespace, endNamespace);
610 XML_SetCharacterDataHandler(parser, characterData);
611 XML_SetCommentHandler(parser, commentData);
612
613 ssize_t len;
614 bool done;
615 do {
616 len = read(fd, buf, sizeof(buf));
617 done = len < (ssize_t)sizeof(buf);
618 if (len < 0) {
619 SourcePos(file->getSourceFile(), -1).error("Error reading file: %s\n", strerror(errno));
620 close(fd);
621 return NULL;
622 }
623 if (XML_Parse(parser, buf, len, done) == XML_STATUS_ERROR) {
624 SourcePos(file->getSourceFile(), (int)XML_GetCurrentLineNumber(parser)).error(
625 "Error parsing XML: %s\n", XML_ErrorString(XML_GetErrorCode(parser)));
626 close(fd);
627 return NULL;
628 }
629 } while (!done);
630
631 XML_ParserFree(parser);
632 if (state.root == NULL) {
633 SourcePos(file->getSourceFile(), -1).error("No XML data generated when parsing");
634 }
635 close(fd);
636 return state.root;
637}
638
639XMLNode::XMLNode(const String8& filename, const String16& s1, const String16& s2, bool isNamespace)
640 : mNextAttributeIndex(0x80000000)

Callers

nothing calls this directly

Calls 5

SourcePosClass · 0.85
stringMethod · 0.80
getPrintableSourceMethod · 0.80
errorMethod · 0.65
lengthMethod · 0.45

Tested by

no test coverage detected