summaryrefslogtreecommitdiff
path: root/plugins/warp/api
diff options
context:
space:
mode:
authorMason Reed <35282038+emesare@users.noreply.github.com>2026-02-22 20:40:28 -0800
committerGitHub <noreply@github.com>2026-02-22 20:40:28 -0800
commit017349bdbe171c66974a5835f2f74f76138386ea (patch)
tree2e81f92e683f4b1d12c129360c788e0e52217d82 /plugins/warp/api
parente2e420c91147f2a83cf59b37c973f57e209ef67a (diff)
[WARP] Allow containers to be constructed programmatically (#7952)
Diffstat (limited to 'plugins/warp/api')
-rw-r--r--plugins/warp/api/python/warp.py7
-rw-r--r--plugins/warp/api/warp.cpp8
-rw-r--r--plugins/warp/api/warp.h3
-rw-r--r--plugins/warp/api/warpcore.h1
4 files changed, 19 insertions, 0 deletions
diff --git a/plugins/warp/api/python/warp.py b/plugins/warp/api/python/warp.py
index fc487a4d..a699ebbc 100644
--- a/plugins/warp/api/python/warp.py
+++ b/plugins/warp/api/python/warp.py
@@ -351,6 +351,13 @@ class WarpContainer(metaclass=_WarpContainerMetaclass):
return result
@staticmethod
+ def add(name: str) -> 'WarpContainer':
+ container = warpcore.BNWARPAddContainer(name)
+ if container is None:
+ raise ValueError(f"Failed to add container: {name}")
+ return WarpContainer(container)
+
+ @staticmethod
def by_name(name: str) -> Optional['WarpContainer']:
for container in WarpContainer:
if container.name == name:
diff --git a/plugins/warp/api/warp.cpp b/plugins/warp/api/warp.cpp
index f6106605..c051e3c7 100644
--- a/plugins/warp/api/warp.cpp
+++ b/plugins/warp/api/warp.cpp
@@ -246,6 +246,14 @@ std::vector<Ref<Container> > Container::All()
return result;
}
+Ref<Container> Container::Add(const std::string &name)
+{
+ BNWARPContainer *result = BNWARPAddContainer(name.c_str());
+ if (!result)
+ return nullptr;
+ return new Container(result);
+}
+
std::string Container::GetName() const
{
char *rawName = BNWARPContainerGetName(m_object);
diff --git a/plugins/warp/api/warp.h b/plugins/warp/api/warp.h
index 14be9a0d..01f4aaee 100644
--- a/plugins/warp/api/warp.h
+++ b/plugins/warp/api/warp.h
@@ -381,6 +381,9 @@ namespace Warp {
/// Retrieve all available containers.
static std::vector<Ref<Container> > All();
+ /// Add a new container with the given name.
+ static Ref<Container> Add(const std::string &name);
+
std::string GetName() const;
std::vector<Source> GetSources() const;
diff --git a/plugins/warp/api/warpcore.h b/plugins/warp/api/warpcore.h
index 633ffcbf..c52485aa 100644
--- a/plugins/warp/api/warpcore.h
+++ b/plugins/warp/api/warpcore.h
@@ -111,6 +111,7 @@ extern "C"
WARP_FFI_API BNWARPFunction* BNWARPGetFunction(BNFunction* analysisFunction);
WARP_FFI_API BNWARPFunction* BNWARPGetMatchedFunction(BNFunction* analysisFunction);
WARP_FFI_API BNWARPContainer** BNWARPGetContainers(size_t* count);
+ WARP_FFI_API BNWARPContainer* BNWARPAddContainer(const char* name);
WARP_FFI_API char* BNWARPContainerGetName(BNWARPContainer* container);