summaryrefslogtreecommitdiffstats
path: root/src
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 /src
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).
Diffstat (limited to 'src')
-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);