aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/state.c33
1 files changed, 24 insertions, 9 deletions
diff --git a/src/state.c b/src/state.c
index d28ae90..5eb50a1 100644
--- a/src/state.c
+++ b/src/state.c
@@ -287,13 +287,35 @@ on_statement(void* handle,
return SERD_SUCCESS;
}
+static PluginState*
+load_state_from_file(LilvWorld* world,
+ LV2_URID_Map* map,
+ const char* state_uri);
+
PluginState*
jalv_load_state(Jalv* jalv, const char* dir)
{
+ const size_t dir_len = strlen(dir);
+ const size_t state_uri_len = strlen("file:///state.ttl") + dir_len + 1;
+ char* state_uri = (char*)malloc(state_uri_len);
+ snprintf(state_uri, state_uri_len, "file://%s/state.ttl", dir);
+
+ PluginState* state = load_state_from_file(
+ jalv->world, &jalv->map, state_uri);
+
+ free(state_uri);
+ return state;
+}
+
+static PluginState*
+load_state_from_file(LilvWorld* world,
+ LV2_URID_Map* map,
+ const char* state_uri)
+{
RestoreData data;
memset(&data, '\0', sizeof(RestoreData));
- data.world = jalv->world;
- data.map = &jalv->map;
+ data.world = world;
+ data.map = map;
SerdReader* reader = serd_reader_new(
SERD_TURTLE,
@@ -303,20 +325,13 @@ jalv_load_state(Jalv* jalv, const char* dir)
on_statement,
NULL);
- const size_t dir_len = strlen(dir);
- const size_t state_uri_len = strlen("file:///state.ttl") + dir_len + 1;
- char* state_uri = (char*)malloc(state_uri_len);
- snprintf(state_uri, state_uri_len, "file://%s/state.ttl", dir);
-
SerdStatus st = serd_reader_read_file(reader, USTR(state_uri));
if (st) {
fprintf(stderr, "Error reading state from %s (%s)\n",
state_uri, serd_strerror(st));
- free(state_uri);
return NULL;
}
- free(state_uri);
serd_reader_free(reader);
PluginState* state = (PluginState*)malloc(sizeof(PluginState));