diff --git a/source/backend/carla_engine.hpp b/source/backend/carla_engine.hpp index 6f5e76dd5..ea0993e64 100644 --- a/source/backend/carla_engine.hpp +++ b/source/backend/carla_engine.hpp @@ -754,12 +754,12 @@ public: * Load \a filename session. * \note Already loaded plugins are not removed; call removeAllPlugins() first if needed. */ - void loadProject(const char* const filename); + bool loadProject(const char* const filename); /*! * Save current session to \a filename. */ - void saveProject(const char* const filename); + bool saveProject(const char* const filename); // ------------------------------------------------------------------- // Information (base) diff --git a/source/backend/engine/carla_engine.cpp b/source/backend/engine/carla_engine.cpp index 080776224..639b72a53 100644 --- a/source/backend/engine/carla_engine.cpp +++ b/source/backend/engine/carla_engine.cpp @@ -953,7 +953,7 @@ void CarlaEngine::__bridgePluginRegister(const unsigned short id, CarlaPlugin* c // ----------------------------------------------------------------------- // Information (base) -void CarlaEngine::loadProject(const char* const filename) +bool CarlaEngine::loadProject(const char* const filename) { CARLA_ASSERT(filename != nullptr); @@ -963,9 +963,10 @@ void CarlaEngine::loadProject(const char* const filename) // return; //getSaveStateDictFromXML + return true; } -void CarlaEngine::saveProject(const char* const filename) +bool CarlaEngine::saveProject(const char* const filename) { CARLA_ASSERT(filename != nullptr); @@ -991,6 +992,8 @@ void CarlaEngine::saveProject(const char* const filename) out << "\n"; file.close(); + + return true; } // ----------------------------------------------------------------------- diff --git a/source/backend/engine/carla_engine_osc.cpp b/source/backend/engine/carla_engine_osc.cpp index 99846cb4c..af75e606c 100644 --- a/source/backend/engine/carla_engine_osc.cpp +++ b/source/backend/engine/carla_engine_osc.cpp @@ -66,7 +66,7 @@ void CarlaEngineOsc::init(const char* const name) { fServerPathTCP = tmpServerPathTCP; fServerPathTCP += fName; - free(tmpServerPathTCP); + std::free(tmpServerPathTCP); } lo_server_add_method(fServerTCP, nullptr, nullptr, osc_message_handler, this); @@ -80,7 +80,7 @@ void CarlaEngineOsc::init(const char* const name) { fServerPathUDP = tmpServerPathUDP; fServerPathUDP += fName; - free(tmpServerPathUDP); + std::free(tmpServerPathUDP); } lo_server_add_method(fServerUDP, nullptr, nullptr, osc_message_handler, this); @@ -367,23 +367,25 @@ int CarlaEngineOsc::handleMsgRegister(const int argc, const lo_arg* const* const return 1; } - const char* const url = (const char*)&argv[0]->s; - const char* host; - const char* port; + const char* const url = &argv[0]->s; qDebug("CarlaEngineOsc::handleMsgRegister() - OSC backend registered to %s", url); - host = lo_address_get_hostname(source); - port = lo_address_get_port(source); - fControlData.source = lo_address_new_with_proto(LO_TCP, host, port); + { + const char* host = lo_address_get_hostname(source); + const char* port = lo_address_get_port(source); + fControlData.source = lo_address_new_with_proto(LO_TCP, host, port); + } - host = lo_url_get_hostname(url); - port = lo_url_get_port(url); - fControlData.path = lo_url_get_path(url); - fControlData.target = lo_address_new_with_proto(LO_TCP, host, port); + { + char* host = lo_url_get_hostname(url); + char* port = lo_url_get_port(url); + fControlData.path = carla_strdup_free(lo_url_get_path(url)); + fControlData.target = lo_address_new_with_proto(LO_TCP, host, port); - free((void*)host); - free((void*)port); + std::free(host); + std::free(port); + } for (unsigned short i=0; i < kEngine->currentPluginCount(); i++) { diff --git a/source/backend/plugin/carla_plugin.cpp b/source/backend/plugin/carla_plugin.cpp index 040829497..5676a4c86 100644 --- a/source/backend/plugin/carla_plugin.cpp +++ b/source/backend/plugin/carla_plugin.cpp @@ -1005,25 +1005,28 @@ void CarlaPlugin::updateOscData(const lo_address& source, const char* const url) // FIXME - remove debug prints later qWarning("CarlaPlugin::updateOscData(%p, \"%s\")", source, url); - const char* host; - const char* port; - const int proto = lo_address_get_protocol(source); - kData->osc.data.free(); - host = lo_address_get_hostname(source); - port = lo_address_get_port(source); - kData->osc.data.source = lo_address_new_with_proto(proto, host, port); - qWarning("CarlaPlugin::updateOscData() - source: host \"%s\", port \"%s\"", host, port); + const int proto = lo_address_get_protocol(source); + + { + const char* host = lo_address_get_hostname(source); + const char* port = lo_address_get_port(source); + kData->osc.data.source = lo_address_new_with_proto(proto, host, port); - host = lo_url_get_hostname(url); - port = lo_url_get_port(url); - kData->osc.data.path = lo_url_get_path(url); - kData->osc.data.target = lo_address_new_with_proto(proto, host, port); - qWarning("CarlaPlugin::updateOscData() - target: host \"%s\", port \"%s\", path \"%s\"", host, port, kData->osc.data.path); + qWarning("CarlaPlugin::updateOscData() - source: host \"%s\", port \"%s\"", host, port); + } - free((void*)host); - free((void*)port); + { + char* host = lo_url_get_hostname(url); + char* port = lo_url_get_port(url); + kData->osc.data.path = carla_strdup_free(lo_url_get_path(url)); + kData->osc.data.target = lo_address_new_with_proto(proto, host, port); + qWarning("CarlaPlugin::updateOscData() - target: host \"%s\", port \"%s\", path \"%s\"", host, port, kData->osc.data.path); + + std::free(host); + std::free(port); + } #ifndef BUILD_BRIDGE if (fHints & PLUGIN_IS_BRIDGE) diff --git a/source/backend/plugin/carla_plugin_internal.hpp b/source/backend/plugin/carla_plugin_internal.hpp index 5894dfe4f..6ee1122fb 100644 --- a/source/backend/plugin/carla_plugin_internal.hpp +++ b/source/backend/plugin/carla_plugin_internal.hpp @@ -279,13 +279,16 @@ struct PluginProgramData { if (names != nullptr) { for (uint32_t i=0; i < count; i++) - std::free((void*)names[i]); + { + if (names[i] != nullptr) + delete[] names[i]; + } delete[] names; names = nullptr; } - count = 0; + count = 0; current = -1; } diff --git a/source/backend/standalone/carla_standalone.cpp b/source/backend/standalone/carla_standalone.cpp index 9dcf42d30..10041ddee 100644 --- a/source/backend/standalone/carla_standalone.cpp +++ b/source/backend/standalone/carla_standalone.cpp @@ -303,7 +303,10 @@ bool carla_load_project(const char* filename) CARLA_ASSERT(filename != nullptr); if (standalone.engine != nullptr) - standalone.engine->loadProject(filename); + return standalone.engine->loadProject(filename); + + standalone.lastError = "Engine is not started"; + return false; } bool carla_save_project(const char* filename) @@ -312,7 +315,10 @@ bool carla_save_project(const char* filename) CARLA_ASSERT(filename != nullptr); if (standalone.engine != nullptr) - standalone.engine->saveProject(filename); + return standalone.engine->saveProject(filename); + + standalone.lastError = "Engine is not started"; + return false; } // ------------------------------------------------------------------------------------------------------------------- diff --git a/source/bridges/carla_bridge_osc.cpp b/source/bridges/carla_bridge_osc.cpp index d4459a0fb..742ddfa70 100644 --- a/source/bridges/carla_bridge_osc.cpp +++ b/source/bridges/carla_bridge_osc.cpp @@ -82,24 +82,25 @@ bool CarlaBridgeOsc::init(const char* const url) if (! path) { - free(host); + std::free(host); qCritical("CarlaBridgeOsc::init(\"%s\") - failed to get url path", url); return false; } if (! port) { - free(host); - free(path); + std::free(host); + std::free(path); qCritical("CarlaBridgeOsc::init(\"%s\") - failed to get url port", url); return false; } - m_controlData.path = path; + m_controlData.path = carla_strdup(path); m_controlData.target = lo_address_new_with_proto(LO_TCP, host, port); - free(host); - free(port); + std::free(path); + std::free(host); + std::free(port); if (! m_controlData.target) { @@ -118,7 +119,7 @@ bool CarlaBridgeOsc::init(const char* const url) if (char* const serverUrl = lo_server_get_url(m_server)) { m_serverPath = strdup(QString("%1%2").arg(serverUrl).arg(m_name).toUtf8().constData()); - free(serverUrl); + std::free(serverUrl); } else m_serverPath = strdup(QString("%1carla-bridge").arg(serverUrl).toUtf8().constData()); diff --git a/source/utils/carla_utils.hpp b/source/utils/carla_utils.hpp index bd5665ec6..e41585e2c 100644 --- a/source/utils/carla_utils.hpp +++ b/source/utils/carla_utils.hpp @@ -147,6 +147,14 @@ const char* carla_strdup(const char* const strBuf) return buffer; } +static inline +const char* carla_strdup_free(const char* const strBuf) +{ + const char* const buffer = carla_strdup(strBuf); + std::free((void*)strBuf); + return buffer; +} + // ------------------------------------------------- // math functions