]> sjero.net Git - wget/blobdiff - src/ftp.c
Fix some memory leaks.
[wget] / src / ftp.c
index c331d066f2c6569ca2434794367244f3d5a94f17..9e4f3d76bcbc231f4c74402fd00a81c2eed100f9 100644 (file)
--- a/src/ftp.c
+++ b/src/ftp.c
@@ -1,6 +1,7 @@
 /* File Transfer Protocol support.
    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-   2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+   2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+   Inc.
 
 This file is part of GNU Wget.
 
@@ -34,9 +35,7 @@ as that of the covered work.  */
 #include <stdlib.h>
 #include <string.h>
 #include <strings.h>
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
+#include <unistd.h>
 #include <assert.h>
 #include <errno.h>
 #include <time.h>
@@ -302,10 +301,20 @@ getftp (struct url *u, wgint passed_expected_bytes, wgint *qtyread,
 
       csock = connect_to_host (host, port);
       if (csock == E_HOST)
-        return HOSTERR;
+        {
+          if (con->proxy)
+            xfree (logname);
+
+          return HOSTERR;
+        }
       else if (csock < 0)
-        return (retryable_socket_connect_error (errno)
-                ? CONERROR : CONIMPOSSIBLE);
+        {
+          if (con->proxy)
+            xfree (logname);
+
+          return (retryable_socket_connect_error (errno)
+                  ? CONERROR : CONIMPOSSIBLE);
+        }
 
       if (cmd & LEAVE_PENDING)
         con->csock = csock;
@@ -1152,7 +1161,7 @@ Error in server response, closing control connection.\n"));
 # define BIN_TYPE_FILE 1
 #endif /* def __VMS [else] */
 
-      if ((restval && !(con->cmd & DO_LIST)) || count > 0)
+      if (restval && !(con->cmd & DO_LIST))
         {
 #ifdef __VMS
           int open_id;
@@ -1172,7 +1181,7 @@ Error in server response, closing control connection.\n"));
 #endif /* def __VMS [else] */
         }
       else if (opt.noclobber || opt.always_rest || opt.timestamping || opt.dirstruct
-               || opt.output_document)
+               || opt.output_document || count > 0)
         {        
          if (opt.unlink && file_exists_p (con->target))
            {