DPF

DISTRHO Plugin Framework
Log | Files | Refs | Submodules | README | LICENSE

commit 2342feadc0d3e13e8aecd749f142e75709555c48
parent 33967164d989851b41964fee915f29dcdbaf1423
Author: falkTX <falktx@falktx.com>
Date:   Wed, 29 Dec 2021 14:02:22 +0000

Fix loading empty VST3 states

Signed-off-by: falkTX <falktx@falktx.com>

Diffstat:
Mdistrho/src/DistrhoPluginVST3.cpp | 16+++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/distrho/src/DistrhoPluginVST3.cpp b/distrho/src/DistrhoPluginVST3.cpp @@ -684,6 +684,7 @@ public: const bool connectedToUI = fConnectionFromCtrlToView != nullptr && fConnectedToUI; #endif String key, value; + bool hasValue = false; bool fillingKey = true; // if filling key or value char queryingType = 'i'; // can be 'n', 's' or 'p' (none, states, parameters) @@ -721,9 +722,14 @@ public: // append to temporary vars if (fillingKey) + { key += buffer + i; + } else + { value += buffer + i; + hasValue = true; + } // increase buffer offset by length of string i += std::strlen(buffer + i); @@ -742,6 +748,7 @@ public: queryingType = 's'; key.clear(); value.clear(); + hasValue = false; continue; } if (key == "__dpf_state_end__") @@ -750,6 +757,7 @@ public: queryingType = 'n'; key.clear(); value.clear(); + hasValue = false; continue; } if (key == "__dpf_parameters_begin__") @@ -759,6 +767,7 @@ public: queryingType = 'p'; key.clear(); value.clear(); + hasValue = false; continue; } if (key == "__dpf_parameters_end__") @@ -767,14 +776,15 @@ public: queryingType = 'x'; key.clear(); value.clear(); + hasValue = false; continue; } // no special key, swap between reading real key and value fillingKey = !fillingKey; - // if there is no value yet keep reading until we have one (TODO check empty values on purpose) - if (value.isEmpty()) + // if there is no value yet keep reading until we have one + if (! hasValue) continue; if (key == "__dpf_program__") @@ -847,11 +857,11 @@ public: fPlugin.setParameterValue(j, fvalue); break; } - } key.clear(); value.clear(); + hasValue = false; } } }