Fixed memory leaks in folowing functions:

* mc_opendir()
 * mc_chdir()
 * vfs_release_path()
 * check_panel_timestamp()

Signed-off-by: Slava Zanko <slavazanko@gmail.com>
This commit is contained in:
Slava Zanko 2011-06-19 14:33:04 +03:00
parent 60123b7c99
commit 5fa1070225
4 changed files with 14 additions and 1 deletions

View File

@ -272,6 +272,7 @@ vfs_release_path (const char *dir)
path_element = vfs_path_get_by_index (vpath, -1); path_element = vfs_path_get_by_index (vpath, -1);
vfs_stamp_create (path_element->class, vfs_getid (vpath)); vfs_stamp_create (path_element->class, vfs_getid (vpath));
vfs_path_free (vpath);
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */

View File

@ -451,6 +451,7 @@ mc_opendir (const char *dirname)
if (info == NULL) if (info == NULL)
{ {
errno = path_element->class->opendir ? vfs_ferrno (path_element->class) : E_NOTSUPP; errno = path_element->class->opendir ? vfs_ferrno (path_element->class) : E_NOTSUPP;
vfs_path_free (vpath);
return NULL; return NULL;
} }
@ -462,10 +463,11 @@ mc_opendir (const char *dirname)
if (path_element->dir.converter == INVALID_CONV) if (path_element->dir.converter == INVALID_CONV)
path_element->dir.converter = str_cnv_from_term; path_element->dir.converter = str_cnv_from_term;
handle = vfs_new_handle (path_element->class, path_element); handle = vfs_new_handle (path_element->class, vfs_path_element_clone (path_element));
handlep = g_new (int, 1); handlep = g_new (int, 1);
*handlep = handle; *handlep = handle;
vfs_path_free (vpath);
return (DIR *) handlep; return (DIR *) handlep;
} }
@ -726,6 +728,7 @@ mc_chdir (const char *path)
if (result == -1) if (result == -1)
{ {
errno = vfs_ferrno (path_element->class); errno = vfs_ferrno (path_element->class);
vfs_path_free (vpath);
return -1; return -1;
} }

View File

@ -713,6 +713,8 @@ vfs_path_element_clone (const vfs_path_element_t * element)
new_element->host = g_strdup (element->host); new_element->host = g_strdup (element->host);
new_element->path = g_strdup (element->path); new_element->path = g_strdup (element->path);
new_element->encoding = g_strdup (element->encoding); new_element->encoding = g_strdup (element->encoding);
if (vfs_path_element_need_cleanup_converter (element) && new_element->encoding != NULL)
new_element->dir.converter = str_crt_conv_from (new_element->encoding);
new_element->vfs_prefix = g_strdup (element->vfs_prefix); new_element->vfs_prefix = g_strdup (element->vfs_prefix);
return new_element; return new_element;

View File

@ -481,10 +481,17 @@ check_panel_timestamp (const WPanel * panel, panel_view_mode_t mode, struct vfs_
path_element = vfs_path_get_by_index (vpath, -1); path_element = vfs_path_get_by_index (vpath, -1);
if (path_element->class != vclass) if (path_element->class != vclass)
{
vfs_path_free (vpath);
return FALSE; return FALSE;
}
if (vfs_getid (vpath) != id) if (vfs_getid (vpath) != id)
{
vfs_path_free (vpath);
return FALSE; return FALSE;
}
vfs_path_free (vpath);
} }
return TRUE; return TRUE;
} }