summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2020-01-18 15:49:06 +0100
committerDavid Robillard <d@drobilla.net>2020-01-18 15:49:06 +0100
commit807627ebaac9a763255e498c7a91bd556e424bf3 (patch)
tree3130360344e12cba3526d866f5b731681e18a97c
parent87cfe0eae77239874a03166dcfeeeea8456096a4 (diff)
downloadlilv-807627ebaac9a763255e498c7a91bd556e424bf3.tar.gz
lilv-807627ebaac9a763255e498c7a91bd556e424bf3.tar.bz2
lilv-807627ebaac9a763255e498c7a91bd556e424bf3.zip
Update manifest when deleting state from a non-empty bundle
This fixes a bug where the manifest would contain dangling references to old state if multiple states were saved to a single bundle and one is deleted. As far as I know this has not been encountered by anyone in reality, since this is an uncommon scenario (it's somewhat in question whether it should be supported at all).
-rw-r--r--src/state.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/state.c b/src/state.c
index cd47fe0..5ca2205 100644
--- a/src/state.c
+++ b/src/state.c
@@ -1305,8 +1305,13 @@ lilv_state_delete(LilvWorld* world,
state->dir, strerror(errno));
}
} else {
- // Still something in the manifest, reload bundle
+ // Still something in the manifest, update and reload bundle
+ const SerdNode* manifest_node = sord_node_to_serd_node(manifest->node);
+ SerdEnv* env = serd_env_new(manifest_node);
+
+ write_manifest(world, env, model, manifest_node);
lilv_world_load_bundle(world, bundle);
+ serd_env_free(env);
}
sord_free(model);