[vlc-commits] ftp: fix memory leak and avoid forward declaration

Rémi Denis-Courmont git at videolan.org
Tue Aug 21 22:05:26 CEST 2012


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Tue Aug 21 22:24:02 2012 +0300| [2b9e7ac1d1e510473d1958a2c55c7c01131537b8] | committer: Rémi Denis-Courmont

ftp: fix memory leak and avoid forward declaration

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=2b9e7ac1d1e510473d1958a2c55c7c01131537b8
---

 modules/access/ftp.c |   57 +++++++++++++++++++++++++++-----------------------
 1 file changed, 31 insertions(+), 26 deletions(-)

diff --git a/modules/access/ftp.c b/modules/access/ftp.c
index ba16ea9..2b213e0 100644
--- a/modules/access/ftp.c
+++ b/modules/access/ftp.c
@@ -113,7 +113,37 @@ struct access_sys_t
 #define GET_OUT_SYS( p_this ) \
     ((access_sys_t *)(((sout_access_out_t *)(p_this))->p_sys))
 
-static int ftp_SendCommand( vlc_object_t *, access_sys_t *, const char *, ... );
+static int ftp_SendCommand( vlc_object_t *obj, access_sys_t *sys,
+                            const char *fmt, ... )
+{
+    size_t fmtlen = strlen( fmt );
+    char fmtbuf[fmtlen + 3];
+
+    memcpy( fmtbuf, fmt, fmtlen );
+    memcpy( fmtbuf + fmtlen, "\r\n", 3 );
+
+    va_list args;
+    char *cmd;
+    int val;
+
+    va_start( args, fmt );
+    val = vasprintf( &cmd, fmtbuf, args );
+    va_end( args );
+    if( unlikely(val == -1) )
+        return -1;
+
+    msg_Dbg( obj, "sending request: \"%.*s\" (%d bytes)", val - 2, cmd, val );
+    if( net_Write( obj, sys->fd_cmd, NULL, cmd, val ) != val )
+    {
+        msg_Err( obj, "request failure" );
+        val = -1;
+    }
+    else
+        val = 0;
+    free( cmd );
+    return val;
+}
+
 static int ftp_ReadCommand( vlc_object_t *, access_sys_t *, int *, char ** );
 static int ftp_StartStream( vlc_object_t *, access_sys_t *, uint64_t );
 static int ftp_StopStream ( vlc_object_t *, access_sys_t * );
@@ -619,31 +649,6 @@ static int Control( access_t *p_access, int i_query, va_list args )
     return VLC_SUCCESS;
 }
 
-/*****************************************************************************
- * ftp_*:
- *****************************************************************************/
-static int ftp_SendCommand( vlc_object_t *p_access, access_sys_t *p_sys,
-                            const char *psz_fmt, ... )
-{
-    va_list      args;
-    char         *psz_cmd;
-
-    va_start( args, psz_fmt );
-    if( vasprintf( &psz_cmd, psz_fmt, args ) == -1 )
-        return VLC_EGENERIC;
-
-    va_end( args );
-
-    msg_Dbg( p_access, "ftp_SendCommand:\"%s\"", psz_cmd);
-
-    if( net_Printf( p_access, p_sys->fd_cmd, NULL, "%s\r\n", psz_cmd ) < 0 )
-    {
-        msg_Err( p_access, "failed to send command" );
-        return VLC_EGENERIC;
-    }
-    return VLC_SUCCESS;
-}
-
 /* TODO support this s**t :
  RFC 959 allows the client to send certain TELNET strings at any moment,
  even in the middle of a request:



More information about the vlc-commits mailing list