| @@ -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; | ||||
| /*! | /*! | ||||
| @@ -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; | ||||
| } | } | ||||
| @@ -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"; | ||||
| @@ -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(); | ||||
| @@ -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; | ||||
| @@ -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); | ||||
| @@ -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"; | ||||
| @@ -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) | ||||
| @@ -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); | ||||
| @@ -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. | ||||
| */ | */ | ||||