Skip to content

Commit 023ec07

Browse files
committed
Revert "Refactor Plugin Load/Management to support upcoming changes"
This reverts commit 72fcf44.
1 parent 0c55bf1 commit 023ec07

File tree

10 files changed

+203
-102
lines changed

10 files changed

+203
-102
lines changed

binaryninjaapi.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,24 @@ bool BinaryNinja::InitPlugins(bool allowUserPlugins)
4949
}
5050

5151

52+
void BinaryNinja::InitCorePlugins()
53+
{
54+
BNInitCorePlugins();
55+
}
56+
57+
58+
void BinaryNinja::InitUserPlugins()
59+
{
60+
BNInitUserPlugins();
61+
}
62+
63+
64+
void BinaryNinja::InitRepoPlugins()
65+
{
66+
BNInitRepoPlugins();
67+
}
68+
69+
5270
string BinaryNinja::GetBundledPluginDirectory()
5371
{
5472
char* path = BNGetBundledPluginDirectory();

binaryninjaapi.h

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18444,10 +18444,10 @@ namespace BinaryNinja {
1844418444
/*!
1844518445
\ingroup pluginmanager
1844618446
*/
18447-
class RepoPlugin : public CoreRefCountObject<BNPlugin, BNNewPluginReference, BNFreePlugin>
18447+
class RepoPlugin : public CoreRefCountObject<BNRepoPlugin, BNNewPluginReference, BNFreePlugin>
1844818448
{
1844918449
public:
18450-
RepoPlugin(BNPlugin* plugin);
18450+
RepoPlugin(BNRepoPlugin* plugin);
1845118451
PluginStatus GetPluginStatus() const;
1845218452
std::vector<std::string> GetApis() const;
1845318453
std::vector<std::string> GetInstallPlatforms() const;
@@ -18512,13 +18512,17 @@ namespace BinaryNinja {
1851218512
/*!
1851318513
\ingroup pluginmanager
1851418514
*/
18515-
class RepositoryManager
18515+
class RepositoryManager :
18516+
public CoreRefCountObject<BNRepositoryManager, BNNewRepositoryManagerReference, BNFreeRepositoryManager>
1851618517
{
1851718518
public:
18518-
static bool CheckForUpdates();
18519-
static std::vector<Ref<Repository>> GetRepositories();
18520-
static Ref<Repository> GetRepositoryByPath(const std::string& repoName);
18521-
static bool AddRepository(const std::string& url, // URL to raw plugins.json file
18519+
RepositoryManager(const std::string& enabledPluginsPath);
18520+
RepositoryManager(BNRepositoryManager* repoManager);
18521+
RepositoryManager();
18522+
bool CheckForUpdates();
18523+
std::vector<Ref<Repository>> GetRepositories();
18524+
Ref<Repository> GetRepositoryByPath(const std::string& repoName);
18525+
bool AddRepository(const std::string& url, // URL to raw plugins.json file
1852218526
const std::string& repoPath); // Relative path within the repositories directory
1852318527
Ref<Repository> GetDefaultRepository();
1852418528
};

binaryninjacore.h

Lines changed: 60 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,6 @@ extern "C"
192192
} PluginLoadStatus;
193193

194194
typedef bool (*BNCorePluginInitFunction)(void);
195-
typedef bool (*BNScriptPluginInitFunction)(const char*, const char*);
196195
typedef void (*BNCorePluginDependencyFunction)(void);
197196
typedef uint32_t (*BNCorePluginABIVersionFunction)(void);
198197

@@ -257,7 +256,8 @@ extern "C"
257256
typedef struct BNMainThreadAction BNMainThreadAction;
258257
typedef struct BNBackgroundTask BNBackgroundTask;
259258
typedef struct BNRepository BNRepository;
260-
typedef struct BNPlugin BNPlugin;
259+
typedef struct BNRepoPlugin BNRepoPlugin;
260+
typedef struct BNRepositoryManager BNRepositoryManager;
261261
typedef struct BNComponent BNComponent;
262262
typedef struct BNSettings BNSettings;
263263
typedef struct BNMetadata BNMetadata;
@@ -3944,8 +3944,11 @@ extern "C"
39443944

39453945
// Plugin initialization
39463946
BINARYNINJACOREAPI bool BNInitPlugins(bool allowUserPlugins);
3947+
BINARYNINJACOREAPI bool BNInitCorePlugins(void); // Deprecated, use BNInitPlugins
39473948
BINARYNINJACOREAPI void BNDisablePlugins(void);
39483949
BINARYNINJACOREAPI bool BNIsPluginsEnabled(void);
3950+
BINARYNINJACOREAPI void BNInitUserPlugins(void); // Deprecated, use BNInitPlugins
3951+
BINARYNINJACOREAPI void BNInitRepoPlugins(void);
39493952

39503953
BINARYNINJACOREAPI char* BNGetInstallDirectory(void);
39513954
BINARYNINJACOREAPI char* BNGetBundledPluginDirectory(void);
@@ -7681,70 +7684,75 @@ extern "C"
76817684
BNType** outType, BNQualifiedName* outVarName, BNBinaryView* view, bool simplify);
76827685

76837686
// Plugin repository APIs
7684-
BINARYNINJACOREAPI char** BNPluginGetApis(BNPlugin* p, size_t* count);
7685-
BINARYNINJACOREAPI const char* BNPluginGetAuthor(BNPlugin* p);
7686-
BINARYNINJACOREAPI const char* BNPluginGetDescription(BNPlugin* p);
7687-
BINARYNINJACOREAPI const char* BNPluginGetLicenseText(BNPlugin* p);
7688-
BINARYNINJACOREAPI const char* BNPluginGetLongdescription(BNPlugin* p);
7689-
BINARYNINJACOREAPI BNVersionInfo BNPluginGetMinimumVersionInfo(BNPlugin* p);
7690-
BINARYNINJACOREAPI BNVersionInfo BNPluginGetMaximumVersionInfo(BNPlugin* p);
7687+
BINARYNINJACOREAPI char** BNPluginGetApis(BNRepoPlugin* p, size_t* count);
7688+
BINARYNINJACOREAPI const char* BNPluginGetAuthor(BNRepoPlugin* p);
7689+
BINARYNINJACOREAPI const char* BNPluginGetDescription(BNRepoPlugin* p);
7690+
BINARYNINJACOREAPI const char* BNPluginGetLicenseText(BNRepoPlugin* p);
7691+
BINARYNINJACOREAPI const char* BNPluginGetLongdescription(BNRepoPlugin* p);
7692+
BINARYNINJACOREAPI BNVersionInfo BNPluginGetMinimumVersionInfo(BNRepoPlugin* p);
7693+
BINARYNINJACOREAPI BNVersionInfo BNPluginGetMaximumVersionInfo(BNRepoPlugin* p);
76917694
BINARYNINJACOREAPI BNVersionInfo BNParseVersionString(const char* v);
76927695
BINARYNINJACOREAPI bool BNVersionLessThan(const BNVersionInfo smaller, const BNVersionInfo larger);
7693-
BINARYNINJACOREAPI const char* BNPluginGetName(BNPlugin* p);
7694-
BINARYNINJACOREAPI const char* BNPluginGetProjectUrl(BNPlugin* p);
7695-
BINARYNINJACOREAPI const char* BNPluginGetPackageUrl(BNPlugin* p);
7696-
BINARYNINJACOREAPI const char* BNPluginGetAuthorUrl(BNPlugin* p);
7697-
BINARYNINJACOREAPI const char* BNPluginGetVersion(BNPlugin* p);
7698-
BINARYNINJACOREAPI const char* BNPluginGetCommit(BNPlugin* p);
7699-
BINARYNINJACOREAPI const bool BNPluginGetViewOnly(BNPlugin* p);
7696+
BINARYNINJACOREAPI const char* BNPluginGetName(BNRepoPlugin* p);
7697+
BINARYNINJACOREAPI const char* BNPluginGetProjectUrl(BNRepoPlugin* p);
7698+
BINARYNINJACOREAPI const char* BNPluginGetPackageUrl(BNRepoPlugin* p);
7699+
BINARYNINJACOREAPI const char* BNPluginGetAuthorUrl(BNRepoPlugin* p);
7700+
BINARYNINJACOREAPI const char* BNPluginGetVersion(BNRepoPlugin* p);
7701+
BINARYNINJACOREAPI const char* BNPluginGetCommit(BNRepoPlugin* p);
7702+
BINARYNINJACOREAPI const bool BNPluginGetViewOnly(BNRepoPlugin* p);
77007703
BINARYNINJACOREAPI void BNFreePluginTypes(BNPluginType* r);
7701-
BINARYNINJACOREAPI BNPlugin* BNNewPluginReference(BNPlugin* r);
7702-
BINARYNINJACOREAPI void BNFreePlugin(BNPlugin* plugin);
7703-
BINARYNINJACOREAPI const char* BNPluginGetPath(BNPlugin* p);
7704-
BINARYNINJACOREAPI const char* BNPluginGetSubdir(BNPlugin* p);
7705-
BINARYNINJACOREAPI const char* BNPluginGetDependencies(BNPlugin* p);
7706-
BINARYNINJACOREAPI bool BNPluginIsInstalled(BNPlugin* p);
7707-
BINARYNINJACOREAPI bool BNPluginIsEnabled(BNPlugin* p);
7708-
BINARYNINJACOREAPI BNPluginStatus BNPluginGetPluginStatus(BNPlugin* p);
7709-
BINARYNINJACOREAPI BNPluginType* BNPluginGetPluginTypes(BNPlugin* p, size_t* count);
7710-
BINARYNINJACOREAPI bool BNPluginEnable(BNPlugin* p, bool force);
7711-
BINARYNINJACOREAPI bool BNPluginDisable(BNPlugin* p);
7712-
BINARYNINJACOREAPI bool BNPluginInstall(BNPlugin* p);
7713-
BINARYNINJACOREAPI bool BNPluginInstallDependencies(BNPlugin* p);
7714-
BINARYNINJACOREAPI bool BNPluginUninstall(BNPlugin* p);
7715-
BINARYNINJACOREAPI bool BNPluginUpdate(BNPlugin* p);
7716-
BINARYNINJACOREAPI char** BNPluginGetPlatforms(BNPlugin* p, size_t* count);
7704+
BINARYNINJACOREAPI BNRepoPlugin* BNNewPluginReference(BNRepoPlugin* r);
7705+
BINARYNINJACOREAPI void BNFreePlugin(BNRepoPlugin* plugin);
7706+
BINARYNINJACOREAPI const char* BNPluginGetPath(BNRepoPlugin* p);
7707+
BINARYNINJACOREAPI const char* BNPluginGetSubdir(BNRepoPlugin* p);
7708+
BINARYNINJACOREAPI const char* BNPluginGetDependencies(BNRepoPlugin* p);
7709+
BINARYNINJACOREAPI bool BNPluginIsInstalled(BNRepoPlugin* p);
7710+
BINARYNINJACOREAPI bool BNPluginIsEnabled(BNRepoPlugin* p);
7711+
BINARYNINJACOREAPI BNPluginStatus BNPluginGetPluginStatus(BNRepoPlugin* p);
7712+
BINARYNINJACOREAPI BNPluginType* BNPluginGetPluginTypes(BNRepoPlugin* p, size_t* count);
7713+
BINARYNINJACOREAPI bool BNPluginEnable(BNRepoPlugin* p, bool force);
7714+
BINARYNINJACOREAPI bool BNPluginDisable(BNRepoPlugin* p);
7715+
BINARYNINJACOREAPI bool BNPluginInstall(BNRepoPlugin* p);
7716+
BINARYNINJACOREAPI bool BNPluginInstallDependencies(BNRepoPlugin* p);
7717+
BINARYNINJACOREAPI bool BNPluginUninstall(BNRepoPlugin* p);
7718+
BINARYNINJACOREAPI bool BNPluginUpdate(BNRepoPlugin* p);
7719+
BINARYNINJACOREAPI char** BNPluginGetPlatforms(BNRepoPlugin* p, size_t* count);
77177720
BINARYNINJACOREAPI void BNFreePluginPlatforms(char** platforms, size_t count);
7718-
BINARYNINJACOREAPI const char* BNPluginGetRepository(BNPlugin* p);
7719-
BINARYNINJACOREAPI bool BNPluginIsBeingDeleted(BNPlugin* p);
7720-
BINARYNINJACOREAPI bool BNPluginIsBeingUpdated(BNPlugin* p);
7721-
BINARYNINJACOREAPI bool BNPluginIsRunning(BNPlugin* p);
7722-
BINARYNINJACOREAPI bool BNPluginIsUpdatePending(BNPlugin* p);
7723-
BINARYNINJACOREAPI bool BNPluginIsDisablePending(BNPlugin* p);
7724-
BINARYNINJACOREAPI bool BNPluginIsDeletePending(BNPlugin* p);
7725-
BINARYNINJACOREAPI bool BNPluginIsUpdateAvailable(BNPlugin* p);
7726-
BINARYNINJACOREAPI bool BNPluginAreDependenciesBeingInstalled(BNPlugin* p);
7727-
7728-
BINARYNINJACOREAPI char* BNPluginGetProjectData(BNPlugin* p);
7729-
BINARYNINJACOREAPI uint64_t BNPluginGetLastUpdate(BNPlugin* p);
7721+
BINARYNINJACOREAPI const char* BNPluginGetRepository(BNRepoPlugin* p);
7722+
BINARYNINJACOREAPI bool BNPluginIsBeingDeleted(BNRepoPlugin* p);
7723+
BINARYNINJACOREAPI bool BNPluginIsBeingUpdated(BNRepoPlugin* p);
7724+
BINARYNINJACOREAPI bool BNPluginIsRunning(BNRepoPlugin* p);
7725+
BINARYNINJACOREAPI bool BNPluginIsUpdatePending(BNRepoPlugin* p);
7726+
BINARYNINJACOREAPI bool BNPluginIsDisablePending(BNRepoPlugin* p);
7727+
BINARYNINJACOREAPI bool BNPluginIsDeletePending(BNRepoPlugin* p);
7728+
BINARYNINJACOREAPI bool BNPluginIsUpdateAvailable(BNRepoPlugin* p);
7729+
BINARYNINJACOREAPI bool BNPluginAreDependenciesBeingInstalled(BNRepoPlugin* p);
7730+
7731+
BINARYNINJACOREAPI char* BNPluginGetProjectData(BNRepoPlugin* p);
7732+
BINARYNINJACOREAPI uint64_t BNPluginGetLastUpdate(BNRepoPlugin* p);
77307733

77317734
BINARYNINJACOREAPI BNRepository* BNNewRepositoryReference(BNRepository* r);
77327735
BINARYNINJACOREAPI void BNFreeRepository(BNRepository* r);
77337736
BINARYNINJACOREAPI char* BNRepositoryGetUrl(BNRepository* r);
77347737
BINARYNINJACOREAPI char* BNRepositoryGetRepoPath(BNRepository* r);
7735-
BINARYNINJACOREAPI BNPlugin** BNRepositoryGetPlugins(BNRepository* r, size_t* count);
7736-
BINARYNINJACOREAPI void BNFreeRepositoryPluginList(BNPlugin** r);
7738+
BINARYNINJACOREAPI BNRepoPlugin** BNRepositoryGetPlugins(BNRepository* r, size_t* count);
7739+
BINARYNINJACOREAPI void BNFreeRepositoryPluginList(BNRepoPlugin** r);
77377740
BINARYNINJACOREAPI void BNRepositoryFreePluginDirectoryList(char** list, size_t count);
7738-
BINARYNINJACOREAPI BNPlugin* BNRepositoryGetPluginByPath(BNRepository* r, const char* pluginPath);
7741+
BINARYNINJACOREAPI BNRepoPlugin* BNRepositoryGetPluginByPath(BNRepository* r, const char* pluginPath);
77397742
BINARYNINJACOREAPI const char* BNRepositoryGetPluginsPath(BNRepository* r);
77407743

7741-
BINARYNINJACOREAPI bool BNRepositoryManagerCheckForUpdates();
7742-
BINARYNINJACOREAPI BNRepository** BNRepositoryManagerGetRepositories(size_t* count);
7744+
BINARYNINJACOREAPI BNRepositoryManager* BNCreateRepositoryManager(const char* enabledPluginsPath);
7745+
BINARYNINJACOREAPI BNRepositoryManager* BNNewRepositoryManagerReference(BNRepositoryManager* r);
7746+
BINARYNINJACOREAPI void BNFreeRepositoryManager(BNRepositoryManager* r);
7747+
BINARYNINJACOREAPI bool BNRepositoryManagerCheckForUpdates(BNRepositoryManager* r);
7748+
BINARYNINJACOREAPI BNRepository** BNRepositoryManagerGetRepositories(BNRepositoryManager* r, size_t* count);
77437749
BINARYNINJACOREAPI void BNFreeRepositoryManagerRepositoriesList(BNRepository** r);
7744-
BINARYNINJACOREAPI bool BNRepositoryManagerAddRepository(const char* url, const char* repoPath);
7745-
BINARYNINJACOREAPI BNRepository* BNRepositoryGetRepositoryByPath(const char* repoPath);
7750+
BINARYNINJACOREAPI bool BNRepositoryManagerAddRepository(
7751+
BNRepositoryManager* r, const char* url, const char* repoPath);
7752+
BINARYNINJACOREAPI BNRepository* BNRepositoryGetRepositoryByPath(BNRepositoryManager* r, const char* repoPath);
7753+
BINARYNINJACOREAPI BNRepositoryManager* BNGetRepositoryManager(void);
77467754

7747-
BINARYNINJACOREAPI BNRepository* BNRepositoryManagerGetDefaultRepository();
7755+
BINARYNINJACOREAPI BNRepository* BNRepositoryManagerGetDefaultRepository(BNRepositoryManager* r);
77487756

77497757
// Components
77507758

pluginmanager.cpp

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ using namespace std;
1212
return result; \
1313
} while (0)
1414

15-
RepoPlugin::RepoPlugin(BNPlugin* plugin)
15+
RepoPlugin::RepoPlugin(BNRepoPlugin* plugin)
1616
{
1717
m_object = plugin;
1818
}
@@ -291,7 +291,7 @@ vector<Ref<RepoPlugin>> Repository::GetPlugins() const
291291
{
292292
vector<Ref<RepoPlugin>> plugins;
293293
size_t count = 0;
294-
BNPlugin** pluginsPtr = BNRepositoryGetPlugins(m_object, &count);
294+
BNRepoPlugin** pluginsPtr = BNRepositoryGetPlugins(m_object, &count);
295295
plugins.reserve(count);
296296
for (size_t i = 0; i < count; i++)
297297
plugins.push_back(new RepoPlugin(BNNewPluginReference(pluginsPtr[i])));
@@ -310,16 +310,31 @@ string Repository::GetFullPath() const
310310
RETURN_STRING(BNRepositoryGetPluginsPath(m_object));
311311
}
312312

313+
RepositoryManager::RepositoryManager(const string& enabledPluginsPath)
314+
{
315+
m_object = BNCreateRepositoryManager(enabledPluginsPath.c_str());
316+
}
317+
318+
RepositoryManager::RepositoryManager(BNRepositoryManager* mgr)
319+
{
320+
m_object = mgr;
321+
}
322+
323+
RepositoryManager::RepositoryManager()
324+
{
325+
m_object = BNGetRepositoryManager();
326+
}
327+
313328
bool RepositoryManager::CheckForUpdates()
314329
{
315-
return BNRepositoryManagerCheckForUpdates();
330+
return BNRepositoryManagerCheckForUpdates(m_object);
316331
}
317332

318333
vector<Ref<Repository>> RepositoryManager::GetRepositories()
319334
{
320335
vector<Ref<Repository>> repos;
321336
size_t count = 0;
322-
BNRepository** reposPtr = BNRepositoryManagerGetRepositories(&count);
337+
BNRepository** reposPtr = BNRepositoryManagerGetRepositories(m_object, &count);
323338
for (size_t i = 0; i < count; i++)
324339
repos.push_back(new Repository(BNNewRepositoryReference(reposPtr[i])));
325340
BNFreeRepositoryManagerRepositoriesList(reposPtr);
@@ -329,15 +344,15 @@ vector<Ref<Repository>> RepositoryManager::GetRepositories()
329344
bool RepositoryManager::AddRepository(const std::string& url,
330345
const std::string& repoPath) // Relative path within the repositories directory
331346
{
332-
return BNRepositoryManagerAddRepository(url.c_str(), repoPath.c_str());
347+
return BNRepositoryManagerAddRepository(m_object, url.c_str(), repoPath.c_str());
333348
}
334349

335350
Ref<Repository> RepositoryManager::GetRepositoryByPath(const std::string& repoPath)
336351
{
337-
return new Repository(BNRepositoryGetRepositoryByPath(repoPath.c_str()));
352+
return new Repository(BNRepositoryGetRepositoryByPath(m_object, repoPath.c_str()));
338353
}
339354

340355
Ref<Repository> RepositoryManager::GetDefaultRepository()
341356
{
342-
return new Repository(BNRepositoryManagerGetDefaultRepository());
357+
return new Repository(BNRepositoryManagerGetDefaultRepository(m_object));
343358
}

python/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ def _init_plugins():
250250
if _enable_default_log and is_headless_init_once and min_level in LogLevel.__members__ and not core_ui_enabled(
251251
) and sys.stderr.isatty():
252252
log_to_stderr(LogLevel[min_level])
253+
core.BNInitRepoPlugins()
253254
if core.BNIsLicenseValidated():
254255
_plugin_init = True
255256
else:

python/pluginmanager.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class RepoPlugin:
3434
``RepoPlugin`` is mostly read-only, however you can install/uninstall enable/disable plugins. RepoPlugins are
3535
created by parsing the plugins.json in a plugin repository.
3636
"""
37-
def __init__(self, handle: core.BNPluginHandle):
37+
def __init__(self, handle: core.BNRepoPluginHandle):
3838
self.handle = handle
3939

4040
def __del__(self):
@@ -289,7 +289,7 @@ def __getitem__(self, plugin_path: str):
289289
for plugin in self.plugins:
290290
if plugin_path == plugin.path:
291291
return plugin
292-
raise KeyError(plugin_path)
292+
raise KeyError()
293293

294294
@property
295295
def url(self) -> str:
@@ -337,23 +337,24 @@ class RepositoryManager:
337337
"""
338338
def __init__(self):
339339
binaryninja._init_plugins()
340+
self.handle = core.BNGetRepositoryManager()
340341

341342
def __getitem__(self, repo_path: str) -> Repository:
342343
for repo in self.repositories:
343344
if repo_path == repo.path:
344345
return repo
345-
raise KeyError(repo_path)
346+
raise KeyError()
346347

347348
def check_for_updates(self) -> bool:
348349
"""Check for updates for all managed Repository objects"""
349-
return core.BNRepositoryManagerCheckForUpdates()
350+
return core.BNRepositoryManagerCheckForUpdates(self.handle)
350351

351352
@property
352353
def repositories(self) -> List[Repository]:
353354
"""List of Repository objects being managed"""
354355
result = []
355356
count = ctypes.c_ulonglong(0)
356-
repos = core.BNRepositoryManagerGetRepositories(count)
357+
repos = core.BNRepositoryManagerGetRepositories(self.handle, count)
357358
assert repos is not None, "core.BNRepositoryManagerGetRepositories returned None"
358359
try:
359360
for i in range(count.value):
@@ -375,7 +376,7 @@ def plugins(self) -> Dict[str, List[RepoPlugin]]:
375376
@property
376377
def default_repository(self) -> Repository:
377378
"""Gets the default Repository"""
378-
repo_handle = core.BNRepositoryManagerGetDefaultRepository()
379+
repo_handle = core.BNRepositoryManagerGetDefaultRepository(self.handle)
379380
assert repo_handle is not None, "core.BNRepositoryManagerGetDefaultRepository returned None"
380381
repo_handle_ref = core.BNNewRepositoryReference(repo_handle)
381382
assert repo_handle_ref is not None, "core.BNNewRepositoryReference returned None"
@@ -405,4 +406,4 @@ def add_repository(self, url: Optional[str] = None, repopath: Optional[str] = No
405406
if not isinstance(url, str) or not isinstance(repopath, str):
406407
raise ValueError("Expected url or repopath to be of type str.")
407408

408-
return core.BNRepositoryManagerAddRepository(url, repopath)
409+
return core.BNRepositoryManagerAddRepository(self.handle, url, repopath)

rust/src/headless.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use crate::enterprise::EnterpriseCheckoutStatus;
2626
use crate::main_thread::{MainThreadAction, MainThreadHandler};
2727
use crate::progress::ProgressCallback;
2828
use crate::rc::Ref;
29-
use binaryninjacore_sys::BNInitPlugins;
29+
use binaryninjacore_sys::{BNInitPlugins, BNInitRepoPlugins};
3030
use std::sync::mpsc::Sender;
3131
use std::sync::Mutex;
3232
use std::thread::JoinHandle;
@@ -221,6 +221,10 @@ pub fn init_with_opts(options: InitializationOptions) -> Result<(), Initializati
221221

222222
unsafe {
223223
BNInitPlugins(options.user_plugins);
224+
if options.repo_plugins {
225+
// We are allowed to initialize repo plugins, so do it!
226+
BNInitRepoPlugins();
227+
}
224228
}
225229

226230
if !is_license_validated() {

0 commit comments

Comments
 (0)