Fix memory leak; various allocated strins are not freed in assorted error paths.
Signed-off-by: Linas Vepstas <[EMAIL PROTECTED]>
---
src/guile-dbi.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
Index: guile-dbi-2.0.0/src/guile-dbi.c
===================================================================
--- guile-dbi-2.0.0.orig/src/guile-dbi.c 2008-09-16 20:52:25.000000000
-0500
+++ guile-dbi-2.0.0/src/guile-dbi.c 2008-09-16 20:53:13.000000000 -0500
@@ -55,12 +55,13 @@ SCM_DEFINE (make_g_db_handle, "dbi-open"
g_db_handle->handle = NULL;
g_db_handle->db_info = NULL;
- bcknd_str = (char*) gh_scm2newstr(bcknd,NULL);
+ bcknd_str = scm_to_locale_string (bcknd);
sodbd=(char*) malloc (sizeof(char)*(strlen("libguile-dbd-") +
strlen(bcknd_str) + 10));
if (sodbd == NULL)
{
+ free(bcknd_str);
g_db_handle->status = scm_cons(scm_from_int(errno),
scm_makfrom0str(strerror(errno)));
SCM_RETURN_NEWSMOB (g_db_handle_tag, g_db_handle);
@@ -70,6 +71,8 @@ SCM_DEFINE (make_g_db_handle, "dbi-open"
g_db_handle->handle = dlopen(sodbd,RTLD_NOW);
if ( g_db_handle->handle == NULL)
{
+ free(bcknd_str);
+ free(sodbd);
g_db_handle->status = scm_cons(scm_from_int(1),
scm_makfrom0str(dlerror()));
SCM_RETURN_NEWSMOB (g_db_handle_tag, g_db_handle);
@@ -78,6 +81,8 @@ SCM_DEFINE (make_g_db_handle, "dbi-open"
__gdbi_dbd_wrap(g_db_handle,(char*) __FUNCTION__,(void**) &connect);
if (scm_equal_p (SCM_CAR(g_db_handle->status),scm_from_int(0)) == SCM_BOOL_F)
{
+ free(bcknd_str);
+ free(sodbd);
SCM_RETURN_NEWSMOB (g_db_handle_tag, g_db_handle);
}
signature.asc
Description: Digital signature
