Fixed LADSPA plugins with invalid OSC path port names (eg containing spaces).
Fixed node destruction. git-svn-id: http://svn.drobilla.net/lad@114 a436a847-0d15-0410-975c-d299462d15a1
This commit is contained in:
parent
c5fbc39673
commit
8367cf3848
|
@ -94,6 +94,81 @@ public:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Convert a string in to a valid full path.
|
||||||
|
*
|
||||||
|
* This will make a best effort at turning @a str into a complete, valid
|
||||||
|
* Path, and will always return one.
|
||||||
|
*/
|
||||||
|
static string pathify(const std::basic_string<char>& str)
|
||||||
|
{
|
||||||
|
string path = str;
|
||||||
|
|
||||||
|
if (path.length() == 0)
|
||||||
|
return "/"; // this might not be wise
|
||||||
|
|
||||||
|
// Must start with a /
|
||||||
|
if (path.at(0) != '/')
|
||||||
|
path = string("/").append(path);
|
||||||
|
|
||||||
|
// Must not end with a slash unless "/"
|
||||||
|
if (path.length() > 1 && path.at(path.length()-1) == '/')
|
||||||
|
path = path.substr(0, path.length()-1); // chop trailing slash
|
||||||
|
|
||||||
|
assert(path.find_last_of("/") != string::npos);
|
||||||
|
|
||||||
|
// Replace any invalid characters with "." (for lack of a better idea)
|
||||||
|
for (size_t i=0; i < path.length(); ++i) {
|
||||||
|
if (path.at(i) < 32 || path.at(i) > 126
|
||||||
|
|| path.at(i) == ' '
|
||||||
|
|| path.at(i) == '#'
|
||||||
|
|| path.at(i) == '*'
|
||||||
|
|| path.at(i) == ','
|
||||||
|
|| path.at(i) == '?'
|
||||||
|
|| path.at(i) == '['
|
||||||
|
|| path.at(i) == ']'
|
||||||
|
|| path.at(i) == '{'
|
||||||
|
|| path.at(i) == '}') {
|
||||||
|
path[i] = '.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert(is_valid(path));
|
||||||
|
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Convert a string into a valid name (or "method" - tokens between slashes)
|
||||||
|
*
|
||||||
|
* This will strip all slashes and always return a valid name/method.
|
||||||
|
*/
|
||||||
|
static string nameify(const std::basic_string<char>& str)
|
||||||
|
{
|
||||||
|
string name = str;
|
||||||
|
|
||||||
|
if (name.length() == 0)
|
||||||
|
return "."; // this might not be wise
|
||||||
|
|
||||||
|
// Replace any invalid characters with "." (for lack of a better idea)
|
||||||
|
for (size_t i=0; i < name.length(); ++i) {
|
||||||
|
if (name.at(i) < 32 || name.at(i) > 126
|
||||||
|
|| name.at(i) == ' '
|
||||||
|
|| name.at(i) == '#'
|
||||||
|
|| name.at(i) == '*'
|
||||||
|
|| name.at(i) == ','
|
||||||
|
|| name.at(i) == '?'
|
||||||
|
|| name.at(i) == '['
|
||||||
|
|| name.at(i) == ']'
|
||||||
|
|| name.at(i) == '{'
|
||||||
|
|| name.at(i) == '}'
|
||||||
|
|| name.at(i) == '/') {
|
||||||
|
name[i] = '.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/** Return the name of this object (everything after the last '/').
|
/** Return the name of this object (everything after the last '/').
|
||||||
* This is the "method name" for OSC paths.
|
* This is the "method name" for OSC paths.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -75,7 +75,7 @@ LADSPANode::instantiate()
|
||||||
Port* port = NULL;
|
Port* port = NULL;
|
||||||
|
|
||||||
for (size_t j=0; j < _descriptor->PortCount; ++j) {
|
for (size_t j=0; j < _descriptor->PortCount; ++j) {
|
||||||
port_name = _descriptor->PortNames[j];
|
port_name = Path::nameify(_descriptor->PortNames[j]);
|
||||||
string::size_type slash_index;
|
string::size_type slash_index;
|
||||||
|
|
||||||
// Name mangling, to guarantee port names are unique
|
// Name mangling, to guarantee port names are unique
|
||||||
|
|
|
@ -138,8 +138,8 @@ DestroyEvent::execute(SampleCount offset)
|
||||||
void
|
void
|
||||||
DestroyEvent::post_process()
|
DestroyEvent::post_process()
|
||||||
{
|
{
|
||||||
assert(_source);
|
if (_source)
|
||||||
_source->unblock();
|
_source->unblock();
|
||||||
|
|
||||||
if (m_node == NULL) {
|
if (m_node == NULL) {
|
||||||
if (m_path == "/")
|
if (m_path == "/")
|
||||||
|
|
Loading…
Reference in New Issue