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 }