Skip to content

Commit 309fc94

Browse files
committed
Add APIs for checking and writing snapshot data
1 parent 847c305 commit 309fc94

3 files changed

Lines changed: 25 additions & 0 deletions

File tree

binaryninjaapi.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1320,6 +1320,7 @@ namespace BinaryNinja {
13201320
std::string GetName();
13211321
bool IsAutoSave();
13221322
bool HasContents();
1323+
bool HasData();
13231324
bool HasUndo();
13241325
Ref<Snapshot> GetFirstParent();
13251326
std::vector<Ref<Snapshot>> GetParents();
@@ -1340,12 +1341,14 @@ namespace BinaryNinja {
13401341
public:
13411342
Database(BNDatabase* database);
13421343

1344+
bool SnapshotHasData(int64_t id);
13431345
Ref<Snapshot> GetSnapshot(int64_t id);
13441346
std::vector<Ref<Snapshot>> GetSnapshots();
13451347
void SetCurrentSnapshot(int64_t id);
13461348
Ref<Snapshot> GetCurrentSnapshot();
13471349
int64_t WriteSnapshotData(std::vector<int64_t> parents, Ref<BinaryView> file, const std::string& name,
13481350
const Ref<KeyValueStore>& data, bool autoSave, const std::function<bool(size_t, size_t)>& progress);
1351+
bool StoreDataForSnapshot(int64_t id, const Ref<KeyValueStore>& data, const std::function<bool(size_t, size_t)>& progress);
13491352
void TrimSnapshot(int64_t id);
13501353
void RemoveSnapshot(int64_t id);
13511354

binaryninjacore.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3125,6 +3125,8 @@ extern "C"
31253125
BINARYNINJACOREAPI int64_t BNWriteDatabaseSnapshotData(BNDatabase* database, int64_t* parents, size_t parentCount,
31263126
BNBinaryView* file, const char* name, BNKeyValueStore* data, bool autoSave, void* ctxt,
31273127
bool (*progress)(void*, size_t, size_t));
3128+
BINARYNINJACOREAPI bool BNStoreDataForSnapshot(BNDatabase* database, int64_t id, BNKeyValueStore* data,
3129+
void* ctxt, bool (*progress)(void*, size_t, size_t));
31283130
BINARYNINJACOREAPI bool BNTrimDatabaseSnapshot(BNDatabase* database, int64_t id);
31293131
BINARYNINJACOREAPI bool BNRemoveDatabaseSnapshot(BNDatabase* database, int64_t id);
31303132
BINARYNINJACOREAPI char** BNGetDatabaseGlobalKeys(BNDatabase* database, size_t* count);
@@ -3136,6 +3138,7 @@ extern "C"
31363138
BINARYNINJACOREAPI BNFileMetadata* BNGetDatabaseFile(BNDatabase* database);
31373139
BINARYNINJACOREAPI BNKeyValueStore* BNReadDatabaseAnalysisCache(BNDatabase* database);
31383140
BINARYNINJACOREAPI bool BNWriteDatabaseAnalysisCache(BNDatabase* database, BNKeyValueStore* val);
3141+
BINARYNINJACOREAPI bool BNSnapshotHasData(BNDatabase* db, int64_t id);
31393142

31403143
// Database snapshots
31413144
BINARYNINJACOREAPI BNSnapshot* BNNewSnapshotReference(BNSnapshot* snapshot);

database.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,19 @@ int64_t Database::WriteSnapshotData(std::vector<int64_t> parents, Ref<BinaryView
390390
}
391391

392392

393+
bool Database::StoreDataForSnapshot(int64_t id, const Ref<KeyValueStore>& data, const std::function<bool(size_t, size_t)>& progress)
394+
{
395+
ProgressContext pctxt;
396+
pctxt.callback = progress;
397+
bool result = BNStoreDataForSnapshot(m_object, id, data->GetObject(), &pctxt, ProgressCallback);
398+
if (!result)
399+
{
400+
throw DatabaseException("BNStoreDataForSnapshot");
401+
}
402+
return result;
403+
}
404+
405+
393406
void Database::TrimSnapshot(int64_t id)
394407
{
395408
if (!BNTrimDatabaseSnapshot(m_object, id))
@@ -518,3 +531,9 @@ void Database::WriteAnalysisCache(Ref<KeyValueStore> val)
518531
throw DatabaseException("BNWriteDatabaseAnalysisCache");
519532
}
520533
}
534+
535+
536+
bool Database::SnapshotHasData(int64_t id)
537+
{
538+
return BNSnapshotHasData(m_object, id);
539+
}

0 commit comments

Comments
 (0)