]> git.cworth.org Git - apitrace/blobdiff - common/trace_file_zlib.cpp
Don't includes windows.h inside extern "C" {...}
[apitrace] / common / trace_file_zlib.cpp
index 92cead9188862ddb57d4bf74d79e14082680eac2..5e5d5deb9561acf4e33de20c99390cbbc2aa4708 100644 (file)
 #include <zlib.h>
 #include <gzguts.h>
 
+// for lseek
+#ifdef _WIN32
+#include <io.h>
+#else
+#include <sys/types.h>
+#include <unistd.h>
+#endif
+
 #include "os.hpp"
 
 #include <iostream>
@@ -53,14 +61,14 @@ public:
 protected:
     virtual bool rawOpen(const std::string &filename, File::Mode mode);
     virtual bool rawWrite(const void *buffer, size_t length);
-    virtual bool rawRead(void *buffer, size_t length);
+    virtual size_t rawRead(void *buffer, size_t length);
     virtual int rawGetc();
     virtual void rawClose();
     virtual void rawFlush();
     virtual bool rawSkip(size_t length);
     virtual int  rawPercentRead();
 private:
-    void *m_gzFile;
+    gzFile m_gzFile;
     double m_endOffset;
 };
 
@@ -73,6 +81,7 @@ ZLibFile::ZLibFile(const std::string &filename,
 
 ZLibFile::~ZLibFile()
 {
+    close();
 }
 
 bool ZLibFile::rawOpen(const std::string &filename, File::Mode mode)
@@ -99,9 +108,10 @@ bool ZLibFile::rawWrite(const void *buffer, size_t length)
     return gzwrite(m_gzFile, buffer, length) != -1;
 }
 
-bool ZLibFile::rawRead(void *buffer, size_t length)
+size_t ZLibFile::rawRead(void *buffer, size_t length)
 {
-    return gzread(m_gzFile, buffer, length) != -1;
+    int ret = gzread(m_gzFile, buffer, length);
+    return ret < 0 ? 0 : ret;
 }
 
 int ZLibFile::rawGetc()