[vlc-devel] [PATCH] sftp: Factorize common cleanup code in Open() and Close()
Petri Hintukainen
phintuka at gmail.com
Mon Mar 7 11:50:10 CET 2016
---
modules/access/sftp.c | 33 ++++++++++++++-------------------
1 file changed, 14 insertions(+), 19 deletions(-)
diff --git a/modules/access/sftp.c b/modules/access/sftp.c
index 75df74a..14a806b 100644
--- a/modules/access/sftp.c
+++ b/modules/access/sftp.c
@@ -113,6 +113,7 @@ static int Open( vlc_object_t* p_this )
vlc_url_t url;
size_t i_len;
int i_type;
+ int i_result = VLC_EGENERIC;
if( !p_access->psz_location )
return VLC_EGENERIC;
@@ -313,26 +314,17 @@ static int Open( vlc_object_t* p_this )
goto error;
}
- free( psz_remote_home );
- vlc_UrlClean( &url );
- vlc_credential_clean( &credential );
- vlc_UrlClean( &credential_url );
- return VLC_SUCCESS;
+ i_result = VLC_SUCCESS;
error:
- if( p_sys->file )
- libssh2_sftp_close_handle( p_sys->file );
- if( p_sys->ssh_session )
- libssh2_session_free( p_sys->ssh_session );
- free( p_sys->psz_base_url );
free( psz_remote_home );
vlc_UrlClean( &url );
vlc_credential_clean( &credential );
vlc_UrlClean( &credential_url );
- if( p_sys->i_socket >= 0 )
- net_Close( p_sys->i_socket );
- free( p_sys );
- return VLC_EGENERIC;
+ if( i_result != VLC_SUCCESS ) {
+ Close( p_this );
+ }
+ return i_result;
}
@@ -342,11 +334,14 @@ static void Close( vlc_object_t* p_this )
access_t* p_access = (access_t*)p_this;
access_sys_t* p_sys = p_access->p_sys;
- libssh2_sftp_close_handle( p_sys->file );
- libssh2_sftp_shutdown( p_sys->sftp_session );
-
- libssh2_session_free( p_sys->ssh_session );
- net_Close( p_sys->i_socket );
+ if( p_sys->file )
+ libssh2_sftp_close_handle( p_sys->file );
+ if( p_sys->sftp_session )
+ libssh2_sftp_shutdown( p_sys->sftp_session );
+ if( p_sys->ssh_session )
+ libssh2_session_free( p_sys->ssh_session );
+ if( p_sys->i_socket >= 0 )
+ net_Close( p_sys->i_socket );
free( p_sys->psz_base_url );
free( p_sys );
--
2.5.0
More information about the vlc-devel
mailing list