bool internalizeOneObjectFile(objectFileListType *objectFile) { FILE *objectFildes; int magic; int mode; addressType startAddress; addressType endAddress; currentFileName = objectFile->name; if ((objectFildes = fopen(objectFile->name, "r")) == NULL) { error(CANT_OPEN_OBJECT_FILE_ERROR, objectFile->name); perror("Unix says"); return(FALSE); } if (verbose) printf("internalizing %s:\n", objectFile->name); if ((magic = readWord(objectFildes, objectFile->name)) != 0xFFFF) { error(BAD_OBJECT_FILE_ERROR, objectFile->name); return(FALSE); } mode = MODE_ABSOLUTE; for (;;) { startAddress = readWord(objectFildes, objectFile->name); if (startAddress == 0xFFFF) { if (mode == MODE_ABSOLUTE) { mode = MODE_RELOCATABLE; continue; } else { break; } } endAddress = readWord(objectFildes, objectFile->name); readCode(startAddress, endAddress, mode, objectFile, objectFildes); } readReservations(objectFile, objectFildes); readReferences(objectFile, objectFildes); readSymbols(objectFile, objectFildes); readExpressions(objectFile, objectFildes); readFunctions(objectFile, objectFildes); instantiateExpressionAndSymbolPointers(objectFile); if (readExpressionEntryPoint) { pc = entryPointExpression; putSymbolPointersIntoExpression(); readExpressionEntryPoint = FALSE; haveExpressionEntryPoint = TRUE; } qsort(objectFile->symbolTable, objectFile->symbolCount, sizeof(symbolType *), compareSymbolValues); fclose(objectFildes); return(TRUE); }
XmlPullParser::Event BindingXmlPullParser::next() { // Clear old state in preparation for the next event. mOverride = false; mAttributes.clear(); while (true) { Event event = mParser->next(); if (event == Event::kStartElement) { if (mParser->getElementNamespace().empty() && mParser->getElementName() == kVariableTagName) { // This is a variable tag. Record data from it, and // then discard the entire element. if (!readVariableDeclaration()) { // mLastError is set, so getEvent will return kBadDocument. return getEvent(); } continue; } else { // Check for expressions of the form @{} in attribute text. const auto endAttrIter = mParser->endAttributes(); for (auto attr = mParser->beginAttributes(); attr != endAttrIter; ++attr) { StringPiece16 value = util::trimWhitespace(attr->value); if (util::stringStartsWith<char16_t>(value, u"@{") && util::stringEndsWith<char16_t>(value, u"}")) { if (!readExpressions()) { return getEvent(); } break; } } } } else if (event == Event::kStartNamespace || event == Event::kEndNamespace) { if (mParser->getNamespaceUri() == kBindingNamespaceUri) { // Skip binding namespace tags. continue; } } return event; } return Event::kBadDocument; }