commit 289e66aa6f062b1282b2e877e939183a2f5653b3
parent dcbbf2410cb50f15ba6b2ea8a79475531a9edd4b
Author: cfillion <cfillion@users.noreply.github.com>
Date: Thu, 18 Aug 2022 05:24:03 -0400
fix potential crash on exit in REAPER < 6.67 due to API registration keys being invalidated
Fixes #56
Diffstat:
2 files changed, 7 insertions(+), 16 deletions(-)
diff --git a/src/api.cpp b/src/api.cpp
@@ -29,21 +29,14 @@ APIReg::APIReg(const APIFunc *func)
: m_func(func),
m_impl(KEY("API")), m_vararg(KEY("APIvararg")), m_help(KEY("APIdef"))
{
- registerFunc();
+ plugin_register(m_impl.c_str(), m_func->cImpl);
+ plugin_register(m_vararg.c_str(), m_func->reascriptImpl);
+ plugin_register(m_help.c_str(), m_func->definition);
}
APIReg::~APIReg()
{
- m_impl.insert(m_impl.begin(), '-');
- m_vararg.insert(m_vararg.begin(), '-');
- m_help.insert(m_help.begin(), '-');
-
- registerFunc();
-}
-
-void APIReg::registerFunc() const
-{
- plugin_register(m_impl.c_str(), m_func->cImpl);
- plugin_register(m_vararg.c_str(), m_func->reascriptImpl);
- plugin_register(m_help.c_str(), m_func->definition);
+ plugin_register(("-" + m_impl).c_str(), m_func->cImpl);
+ plugin_register(("-" + m_vararg).c_str(), m_func->reascriptImpl);
+ plugin_register(("-" + m_help).c_str(), m_func->definition);
}
diff --git a/src/api.hpp b/src/api.hpp
@@ -34,11 +34,9 @@ public:
~APIReg();
private:
- void registerFunc() const;
-
const APIFunc *m_func;
- // plugin_register requires these to not be temporaries
+ // REAPER < 6.67 requires these strings to remain valid after registering
std::string m_impl;
std::string m_vararg;
std::string m_help;