summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/pluginlist.c44
1 files changed, 23 insertions, 21 deletions
diff --git a/src/pluginlist.c b/src/pluginlist.c
index 8c5ba11..6818cf5 100644
--- a/src/pluginlist.c
+++ b/src/pluginlist.c
@@ -75,54 +75,56 @@ slv2_list_load_all(SLV2List list)
/* This is the parser for manifest.ttl */
void
slv2_list_load_bundle(SLV2List list,
- const char* bundle_base_uri)
+ const char* bundle_base_url)
{
- unsigned char* manifest_uri = malloc(
- (strlen((char*)bundle_base_uri) + strlen("manifest.ttl") + 2) * sizeof(unsigned char));
- memcpy(manifest_uri, bundle_base_uri, strlen((char*)bundle_base_uri)+1 * sizeof(unsigned char));
- if (bundle_base_uri[strlen(bundle_base_uri)-1] == '/')
- strcat((char*)manifest_uri, "manifest.ttl");
+ unsigned char* manifest_url = malloc(
+ (strlen((char*)bundle_base_url) + strlen("manifest.ttl") + 2) * sizeof(unsigned char));
+ memcpy(manifest_url, bundle_base_url, strlen((char*)bundle_base_url)+1 * sizeof(unsigned char));
+ if (bundle_base_url[strlen(bundle_base_url)-1] == '/')
+ strcat((char*)manifest_url, "manifest.ttl");
else
- strcat((char*)manifest_uri, "/manifest.ttl");
+ strcat((char*)manifest_url, "/manifest.ttl");
rasqal_init();
rasqal_query_results *results;
- raptor_uri *base_uri = raptor_new_uri(manifest_uri);
- rasqal_query *rq = rasqal_new_query("sparql", (unsigned char*)base_uri);
+ raptor_uri *base_url = raptor_new_uri(manifest_url);
+ rasqal_query *rq = rasqal_new_query("sparql", (unsigned char*)base_url);
char* query_string =
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> \n"
"PREFIX : <http://lv2plug.in/ontology#> \n\n"
"SELECT DISTINCT $plugin_uri $data_url $lib_url FROM <> WHERE { \n"
- "$plugin_uri :binary $lib_url ; \n"
- " rdfs:seeAlso $data_url . \n"
+ "$plugin_uri :binary $lib_url . \n"
+ "OPTIONAL { $plugin_uri rdfs:seeAlso $data_url } \n"
"} \n";
//printf("%s\n\n", query_string);
- rasqal_query_prepare(rq, (unsigned char*)query_string, base_uri);
+ rasqal_query_prepare(rq, (unsigned char*)query_string, base_url);
results = rasqal_query_execute(rq);
while (!rasqal_query_results_finished(results)) {
// Create a new plugin
struct _Plugin* new_plugin = malloc(sizeof(struct _Plugin));
- new_plugin->bundle_url = strdup(bundle_base_uri);
+ new_plugin->bundle_url = strdup(bundle_base_url);
rasqal_literal* literal = NULL;
literal = rasqal_query_results_get_binding_value_by_name(results, (const unsigned char*)"plugin_uri");
- if (literal)
- new_plugin->plugin_uri = strdup((const char*)rasqal_literal_as_string(literal));
+ assert(literal);
+ new_plugin->plugin_uri = strdup((const char*)rasqal_literal_as_string(literal));
+
+ literal = rasqal_query_results_get_binding_value_by_name(results, (const unsigned char*)"lib_url");
+ assert(literal);
+ new_plugin->lib_url = strdup((const char*)rasqal_literal_as_string(literal));
literal = rasqal_query_results_get_binding_value_by_name(results, (const unsigned char*)"data_url");
if (literal)
new_plugin->data_url = strdup((const char*)rasqal_literal_as_string(literal));
-
- literal = rasqal_query_results_get_binding_value_by_name(results, (const unsigned char*)"lib_url");
- if (literal)
- new_plugin->lib_url = strdup((const char*)rasqal_literal_as_string(literal));
+ else
+ new_plugin->data_url = strdup((const char*)manifest_url);
/* Add the plugin if it's valid */
if (new_plugin->lib_url && new_plugin->data_url && new_plugin->plugin_uri
@@ -142,11 +144,11 @@ slv2_list_load_bundle(SLV2List list,
if (results) {
rasqal_free_query_results(results);
//rasqal_free_query(rq); // FIXME: crashes? leak?
- raptor_free_uri(base_uri); // FIXME: leak?
+ raptor_free_uri(base_url);
}
rasqal_finish();
- free(manifest_uri);
+ free(manifest_url);
}