summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--binaryninjaapi.h24
-rw-r--r--binaryninjacore.h20
-rw-r--r--binaryview.cpp4
-rw-r--r--database.cpp16
-rw-r--r--filemetadata.cpp20
-rw-r--r--python/binaryview.py2
-rw-r--r--python/filemetadata.py10
-rw-r--r--rust/src/filemetadata.rs2
8 files changed, 49 insertions, 49 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index 62d5d839..b33f49f8 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -918,9 +918,9 @@ __attribute__ ((format (printf, 1, 2)))
DataBuffer GetFileContents();
DataBuffer GetFileContentsHash();
std::vector<UndoEntry> GetUndoEntries();
- std::vector<UndoEntry> GetUndoEntries(const std::function<void(size_t, size_t)>& progress);
+ std::vector<UndoEntry> GetUndoEntries(const std::function<bool(size_t, size_t)>& progress);
Ref<KeyValueStore> ReadData();
- Ref<KeyValueStore> ReadData(const std::function<void(size_t, size_t)>& progress);
+ Ref<KeyValueStore> ReadData(const std::function<bool(size_t, size_t)>& progress);
bool HasAncestor(Ref<Snapshot> other);
};
@@ -935,7 +935,7 @@ __attribute__ ((format (printf, 1, 2)))
std::vector<Ref<Snapshot>> GetSnapshots();
void SetCurrentSnapshot(int64_t id);
Ref<Snapshot> GetCurrentSnapshot();
- int64_t WriteSnapshotData(std::vector<int64_t> parents, Ref<BinaryView> file, const std::string& name, const Ref<KeyValueStore>& data, bool autoSave, const std::function<void(size_t, size_t)>& progress);
+ int64_t WriteSnapshotData(std::vector<int64_t> parents, Ref<BinaryView> file, const std::string& name, const Ref<KeyValueStore>& data, bool autoSave, const std::function<bool(size_t, size_t)>& progress);
void RemoveSnapshot(int64_t id);
std::vector<std::string> GetGlobalKeys() const;
@@ -1016,24 +1016,24 @@ __attribute__ ((format (printf, 1, 2)))
bool IsBackedByDatabase(const std::string& binaryViewType = "") const;
bool CreateDatabase(const std::string& name, BinaryView* data, Ref<SaveSettings> settings);
bool CreateDatabase(const std::string& name, BinaryView* data,
- const std::function<void(size_t progress, size_t total)>& progressCallback, Ref<SaveSettings> settings);
+ const std::function<bool(size_t progress, size_t total)>& progressCallback, Ref<SaveSettings> settings);
Ref<BinaryView> OpenExistingDatabase(const std::string& path);
Ref<BinaryView> OpenExistingDatabase(const std::string& path,
- const std::function<void(size_t progress, size_t total)>& progressCallback);
+ const std::function<bool(size_t progress, size_t total)>& progressCallback);
Ref<BinaryView> OpenDatabaseForConfiguration(const std::string& path);
bool SaveAutoSnapshot(BinaryView* data, Ref<SaveSettings> settings);
bool SaveAutoSnapshot(BinaryView* data,
- const std::function<void(size_t progress, size_t total)>& progressCallback, Ref<SaveSettings> settings);
+ const std::function<bool(size_t progress, size_t total)>& progressCallback, Ref<SaveSettings> settings);
void GetSnapshotData(Ref<KeyValueStore> data, Ref<KeyValueStore> cache,
- const std::function<void(size_t, size_t)>& progress);
+ const std::function<bool(size_t, size_t)>& progress);
void ApplySnapshotData(BinaryView* file, Ref<KeyValueStore> data, Ref<KeyValueStore> cache,
- const std::function<void(size_t, size_t)>& progress, bool openForConfiguration = false, bool restoreRawView = true);
+ const std::function<bool(size_t, size_t)>& progress, bool openForConfiguration = false, bool restoreRawView = true);
Ref<Database> GetDatabase();
bool Rebase(BinaryView* data, uint64_t address);
- bool Rebase(BinaryView* data, uint64_t address, const std::function<void(size_t progress, size_t total)>& progressCallback);
+ bool Rebase(BinaryView* data, uint64_t address, const std::function<bool(size_t progress, size_t total)>& progressCallback);
- MergeResult MergeUserAnalysis(const std::string& name, const std::function<void(size_t, size_t)>& progress,
+ MergeResult MergeUserAnalysis(const std::string& name, const std::function<bool(size_t, size_t)>& progress,
const std::vector<std::string> excludedHashes = {} );
void BeginUndoActions();
@@ -1662,9 +1662,9 @@ __attribute__ ((format (printf, 1, 2)))
bool IsAnalysisChanged() const;
bool CreateDatabase(const std::string& path, Ref<SaveSettings> settings = new SaveSettings());
bool CreateDatabase(const std::string& path,
- const std::function<void(size_t progress, size_t total)>& progressCallback, Ref<SaveSettings> settings = new SaveSettings());
+ const std::function<bool(size_t progress, size_t total)>& progressCallback, Ref<SaveSettings> settings = new SaveSettings());
bool SaveAutoSnapshot(Ref<SaveSettings> settings = new SaveSettings());
- bool SaveAutoSnapshot(const std::function<void(size_t progress, size_t total)>& progressCallback, Ref<SaveSettings> settings = new SaveSettings());
+ bool SaveAutoSnapshot(const std::function<bool(size_t progress, size_t total)>& progressCallback, Ref<SaveSettings> settings = new SaveSettings());
void BeginUndoActions();
void AddUndoAction(UndoAction* action);
diff --git a/binaryninjacore.h b/binaryninjacore.h
index c45729a0..f1505ad1 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -2849,16 +2849,16 @@ __attribute__ ((format (printf, 1, 2)))
BINARYNINJACOREAPI bool BNCreateDatabase(BNBinaryView* data, const char* path, BNSaveSettings* settings);
BINARYNINJACOREAPI bool BNCreateDatabaseWithProgress(BNBinaryView* data, const char* path,
- void* ctxt, void (*progress)(void* ctxt, size_t progress, size_t total), BNSaveSettings* settings);
+ void* ctxt, bool (*progress)(void* ctxt, size_t progress, size_t total), BNSaveSettings* settings);
BINARYNINJACOREAPI BNBinaryView* BNOpenExistingDatabase(BNFileMetadata* file, const char* path);
BINARYNINJACOREAPI BNBinaryView* BNOpenExistingDatabaseWithProgress(BNFileMetadata* file, const char* path,
- void* ctxt, void (*progress)(void* ctxt, size_t progress, size_t total));
+ void* ctxt, bool (*progress)(void* ctxt, size_t progress, size_t total));
BINARYNINJACOREAPI BNBinaryView* BNOpenDatabaseForConfiguration(BNFileMetadata* file, const char* path);
BINARYNINJACOREAPI bool BNSaveAutoSnapshot(BNBinaryView* data, BNSaveSettings* settings);
BINARYNINJACOREAPI bool BNSaveAutoSnapshotWithProgress(BNBinaryView* data, void* ctxt,
- void (*progress)(void* ctxt, size_t progress, size_t total), BNSaveSettings* settings);
- BINARYNINJACOREAPI void BNGetSnapshotData(BNFileMetadata* file, BNKeyValueStore* data, BNKeyValueStore* cache, void* ctxt, void (*progress)(void* ctxt, size_t current, size_t total));
- BINARYNINJACOREAPI void BNApplySnapshotData(BNFileMetadata* file, BNBinaryView* view, BNKeyValueStore* data, BNKeyValueStore* cache, void* ctxt, void (*progress)(void* ctxt, size_t current, size_t total), bool openForConfiguration, bool restoreRawView);
+ bool (*progress)(void* ctxt, size_t progress, size_t total), BNSaveSettings* settings);
+ BINARYNINJACOREAPI void BNGetSnapshotData(BNFileMetadata* file, BNKeyValueStore* data, BNKeyValueStore* cache, void* ctxt, bool (*progress)(void* ctxt, size_t current, size_t total));
+ BINARYNINJACOREAPI void BNApplySnapshotData(BNFileMetadata* file, BNBinaryView* view, BNKeyValueStore* data, BNKeyValueStore* cache, void* ctxt, bool (*progress)(void* ctxt, size_t current, size_t total), bool openForConfiguration, bool restoreRawView);
BINARYNINJACOREAPI BNDatabase* BNGetFileMetadataDatabase(BNFileMetadata* file);
// Key value store
@@ -2889,7 +2889,7 @@ __attribute__ ((format (printf, 1, 2)))
BINARYNINJACOREAPI BNSnapshot* BNGetDatabaseCurrentSnapshot(BNDatabase* database);
BINARYNINJACOREAPI BNSnapshot** BNGetDatabaseSnapshots(BNDatabase* database, size_t* count);
BINARYNINJACOREAPI BNSnapshot* BNGetDatabaseSnapshot(BNDatabase* database, int64_t id);
- BINARYNINJACOREAPI int64_t BNWriteDatabaseSnapshotData(BNDatabase* database, int64_t* parents, size_t parentCount, BNBinaryView* file, const char* name, BNKeyValueStore* data, bool autoSave, void* ctxt, void(*progress)(void*, size_t, size_t));
+ BINARYNINJACOREAPI int64_t BNWriteDatabaseSnapshotData(BNDatabase* database, int64_t* parents, size_t parentCount, BNBinaryView* file, const char* name, BNKeyValueStore* data, bool autoSave, void* ctxt, bool(*progress)(void*, size_t, size_t));
BINARYNINJACOREAPI bool BNRemoveDatabaseSnapshot(BNDatabase* database, int64_t id);
BINARYNINJACOREAPI char** BNGetDatabaseGlobalKeys(BNDatabase* database, size_t* count);
BINARYNINJACOREAPI int BNDatabaseHasGlobal(BNDatabase* database, const char* key);
@@ -2915,16 +2915,16 @@ __attribute__ ((format (printf, 1, 2)))
BINARYNINJACOREAPI BNDataBuffer* BNGetSnapshotFileContents(BNSnapshot* snapshot);
BINARYNINJACOREAPI BNDataBuffer* BNGetSnapshotFileContentsHash(BNSnapshot* snapshot);
BINARYNINJACOREAPI BNKeyValueStore* BNReadSnapshotData(BNSnapshot* snapshot);
- BINARYNINJACOREAPI BNKeyValueStore* BNReadSnapshotDataWithProgress(BNSnapshot* snapshot, void* ctxt, void (*progress)(void* ctxt, size_t progress, size_t total));
+ BINARYNINJACOREAPI BNKeyValueStore* BNReadSnapshotDataWithProgress(BNSnapshot* snapshot, void* ctxt, bool (*progress)(void* ctxt, size_t progress, size_t total));
BINARYNINJACOREAPI BNUndoEntry* BNGetSnapshotUndoEntries(BNSnapshot* snapshot, size_t* count);
- BINARYNINJACOREAPI BNUndoEntry* BNGetSnapshotUndoEntriesWithProgress(BNSnapshot* snapshot, void* ctxt, void (*progress)(void* ctxt, size_t progress, size_t total), size_t* count);
+ BINARYNINJACOREAPI BNUndoEntry* BNGetSnapshotUndoEntriesWithProgress(BNSnapshot* snapshot, void* ctxt, bool (*progress)(void* ctxt, size_t progress, size_t total), size_t* count);
BINARYNINJACOREAPI bool BNSnapshotHasAncestor(BNSnapshot* snapshot, BNSnapshot* other);
BINARYNINJACOREAPI bool BNRebase(BNBinaryView* data, uint64_t address);
- BINARYNINJACOREAPI bool BNRebaseWithProgress(BNBinaryView* data, uint64_t address, void* ctxt, void (*progress)(void* ctxt, size_t progress, size_t total));
+ BINARYNINJACOREAPI bool BNRebaseWithProgress(BNBinaryView* data, uint64_t address, void* ctxt, bool (*progress)(void* ctxt, size_t progress, size_t total));
- BINARYNINJACOREAPI BNMergeResult BNMergeUserAnalysis(BNFileMetadata* file, const char* name, void* ctxt, void (*progress)(void* ctxt, size_t progress, size_t total),
+ BINARYNINJACOREAPI BNMergeResult BNMergeUserAnalysis(BNFileMetadata* file, const char* name, void* ctxt, bool (*progress)(void* ctxt, size_t progress, size_t total),
char** excludedHashes, size_t excludedHashesCount);
BINARYNINJACOREAPI char* BNGetOriginalFilename(BNFileMetadata* file);
diff --git a/binaryview.cpp b/binaryview.cpp
index 46902073..5ab24694 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -1156,7 +1156,7 @@ bool BinaryView::CreateDatabase(const string& path, Ref<SaveSettings> settings)
bool BinaryView::CreateDatabase(const string& path,
- const function<void(size_t progress, size_t total)>& progressCallback, Ref<SaveSettings> settings)
+ const function<bool(size_t progress, size_t total)>& progressCallback, Ref<SaveSettings> settings)
{
auto parent = GetParentView();
if (parent)
@@ -1171,7 +1171,7 @@ bool BinaryView::SaveAutoSnapshot(Ref<SaveSettings> settings)
}
-bool BinaryView::SaveAutoSnapshot(const function<void(size_t progress, size_t total)>& progressCallback, Ref<SaveSettings> settings)
+bool BinaryView::SaveAutoSnapshot(const function<bool(size_t progress, size_t total)>& progressCallback, Ref<SaveSettings> settings)
{
return m_file->SaveAutoSnapshot(this, progressCallback, settings);
}
diff --git a/database.cpp b/database.cpp
index ee7dd289..90adb8c7 100644
--- a/database.cpp
+++ b/database.cpp
@@ -27,14 +27,14 @@ using namespace std;
struct ProgressContext
{
- std::function<void(size_t, size_t)> callback;
+ std::function<bool(size_t, size_t)> callback;
};
-void ProgressCallback(void* ctxt, size_t current, size_t total)
+bool ProgressCallback(void* ctxt, size_t current, size_t total)
{
ProgressContext* pctxt = reinterpret_cast<ProgressContext*>(ctxt);
- pctxt->callback(current, total);
+ return pctxt->callback(current, total);
}
@@ -274,11 +274,11 @@ DataBuffer Snapshot::GetFileContentsHash()
vector<UndoEntry> Snapshot::GetUndoEntries()
{
- return GetUndoEntries([](size_t, size_t){});
+ return GetUndoEntries([](size_t, size_t){ return true; });
}
-vector<UndoEntry> Snapshot::GetUndoEntries(const std::function<void(size_t, size_t)>& progress)
+vector<UndoEntry> Snapshot::GetUndoEntries(const std::function<bool(size_t, size_t)>& progress)
{
ProgressContext pctxt;
pctxt.callback = progress;
@@ -313,11 +313,11 @@ vector<UndoEntry> Snapshot::GetUndoEntries(const std::function<void(size_t, size
Ref<KeyValueStore> Snapshot::ReadData()
{
- return ReadData([](size_t, size_t){});
+ return ReadData([](size_t, size_t){ return true; });
}
-Ref<KeyValueStore> Snapshot::ReadData(const std::function<void(size_t, size_t)>& progress)
+Ref<KeyValueStore> Snapshot::ReadData(const std::function<bool(size_t, size_t)>& progress)
{
ProgressContext pctxt;
pctxt.callback = progress;
@@ -377,7 +377,7 @@ Ref<Snapshot> Database::GetCurrentSnapshot()
}
-int64_t Database::WriteSnapshotData(std::vector<int64_t> parents, Ref<BinaryView> file, const std::string& name, const Ref<KeyValueStore>& data, bool autoSave, const std::function<void(size_t, size_t)>& progress)
+int64_t Database::WriteSnapshotData(std::vector<int64_t> parents, Ref<BinaryView> file, const std::string& name, const Ref<KeyValueStore>& data, bool autoSave, const std::function<bool(size_t, size_t)>& progress)
{
ProgressContext pctxt;
pctxt.callback = progress;
diff --git a/filemetadata.cpp b/filemetadata.cpp
index a7e2b78f..540151c7 100644
--- a/filemetadata.cpp
+++ b/filemetadata.cpp
@@ -27,14 +27,14 @@ using namespace std;
struct DatabaseProgressCallbackContext
{
- std::function<void(size_t, size_t)> func;
+ std::function<bool(size_t, size_t)> func;
};
-static void DatabaseProgressCallback(void* ctxt, size_t progress, size_t total)
+static bool DatabaseProgressCallback(void* ctxt, size_t progress, size_t total)
{
DatabaseProgressCallbackContext* cb = (DatabaseProgressCallbackContext*)ctxt;
- cb->func(progress, total);
+ return cb->func(progress, total);
}
@@ -170,7 +170,7 @@ bool FileMetadata::CreateDatabase(const string& name, BinaryView* data, Ref<Save
bool FileMetadata::CreateDatabase(const string& name, BinaryView* data,
- const function<void(size_t progress, size_t total)>& progressCallback, Ref<SaveSettings> settings)
+ const function<bool(size_t progress, size_t total)>& progressCallback, Ref<SaveSettings> settings)
{
DatabaseProgressCallbackContext cb;
cb.func = progressCallback;
@@ -188,7 +188,7 @@ Ref<BinaryView> FileMetadata::OpenExistingDatabase(const string& path)
Ref<BinaryView> FileMetadata::OpenExistingDatabase(const string& path,
- const function<void(size_t progress, size_t total)>& progressCallback)
+ const function<bool(size_t progress, size_t total)>& progressCallback)
{
DatabaseProgressCallbackContext cb;
cb.func = progressCallback;
@@ -215,7 +215,7 @@ bool FileMetadata::SaveAutoSnapshot(BinaryView* data, Ref<SaveSettings> settings
bool FileMetadata::SaveAutoSnapshot(BinaryView* data,
- const function<void(size_t progress, size_t total)>& progressCallback, Ref<SaveSettings> settings)
+ const function<bool(size_t progress, size_t total)>& progressCallback, Ref<SaveSettings> settings)
{
DatabaseProgressCallbackContext cb;
cb.func = progressCallback;
@@ -224,7 +224,7 @@ bool FileMetadata::SaveAutoSnapshot(BinaryView* data,
void FileMetadata::GetSnapshotData(Ref<KeyValueStore> data, Ref<KeyValueStore> cache,
- const std::function<void(size_t, size_t)>& progress)
+ const std::function<bool(size_t, size_t)>& progress)
{
DatabaseProgressCallbackContext cb;
cb.func = progress;
@@ -233,7 +233,7 @@ void FileMetadata::GetSnapshotData(Ref<KeyValueStore> data, Ref<KeyValueStore> c
void FileMetadata::ApplySnapshotData(BinaryView* file, Ref<KeyValueStore> data, Ref<KeyValueStore> cache,
- const std::function<void(size_t, size_t)>& progress, bool openForConfiguration, bool restoreRawView)
+ const std::function<bool(size_t, size_t)>& progress, bool openForConfiguration, bool restoreRawView)
{
DatabaseProgressCallbackContext cb;
cb.func = progress;
@@ -256,7 +256,7 @@ bool FileMetadata::Rebase(BinaryView* data, uint64_t address)
}
-bool FileMetadata::Rebase(BinaryView* data, uint64_t address, const function<void(size_t progress, size_t total)>& progressCallback)
+bool FileMetadata::Rebase(BinaryView* data, uint64_t address, const function<bool(size_t progress, size_t total)>& progressCallback)
{
DatabaseProgressCallbackContext cb;
cb.func = progressCallback;
@@ -264,7 +264,7 @@ bool FileMetadata::Rebase(BinaryView* data, uint64_t address, const function<voi
}
-MergeResult FileMetadata::MergeUserAnalysis(const std::string& name, const std::function<void(size_t, size_t)>& progress, std::vector<string> excludedHashes)
+MergeResult FileMetadata::MergeUserAnalysis(const std::string& name, const std::function<bool(size_t, size_t)>& progress, std::vector<string> excludedHashes)
{
size_t numHashes = excludedHashes.size();
char** tempList = new char*[numHashes];
diff --git a/python/binaryview.py b/python/binaryview.py
index 03b1f9e7..b02f5d1a 100644
--- a/python/binaryview.py
+++ b/python/binaryview.py
@@ -6757,7 +6757,7 @@ class BinaryView:
if progress_func is None:
result = core.BNRebase(self.handle, address)
else:
- result = core.BNRebaseWithProgress(self.handle, address, None, ctypes.CFUNCTYPE(None, ctypes.c_void_p, ctypes.c_ulonglong, ctypes.c_ulonglong)(
+ result = core.BNRebaseWithProgress(self.handle, address, None, ctypes.CFUNCTYPE(ctypes.c_bool, ctypes.c_void_p, ctypes.c_ulonglong, ctypes.c_ulonglong)(
lambda ctxt, cur, total: progress_func(cur, total)))
if result:
return self.get_view_of_type(self.view_type)
diff --git a/python/filemetadata.py b/python/filemetadata.py
index 5a36fde0..aea68bb6 100644
--- a/python/filemetadata.py
+++ b/python/filemetadata.py
@@ -434,7 +434,7 @@ class FileMetadata:
else:
_progress_func = progress_func
return core.BNCreateDatabaseWithProgress(self.raw.handle, str(filename), None,
- ctypes.CFUNCTYPE(None, ctypes.c_void_p, ctypes.c_ulonglong, ctypes.c_ulonglong)(
+ ctypes.CFUNCTYPE(ctypes.c_bool, ctypes.c_void_p, ctypes.c_ulonglong, ctypes.c_ulonglong)(
lambda ctxt, cur, total: _progress_func(cur, total)), settings)
def open_existing_database(self, filename:str, progress_func:Callable[[int, int], bool]=None):
@@ -442,7 +442,7 @@ class FileMetadata:
view = core.BNOpenExistingDatabase(self.handle, str(filename))
else:
view = core.BNOpenExistingDatabaseWithProgress(self.handle, str(filename), None,
- ctypes.CFUNCTYPE(None, ctypes.c_void_p, ctypes.c_ulonglong, ctypes.c_ulonglong)(
+ ctypes.CFUNCTYPE(ctypes.c_bool, ctypes.c_void_p, ctypes.c_ulonglong, ctypes.c_ulonglong)(
lambda ctxt, cur, total: progress_func(cur, total)))
if view is None:
return None
@@ -465,7 +465,7 @@ class FileMetadata:
else:
_progress_func = progress_func
return core.BNSaveAutoSnapshotWithProgress(self.raw.handle, None,
- ctypes.CFUNCTYPE(None, ctypes.c_void_p, ctypes.c_ulonglong, ctypes.c_ulonglong)(
+ ctypes.CFUNCTYPE(ctypes.c_bool, ctypes.c_void_p, ctypes.c_ulonglong, ctypes.c_ulonglong)(
lambda ctxt, cur, total: _progress_func(cur, total)), _settings)
def merge_user_analysis(self, path:str, progress_func:ProgressFuncType, excluded_hashes:Optional[List[str]]=None):
@@ -475,7 +475,7 @@ class FileMetadata:
for i in range(len(excluded_hashes)):
excluded[i] = core.cstr(excluded_hashes[i])
return core.BNMergeUserAnalysis(self.handle, str(path), None,
- ctypes.CFUNCTYPE(None, ctypes.c_void_p, ctypes.c_ulonglong, ctypes.c_ulonglong)(
+ ctypes.CFUNCTYPE(None, ctypes.c_bool, ctypes.c_ulonglong, ctypes.c_ulonglong)(
lambda ctxt, cur, total: progress_func(cur, total)), excluded, len(excluded_hashes))
def get_view_of_type(self, name:str) -> Optional['binaryview.BinaryView']:
@@ -509,4 +509,4 @@ class FileMetadata:
for i in range(length.value):
views.append(result[i].decode("utf-8"))
core.BNFreeStringList(result, length)
- return views \ No newline at end of file
+ return views
diff --git a/rust/src/filemetadata.rs b/rust/src/filemetadata.rs
index 04344acb..f694655d 100644
--- a/rust/src/filemetadata.rs
+++ b/rust/src/filemetadata.rs
@@ -231,7 +231,7 @@ impl FileMetadata {
// TODO : add optional progress function
// let view = match progress_func {
// None => BNOpenExistingDatabase(self.handle, filename_ptr),
- // _ => BNOpenExistingDatabaseWithProgress(self.handle, str(filename), None, ctypes.CFUNCTYPE(None, ctypes.c_void_p, ctypes.c_ulonglong, ctypes.c_ulonglong)(lambda ctxt, cur, total: progress_func(cur, total)))
+ // _ => BNOpenExistingDatabaseWithProgress(self.handle, str(filename), None, ctypes.CFUNCTYPE(ctypes.c_bool, ctypes.c_void_p, ctypes.c_ulonglong, ctypes.c_ulonglong)(lambda ctxt, cur, total: progress_func(cur, total)))
// };
if view.is_null() {