Browse Source

Enforce use of return value of a few CarlaPlugin functions

tags/v2.1-rc1
falkTX 6 years ago
parent
commit
92f7b267ec
10 changed files with 268 additions and 233 deletions
  1. +13
    -0
      source/backend/CarlaPlugin.hpp
  2. +19
    -15
      source/backend/CarlaStandalone.cpp
  3. +5
    -5
      source/backend/engine/CarlaEngine.cpp
  4. +26
    -21
      source/backend/engine/CarlaEngineBridge.cpp
  5. +150
    -160
      source/backend/engine/CarlaEngineNative.cpp
  6. +15
    -8
      source/backend/engine/CarlaEngineOscSend.cpp
  7. +25
    -24
      source/backend/plugin/CarlaPlugin.cpp
  8. +2
    -0
      source/native-plugins/resources/carla-plugin
  9. +8
    -0
      source/utils/CarlaPipeUtils.cpp
  10. +5
    -0
      source/utils/CarlaPipeUtils.hpp

+ 13
- 0
source/backend/CarlaPlugin.hpp View File

@@ -296,16 +296,19 @@ public:
/*! /*!
* Get the plugin's label (URI for LV2 plugins). * Get the plugin's label (URI for LV2 plugins).
*/ */
__attribute__((warn_unused_result))
virtual bool getLabel(char* const strBuf) const noexcept; virtual bool getLabel(char* const strBuf) const noexcept;


/*! /*!
* Get the plugin's maker. * Get the plugin's maker.
*/ */
__attribute__((warn_unused_result))
virtual bool getMaker(char* const strBuf) const noexcept; virtual bool getMaker(char* const strBuf) const noexcept;


/*! /*!
* Get the plugin's copyright/license. * Get the plugin's copyright/license.
*/ */
__attribute__((warn_unused_result))
virtual bool getCopyright(char* const strBuf) const noexcept; virtual bool getCopyright(char* const strBuf) const noexcept;


/*! /*!
@@ -313,43 +316,51 @@ public:
* *
* @see getName() and setName() * @see getName() and setName()
*/ */
__attribute__((warn_unused_result))
virtual bool getRealName(char* const strBuf) const noexcept; virtual bool getRealName(char* const strBuf) const noexcept;


/*! /*!
* Get the name of the parameter @a parameterId. * Get the name of the parameter @a parameterId.
*/ */
__attribute__((warn_unused_result))
virtual bool getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept; virtual bool getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept;


/*! /*!
* Get the symbol of the parameter @a parameterId. * Get the symbol of the parameter @a parameterId.
*/ */
__attribute__((warn_unused_result))
virtual bool getParameterSymbol(const uint32_t parameterId, char* const strBuf) const noexcept; virtual bool getParameterSymbol(const uint32_t parameterId, char* const strBuf) const noexcept;


/*! /*!
* Get the custom text of the parameter @a parameterId. * Get the custom text of the parameter @a parameterId.
* @see PARAMETER_USES_CUSTOM_TEXT * @see PARAMETER_USES_CUSTOM_TEXT
*/ */
__attribute__((warn_unused_result))
virtual bool getParameterText(const uint32_t parameterId, char* const strBuf) noexcept; virtual bool getParameterText(const uint32_t parameterId, char* const strBuf) noexcept;


/*! /*!
* Get the unit of the parameter @a parameterId. * Get the unit of the parameter @a parameterId.
*/ */
__attribute__((warn_unused_result))
virtual bool getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept; virtual bool getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept;


/*! /*!
* Get the comment (documentation) of the parameter @a parameterId. * Get the comment (documentation) of the parameter @a parameterId.
*/ */
__attribute__((warn_unused_result))
virtual bool getParameterComment(const uint32_t parameterId, char* const strBuf) const noexcept; virtual bool getParameterComment(const uint32_t parameterId, char* const strBuf) const noexcept;


/*! /*!
* Get the group name of the parameter @a parameterId. * Get the group name of the parameter @a parameterId.
* @note The group name is prefixed by a unique symbol and ":". * @note The group name is prefixed by a unique symbol and ":".
*/ */
__attribute__((warn_unused_result))
virtual bool getParameterGroupName(const uint32_t parameterId, char* const strBuf) const noexcept; virtual bool getParameterGroupName(const uint32_t parameterId, char* const strBuf) const noexcept;


/*! /*!
* Get the scalepoint @a scalePointId label of the parameter @a parameterId. * Get the scalepoint @a scalePointId label of the parameter @a parameterId.
*/ */
__attribute__((warn_unused_result))
virtual bool getParameterScalePointLabel(const uint32_t parameterId, const uint32_t scalePointId, char* const strBuf) const noexcept; virtual bool getParameterScalePointLabel(const uint32_t parameterId, const uint32_t scalePointId, char* const strBuf) const noexcept;


/*! /*!
@@ -362,6 +373,7 @@ public:
/*! /*!
* Get the name of the program at @a index. * Get the name of the program at @a index.
*/ */
__attribute__((warn_unused_result))
bool getProgramName(const uint32_t index, char* const strBuf) const noexcept; bool getProgramName(const uint32_t index, char* const strBuf) const noexcept;


/*! /*!
@@ -369,6 +381,7 @@ public:
* *
* @see getMidiProgramInfo() * @see getMidiProgramInfo()
*/ */
__attribute__((warn_unused_result))
bool getMidiProgramName(const uint32_t index, char* const strBuf) const noexcept; bool getMidiProgramName(const uint32_t index, char* const strBuf) const noexcept;


/*! /*!


+ 19
- 15
source/backend/CarlaStandalone.cpp View File

@@ -1190,6 +1190,7 @@ const CarlaPluginInfo* carla_get_plugin_info(uint pluginId)
carla_debug("carla_get_plugin_info(%i)", pluginId); carla_debug("carla_get_plugin_info(%i)", pluginId);


char strBuf[STR_MAX+1]; char strBuf[STR_MAX+1];
carla_zeroChars(strBuf, STR_MAX+1);


retInfo.type = plugin->getType(); retInfo.type = plugin->getType();
retInfo.category = plugin->getCategory(); retInfo.category = plugin->getCategory();
@@ -1202,17 +1203,12 @@ const CarlaPluginInfo* carla_get_plugin_info(uint pluginId)
retInfo.optionsAvailable = plugin->getOptionsAvailable(); retInfo.optionsAvailable = plugin->getOptionsAvailable();
retInfo.optionsEnabled = plugin->getOptionsEnabled(); retInfo.optionsEnabled = plugin->getOptionsEnabled();


carla_zeroChars(strBuf, STR_MAX+1);
plugin->getLabel(strBuf);
retInfo.label = carla_strdup_safe(strBuf);

carla_zeroChars(strBuf, STR_MAX+1);
plugin->getMaker(strBuf);
retInfo.maker = carla_strdup_safe(strBuf);

carla_zeroChars(strBuf, STR_MAX+1);
plugin->getCopyright(strBuf);
retInfo.copyright = carla_strdup_safe(strBuf);
if (plugin->getLabel(strBuf))
retInfo.label = carla_strdup_safe(strBuf);
if (plugin->getMaker(strBuf))
retInfo.maker = carla_strdup_safe(strBuf);
if (plugin->getCopyright(strBuf))
retInfo.copyright = carla_strdup_safe(strBuf);


checkStringPtr(retInfo.filename); checkStringPtr(retInfo.filename);
checkStringPtr(retInfo.name); checkStringPtr(retInfo.name);
@@ -1656,7 +1652,9 @@ const char* carla_get_parameter_text(uint pluginId, uint32_t parameterId)
static char textBuf[STR_MAX+1]; static char textBuf[STR_MAX+1];
carla_zeroChars(textBuf, STR_MAX+1); carla_zeroChars(textBuf, STR_MAX+1);


plugin->getParameterText(parameterId, textBuf);
if (! plugin->getParameterText(parameterId, textBuf))
textBuf[0] = '\0';

return textBuf; return textBuf;
} }


@@ -1673,7 +1671,9 @@ const char* carla_get_program_name(uint pluginId, uint32_t programId)
static char programName[STR_MAX+1]; static char programName[STR_MAX+1];
carla_zeroChars(programName, STR_MAX+1); carla_zeroChars(programName, STR_MAX+1);


plugin->getProgramName(programId, programName);
if (! plugin->getProgramName(programId, programName))
programName[0] = '\0';

return programName; return programName;
} }


@@ -1690,7 +1690,9 @@ const char* carla_get_midi_program_name(uint pluginId, uint32_t midiProgramId)
static char midiProgramName[STR_MAX+1]; static char midiProgramName[STR_MAX+1];
carla_zeroChars(midiProgramName, STR_MAX+1); carla_zeroChars(midiProgramName, STR_MAX+1);


plugin->getMidiProgramName(midiProgramId, midiProgramName);
if (! plugin->getMidiProgramName(midiProgramId, midiProgramName))
midiProgramName[0] = '\0';

return midiProgramName; return midiProgramName;
} }


@@ -1705,7 +1707,9 @@ const char* carla_get_real_plugin_name(uint pluginId)
static char realPluginName[STR_MAX+1]; static char realPluginName[STR_MAX+1];
carla_zeroChars(realPluginName, STR_MAX+1); carla_zeroChars(realPluginName, STR_MAX+1);


plugin->getRealName(realPluginName);
if (! plugin->getRealName(realPluginName))
realPluginName[0] = '\0';

return realPluginName; return realPluginName;
} }




+ 5
- 5
source/backend/engine/CarlaEngine.cpp View File

@@ -839,7 +839,9 @@ bool CarlaEngine::clonePlugin(const uint id)


char label[STR_MAX+1]; char label[STR_MAX+1];
carla_zeroChars(label, STR_MAX+1); carla_zeroChars(label, STR_MAX+1);
plugin->getLabel(label);

if (! plugin->getLabel(label))
label[0] = '\0';


const uint pluginCountBefore(pData->curPluginCount); const uint pluginCountBefore(pData->curPluginCount);


@@ -2094,6 +2096,7 @@ void CarlaEngine::saveProjectInternal(water::MemoryOutputStream& outStream) cons
} }


char strBuf[STR_MAX+1]; char strBuf[STR_MAX+1];
carla_zeroChars(strBuf, STR_MAX+1);


for (uint i=0; i < pData->curPluginCount; ++i) for (uint i=0; i < pData->curPluginCount; ++i)
{ {
@@ -2106,10 +2109,7 @@ void CarlaEngine::saveProjectInternal(water::MemoryOutputStream& outStream) cons


outPlugin << "\n"; outPlugin << "\n";


strBuf[0] = '\0';
plugin->getRealName(strBuf);

if (strBuf[0] != '\0')
if (plugin->getRealName(strBuf))
outPlugin << " <!-- " << xmlSafeString(strBuf, true) << " -->\n"; outPlugin << " <!-- " << xmlSafeString(strBuf, true) << " -->\n";


outPlugin << " <Plugin>\n"; outPlugin << " <Plugin>\n";


+ 26
- 21
source/backend/engine/CarlaEngineBridge.cpp View File

@@ -301,6 +301,8 @@ public:
CARLA_SAFE_ASSERT(fLastPingTime > 0); CARLA_SAFE_ASSERT(fLastPingTime > 0);


char bufStr[STR_MAX+1]; char bufStr[STR_MAX+1];
carla_zeroChars(bufStr, STR_MAX+1);

uint32_t bufStrSize; uint32_t bufStrSize;


const CarlaEngineClient* const client(plugin->getEngineClient()); const CarlaEngineClient* const client(plugin->getEngineClient());
@@ -323,26 +325,26 @@ public:
// uint/size, str[] (realName), uint/size, str[] (label), uint/size, str[] (maker), uint/size, str[] (copyright) // uint/size, str[] (realName), uint/size, str[] (label), uint/size, str[] (maker), uint/size, str[] (copyright)
fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerPluginInfo2); fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerPluginInfo2);


carla_zeroChars(bufStr, STR_MAX);
plugin->getRealName(bufStr);
if (! plugin->getRealName(bufStr))
bufStr[0] = '\0';
bufStrSize = carla_fixedValue(1U, 64U, static_cast<uint32_t>(std::strlen(bufStr))); bufStrSize = carla_fixedValue(1U, 64U, static_cast<uint32_t>(std::strlen(bufStr)));
fShmNonRtServerControl.writeUInt(bufStrSize); fShmNonRtServerControl.writeUInt(bufStrSize);
fShmNonRtServerControl.writeCustomData(bufStr, bufStrSize); fShmNonRtServerControl.writeCustomData(bufStr, bufStrSize);


carla_zeroChars(bufStr, STR_MAX);
plugin->getLabel(bufStr);
if (! plugin->getLabel(bufStr))
bufStr[0] = '\0';
bufStrSize = carla_fixedValue(1U, 256U, static_cast<uint32_t>(std::strlen(bufStr))); bufStrSize = carla_fixedValue(1U, 256U, static_cast<uint32_t>(std::strlen(bufStr)));
fShmNonRtServerControl.writeUInt(bufStrSize); fShmNonRtServerControl.writeUInt(bufStrSize);
fShmNonRtServerControl.writeCustomData(bufStr, bufStrSize); fShmNonRtServerControl.writeCustomData(bufStr, bufStrSize);


carla_zeroChars(bufStr, STR_MAX);
plugin->getMaker(bufStr);
if (! plugin->getMaker(bufStr))
bufStr[0] = '\0';
bufStrSize = carla_fixedValue(1U, 64U, static_cast<uint32_t>(std::strlen(bufStr))); bufStrSize = carla_fixedValue(1U, 64U, static_cast<uint32_t>(std::strlen(bufStr)));
fShmNonRtServerControl.writeUInt(bufStrSize); fShmNonRtServerControl.writeUInt(bufStrSize);
fShmNonRtServerControl.writeCustomData(bufStr, bufStrSize); fShmNonRtServerControl.writeCustomData(bufStr, bufStrSize);


carla_zeroChars(bufStr, STR_MAX);
plugin->getCopyright(bufStr);
if (! plugin->getCopyright(bufStr))
bufStr[0] = '\0';
bufStrSize = carla_fixedValue(1U, 64U, static_cast<uint32_t>(std::strlen(bufStr))); bufStrSize = carla_fixedValue(1U, 64U, static_cast<uint32_t>(std::strlen(bufStr)));
fShmNonRtServerControl.writeUInt(bufStrSize); fShmNonRtServerControl.writeUInt(bufStrSize);
fShmNonRtServerControl.writeCustomData(bufStr, bufStrSize); fShmNonRtServerControl.writeCustomData(bufStr, bufStrSize);
@@ -453,20 +455,20 @@ public:
fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerParameterData2); fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerParameterData2);
fShmNonRtServerControl.writeUInt(i); fShmNonRtServerControl.writeUInt(i);


carla_zeroChars(bufStr, STR_MAX);
plugin->getParameterName(i, bufStr);
if (plugin->getParameterName(i, bufStr))
bufStr[0] = '\0';
bufStrSize = carla_fixedValue(1U, 32U, static_cast<uint32_t>(std::strlen(bufStr))); bufStrSize = carla_fixedValue(1U, 32U, static_cast<uint32_t>(std::strlen(bufStr)));
fShmNonRtServerControl.writeUInt(bufStrSize); fShmNonRtServerControl.writeUInt(bufStrSize);
fShmNonRtServerControl.writeCustomData(bufStr, bufStrSize); fShmNonRtServerControl.writeCustomData(bufStr, bufStrSize);


carla_zeroChars(bufStr, STR_MAX);
plugin->getParameterSymbol(i, bufStr);
if (plugin->getParameterSymbol(i, bufStr))
bufStr[0] = '\0';
bufStrSize = carla_fixedValue(1U, 64U, static_cast<uint32_t>(std::strlen(bufStr))); bufStrSize = carla_fixedValue(1U, 64U, static_cast<uint32_t>(std::strlen(bufStr)));
fShmNonRtServerControl.writeUInt(bufStrSize); fShmNonRtServerControl.writeUInt(bufStrSize);
fShmNonRtServerControl.writeCustomData(bufStr, bufStrSize); fShmNonRtServerControl.writeCustomData(bufStr, bufStrSize);


carla_zeroChars(bufStr, STR_MAX);
plugin->getParameterUnit(i, bufStr);
if (plugin->getParameterUnit(i, bufStr))
bufStr[0] = '\0';
bufStrSize = carla_fixedValue(1U, 32U, static_cast<uint32_t>(std::strlen(bufStr))); bufStrSize = carla_fixedValue(1U, 32U, static_cast<uint32_t>(std::strlen(bufStr)));
fShmNonRtServerControl.writeUInt(bufStrSize); fShmNonRtServerControl.writeUInt(bufStrSize);
fShmNonRtServerControl.writeCustomData(bufStr, bufStrSize); fShmNonRtServerControl.writeCustomData(bufStr, bufStrSize);
@@ -517,8 +519,8 @@ public:
fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerProgramName); fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerProgramName);
fShmNonRtServerControl.writeUInt(i); fShmNonRtServerControl.writeUInt(i);


carla_zeroChars(bufStr, STR_MAX);
plugin->getProgramName(i, bufStr);
if (plugin->getProgramName(i, bufStr))
bufStr[0] = '\0';
bufStrSize = carla_fixedValue(1U, 32U, static_cast<uint32_t>(std::strlen(bufStr))); bufStrSize = carla_fixedValue(1U, 32U, static_cast<uint32_t>(std::strlen(bufStr)));
fShmNonRtServerControl.writeUInt(bufStrSize); fShmNonRtServerControl.writeUInt(bufStrSize);
fShmNonRtServerControl.writeCustomData(bufStr, bufStrSize); fShmNonRtServerControl.writeCustomData(bufStr, bufStrSize);
@@ -892,17 +894,20 @@ public:


if (index >= 0 && plugin != nullptr && plugin->isEnabled()) if (index >= 0 && plugin != nullptr && plugin->isEnabled())
{ {
char strBuf[STR_MAX];
plugin->getParameterText(static_cast<uint32_t>(index), strBuf);
const uint32_t strBufLen = static_cast<uint32_t>(std::strlen(strBuf));
char bufStr[STR_MAX+1];
carla_zeroChars(bufStr, STR_MAX+1);
if (! plugin->getParameterText(static_cast<uint32_t>(index), bufStr))
bufStr[0] = '\0';

const uint32_t bufStrLen = static_cast<uint32_t>(std::strlen(bufStr));


const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex); const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex);


fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerSetParameterText); fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerSetParameterText);


fShmNonRtServerControl.writeInt(index); fShmNonRtServerControl.writeInt(index);
fShmNonRtServerControl.writeUInt(strBufLen);
fShmNonRtServerControl.writeCustomData(strBuf, strBufLen);
fShmNonRtServerControl.writeUInt(bufStrLen);
fShmNonRtServerControl.writeCustomData(bufStr, bufStrLen);
fShmNonRtServerControl.commitWrite(); fShmNonRtServerControl.commitWrite();


fShmNonRtServerControl.waitIfDataIsReachingLimit(); fShmNonRtServerControl.waitIfDataIsReachingLimit();


+ 150
- 160
source/backend/engine/CarlaEngineNative.cpp View File

@@ -424,88 +424,97 @@ protected:


void uiServerSendPluginInfo(CarlaPlugin* const plugin) void uiServerSendPluginInfo(CarlaPlugin* const plugin)
{ {
char tmpBuf[STR_MAX];
carla_zeroChars(tmpBuf, STR_MAX);
char tmpBuf[STR_MAX+1];
carla_zeroChars(tmpBuf, STR_MAX+1);


const CarlaMutexLocker cml(fUiServer.getPipeLock()); const CarlaMutexLocker cml(fUiServer.getPipeLock());


const uint pluginId(plugin->getId()); const uint pluginId(plugin->getId());


std::sprintf(tmpBuf, "PLUGIN_INFO_%i\n", pluginId); std::sprintf(tmpBuf, "PLUGIN_INFO_%i\n", pluginId);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);


std::sprintf(tmpBuf, "%i:%i:%i:" P_INT64 ":%i:%i\n", plugin->getType(), plugin->getCategory(), plugin->getHints(), plugin->getUniqueId(), plugin->getOptionsAvailable(), plugin->getOptionsEnabled());
if (! fUiServer.writeMessage(tmpBuf))
return;
std::sprintf(tmpBuf, "%i:%i:%i:" P_INT64 ":%i:%i\n",
plugin->getType(), plugin->getCategory(),
plugin->getHints(), plugin->getUniqueId(),
plugin->getOptionsAvailable(), plugin->getOptionsEnabled());
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);


if (const char* const filename = plugin->getFilename()) if (const char* const filename = plugin->getFilename())
{ {
std::sprintf(tmpBuf, "%s", filename);
if (! fUiServer.writeAndFixMessage(tmpBuf))
return;
std::snprintf(tmpBuf, STR_MAX, "%s", filename);
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(tmpBuf),);
} }
else else
{ {
if (! fUiServer.writeMessage("\n"))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),);
} }


if (const char* const name = plugin->getName()) if (const char* const name = plugin->getName())
{ {
std::sprintf(tmpBuf, "%s", name);
if (! fUiServer.writeAndFixMessage(tmpBuf))
return;
std::snprintf(tmpBuf, STR_MAX, "%s", name);
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(tmpBuf),);
} }
else else
{ {
if (! fUiServer.writeMessage("\n"))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),);
} }


if (const char* const iconName = plugin->getIconName()) if (const char* const iconName = plugin->getIconName())
{ {
std::sprintf(tmpBuf, "%s", iconName);
if (! fUiServer.writeAndFixMessage(tmpBuf))
return;
std::snprintf(tmpBuf, STR_MAX, "%s", iconName);
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(tmpBuf),);
} }
else else
{ {
if (! fUiServer.writeMessage("\n"))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),);
} }


plugin->getRealName(tmpBuf);
if (! fUiServer.writeAndFixMessage(tmpBuf))
return;
if (plugin->getRealName(tmpBuf)) {
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(tmpBuf),);
}
else
{
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),);
}


plugin->getLabel(tmpBuf);
if (! fUiServer.writeAndFixMessage(tmpBuf))
return;
if (plugin->getLabel(tmpBuf)) {
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(tmpBuf),);
}
else
{
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),);
}


plugin->getMaker(tmpBuf);
if (! fUiServer.writeAndFixMessage(tmpBuf))
return;
if (plugin->getMaker(tmpBuf)) {
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(tmpBuf),);
}
else
{
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),);
}


plugin->getCopyright(tmpBuf);
if (! fUiServer.writeAndFixMessage(tmpBuf))
return;
if (plugin->getCopyright(tmpBuf)) {
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(tmpBuf),);
}
else
{
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),);
}


std::sprintf(tmpBuf, "AUDIO_COUNT_%i:%i:%i\n", pluginId, plugin->getAudioInCount(), plugin->getAudioOutCount()); std::sprintf(tmpBuf, "AUDIO_COUNT_%i:%i:%i\n", pluginId, plugin->getAudioInCount(), plugin->getAudioOutCount());
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);


std::sprintf(tmpBuf, "MIDI_COUNT_%i:%i:%i\n", pluginId, plugin->getMidiInCount(), plugin->getMidiOutCount()); std::sprintf(tmpBuf, "MIDI_COUNT_%i:%i:%i\n", pluginId, plugin->getMidiInCount(), plugin->getMidiOutCount());
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);


fUiServer.flushMessages(); fUiServer.flushMessages();
} }


void uiServerSendPluginParameters(CarlaPlugin* const plugin) void uiServerSendPluginParameters(CarlaPlugin* const plugin)
{ {
char tmpBuf[STR_MAX];
carla_zeroChars(tmpBuf, STR_MAX);
char tmpBuf[STR_MAX+1];
carla_zeroChars(tmpBuf, STR_MAX+1);


const CarlaMutexLocker cml(fUiServer.getPipeLock()); const CarlaMutexLocker cml(fUiServer.getPipeLock());
const CarlaScopedLocale csl; const CarlaScopedLocale csl;
@@ -515,12 +524,10 @@ protected:
for (int32_t i=PARAMETER_ACTIVE; i>PARAMETER_MAX; --i) for (int32_t i=PARAMETER_ACTIVE; i>PARAMETER_MAX; --i)
{ {
std::sprintf(tmpBuf, "PARAMVAL_%i:%i\n", pluginId, i); std::sprintf(tmpBuf, "PARAMVAL_%i:%i\n", pluginId, i);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);


std::sprintf(tmpBuf, "%f\n", static_cast<double>(plugin->getInternalParameterValue(i))); std::sprintf(tmpBuf, "%f\n", static_cast<double>(plugin->getInternalParameterValue(i)));
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);


fUiServer.flushMessages(); fUiServer.flushMessages();
} }
@@ -530,8 +537,7 @@ protected:
count = plugin->getParameterCount(); count = plugin->getParameterCount();


std::sprintf(tmpBuf, "PARAMETER_COUNT_%i:%i:%i:%i\n", pluginId, ins, outs, count); std::sprintf(tmpBuf, "PARAMETER_COUNT_%i:%i:%i:%i\n", pluginId, ins, outs, count);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);


for (uint32_t i=0; i<count; ++i) for (uint32_t i=0; i<count; ++i)
{ {
@@ -539,24 +545,37 @@ protected:
const ParameterRanges& paramRanges(plugin->getParameterRanges(i)); const ParameterRanges& paramRanges(plugin->getParameterRanges(i));


std::sprintf(tmpBuf, "PARAMETER_DATA_%i:%i\n", pluginId, i); std::sprintf(tmpBuf, "PARAMETER_DATA_%i:%i\n", pluginId, i);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);


std::sprintf(tmpBuf, "%i:%i:%i:%i\n", paramData.type, paramData.hints, paramData.midiChannel, paramData.midiCC); std::sprintf(tmpBuf, "%i:%i:%i:%i\n", paramData.type, paramData.hints, paramData.midiChannel, paramData.midiCC);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);


plugin->getParameterName(i, tmpBuf);
if (! fUiServer.writeAndFixMessage(tmpBuf))
return;
if (plugin->getParameterName(i, tmpBuf)) {
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(tmpBuf),);
} else {
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),);
}


plugin->getParameterUnit(i, tmpBuf);
if (! fUiServer.writeAndFixMessage(tmpBuf))
return;
if (plugin->getParameterUnit(i, tmpBuf)) {
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(tmpBuf),);
} else {
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),);
}

if (plugin->getParameterComment(i, tmpBuf)) {
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(tmpBuf),);
} else {
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),);
}

if (plugin->getParameterGroupName(i, tmpBuf)) {
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(tmpBuf),);
} else {
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),);
}


std::sprintf(tmpBuf, "PARAMETER_RANGES_%i:%i\n", pluginId, i); std::sprintf(tmpBuf, "PARAMETER_RANGES_%i:%i\n", pluginId, i);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);


std::sprintf(tmpBuf, "%f:%f:%f:%f:%f:%f\n", std::sprintf(tmpBuf, "%f:%f:%f:%f:%f:%f\n",
static_cast<double>(paramRanges.def), static_cast<double>(paramRanges.def),
@@ -565,16 +584,13 @@ protected:
static_cast<double>(paramRanges.step), static_cast<double>(paramRanges.step),
static_cast<double>(paramRanges.stepSmall), static_cast<double>(paramRanges.stepSmall),
static_cast<double>(paramRanges.stepLarge)); static_cast<double>(paramRanges.stepLarge));
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);


std::sprintf(tmpBuf, "PARAMVAL_%i:%i\n", pluginId, i); std::sprintf(tmpBuf, "PARAMVAL_%i:%i\n", pluginId, i);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);


std::sprintf(tmpBuf, "%f\n", static_cast<double>(plugin->getParameterValue(i))); std::sprintf(tmpBuf, "%f\n", static_cast<double>(plugin->getParameterValue(i)));
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);
} }


fUiServer.flushMessages(); fUiServer.flushMessages();
@@ -582,8 +598,8 @@ protected:


void uiServerSendPluginPrograms(CarlaPlugin* const plugin) void uiServerSendPluginPrograms(CarlaPlugin* const plugin)
{ {
char tmpBuf[STR_MAX];
carla_zeroChars(tmpBuf, STR_MAX);
char tmpBuf[STR_MAX+1];
carla_zeroChars(tmpBuf, STR_MAX+1);


const CarlaMutexLocker cml(fUiServer.getPipeLock()); const CarlaMutexLocker cml(fUiServer.getPipeLock());


@@ -591,42 +607,38 @@ protected:


uint32_t count = plugin->getProgramCount(); uint32_t count = plugin->getProgramCount();
std::sprintf(tmpBuf, "PROGRAM_COUNT_%i:%i:%i\n", pluginId, count, plugin->getCurrentProgram()); std::sprintf(tmpBuf, "PROGRAM_COUNT_%i:%i:%i\n", pluginId, count, plugin->getCurrentProgram());
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);


for (uint32_t i=0; i<count; ++i) for (uint32_t i=0; i<count; ++i)
{ {
std::sprintf(tmpBuf, "PROGRAM_NAME_%i:%i\n", pluginId, i); std::sprintf(tmpBuf, "PROGRAM_NAME_%i:%i\n", pluginId, i);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);


plugin->getProgramName(i, tmpBuf);
if (! fUiServer.writeAndFixMessage(tmpBuf))
return;
if (plugin->getProgramName(i, tmpBuf)) {
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(tmpBuf),);
} else {
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),);
}
} }


fUiServer.flushMessages(); fUiServer.flushMessages();


count = plugin->getMidiProgramCount(); count = plugin->getMidiProgramCount();
std::sprintf(tmpBuf, "MIDI_PROGRAM_COUNT_%i:%i:%i\n", pluginId, count, plugin->getCurrentMidiProgram()); std::sprintf(tmpBuf, "MIDI_PROGRAM_COUNT_%i:%i:%i\n", pluginId, count, plugin->getCurrentMidiProgram());
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);


for (uint32_t i=0; i<count; ++i) for (uint32_t i=0; i<count; ++i)
{ {
std::sprintf(tmpBuf, "MIDI_PROGRAM_DATA_%i:%i\n", pluginId, i);
if (! fUiServer.writeMessage(tmpBuf))
return;
std::snprintf(tmpBuf, STR_MAX, "MIDI_PROGRAM_DATA_%i:%i\n", pluginId, i);
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);


const MidiProgramData& mpData(plugin->getMidiProgramData(i)); const MidiProgramData& mpData(plugin->getMidiProgramData(i));


std::sprintf(tmpBuf, "%i:%i\n", mpData.bank, mpData.program);
if (! fUiServer.writeMessage(tmpBuf))
return;
std::snprintf(tmpBuf, STR_MAX, "%i:%i\n", mpData.bank, mpData.program);
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);


std::sprintf(tmpBuf, "%s", mpData.name);
if (! fUiServer.writeAndFixMessage(tmpBuf))
return;
std::snprintf(tmpBuf, STR_MAX, "%s", mpData.name);
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(tmpBuf),);
} }


fUiServer.flushMessages(); fUiServer.flushMessages();
@@ -634,8 +646,8 @@ protected:


void uiServerSendPluginProperties(CarlaPlugin* const plugin) void uiServerSendPluginProperties(CarlaPlugin* const plugin)
{ {
char tmpBuf[STR_MAX];
carla_zeroChars(tmpBuf, STR_MAX);
char tmpBuf[STR_MAX+1];
carla_zeroChars(tmpBuf, STR_MAX+1);


const CarlaMutexLocker cml(fUiServer.getPipeLock()); const CarlaMutexLocker cml(fUiServer.getPipeLock());


@@ -643,8 +655,7 @@ protected:


uint32_t count = plugin->getCustomDataCount(); uint32_t count = plugin->getCustomDataCount();
std::sprintf(tmpBuf, "CUSTOM_DATA_COUNT_%i:%i\n", pluginId, count); std::sprintf(tmpBuf, "CUSTOM_DATA_COUNT_%i:%i\n", pluginId, count);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);


for (uint32_t i=0; i<count; ++i) for (uint32_t i=0; i<count; ++i)
{ {
@@ -655,8 +666,7 @@ protected:
continue; continue;


std::sprintf(tmpBuf, "CUSTOM_DATA_%i:%i\n", pluginId, i); std::sprintf(tmpBuf, "CUSTOM_DATA_%i:%i\n", pluginId, i);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);


if (! fUiServer.writeAndFixMessage(customData.type)) if (! fUiServer.writeAndFixMessage(customData.type))
return; return;
@@ -746,28 +756,31 @@ protected:
const CarlaMutexLocker cml(fUiServer.getPipeLock()); const CarlaMutexLocker cml(fUiServer.getPipeLock());


std::sprintf(tmpBuf, "ENGINE_CALLBACK_%i\n", int(action)); std::sprintf(tmpBuf, "ENGINE_CALLBACK_%i\n", int(action));
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);
std::sprintf(tmpBuf, "%u\n", pluginId); std::sprintf(tmpBuf, "%u\n", pluginId);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);
std::sprintf(tmpBuf, "%i\n", value1); std::sprintf(tmpBuf, "%i\n", value1);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);
std::sprintf(tmpBuf, "%i\n", value2); std::sprintf(tmpBuf, "%i\n", value2);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);
std::sprintf(tmpBuf, "%i\n", value3); std::sprintf(tmpBuf, "%i\n", value3);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);
{ {
const CarlaScopedLocale csl; const CarlaScopedLocale csl;
std::sprintf(tmpBuf, "%f\n", static_cast<double>(valuef)); std::sprintf(tmpBuf, "%f\n", static_cast<double>(valuef));
} }
if (! fUiServer.writeMessage(tmpBuf))
return;
if (! fUiServer.writeAndFixMessage(valueStr != nullptr ? valueStr : ""))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);

if (valueStr != nullptr) {
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(valueStr),);
} else {
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),);
}


fUiServer.flushMessages(); fUiServer.flushMessages();
} }
@@ -794,40 +807,31 @@ protected:
CARLA_SAFE_ASSERT_RETURN(fIsRunning,); CARLA_SAFE_ASSERT_RETURN(fIsRunning,);
CARLA_SAFE_ASSERT_RETURN(fUiServer.isPipeRunning(),); CARLA_SAFE_ASSERT_RETURN(fUiServer.isPipeRunning(),);


char tmpBuf[STR_MAX];
carla_zeroChars(tmpBuf, STR_MAX);
char tmpBuf[STR_MAX+1];
carla_zeroChars(tmpBuf, STR_MAX+1);


const CarlaMutexLocker cml(fUiServer.getPipeLock()); const CarlaMutexLocker cml(fUiServer.getPipeLock());


#if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE)
if (! fUiServer.writeAndFixMessage("osc-urls"))
return;
if (! fUiServer.writeAndFixMessage(pData->osc.getServerPathTCP()))
return;
if (! fUiServer.writeAndFixMessage(pData->osc.getServerPathUDP()))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage("osc-urls\n"),);
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(pData->osc.getServerPathTCP()),);
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(pData->osc.getServerPathUDP()),);
#endif #endif


if (! fUiServer.writeAndFixMessage("max-plugin-number"))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage("max-plugin-number\n"),);
std::sprintf(tmpBuf, "%i\n", pData->maxPluginNumber); std::sprintf(tmpBuf, "%i\n", pData->maxPluginNumber);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);


if (! fUiServer.writeAndFixMessage("buffer-size"))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage("buffer-size\n"),);
std::sprintf(tmpBuf, "%i\n", pData->bufferSize); std::sprintf(tmpBuf, "%i\n", pData->bufferSize);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);


if (! fUiServer.writeAndFixMessage("sample-rate"))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage("sample-rate\n"),);
{ {
const CarlaScopedLocale csl; const CarlaScopedLocale csl;
std::sprintf(tmpBuf, "%f\n", pData->sampleRate); std::sprintf(tmpBuf, "%f\n", pData->sampleRate);
} }
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);


fUiServer.flushMessages(); fUiServer.flushMessages();
} }
@@ -837,8 +841,8 @@ protected:
CARLA_SAFE_ASSERT_RETURN(fIsRunning,); CARLA_SAFE_ASSERT_RETURN(fIsRunning,);
CARLA_SAFE_ASSERT_RETURN(fUiServer.isPipeRunning(),); CARLA_SAFE_ASSERT_RETURN(fUiServer.isPipeRunning(),);


char tmpBuf[STR_MAX];
carla_zeroChars(tmpBuf, STR_MAX);
char tmpBuf[STR_MAX+1];
carla_zeroChars(tmpBuf, STR_MAX+1);


const EngineOptions& options(pData->options); const EngineOptions& options(pData->options);
const CarlaMutexLocker cml(fUiServer.getPipeLock()); const CarlaMutexLocker cml(fUiServer.getPipeLock());
@@ -847,28 +851,23 @@ protected:
const std::size_t optionsForcedStrSize(fOptionsForced ? 5 : 6); const std::size_t optionsForcedStrSize(fOptionsForced ? 5 : 6);


std::sprintf(tmpBuf, "ENGINE_OPTION_%i\n", ENGINE_OPTION_PROCESS_MODE); std::sprintf(tmpBuf, "ENGINE_OPTION_%i\n", ENGINE_OPTION_PROCESS_MODE);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);
if (! fUiServer.writeMessage(optionsForcedStr, optionsForcedStrSize)) if (! fUiServer.writeMessage(optionsForcedStr, optionsForcedStrSize))
return; return;
std::sprintf(tmpBuf, "%i\n", options.processMode); std::sprintf(tmpBuf, "%i\n", options.processMode);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);
fUiServer.flushMessages(); fUiServer.flushMessages();


std::sprintf(tmpBuf, "ENGINE_OPTION_%i\n", ENGINE_OPTION_TRANSPORT_MODE); std::sprintf(tmpBuf, "ENGINE_OPTION_%i\n", ENGINE_OPTION_TRANSPORT_MODE);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);
if (! fUiServer.writeMessage(optionsForcedStr, optionsForcedStrSize)) if (! fUiServer.writeMessage(optionsForcedStr, optionsForcedStrSize))
return; return;
std::sprintf(tmpBuf, "%i\n", options.transportMode); std::sprintf(tmpBuf, "%i\n", options.transportMode);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);
fUiServer.flushMessages(); fUiServer.flushMessages();


std::sprintf(tmpBuf, "ENGINE_OPTION_%i\n", ENGINE_OPTION_FORCE_STEREO); std::sprintf(tmpBuf, "ENGINE_OPTION_%i\n", ENGINE_OPTION_FORCE_STEREO);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);
if (! fUiServer.writeMessage(optionsForcedStr, optionsForcedStrSize)) if (! fUiServer.writeMessage(optionsForcedStr, optionsForcedStrSize))
return; return;
if (! fUiServer.writeMessage(options.forceStereo ? "true\n" : "false\n")) if (! fUiServer.writeMessage(options.forceStereo ? "true\n" : "false\n"))
@@ -876,8 +875,7 @@ protected:
fUiServer.flushMessages(); fUiServer.flushMessages();


std::sprintf(tmpBuf, "ENGINE_OPTION_%i\n", ENGINE_OPTION_PREFER_PLUGIN_BRIDGES); std::sprintf(tmpBuf, "ENGINE_OPTION_%i\n", ENGINE_OPTION_PREFER_PLUGIN_BRIDGES);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);
if (! fUiServer.writeMessage(optionsForcedStr, optionsForcedStrSize)) if (! fUiServer.writeMessage(optionsForcedStr, optionsForcedStrSize))
return; return;
if (! fUiServer.writeMessage(options.preferPluginBridges ? "true\n" : "false\n")) if (! fUiServer.writeMessage(options.preferPluginBridges ? "true\n" : "false\n"))
@@ -885,8 +883,7 @@ protected:
fUiServer.flushMessages(); fUiServer.flushMessages();


std::sprintf(tmpBuf, "ENGINE_OPTION_%i\n", ENGINE_OPTION_PREFER_UI_BRIDGES); std::sprintf(tmpBuf, "ENGINE_OPTION_%i\n", ENGINE_OPTION_PREFER_UI_BRIDGES);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);
if (! fUiServer.writeMessage(optionsForcedStr, optionsForcedStrSize)) if (! fUiServer.writeMessage(optionsForcedStr, optionsForcedStrSize))
return; return;
if (! fUiServer.writeMessage(options.preferUiBridges ? "true\n" : "false\n")) if (! fUiServer.writeMessage(options.preferUiBridges ? "true\n" : "false\n"))
@@ -894,8 +891,7 @@ protected:
fUiServer.flushMessages(); fUiServer.flushMessages();


std::sprintf(tmpBuf, "ENGINE_OPTION_%i\n", ENGINE_OPTION_UIS_ALWAYS_ON_TOP); std::sprintf(tmpBuf, "ENGINE_OPTION_%i\n", ENGINE_OPTION_UIS_ALWAYS_ON_TOP);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);
if (! fUiServer.writeMessage(optionsForcedStr, optionsForcedStrSize)) if (! fUiServer.writeMessage(optionsForcedStr, optionsForcedStrSize))
return; return;
if (! fUiServer.writeMessage(options.uisAlwaysOnTop ? "true\n" : "false\n")) if (! fUiServer.writeMessage(options.uisAlwaysOnTop ? "true\n" : "false\n"))
@@ -903,43 +899,35 @@ protected:
fUiServer.flushMessages(); fUiServer.flushMessages();


std::sprintf(tmpBuf, "ENGINE_OPTION_%i\n", ENGINE_OPTION_MAX_PARAMETERS); std::sprintf(tmpBuf, "ENGINE_OPTION_%i\n", ENGINE_OPTION_MAX_PARAMETERS);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);
if (! fUiServer.writeMessage(optionsForcedStr, optionsForcedStrSize)) if (! fUiServer.writeMessage(optionsForcedStr, optionsForcedStrSize))
return; return;
std::sprintf(tmpBuf, "%i\n", options.maxParameters); std::sprintf(tmpBuf, "%i\n", options.maxParameters);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);
fUiServer.flushMessages(); fUiServer.flushMessages();


std::sprintf(tmpBuf, "ENGINE_OPTION_%i\n", ENGINE_OPTION_UI_BRIDGES_TIMEOUT); std::sprintf(tmpBuf, "ENGINE_OPTION_%i\n", ENGINE_OPTION_UI_BRIDGES_TIMEOUT);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);
if (! fUiServer.writeMessage(optionsForcedStr, optionsForcedStrSize)) if (! fUiServer.writeMessage(optionsForcedStr, optionsForcedStrSize))
return; return;
std::sprintf(tmpBuf, "%i\n", options.uiBridgesTimeout); std::sprintf(tmpBuf, "%i\n", options.uiBridgesTimeout);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);
fUiServer.flushMessages(); fUiServer.flushMessages();


std::sprintf(tmpBuf, "ENGINE_OPTION_%i\n", ENGINE_OPTION_PATH_BINARIES); std::sprintf(tmpBuf, "ENGINE_OPTION_%i\n", ENGINE_OPTION_PATH_BINARIES);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);
if (! fUiServer.writeMessage("true\n", 5)) if (! fUiServer.writeMessage("true\n", 5))
return; return;
std::sprintf(tmpBuf, "%s\n", options.binaryDir); std::sprintf(tmpBuf, "%s\n", options.binaryDir);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);
fUiServer.flushMessages(); fUiServer.flushMessages();


std::sprintf(tmpBuf, "ENGINE_OPTION_%i\n", ENGINE_OPTION_PATH_RESOURCES); std::sprintf(tmpBuf, "ENGINE_OPTION_%i\n", ENGINE_OPTION_PATH_RESOURCES);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);
if (! fUiServer.writeMessage("true\n", 5)) if (! fUiServer.writeMessage("true\n", 5))
return; return;
std::sprintf(tmpBuf, "%s\n", options.resourceDir); std::sprintf(tmpBuf, "%s\n", options.resourceDir);
if (! fUiServer.writeMessage(tmpBuf))
return;
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);
fUiServer.flushMessages(); fUiServer.flushMessages();
} }


@@ -965,8 +953,10 @@ protected:
const ParameterData& paramData(plugin->getParameterData(index)); const ParameterData& paramData(plugin->getParameterData(index));
const ParameterRanges& paramRanges(plugin->getParameterRanges(index)); const ParameterRanges& paramRanges(plugin->getParameterRanges(index));


plugin->getParameterName(index, strBufName);
plugin->getParameterUnit(index, strBufUnit);
if (! plugin->getParameterName(index, strBufName))
carla_zeroChars(strBufName, STR_MAX+1);
if (! plugin->getParameterUnit(index, strBufUnit))
carla_zeroChars(strBufUnit, STR_MAX+1);


uint hints = 0x0; uint hints = 0x0;




+ 15
- 8
source/backend/engine/CarlaEngineOscSend.cpp View File

@@ -60,10 +60,14 @@ void CarlaEngineOsc::sendPluginInfo(const CarlaPlugin* const plugin) const noexc
carla_zeroChars(bufMaker, STR_MAX+1); carla_zeroChars(bufMaker, STR_MAX+1);
carla_zeroChars(bufCopyright, STR_MAX+1); carla_zeroChars(bufCopyright, STR_MAX+1);


plugin->getRealName(bufRealName);
plugin->getLabel(bufLabel);
plugin->getMaker(bufMaker);
plugin->getCopyright(bufCopyright);
if (! plugin->getRealName(bufRealName))
bufRealName[0] = '\0';
if (! plugin->getLabel(bufLabel))
bufLabel[0] = '\0';
if (! plugin->getMaker(bufMaker))
bufMaker[0] = '\0';
if (! plugin->getCopyright(bufCopyright))
bufCopyright[0] = '\0';


const char* name = plugin->getName(); const char* name = plugin->getName();
const char* filename = plugin->getFilename(); const char* filename = plugin->getFilename();
@@ -131,12 +135,14 @@ void CarlaEngineOsc::sendPluginParameterInfo(const CarlaPlugin* const plugin, co
carla_zeroChars(bufName, STR_MAX+1); carla_zeroChars(bufName, STR_MAX+1);
carla_zeroChars(bufUnit, STR_MAX+1); carla_zeroChars(bufUnit, STR_MAX+1);


if (! plugin->getParameterName(index, bufName))
bufName[0] = '\0';
if (! plugin->getParameterUnit(index, bufUnit))
bufUnit[0] = '\0';

const ParameterData& paramData(plugin->getParameterData(index)); const ParameterData& paramData(plugin->getParameterData(index));
const ParameterRanges& paramRanges(plugin->getParameterRanges(index)); const ParameterRanges& paramRanges(plugin->getParameterRanges(index));


plugin->getParameterName(index, bufName);
plugin->getParameterUnit(index, bufUnit);

char targetPath[std::strlen(fControlDataTCP.path)+20]; char targetPath[std::strlen(fControlDataTCP.path)+20];
std::strcpy(targetPath, fControlDataTCP.path); std::strcpy(targetPath, fControlDataTCP.path);
std::strcat(targetPath, "/param"); std::strcat(targetPath, "/param");
@@ -197,7 +203,8 @@ void CarlaEngineOsc::sendPluginProgram(const CarlaPlugin* const plugin, const ui


char strBuf[STR_MAX+1]; char strBuf[STR_MAX+1];
carla_zeroChars(strBuf, STR_MAX+1); carla_zeroChars(strBuf, STR_MAX+1);
plugin->getProgramName(index, strBuf);
if (! plugin->getProgramName(index, strBuf))
strBuf[0] = '\0';


char targetPath[std::strlen(fControlDataTCP.path)+6]; char targetPath[std::strlen(fControlDataTCP.path)+6];
std::strcpy(targetPath, fControlDataTCP.path); std::strcpy(targetPath, fControlDataTCP.path);


+ 25
- 24
source/backend/plugin/CarlaPlugin.cpp View File

@@ -476,7 +476,8 @@ void CarlaPlugin::randomizeParameters() noexcept
if ((paramData.hints & PARAMETER_IS_ENABLED) == 0) if ((paramData.hints & PARAMETER_IS_ENABLED) == 0)
continue; continue;


getParameterName(i, strBuf);
if (! getParameterName(i, strBuf))
strBuf[0] = '\0';


if (std::strstr(strBuf, "olume") != nullptr) if (std::strstr(strBuf, "olume") != nullptr)
continue; continue;
@@ -513,11 +514,13 @@ const CarlaStateSave& CarlaPlugin::getStateSave(const bool callPrepareForSave)
const PluginType pluginType(getType()); const PluginType pluginType(getType());


char strBuf[STR_MAX+1]; char strBuf[STR_MAX+1];
carla_zeroChars(strBuf, STR_MAX+1);


// --------------------------------------------------------------- // ---------------------------------------------------------------
// Basic info // Basic info


getLabel(strBuf);
if (! getLabel(strBuf))
strBuf[0] = '\0';


pData->stateSave.type = carla_strdup(getPluginTypeAsString(pluginType)); pData->stateSave.type = carla_strdup(getPluginTypeAsString(pluginType));
pData->stateSave.name = carla_strdup(pData->name); pData->stateSave.name = carla_strdup(pData->name);
@@ -608,10 +611,12 @@ const CarlaStateSave& CarlaPlugin::getStateSave(const bool callPrepareForSave)
stateParameter->midiChannel = paramData.midiChannel; stateParameter->midiChannel = paramData.midiChannel;
#endif #endif


getParameterName(i, strBuf);
if (! getParameterName(i, strBuf))
strBuf[0] = '\0';
stateParameter->name = carla_strdup(strBuf); stateParameter->name = carla_strdup(strBuf);


getParameterSymbol(i, strBuf);
if (! getParameterSymbol(i, strBuf))
strBuf[0] = '\0';
stateParameter->symbol = carla_strdup(strBuf);; stateParameter->symbol = carla_strdup(strBuf);;


if (! dummy) if (! dummy)
@@ -650,11 +655,12 @@ const CarlaStateSave& CarlaPlugin::getStateSave(const bool callPrepareForSave)


void CarlaPlugin::loadStateSave(const CarlaStateSave& stateSave) void CarlaPlugin::loadStateSave(const CarlaStateSave& stateSave)
{ {
char strBuf[STR_MAX+1];
const bool usesMultiProgs(pData->hints & PLUGIN_USES_MULTI_PROGS); const bool usesMultiProgs(pData->hints & PLUGIN_USES_MULTI_PROGS);

const PluginType pluginType(getType()); const PluginType pluginType(getType());


char strBuf[STR_MAX+1];
carla_zeroChars(strBuf, STR_MAX+1);

// --------------------------------------------------------------- // ---------------------------------------------------------------
// Part 1 - PRE-set custom data (only those which reload programs) // Part 1 - PRE-set custom data (only those which reload programs)


@@ -695,10 +701,7 @@ void CarlaPlugin::loadStateSave(const CarlaStateSave& stateSave)
{ {
for (uint32_t i=0; i < pData->prog.count; ++i) for (uint32_t i=0; i < pData->prog.count; ++i)
{ {
strBuf[0] = '\0';
getProgramName(i, strBuf);

if (strBuf[0] != '\0' && std::strcmp(stateSave.currentProgramName, strBuf) == 0)
if (getProgramName(i, strBuf) && std::strcmp(stateSave.currentProgramName, strBuf) == 0)
{ {
programId = static_cast<int32_t>(i); programId = static_cast<int32_t>(i);
break; break;
@@ -726,10 +729,7 @@ void CarlaPlugin::loadStateSave(const CarlaStateSave& stateSave)
{ {
for (uint32_t i=0; i < pData->param.count; ++i) for (uint32_t i=0; i < pData->param.count; ++i)
{ {
strBuf[0] = '\0';
getParameterSymbol(i, strBuf);

if (strBuf[0] != '\0')
if (getParameterSymbol(i, strBuf))
{ {
ParamSymbol* const paramSymbol(new ParamSymbol(i, strBuf)); ParamSymbol* const paramSymbol(new ParamSymbol(i, strBuf));
paramSymbols.append(paramSymbol); paramSymbols.append(paramSymbol);
@@ -1167,7 +1167,8 @@ bool CarlaPlugin::exportAsLV2(const char* const lv2path)


char strBufName[STR_MAX+1]; char strBufName[STR_MAX+1];
char strBufSymbol[STR_MAX+1]; char strBufSymbol[STR_MAX+1];
strBufName[STR_MAX] = strBufSymbol[STR_MAX] = '\0';
carla_zeroChars(strBufName, STR_MAX+1);
carla_zeroChars(strBufSymbol, STR_MAX+1);


for (uint32_t i=0; i<pData->param.count; ++i) for (uint32_t i=0; i<pData->param.count; ++i)
{ {
@@ -1191,9 +1192,10 @@ bool CarlaPlugin::exportAsLV2(const char* const lv2path)


// TODO logarithmic, enabled (not on gui), automable, samplerate, scalepoints // TODO logarithmic, enabled (not on gui), automable, samplerate, scalepoints


strBufName[0] = strBufSymbol[0] = '\0';
getParameterName(i, strBufName);
getParameterSymbol(i, strBufSymbol);
if (! getParameterName(i, strBufName))
strBufName[0] = '\0';
if (! getParameterSymbol(i, strBufSymbol))
strBufSymbol[0] = '\0';


if (strBufSymbol[0] == '\0') if (strBufSymbol[0] == '\0')
{ {
@@ -1211,10 +1213,7 @@ bool CarlaPlugin::exportAsLV2(const char* const lv2path)
} }


if (uniqueSymbolNames.contains(strBufSymbol)) if (uniqueSymbolNames.contains(strBufSymbol))
{
std::snprintf(strBufSymbol, STR_MAX, "clv2_param_%d", i+1); std::snprintf(strBufSymbol, STR_MAX, "clv2_param_%d", i+1);
strBufSymbol[STR_MAX] = '\0';
}


mainStream << " lv2:index " << portIndexNum << " ;\n"; mainStream << " lv2:index " << portIndexNum << " ;\n";
mainStream << " lv2:symbol \"" << strBufSymbol << "\" ;\n"; mainStream << " lv2:symbol \"" << strBufSymbol << "\" ;\n";
@@ -1228,9 +1227,11 @@ bool CarlaPlugin::exportAsLV2(const char* const lv2path)
mainStream << " ] ;\n"; mainStream << " ] ;\n";
} }


char strBuf[STR_MAX];
getMaker(strBuf);
strBuf[STR_MAX-1] = '\0';
char strBuf[STR_MAX+1];
carla_zeroChars(strBuf, STR_MAX+1);

if (! getMaker(strBuf))
strBuf[0] = '\0';


mainStream << " rdfs:comment \"Plugin generated using Carla LV2 export.\" ;\n"; mainStream << " rdfs:comment \"Plugin generated using Carla LV2 export.\" ;\n";
mainStream << " doap:name \"\"\"" << getName() << "\"\"\" ;\n"; mainStream << " doap:name \"\"\"" << getName() << "\"\"\" ;\n";


+ 2
- 0
source/native-plugins/resources/carla-plugin View File

@@ -286,6 +286,8 @@ class CarlaMiniW(ExternalUI, HostWindow):
'name': paramName, 'name': paramName,
'symbol': "", 'symbol': "",
'unit': paramUnit, 'unit': paramUnit,
'comment': paramUnit,
'groupName': paramUnit,
'scalePointCount': 0, 'scalePointCount': 0,
} }
self.host._set_parameterInfo(pluginId, paramId, paramInfo) self.host._set_parameterInfo(pluginId, paramId, paramInfo)


+ 8
- 0
source/utils/CarlaPipeUtils.cpp View File

@@ -925,6 +925,14 @@ bool CarlaPipeCommon::writeAndFixMessage(const char* const msg) const noexcept
return _writeMsgBuffer(fixedMsg, size+1); return _writeMsgBuffer(fixedMsg, size+1);
} }


bool CarlaPipeCommon::writeEmptyMessage() const noexcept
{
if (pData->pipeClosed)
return false;

return _writeMsgBuffer("\n", 1);
}

bool CarlaPipeCommon::flushMessages() const noexcept bool CarlaPipeCommon::flushMessages() const noexcept
{ {
CARLA_SAFE_ASSERT_RETURN(pData->pipeSend != INVALID_PIPE_VALUE, false); CARLA_SAFE_ASSERT_RETURN(pData->pipeSend != INVALID_PIPE_VALUE, false);


+ 5
- 0
source/utils/CarlaPipeUtils.hpp View File

@@ -164,6 +164,11 @@ public:
*/ */
bool writeAndFixMessage(const char* const msg) const noexcept; bool writeAndFixMessage(const char* const msg) const noexcept;


/*!
* Write an empty message, which means a single '\n'.
*/
bool writeEmptyMessage() const noexcept;

/*! /*!
* Flush all messages currently in cache. * Flush all messages currently in cache.
*/ */


Loading…
Cancel
Save