diff options
| author | Rusty Wagner <rusty@vector35.com> | 2015-04-27 02:15:16 -0400 |
|---|---|---|
| committer | Rusty Wagner <rusty@vector35.com> | 2015-04-27 02:15:16 -0400 |
| commit | 190c491d4f6ea4cdb089f5efee15e4fcf65715d3 (patch) | |
| tree | 22a9c96c5d427eb48b3437c5f92d923a89048222 | |
| parent | f576bc88bdecba3d634482777142a2d7c84600c6 (diff) | |
Initial database save/open, just file contents right now
| -rw-r--r-- | binaryninjaapi.h | 18 | ||||
| -rw-r--r-- | binaryview.cpp | 24 | ||||
| -rw-r--r-- | filemetadata.cpp | 38 |
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); |
