summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main.cpp1
-rw-r--r--subsurfacestartup.c17
-rw-r--r--subsurfacestartup.h1
3 files changed, 19 insertions, 0 deletions
diff --git a/main.cpp b/main.cpp
index fe44cca09..3989cc927 100644
--- a/main.cpp
+++ b/main.cpp
@@ -68,5 +68,6 @@ int main(int argc, char **argv)
exit_ui();
parse_xml_exit();
subsurface_console_exit();
+ free_prefs();
return 0;
}
diff --git a/subsurfacestartup.c b/subsurfacestartup.c
index 8847ab36a..618e942f3 100644
--- a/subsurfacestartup.c
+++ b/subsurfacestartup.c
@@ -219,3 +219,20 @@ void setup_system_prefs(void)
default_prefs.units = IMPERIAL_units;
}
+
+/*
+ * Free strduped prefs before exit.
+ *
+ * These are not real leaks but they plug the holes found by eg.
+ * valgrind so you can find the real leaks.
+ */
+void free_prefs(void)
+{
+ free((void*)prefs.default_filename);
+ free((void*)prefs.default_cylinder);
+ free((void*)prefs.divelist_font);
+ free(prefs.proxy_host);
+ free(prefs.proxy_user);
+ free(prefs.proxy_pass);
+ free(prefs.userid);
+}
diff --git a/subsurfacestartup.h b/subsurfacestartup.h
index 8eaaaa091..44db42efe 100644
--- a/subsurfacestartup.h
+++ b/subsurfacestartup.h
@@ -15,6 +15,7 @@ extern bool imported;
void setup_system_prefs(void);
void parse_argument(const char *arg);
+void free_prefs(void);
#ifdef __cplusplus
}