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:
dave 2006-09-06 19:05:23 +00:00
parent c5fbc39673
commit 8367cf3848
3 changed files with 78 additions and 3 deletions

View File

@ -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.
*/

View File

@ -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

View File

@ -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 == "/")