X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=common%2Ftrace_file_zlib.cpp;h=5e5d5deb9561acf4e33de20c99390cbbc2aa4708;hb=41a6d89aa0156103f5217521fe582941782aad8e;hp=6982c1e1c39c3e75a902b292f88edd8c3d41747f;hpb=4159a6196b23dae0be22dde17a85783fe4036517;p=apitrace diff --git a/common/trace_file_zlib.cpp b/common/trace_file_zlib.cpp index 6982c1e..5e5d5de 100644 --- a/common/trace_file_zlib.cpp +++ b/common/trace_file_zlib.cpp @@ -33,12 +33,20 @@ #include #include +// for lseek +#ifdef _WIN32 +#include +#else +#include +#include +#endif + #include "os.hpp" #include -using namespace Trace; +using namespace trace; class ZLibFile : public File { @@ -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()