From: Christian P. <cp...@us...> - 2005-01-10 02:46:30
|
Update of /cvsroot/pclasses/pclasses2/src/IO In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23340/src/IO Modified Files: ZLibIOFilter.cpp Log Message: Fixed ZLibIOFilter exception handling. IOFilter's are only allowed to throw IOError's. Index: ZLibIOFilter.cpp =================================================================== RCS file: /cvsroot/pclasses/pclasses2/src/IO/ZLibIOFilter.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- ZLibIOFilter.cpp 6 Jan 2005 19:23:13 -0000 1.3 +++ ZLibIOFilter.cpp 10 Jan 2005 02:46:21 -0000 1.4 @@ -19,6 +19,7 @@ ***************************************************************************/ #include <pclasses/IO/ZLibIOFilter.h> +#include <errno.h> namespace P { @@ -86,23 +87,32 @@ return IOFilter::eof(); } -size_t ZLibIOFilter::read(char* buffer, size_t count) throw(IO::IOError) +size_t ZLibIOFilter::read(char* buffer, size_t count) throw(IOError) { if(!_strmIn) - _strmIn = new P::IO::ZLibInputStream(); + _strmIn = new ZLibInputStream(); if(_strmIn->bytesAvail() < count) { // refill output buffer ... char tmp[1024]; size_t got = IOFilter::read(tmp, sizeof(tmp)); - - size_t consumed = _strmIn->inflate(tmp, got); + + size_t consumed; + try + { + consumed = _strmIn->inflate(tmp, got); + } + catch(ZLibError& err) + { + throw IOError(EILSEQ, "Error decompressing data", P_SOURCEINFO); + } + if(consumed < sizeof(tmp)) { //@fixme: we need to buffer rememaining bytes we could not inflate } - + count = _strmIn->bytesAvail(); } @@ -113,29 +123,38 @@ return count; } -size_t ZLibIOFilter::write(const char* buffer, size_t count) throw(IO::IOError) +size_t ZLibIOFilter::write(const char* buffer, size_t count) throw(IOError) { if(!_strmOut) - _strmOut = new P::IO::ZLibOutputStream(9); + _strmOut = new ZLibOutputStream(9); - size_t consumed = _strmOut->deflate(buffer, count); + size_t consumed; + try + { + consumed = _strmOut->deflate(buffer, count); + } + catch(ZLibError& err) + { + throw IOError(EILSEQ, "Error compressing data", P_SOURCEINFO); + } + flushAvailBytes(); return consumed; } -size_t ZLibIOFilter::peek(char* buffer, size_t count) throw(IO::IOError) +size_t ZLibIOFilter::peek(char* buffer, size_t count) throw(IOError) { return 0; } -offset_t ZLibIOFilter::seek(offset_t offset, IO::IODevice::SeekMode mode) throw(IO::IOError) +offset_t ZLibIOFilter::seek(offset_t offset, IODevice::SeekMode mode) throw(IOError) { - throw IO::IOError(0, "Could not seek on device", P_SOURCEINFO); + throw IOError(0, "Could not seek on device", P_SOURCEINFO); return -1; } -offset_t ZLibIOFilter::size() const throw(IO::IOError) +offset_t ZLibIOFilter::size() const throw(IOError) { //@fixme!!! return IOFilter::size(); |