summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorljfa <ljfa-ag@web.de>2015-09-21 08:30:25 +0200
committerljfa <ljfa-ag@web.de>2015-09-21 08:33:16 +0200
commit64e6d2abc719869e386caa760bfbe1e65bd7559b (patch)
treef666d9f05a11058e31703879f07e297ef40b1f86 /src
parent07a9300246630705d5f4e6978cdc5cf8a8b4afd7 (diff)
downloadProject-Tick-64e6d2abc719869e386caa760bfbe1e65bd7559b.tar.gz
Project-Tick-64e6d2abc719869e386caa760bfbe1e65bd7559b.zip
Create ozlibstream::close method
Set failbit on output stream on failure
Diffstat (limited to 'src')
-rw-r--r--src/io/ozlibstream.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/io/ozlibstream.cpp b/src/io/ozlibstream.cpp
index 97702a37e1..605d1397d0 100644
--- a/src/io/ozlibstream.cpp
+++ b/src/io/ozlibstream.cpp
@@ -40,7 +40,7 @@ deflate_streambuf::~deflate_streambuf() noexcept
{
try
{
- deflate_chunk(Z_FINISH);
+ close();
}
catch(...)
{
@@ -49,6 +49,11 @@ deflate_streambuf::~deflate_streambuf() noexcept
deflateEnd(&zstr);
}
+void deflate_streambuf::close()
+{
+ deflate_chunk(Z_FINISH);
+}
+
void deflate_streambuf::deflate_chunk(int flush)
{
zstr.next_in = reinterpret_cast<Bytef*>(pbase());
@@ -59,7 +64,10 @@ void deflate_streambuf::deflate_chunk(int flush)
zstr.avail_out = out.size();
int ret = deflate(&zstr, flush);
if(ret != Z_OK && ret != Z_STREAM_END)
+ {
+ os.setstate(std::ios_base::failbit);
throw zlib_error(zstr.msg, ret);
+ }
int have = out.size() - zstr.avail_out;
if(!os.write(out.data(), have))
throw std::ios_base::failure("Could not write to the output stream");