summaryrefslogtreecommitdiffstats
path: root/src/state.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2012-01-18 18:14:18 +0000
committerDavid Robillard <d@drobilla.net>2012-01-18 18:14:18 +0000
commite4d3f6140cc167580ec43de6fc3ea4562aaba63e (patch)
tree2ab0a6a529584a40ef7ed78c35aa5b1cb66fdba5 /src/state.c
parent32c2579e5a4aa32df26974f7f31063f9f499e906 (diff)
downloadlilv-e4d3f6140cc167580ec43de6fc3ea4562aaba63e.tar.gz
lilv-e4d3f6140cc167580ec43de6fc3ea4562aaba63e.tar.bz2
lilv-e4d3f6140cc167580ec43de6fc3ea4562aaba63e.zip
Fix memory leaks.
git-svn-id: http://svn.drobilla.net/lad/trunk/lilv@3966 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/state.c')
-rw-r--r--src/state.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/state.c b/src/state.c
index 5f8a13f..270b9bb 100644
--- a/src/state.c
+++ b/src/state.c
@@ -203,6 +203,7 @@ abstract_path(LV2_State_Map_Path_Handle handle,
copy = lilv_find_free_path(real_path, lilv_path_exists, NULL);
lilv_copy_file(real_path, copy);
}
+ free(real_path);
real_path = copy;
// Refer to the latest copy in plugin state
@@ -852,6 +853,9 @@ lilv_state_save(LilvWorld* world,
}
// FIXME: make parameter non-const?
+ if (state->dir) {
+ free(state->dir);
+ }
((LilvState*)state)->dir = lilv_strdup(dir);
char* const manifest = lilv_path_join(dir, "manifest.ttl");
@@ -922,10 +926,11 @@ lilv_state_save(LilvWorld* world,
i = zix_tree_iter_next(i)) {
const PathMap* pm = (const PathMap*)zix_tree_get(i);
- char* real_dir = lilv_strjoin(lilv_realpath(dir), "/", NULL);
+ char* real_dir = lilv_realpath(dir);
+ char* base = lilv_path_join(real_dir, NULL);
char* rel_path = lilv_path_join(dir, pm->rel);
char* target_path = lilv_path_is_child(pm->abs, state->file_dir)
- ? lilv_path_relative_to(pm->abs, real_dir)
+ ? lilv_path_relative_to(pm->abs, base)
: lilv_strdup(pm->abs);
if (lilv_symlink(target_path, rel_path)) {
LILV_ERRORF("Failed to link `%s' => `%s' (%s)\n",
@@ -933,6 +938,8 @@ lilv_state_save(LilvWorld* world,
}
free(target_path);
free(rel_path);
+ free(base);
+ free(real_dir);
}
#endif
@@ -1019,6 +1026,8 @@ lilv_state_save(LilvWorld* world,
free(default_dir);
free(default_filename);
+ free(manifest);
+ free(path);
return 0;
}