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;
|
||||
}
|
||||
|
||||
/** 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 '/').
|
||||
* This is the "method name" for OSC paths.
|
||||
*/
|
||||
|
|
|
@ -75,7 +75,7 @@ LADSPANode::instantiate()
|
|||
Port* port = NULL;
|
||||
|
||||
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;
|
||||
|
||||
// Name mangling, to guarantee port names are unique
|
||||
|
|
|
@ -138,8 +138,8 @@ DestroyEvent::execute(SampleCount offset)
|
|||
void
|
||||
DestroyEvent::post_process()
|
||||
{
|
||||
assert(_source);
|
||||
_source->unblock();
|
||||
if (_source)
|
||||
_source->unblock();
|
||||
|
||||
if (m_node == NULL) {
|
||||
if (m_path == "/")
|
||||
|
|
Loading…
Reference in New Issue