35 #ifdef GZSTREAM_NAMESPACE
36 namespace GZSTREAM_NAMESPACE {
47 gzstreambuf* gzstreambuf::open(
const char* _name,
int _open_mode) {
52 if ((mode & std::ios::ate) || (mode & std::ios::app)
53 || ((mode & std::ios::in) && (mode & std::ios::out)))
56 char* fmodeptr = fmode;
57 if ( mode & std::ios::in)
59 else if ( mode & std::ios::out)
63 file = gzopen( _name, fmode);
70 gzstreambuf * gzstreambuf::close() {
74 if ( gzclose( file) == Z_OK)
80 int gzstreambuf::underflow() {
81 if ( gptr() && ( gptr() < egptr()))
82 return *
reinterpret_cast<unsigned char *
>( gptr());
84 if ( ! (mode & std::ios::in) || ! opened)
87 size_t n_putback = gptr() - eback();
90 memcpy( buffer + (4 - n_putback), gptr() - n_putback, n_putback);
92 int num = gzread( file, buffer+4, bufferSize-4);
97 setg( buffer + (4 - n_putback),
102 return *
reinterpret_cast<unsigned char *
>( gptr());
105 int gzstreambuf::flush_buffer() {
108 int w =
static_cast<int>(pptr() - pbase());
109 if ( gzwrite( file, pbase(), w) != w)
115 int gzstreambuf::overflow(
int c) {
116 if ( ! ( mode & std::ios::out) || ! opened)
119 *pptr() =
static_cast<char>(c);
122 if ( flush_buffer() == EOF)
127 int gzstreambuf::sync() {
131 if ( pptr() && pptr() > pbase()) {
132 if ( flush_buffer() == EOF)
142 gzstreambase::gzstreambase(
const char* name,
int mode) {
147 gzstreambase::~gzstreambase() {
151 void gzstreambase::open(
const char* _name,
int _open_mode) {
152 if ( ! buf.open( _name, _open_mode))
153 setstate(std::ios::badbit);
157 void gzstreambase::close() {
160 setstate(std::ios::badbit);
164 #ifdef GZSTREAM_NAMESPACE