aboutsummaryrefslogtreecommitdiff
path: root/src/gzstream.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gzstream.cpp')
-rw-r--r--src/gzstream.cpp176
1 files changed, 87 insertions, 89 deletions
diff --git a/src/gzstream.cpp b/src/gzstream.cpp
index 688b625..a7014d6 100644
--- a/src/gzstream.cpp
+++ b/src/gzstream.cpp
@@ -28,7 +28,7 @@
#include "gzstream.h"
#include <iostream>
-#include <string.h> // for memcpy
+#include <string.h> // for memcpy
#ifdef GZSTREAM_NAMESPACE
namespace GZSTREAM_NAMESPACE {
@@ -42,119 +42,117 @@ namespace GZSTREAM_NAMESPACE {
// class gzstreambuf:
// --------------------------------------
-gzstreambuf* gzstreambuf::open( const char* name, int open_mode) {
- if ( is_open())
- return (gzstreambuf*)0;
- mode = open_mode;
- // no append nor read/write mode
- if ((mode & std::ios::ate) || (mode & std::ios::app)
- || ((mode & std::ios::in) && (mode & std::ios::out)))
- return (gzstreambuf*)0;
- char fmode[10];
- char* fmodeptr = fmode;
- if ( mode & std::ios::in)
- *fmodeptr++ = 'r';
- else if ( mode & std::ios::out)
- *fmodeptr++ = 'w';
- *fmodeptr++ = 'b';
- *fmodeptr = '\0';
- file = gzopen( name, fmode);
- if (file == 0)
- return (gzstreambuf*)0;
- opened = 1;
- return this;
+gzstreambuf *gzstreambuf::open(const char *name, int open_mode) {
+ if (is_open())
+ return (gzstreambuf *)0;
+ mode = open_mode;
+ // no append nor read/write mode
+ if ((mode & std::ios::ate) || (mode & std::ios::app) ||
+ ((mode & std::ios::in) && (mode & std::ios::out)))
+ return (gzstreambuf *)0;
+ char fmode[10];
+ char *fmodeptr = fmode;
+ if (mode & std::ios::in)
+ *fmodeptr++ = 'r';
+ else if (mode & std::ios::out)
+ *fmodeptr++ = 'w';
+ *fmodeptr++ = 'b';
+ *fmodeptr = '\0';
+ file = gzopen(name, fmode);
+ if (file == 0)
+ return (gzstreambuf *)0;
+ opened = 1;
+ return this;
}
-gzstreambuf * gzstreambuf::close() {
- if ( is_open()) {
- sync();
- opened = 0;
- if ( gzclose( file) == Z_OK)
- return this;
- }
- return (gzstreambuf*)0;
+gzstreambuf *gzstreambuf::close() {
+ if (is_open()) {
+ sync();
+ opened = 0;
+ if (gzclose(file) == Z_OK)
+ return this;
+ }
+ return (gzstreambuf *)0;
}
int gzstreambuf::underflow() { // used for input buffer only
- if ( gptr() && ( gptr() < egptr()))
- return * reinterpret_cast<unsigned char *>( gptr());
-
- if ( ! (mode & std::ios::in) || ! opened)
- return EOF;
- // Josuttis' implementation of inbuf
- int n_putback = gptr() - eback();
- if ( n_putback > 4)
- n_putback = 4;
- memcpy( buffer + (4 - n_putback), gptr() - n_putback, n_putback);
-
- int num = gzread( file, buffer+4, bufferSize-4);
- if (num <= 0) // ERROR or EOF
- return EOF;
-
- // reset buffer pointers
- setg( buffer + (4 - n_putback), // beginning of putback area
- buffer + 4, // read position
- buffer + 4 + num); // end of buffer
-
- // return next character
- return * reinterpret_cast<unsigned char *>( gptr());
+ if (gptr() && (gptr() < egptr()))
+ return *reinterpret_cast<unsigned char *>(gptr());
+
+ if (!(mode & std::ios::in) || !opened)
+ return EOF;
+ // Josuttis' implementation of inbuf
+ int n_putback = gptr() - eback();
+ if (n_putback > 4)
+ n_putback = 4;
+ memcpy(buffer + (4 - n_putback), gptr() - n_putback, n_putback);
+
+ int num = gzread(file, buffer + 4, bufferSize - 4);
+ if (num <= 0) // ERROR or EOF
+ return EOF;
+
+ // reset buffer pointers
+ setg(buffer + (4 - n_putback), // beginning of putback area
+ buffer + 4, // read position
+ buffer + 4 + num); // end of buffer
+
+ // return next character
+ return *reinterpret_cast<unsigned char *>(gptr());
}
int gzstreambuf::flush_buffer() {
- // Separate the writing of the buffer from overflow() and
- // sync() operation.
- int w = pptr() - pbase();
- if ( gzwrite( file, pbase(), w) != w)
- return EOF;
- pbump( -w);
- return w;
+ // Separate the writing of the buffer from overflow() and
+ // sync() operation.
+ int w = pptr() - pbase();
+ if (gzwrite(file, pbase(), w) != w)
+ return EOF;
+ pbump(-w);
+ return w;
}
-int gzstreambuf::overflow( int c) { // used for output buffer only
- if ( ! ( mode & std::ios::out) || ! opened)
- return EOF;
- if (c != EOF) {
- *pptr() = c;
- pbump(1);
- }
- if ( flush_buffer() == EOF)
- return EOF;
- return c;
+int gzstreambuf::overflow(int c) { // used for output buffer only
+ if (!(mode & std::ios::out) || !opened)
+ return EOF;
+ if (c != EOF) {
+ *pptr() = c;
+ pbump(1);
+ }
+ if (flush_buffer() == EOF)
+ return EOF;
+ return c;
}
int gzstreambuf::sync() {
- // Changed to use flush_buffer() instead of overflow( EOF)
- // which caused improper behavior with std::endl and flush(),
- // bug reported by Vincent Ricard.
- if ( pptr() && pptr() > pbase()) {
- if ( flush_buffer() == EOF)
- return -1;
- }
- return 0;
+ // Changed to use flush_buffer() instead of overflow( EOF)
+ // which caused improper behavior with std::endl and flush(),
+ // bug reported by Vincent Ricard.
+ if (pptr() && pptr() > pbase()) {
+ if (flush_buffer() == EOF)
+ return -1;
+ }
+ return 0;
}
// --------------------------------------
// class gzstreambase:
// --------------------------------------
-gzstreambase::gzstreambase( const char* name, int mode) {
- init( &buf);
- open( name, mode);
+gzstreambase::gzstreambase(const char *name, int mode) {
+ init(&buf);
+ open(name, mode);
}
-gzstreambase::~gzstreambase() {
- buf.close();
-}
+gzstreambase::~gzstreambase() { buf.close(); }
-void gzstreambase::open( const char* name, int open_mode) {
- if ( ! buf.open( name, open_mode))
- clear( rdstate() | std::ios::badbit);
+void gzstreambase::open(const char *name, int open_mode) {
+ if (!buf.open(name, open_mode))
+ clear(rdstate() | std::ios::badbit);
}
void gzstreambase::close() {
- if ( buf.is_open())
- if ( ! buf.close())
- clear( rdstate() | std::ios::badbit);
+ if (buf.is_open())
+ if (!buf.close())
+ clear(rdstate() | std::ios::badbit);
}
#ifdef GZSTREAM_NAMESPACE