summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2015-10-29 04:43:41 +0000
committerDavid Robillard <d@drobilla.net>2015-10-29 04:43:41 +0000
commit95979c0957f0d1e30e691758526f05c33a9d4fd0 (patch)
tree28555e48189e6b464139315a2e42511444f98c57
parent32a4463b56b249d955909585f070077cdfefc353 (diff)
downloadlilv-95979c0957f0d1e30e691758526f05c33a9d4fd0.tar.gz
lilv-95979c0957f0d1e30e691758526f05c33a9d4fd0.tar.bz2
lilv-95979c0957f0d1e30e691758526f05c33a9d4fd0.zip
Fix loading dynamic manifest from bundles with spaces
git-svn-id: http://svn.drobilla.net/lad/trunk/lilv@5799 a436a847-0d15-0410-975c-d299462d15a1
-rw-r--r--NEWS3
-rw-r--r--src/world.c8
2 files changed, 8 insertions, 3 deletions
diff --git a/NEWS b/NEWS
index b781ce8..6ab9133 100644
--- a/NEWS
+++ b/NEWS
@@ -2,11 +2,12 @@ lilv (0.22.1) unstable;
* Unload contained resources when bundle is unloaded
* Support re-loading plugins
+ * Fix loading dyn-manifest from bundles with spaces in their path
* Fix Python bindings
* Fix documentation installation
* Fix outdated comment references to lilv_uri_to_path()
- -- David Robillard <d@drobilla.net> Thu, 29 Oct 2015 00:23:04 -0400
+ -- David Robillard <d@drobilla.net> Thu, 29 Oct 2015 00:41:34 -0400
lilv (0.22.0) stable;
diff --git a/src/world.c b/src/world.c
index 05533db..70a79d6 100644
--- a/src/world.c
+++ b/src/world.c
@@ -415,7 +415,7 @@ lilv_world_add_plugin(LilvWorld* world,
#ifdef LILV_DYN_MANIFEST
// Set dynamic manifest library URI, if applicable
if (dynmanifest) {
- plug->dynmanifest = (LilvDynManifest*)dynmanifest;
+ plugin->dynmanifest = (LilvDynManifest*)dynmanifest;
++((LilvDynManifest*)dynmanifest)->refs;
}
#endif
@@ -490,7 +490,7 @@ lilv_world_load_dyn_manifest(LilvWorld* world,
// Get binary path
const SordNode* binary = sord_iter_get_node(binaries, SORD_OBJECT);
const uint8_t* lib_uri = sord_node_get_string(binary);
- const char* lib_path = lilv_uri_to_path((const char*)lib_uri);
+ char* lib_path = lilv_file_uri_parse((const char*)lib_uri, 0);
if (!lib_path) {
LILV_ERROR("No dynamic manifest library path\n");
sord_iter_free(binaries);
@@ -504,6 +504,7 @@ lilv_world_load_dyn_manifest(LilvWorld* world,
LILV_ERRORF("Failed to open dynmanifest library `%s' (%s)\n",
lib_path, dlerror());
sord_iter_free(binaries);
+ lilv_free(lib_path);
continue;
}
@@ -515,6 +516,7 @@ lilv_world_load_dyn_manifest(LilvWorld* world,
LILV_ERRORF("No `lv2_dyn_manifest_open' in `%s'\n", lib_path);
sord_iter_free(binaries);
dlclose(lib);
+ lilv_free(lib_path);
continue;
}
@@ -527,6 +529,7 @@ lilv_world_load_dyn_manifest(LilvWorld* world,
lib_path);
sord_iter_free(binaries);
dlclose(lib);
+ lilv_free(lib_path);
continue;
}
@@ -573,6 +576,7 @@ lilv_world_load_dyn_manifest(LilvWorld* world,
}
sord_iter_free(p);
sord_free(plugins);
+ lilv_free(lib_path);
}
sord_iter_free(iter);
sord_free(model);