]> git.saurik.com Git - wxWidgets.git/commitdiff
[ 1070686 ] wxOutputStream::Close()
authorRyan Norton <wxprojects@comcast.net>
Tue, 23 Nov 2004 14:26:10 +0000 (14:26 +0000)
committerRyan Norton <wxprojects@comcast.net>
Tue, 23 Nov 2004 14:26:10 +0000 (14:26 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30731 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/latex/wx/outptstr.tex
include/wx/archive.h
include/wx/stream.h
include/wx/wfstream.h
include/wx/zstream.h
src/common/stream.cpp
src/common/zstream.cpp
src/msw/utilsexc.cpp
tests/streams/bstream.h

index 9cd305c6b9a4aab268678886044d589b137315b5..1c61a7c606455d6b8a72d333df5029d2984a41a4 100644 (file)
@@ -33,6 +33,19 @@ Creates a dummy wxOutputStream object.
 Destructor.
 
 
+\membersection{wxOutputStream::Close}\label{wxoutputstreamclose}
+
+\func{bool}{Close}{\void}
+
+Closes the stream, returning {\tt false} if an error occurs. The
+stream is closed implicitly in the destructor if Close() is not
+called explicitly.
+
+If this stream wraps another stream or some other resource such
+as a file, then the underlying resource is closed too if it is owned
+by this stream, or left open otherwise.
+
+
 \membersection{wxOutputStream::LastWrite}\label{wxoutputstreamlastwrite}
 
 \constfunc{size\_t}{LastWrite}{\void}
index c821da920d795fd7a350749ea6476c67146ac3d2..5bb4880f8f3bd298094a5e8997a80a4ff1e98481 100644 (file)
@@ -149,7 +149,6 @@ public:
     virtual bool CopyArchiveMetaData(wxArchiveInputStream& stream) = 0;
 
     virtual bool CloseEntry() = 0;
-    virtual bool Close() = 0;
 
 protected:
     wxArchiveOutputStream(wxOutputStream& stream, wxMBConv& conv);
index dc574b220028e75bd34fc77dff5086c6dc16481e..5799895fe032553299848d2c849e01b785a40f87 100644 (file)
@@ -257,6 +257,7 @@ public:
     virtual size_t LastWrite() const { return wxStreamBase::m_lastcount; }
 
     virtual void Sync();
+    virtual bool Close() { return true; }
 
     wxOutputStream& operator<<(wxInputStream& out) { return Write(out); }
     wxOutputStream& operator<<( __wxOutputManip func) { return func(*this); }
@@ -515,6 +516,7 @@ public:
     wxFileOffset TellO() const;
 
     void Sync();
+    bool Close();
 
     wxFileOffset GetLength() const;
 
index 514d795fff990d47e515e5b5c0bb82c28baa2d94..b26ec29f5bc582a8adf87af72a504c3ab5fc78b6 100644 (file)
@@ -67,6 +67,7 @@ class WXDLLIMPEXP_BASE wxFileOutputStream: public wxOutputStream {
 //     { return wxOutputStream::Write(buffer, size); }
 
   void Sync();
+  bool Close() { return m_file_destroy ? m_file->Close() : true; }
   wxFileOffset GetLength() const;
 
   bool Ok() const { return m_file->IsOpened(); }
@@ -136,6 +137,7 @@ class WXDLLIMPEXP_BASE wxFFileOutputStream: public wxOutputStream {
 //     { return wxOutputStream::Write(buffer, size); }
 
   void Sync();
+  bool Close() { return m_file_destroy ? m_file->Close() : true; }
   wxFileOffset GetLength() const;
 
   bool Ok() const { return m_file->IsOpened(); }
index 1723d93702a42fe6328e5f67fab8a5424dfd5347..16d43212e6d8062401ec489ca3226e275fbd1ae6 100644 (file)
@@ -69,9 +69,10 @@ class WXDLLIMPEXP_BASE wxZlibInputStream: public wxFilterInputStream {
 class WXDLLIMPEXP_BASE wxZlibOutputStream: public wxFilterOutputStream {
  public:
   wxZlibOutputStream(wxOutputStream& stream, int level = -1, int flags = wxZLIB_ZLIB);
-  virtual ~wxZlibOutputStream();
+  virtual ~wxZlibOutputStream() { Close(); }
 
   void Sync() { DoFlush(false); }
+  bool Close();
   wxFileOffset GetLength() const { return m_pos; }
 
   static bool CanHandleGZip();
index b2154a2d591302c6528f4ee8980fb7192e4c012a..62a8e98e7d971ac09cccf308b5e7c6bd787278b1 100644 (file)
@@ -1185,6 +1185,13 @@ wxBufferedOutputStream::~wxBufferedOutputStream()
     delete m_o_streambuf;
 }
 
+bool wxBufferedOutputStream::Close()
+{
+    Sync();
+    return IsOk();
+}
+
+
 wxOutputStream& wxBufferedOutputStream::Write(const void *buffer, size_t size)
 {
     m_lastcount = 0;
index 7309afc2922078ff9c7870a659ffaac1e170f8e1..7afa0548ffd9a2e2133782e246521b71161d04b2 100644 (file)
@@ -238,20 +238,20 @@ wxZlibOutputStream::wxZlibOutputStream(wxOutputStream& stream,
   m_lasterror = wxSTREAM_WRITE_ERROR;
 }
 
-wxZlibOutputStream::~wxZlibOutputStream()
-{
-  if (m_deflate && m_z_buffer)
-    DoFlush(true);
-  deflateEnd(m_deflate);
-  delete m_deflate;
+bool wxZlibOutputStream::Close()
+ {
+  DoFlush(true);
+   deflateEnd(m_deflate);
+   delete m_deflate;
 
-  delete[] m_z_buffer;
-}
+  m_deflate = NULL;
+   delete[] m_z_buffer;
+  m_z_buffer = NULL;
+  return IsOk();
+ }
 
 void wxZlibOutputStream::DoFlush(bool final)
 {
-  wxASSERT_MSG(m_deflate && m_z_buffer, wxT("Deflate stream not open"));
-
   if (!m_deflate || !m_z_buffer)
     m_lasterror = wxSTREAM_WRITE_ERROR;
   if (!IsOk())
index ecdb0f97927f6c82338f2163d952232aa4fd7ca4..8899b5e0f128fdff2701f2b61c49e3551e9f00fa 100644 (file)
@@ -179,7 +179,8 @@ class wxPipeOutputStream: public wxOutputStream
 {
 public:
     wxPipeOutputStream(HANDLE hOutput);
-    virtual ~wxPipeOutputStream();
+    virtual ~wxPipeOutputStream() { Close(); }
+    bool Close();
 
 protected:
     size_t OnSysWrite(const void *buffer, size_t len);
@@ -444,11 +445,12 @@ wxPipeOutputStream::wxPipeOutputStream(HANDLE hOutput)
     }
 }
 
-wxPipeOutputStream::~wxPipeOutputStream()
+bool wxPipeOutputStream::Close()
 {
-    ::CloseHandle(m_hOutput);
+   return ::CloseHandle(m_hOutput) != 0;
 }
 
+
 size_t wxPipeOutputStream::OnSysWrite(const void *buffer, size_t len)
 {
     m_lasterror = wxSTREAM_NO_ERROR;
index a73b495384a1197d44a9cf6df35c86c133181ee6..fc2d6fb237ca4cdb35761cad8f0716dc2ca84a5d 100644 (file)
@@ -400,9 +400,12 @@ protected:
         DoDeleteInStream();
     }
     void DeleteOutStream()
-    {
+    {        
         if (m_pCurrentOut == NULL)
             return;
+        
+        CPPUNIT_ASSERT(m_pCurrentOut->Close());
+        
         delete m_pCurrentOut;
         m_pCurrentOut = NULL;
         // Incase something extra needs to be done.