summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2015-04-27 02:15:16 -0400
committerRusty Wagner <rusty@vector35.com>2015-04-27 02:15:16 -0400
commit190c491d4f6ea4cdb089f5efee15e4fcf65715d3 (patch)
tree22a9c96c5d427eb48b3437c5f92d923a89048222
parentf576bc88bdecba3d634482777142a2d7c84600c6 (diff)
Initial database save/open, just file contents right now
-rw-r--r--binaryninjaapi.h18
-rw-r--r--binaryview.cpp24
-rw-r--r--filemetadata.cpp38
3 files changed, 75 insertions, 5 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index 0eaf38b7..1cd89be1 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -232,17 +232,19 @@ namespace BinaryNinja
class UndoAction
{
private:
- std::string m_name;
+ std::string m_typeName;
+ BNActionType m_actionType;
static void UndoCallback(void* ctxt, BNBinaryView* data);
static void RedoCallback(void* ctxt, BNBinaryView* data);
static char* SerializeCallback(void* ctxt);
public:
- UndoAction(const std::string& name);
+ UndoAction(const std::string& name, BNActionType action);
virtual ~UndoAction() {}
- const std::string& GetName() const { return m_name; }
+ const std::string& GetTypeName() const { return m_typeName; }
+ BNActionType GetActionType() const { return m_actionType; }
BNUndoAction GetCallbacks();
void Add(BNBinaryView* view);
@@ -286,9 +288,15 @@ namespace BinaryNinja
void SetFilename(const std::string& name);
bool IsModified() const;
+ bool IsAnalysisChanged() const;
void MarkFileModified();
void MarkFileSaved();
+ bool IsBackedByDatabase() const;
+ bool CreateDatabase(const std::string& name, BinaryView* data);
+ Ref<BinaryView> OpenExistingDatabase(const std::string& path);
+ bool SaveAutoSnapshot(BinaryView* data);
+
void BeginUndoActions();
void CommitUndoActions();
@@ -445,6 +453,10 @@ namespace BinaryNinja
BNBinaryView* GetViewObject() const { return m_view; }
bool IsModified() const;
+ bool IsAnalysisChanged() const;
+ bool IsBackedByDatabase() const;
+ bool CreateDatabase(const std::string& path);
+ bool SaveAutoSnapshot();
void BeginUndoActions();
void AddUndoAction(UndoAction* action);
diff --git a/binaryview.cpp b/binaryview.cpp
index 4d5c839a..d5776bc7 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -308,6 +308,30 @@ bool BinaryView::IsModified() const
}
+bool BinaryView::IsAnalysisChanged() const
+{
+ return m_file->IsAnalysisChanged();
+}
+
+
+bool BinaryView::IsBackedByDatabase() const
+{
+ return m_file->IsBackedByDatabase();
+}
+
+
+bool BinaryView::CreateDatabase(const string& path)
+{
+ return m_file->CreateDatabase(path, this);
+}
+
+
+bool BinaryView::SaveAutoSnapshot()
+{
+ return m_file->SaveAutoSnapshot(this);
+}
+
+
void BinaryView::BeginUndoActions()
{
m_file->BeginUndoActions();
diff --git a/filemetadata.cpp b/filemetadata.cpp
index 5775852a..bfa7c97a 100644
--- a/filemetadata.cpp
+++ b/filemetadata.cpp
@@ -70,7 +70,7 @@ char* UndoAction::SerializeCallback(void* ctxt)
}
-UndoAction::UndoAction(const string& name): m_name(name)
+UndoAction::UndoAction(const string& name, BNActionType action): m_typeName(name), m_actionType(action)
{
}
@@ -78,6 +78,7 @@ UndoAction::UndoAction(const string& name): m_name(name)
BNUndoAction UndoAction::GetCallbacks()
{
BNUndoAction action;
+ action.type = m_actionType;
action.context = this;
action.undo = UndoCallback;
action.redo = RedoCallback;
@@ -89,7 +90,7 @@ BNUndoAction UndoAction::GetCallbacks()
void UndoAction::Add(BNBinaryView* view)
{
BNUndoAction action = GetCallbacks();
- BNAddUndoAction(view, GetName().c_str(), &action);
+ BNAddUndoAction(view, m_typeName.c_str(), &action);
}
@@ -184,6 +185,12 @@ bool FileMetadata::IsModified() const
}
+bool FileMetadata::IsAnalysisChanged() const
+{
+ return BNIsAnalysisChanged(m_file);
+}
+
+
void FileMetadata::MarkFileModified()
{
BNMarkFileModified(m_file);
@@ -196,6 +203,33 @@ void FileMetadata::MarkFileSaved()
}
+bool FileMetadata::IsBackedByDatabase() const
+{
+ return BNIsBackedByDatabase(m_file);
+}
+
+
+bool FileMetadata::CreateDatabase(const string& name, BinaryView* data)
+{
+ return BNCreateDatabase(data->GetViewObject(), name.c_str());
+}
+
+
+Ref<BinaryView> FileMetadata::OpenExistingDatabase(const string& path)
+{
+ BNBinaryView* data = BNOpenExistingDatabase(m_file, path.c_str());
+ if (!data)
+ return nullptr;
+ return new BinaryView(data);
+}
+
+
+bool FileMetadata::SaveAutoSnapshot(BinaryView* data)
+{
+ return BNSaveAutoSnapshot(data->GetViewObject());
+}
+
+
void FileMetadata::BeginUndoActions()
{
BNBeginUndoActions(m_file);