Commit 4ecc5ff7 authored by Gildas Bazin's avatar Gildas Bazin

* modules/access/file.c, directory.c: bug and memory leak fixes

parent 446f3e9d
......@@ -387,14 +387,30 @@ static int ReadDir( playlist_t *p_playlist, const char *psz_name,
int i_mode, playlist_item_t *p_parent,
playlist_item_t *p_parent_category )
{
struct dirent **pp_dir_content;
int i_dir_content, i;
struct dirent **pp_dir_content = 0;
int i_dir_content, i, i_return = VLC_SUCCESS;
playlist_item_t *p_node;
/* Build array with ignores */
char **ppsz_extensions = 0;
int i_extensions = 0;
char *psz_ignore = var_CreateGetString( p_playlist, "ignore-filetypes" );
char *psz_ignore;
/* Get the first directory entry */
i_dir_content = scandir( psz_name, &pp_dir_content, Filter, alphasort );
if( i_dir_content == -1 )
{
msg_Warn( p_playlist, "failed to read directory" );
return VLC_EGENERIC;
}
else if( i_dir_content <= 0 )
{
/* directory is empty */
if( pp_dir_content ) free( pp_dir_content );
return VLC_SUCCESS;
}
/* Build array with ignores */
psz_ignore = var_CreateGetString( p_playlist, "ignore-filetypes" );
if( psz_ignore && *psz_ignore )
{
char *psz_parser = psz_ignore;
......@@ -422,19 +438,6 @@ static int ReadDir( playlist_t *p_playlist, const char *psz_name,
}
}
/* get the first directory entry */
i_dir_content = scandir( psz_name, &pp_dir_content, Filter, alphasort );
if( i_dir_content == -1 )
{
msg_Warn( p_playlist, "failed to read directory" );
return VLC_EGENERIC;
}
else if( i_dir_content <= 0 )
{
/* directory is empty */
return VLC_SUCCESS;
}
/* While we still have entries in the directory */
for( i = 0; i < i_dir_content; i++ )
{
......@@ -501,17 +504,18 @@ static int ReadDir( playlist_t *p_playlist, const char *psz_name,
p_parent_category );
}
/* an strdup() just because of Mac OS X */
free( psz_newname );
/* If we had the parent in category, the it is now node.
* Else, we still don't have */
if( ReadDir( p_playlist, psz_uri , MODE_EXPAND,
p_node, p_parent_category ? p_node : NULL )
!= VLC_SUCCESS )
{
return VLC_EGENERIC;
i_return = VLC_EGENERIC;
break;
}
/* an strdup() just because of Mac OS X */
free( psz_newname );
}
}
else
......@@ -562,15 +566,14 @@ static int ReadDir( playlist_t *p_playlist, const char *psz_name,
}
for( i = 0; i < i_extensions; i++ )
{
if( ppsz_extensions[i] )
free( ppsz_extensions[i] );
}
if( ppsz_extensions[i] ) free( ppsz_extensions[i] );
if( ppsz_extensions ) free( ppsz_extensions );
if( psz_ignore ) free( psz_ignore );
for( i = 0; i < i_dir_content; i++ )
if( pp_dir_content[i] ) free( pp_dir_content[i] );
if( pp_dir_content ) free( pp_dir_content );
return VLC_SUCCESS;
return i_return;
}
......@@ -175,7 +175,7 @@ static int Open( vlc_object_t *p_this )
** explorer can open path such as file:/C:/ or file:///C:/...
** hence remove leading / if found
*/
++psz_name;
strcpy( psz_name, p_access->psz_path + 1 );
}
#endif
......@@ -244,6 +244,7 @@ static int Open( vlc_object_t *p_this )
else
{
msg_Err( p_access, "unknown file type for `%s'", psz_name );
free( psz_name );
return VLC_EGENERIC;
}
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment