diff options
author | David Robillard <d@drobilla.net> | 2014-01-18 01:34:45 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2014-01-18 01:34:45 +0000 |
commit | d10ea3bd9e270216bad0fa8eb3f40197332ddbce (patch) | |
tree | 1e67b3d7ac7ac54eb22a9bdc7e5ee36047834809 /src/world.c | |
parent | b981fe987511c429aca18151429e233ba80ccf94 (diff) | |
download | lilv-d10ea3bd9e270216bad0fa8eb3f40197332ddbce.tar.gz lilv-d10ea3bd9e270216bad0fa8eb3f40197332ddbce.tar.bz2 lilv-d10ea3bd9e270216bad0fa8eb3f40197332ddbce.zip |
Call lv2_lib_descriptor separately for different bundle paths
(fix loading several dynamic plugins like Ingen at once).
git-svn-id: http://svn.drobilla.net/lad/trunk/lilv@5314 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/world.c')
-rw-r--r-- | src/world.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/world.c b/src/world.c index e6fcc47..7921a71 100644 --- a/src/world.c +++ b/src/world.c @@ -44,8 +44,7 @@ lilv_world_new(void) false, lilv_resource_node_cmp, NULL, (ZixDestroyFunc)lilv_node_free); #ifdef LILV_NEW_LV2 - world->libs = zix_tree_new( - false, lilv_header_compare_by_uri, NULL, NULL); + world->libs = zix_tree_new(false, lilv_lib_compare, NULL, NULL); #endif #define NS_DCTERMS "http://purl.org/dc/terms/" @@ -292,6 +291,23 @@ lilv_header_compare_by_uri(const void* a, const void* b, void* user_data) lilv_node_as_uri(header_b->uri)); } +/** + Comparator for libraries (world->libs). + + Libraries do have a LilvHeader, but we must also compare the bundle to + handle the case where the same library is loaded with different bundles, and + consequently different contents (mainly plugins). + */ +int +lilv_lib_compare(const void* a, const void* b, void* user_data) +{ + const LilvLib* const lib_a = (const LilvLib*)a; + const LilvLib* const lib_b = (const LilvLib*)b; + int cmp = strcmp(lilv_node_as_uri(lib_a->uri), + lilv_node_as_uri(lib_b->uri)); + return cmp ? cmp : strcmp(lib_a->bundle_path, lib_b->bundle_path); +} + /** Get an element of a collection of any object with an LilvHeader by URI. */ struct LilvHeader* lilv_collection_get_by_uri(const ZixTree* const_seq, |