]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/ftp.cpp
fixed false alert in wxRegKey::DeleteSelf
[wxWidgets.git] / src / common / ftp.cpp
index 80c0e1a057c0513b1f4c0224dcc89b63ac1c4e2a..1d5e8019650be839ac0464e0dcd43b6559d3540a 100644 (file)
@@ -20,7 +20,9 @@
   #pragma hdrstop
 #endif
 
-#if wxUSE_SOCKETS
+#include "wx/setup.h"
+
+#if wxUSE_SOCKETS && wxUSE_STREAMS
 
 #ifndef __MWERKS__
 #include <memory.h>
@@ -71,6 +73,11 @@ wxFTP::wxFTP()
 
 wxFTP::~wxFTP()
 {
+    if ( m_streaming )
+    {
+        (void)Abort();
+    }
+
     Close();
 }
 
@@ -122,17 +129,12 @@ bool wxFTP::Connect(const wxString& host)
   return Connect(addr);
 }
 
-bool wxFTP::Close(bool force)
+bool wxFTP::Close()
 {
     if ( m_streaming )
     {
-        if ( !force )
-        {
-            m_lastError = wxPROTO_STREAMING;
-            return FALSE;
-        }
-
-        (void)Abort();
+        m_lastError = wxPROTO_STREAMING;
+        return FALSE;
     }
 
     if ( IsConnected() )
@@ -398,11 +400,23 @@ public:
     : wxSocketOutputStream(*sock), m_ftp(ftp_clt) {}
   virtual ~wxOutputFTPStream(void)
   {
-     if (LastError() != wxStream_NOERROR)
-       m_ftp->GetResult('2');
-     else
-       m_ftp->Abort();
-     delete m_o_socket;
+      if ( IsOk() )
+      {
+          // close data connection first, this will generate "transfer
+          // completed" reply
+          delete m_o_socket;
+
+          // read this reply
+          m_ftp->GetResult('2');
+      }
+      else
+      {
+          // abort data connection first
+          m_ftp->Abort();
+
+          // and close it after
+          delete m_o_socket;
+      }
   }
 };