X-Git-Url: https://git.siccegge.de//index.cgi?p=frida%2Ffrida.git;a=blobdiff_plain;f=src%2Fcore%2FInformationManager.cxx;h=b7229d376854639dfc8cc16fbece136f2ef9bed2;hp=8834a7a39f479b49a0d9b9dad115eaf7269d33cc;hb=1b43b26ba9b23cb5f3004db7b9b00f6b08227563;hpb=d1b23c7274d6430ccc70bf2baf616437db9f5706 diff --git a/src/core/InformationManager.cxx b/src/core/InformationManager.cxx index 8834a7a..b7229d3 100644 --- a/src/core/InformationManager.cxx +++ b/src/core/InformationManager.cxx @@ -7,7 +7,7 @@ #include "core/events/NewFunctionEvent.hxx" #include "core/events/ChangeCommentEvent.hxx" -#include "gui/qt.hxx" +#include "qt.hxx" #include #include @@ -50,7 +50,10 @@ void InformationManager::load(const std::string& filename) { QuaZipFile file(&zip); QuaZipFileInfo info; - zip.open(QuaZip::mdUnzip); + if (!zip.open(QuaZip::mdUnzip)) { + LOG4CXX_ERROR(logger, "Failed to open archive " << filename); + return; + } tmpfile.reset(new QTemporaryFile()); { @@ -73,10 +76,21 @@ void InformationManager::load(const std::string& filename) { file.open(QIODevice::ReadOnly); if(info.name != "binary") { - QXmlStreamReader reader(&file); - assert(QXmlStreamReader::StartDocument == reader.readNext()); - assert(QXmlStreamReader::StartElement == reader.readNext()); - Function * fun = Function::deserialize(reader, this); + if (info.name.startsWith("comment:")) { + QXmlStreamReader reader(&file); + auto starttoken = reader.readNext(); + auto elementtoken = reader.readNext(); + assert(QXmlStreamReader::StartDocument == starttoken); + assert(QXmlStreamReader::StartElement == elementtoken); + Comment::deserialize(reader, this); + } else { + QXmlStreamReader reader(&file); + auto starttoken = reader.readNext(); + auto elementtoken = reader.readNext(); + assert(QXmlStreamReader::StartDocument == starttoken); + assert(QXmlStreamReader::StartElement == elementtoken); + Function::deserialize(reader, this); + } } file.close(); } @@ -117,6 +131,23 @@ void InformationManager::save(const std::string& filename) { stream.writeEndDocument(); outZipFile.close(); } + for (auto commentpair : comments) { + Comment* comment = commentpair.second; + if (!comment->isLocal()) { + QuaZipNewInfo zipinfo(QString("comment:%1").arg(comment->getAddress(), 0, 16)); + zipinfo.setPermissions(static_cast(0x6444)); + outZipFile.open(QIODevice::WriteOnly, zipinfo); + QXmlStreamWriter stream(&outZipFile); + stream.setAutoFormatting(true); + stream.setAutoFormattingIndent(-1); + stream.writeStartDocument(); + + comment->serialize(stream); + + stream.writeEndDocument(); + outZipFile.close(); + } + } zip.close(); } @@ -239,7 +270,7 @@ void InformationManager::finishFunction(Function* fun) { blocks.insert(std::make_pair(bl->getStartAddress(), bl)); } NewFunctionEvent event(fun->getStartAddress(), fun); - dispatch(&event); + Q_EMIT newFunctionEvent(&event); } void InformationManager::finishBasicBlock(BasicBlock*) { @@ -248,7 +279,7 @@ void InformationManager::finishBasicBlock(BasicBlock*) { void InformationManager::finishComment(Comment* c) { LOG4CXX_DEBUG(logger, "Finishing comment " << c->getAddress()); ChangeCommentEvent event(c->getAddress(), c->getLocation(), c); - dispatch(&event); + Q_EMIT changeCommentEvent(&event); } void InformationManager::deleteFunction(Function* f) {