bool open(const std::string &filename, File::Mode mode);
bool write(const void *buffer, size_t length);
- bool read(void *buffer, size_t length);
+ size_t read(void *buffer, size_t length);
void close();
void flush(void);
int getc();
protected:
virtual bool rawOpen(const std::string &filename, File::Mode mode) = 0;
virtual bool rawWrite(const void *buffer, size_t length) = 0;
- virtual bool rawRead(void *buffer, size_t length) = 0;
+ virtual size_t rawRead(void *buffer, size_t length) = 0;
virtual int rawGetc() = 0;
virtual void rawClose() = 0;
virtual void rawFlush() = 0;
return rawWrite(buffer, length);
}
-inline bool File::read(void *buffer, size_t length)
+inline size_t File::read(void *buffer, size_t length)
{
if (!m_isOpened || m_mode != File::Read) {
- return false;
+ return 0;
}
return rawRead(buffer, length);
}
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();
return true;
}
-bool SnappyFile::rawRead(void *buffer, size_t length)
+size_t SnappyFile::rawRead(void *buffer, size_t length)
{
if (endOfData()) {
- return false;
+ return 0;
}
if (freeCacheSize() >= length) {
flushReadCache();
}
if (!m_cacheSize) {
- break;
+ return length - sizeToRead;
}
}
}
- return true;
+ return length;
}
int SnappyFile::rawGetc()
{
int c = 0;
- if (!rawRead(&c, 1))
+ if (rawRead(&c, 1) != 1)
return -1;
return c;
}
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();
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()