mode(ios_openmode(0)),
own_file_descriptor(false),
ibuf_size(0),
- ibuffer(0)
+ ibuffer(0),
+ obuf_size(0),
+ obuffer(0)
{
// try {
ibuf_size = page_size / sizeof(char);
if ( own_file_descriptor )
this->close();
delete [] ibuffer;
+ if (obuffer)
+ delete [] obuffer;
}
void
return this;
}
-// int
-// gzfilebuf::setcompressionlevel( int comp_level )
-// {
-// return gzsetparams(file, comp_level, -2);
-// }
+int
+gzfilebuf::setcompressionlevel( int comp_level )
+{
+ return gzsetparams(file, comp_level, -2);
+}
-// int
-// gzfilebuf::setcompressionstrategy( int comp_strategy )
-// {
-// return gzsetparams(file, -2, comp_strategy);
-// }
+int
+gzfilebuf::setcompressionstrategy( int comp_strategy )
+{
+ return gzsetparams(file, -2, comp_strategy);
+}
std::streampos
}
gzfilebuf::int_type
-gzfilebuf::overflow( int_type )
+gzfilebuf::overflow( int_type c )
{
-#if 0
- if ( !is_open() || !(mode & ios::out) )
+ if ( !is_open() || !(mode & ios_out) )
return EOF;
if ( !base() )
*pptr() = c;
pbump(1);
}
-#endif
return 0;
}
return 0;
}
+bool
+gzfilebuf::out_waiting()
+{
+ char* q = pbase();
+ int n = pptr() - q;
+ return n>0;
+}
+
+char
+gzfilebuf::allocate()
+{
+ obuf_size = page_size / sizeof(char);
+ obuffer = new char [obuf_size];
+ return 0;
+}
+
gzfilebuf::int_type
gzfilebuf::flushbuf()
{
}
else
{
- return fillbuf() == EOF ? traits_type::eof() : int_type(*gptr());
+ return fillbuf() == EOF ? traits_type::eof() : (unsigned char) (*gptr());
}
}