reapack

Package manager for REAPER
Log | Files | Refs | Submodules | README | LICENSE

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:
Msrc/api.cpp | 19++++++-------------
Msrc/api.hpp | 4+---
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;