From 588cc25cc9c80ba8b1aafe5f65746d80f9ef54a5 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 11 Nov 2011 23:10:03 +0000 Subject: Add lilv_plugin_has_extension_data. Add tests for extension data functions. Tolerate (ignore) plugins with broken data with "gaps" in port indices. git-svn-id: http://svn.drobilla.net/lad/trunk/lilv@3611 a436a847-0d15-0410-975c-d299462d15a1 --- src/plugin.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'src') diff --git a/src/plugin.c b/src/plugin.c index 9fba6f4..88732d1 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -268,6 +268,17 @@ lilv_plugin_load_ports_if_necessary(const LilvPlugin* const_p) } } lilv_match_end(ports); + + // Check sanity + for (uint32_t i = 0; i < p->num_ports; ++i) { + if (!p->ports[i]) { + LILV_ERRORF("Plugin <%s> is missing port %d/%d\n", + lilv_node_as_uri(p->plugin_uri), i, p->num_ports); + free(p->ports); + p->ports = NULL; + p->num_ports = 0; + } + } } } @@ -644,6 +655,30 @@ lilv_plugin_get_required_features(const LilvPlugin* p) return lilv_plugin_get_value(p, p->world->lv2_requiredFeature_val); } +LILV_API +bool +lilv_plugin_has_extension_data(const LilvPlugin* p, + const LilvNode* uri) +{ + if (!lilv_node_is_uri(uri)) { + LILV_ERRORF("Extension data `%s' is not a URI\n", uri->str_val); + return false; + } + + SordIter* iter = lilv_world_query_internal( + p->world, + p->plugin_uri->val.uri_val, + p->world->lv2_extensionData_val->val.uri_val, + uri->val.uri_val); + + if (iter) { + sord_iter_free(iter); + return true; + } else { + return false; + } +} + LILV_API LilvNodes* lilv_plugin_get_extension_data(const LilvPlugin* p) -- cgit v1.2.1