|
@@ -1841,21 +1841,21 @@ struct FileReader : LoadFilter {
|
|
|
this->file = NULL;
|
|
|
|
|
|
/* Make sure we don't double free. */
|
|
|
_sl.sf = NULL;
|
|
|
}
|
|
|
|
|
|
/* virtual */ size_t Read(byte *buf, size_t size)
|
|
|
size_t Read(byte *buf, size_t size) override
|
|
|
{
|
|
|
/* We're in the process of shutting down, i.e. in "failure" mode. */
|
|
|
if (this->file == NULL) return 0;
|
|
|
|
|
|
return fread(buf, 1, size, this->file);
|
|
|
}
|
|
|
|
|
|
/* virtual */ void Reset()
|
|
|
void Reset() override
|
|
|
{
|
|
|
clearerr(this->file);
|
|
|
if (fseek(this->file, this->begin, SEEK_SET)) {
|
|
|
DEBUG(sl, 1, "Could not reset the file reading");
|
|
|
}
|
|
|
}
|
|
@@ -1879,21 +1879,21 @@ struct FileWriter : SaveFilter {
|
|
|
this->Finish();
|
|
|
|
|
|
/* Make sure we don't double free. */
|
|
|
_sl.sf = NULL;
|
|
|
}
|
|
|
|
|
|
/* virtual */ void Write(byte *buf, size_t size)
|
|
|
void Write(byte *buf, size_t size) override
|
|
|
{
|
|
|
/* We're in the process of shutting down, i.e. in "failure" mode. */
|
|
|
if (this->file == NULL) return;
|
|
|
|
|
|
if (fwrite(buf, 1, size, this->file) != size) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE);
|
|
|
}
|
|
|
|
|
|
/* virtual */ void Finish()
|
|
|
void Finish() override
|
|
|
{
|
|
|
if (this->file != NULL) fclose(this->file);
|
|
|
this->file = NULL;
|
|
|
}
|
|
|
};
|
|
|
|
|
@@ -1915,13 +1915,13 @@ struct LZOLoadFilter : LoadFilter {
|
|
|
*/
|
|
|
LZOLoadFilter(LoadFilter *chain) : LoadFilter(chain)
|
|
|
{
|
|
|
if (lzo_init() != LZO_E_OK) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR, "cannot initialize decompressor");
|
|
|
}
|
|
|
|
|
|
/* virtual */ size_t Read(byte *buf, size_t ssize)
|
|
|
size_t Read(byte *buf, size_t ssize) override
|
|
|
{
|
|
|
assert(ssize >= LZO_BUFFER_SIZE);
|
|
|
|
|
|
/* Buffer size is from the LZO docs plus the chunk header size. */
|
|
|
byte out[LZO_BUFFER_SIZE + LZO_BUFFER_SIZE / 16 + 64 + 3 + sizeof(uint32) * 2];
|
|
|
uint32 tmp[2];
|
|
@@ -1963,13 +1963,13 @@ struct LZOSaveFilter : SaveFilter {
|
|
|
*/
|
|
|
LZOSaveFilter(SaveFilter *chain, byte compression_level) : SaveFilter(chain)
|
|
|
{
|
|
|
if (lzo_init() != LZO_E_OK) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR, "cannot initialize compressor");
|
|
|
}
|
|
|
|
|
|
/* virtual */ void Write(byte *buf, size_t size)
|
|
|
void Write(byte *buf, size_t size) override
|
|
|
{
|
|
|
const lzo_bytep in = buf;
|
|
|
/* Buffer size is from the LZO docs plus the chunk header size. */
|
|
|
byte out[LZO_BUFFER_SIZE + LZO_BUFFER_SIZE / 16 + 64 + 3 + sizeof(uint32) * 2];
|
|
|
byte wrkmem[LZO1X_1_MEM_COMPRESS];
|
|
|
lzo_uint outlen;
|
|
@@ -2002,13 +2002,13 @@ struct NoCompLoadFilter : LoadFilter {
|
|
|
* @param chain The next filter in this chain.
|
|
|
*/
|
|
|
NoCompLoadFilter(LoadFilter *chain) : LoadFilter(chain)
|
|
|
{
|
|
|
}
|
|
|
|
|
|
/* virtual */ size_t Read(byte *buf, size_t size)
|
|
|
size_t Read(byte *buf, size_t size) override
|
|
|
{
|
|
|
return this->chain->Read(buf, size);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
/** Filter without any compression. */
|
|
@@ -2019,13 +2019,13 @@ struct NoCompSaveFilter : SaveFilter {
|
|
|
* @param compression_level The requested level of compression.
|
|
|
*/
|
|
|
NoCompSaveFilter(SaveFilter *chain, byte compression_level) : SaveFilter(chain)
|
|
|
{
|
|
|
}
|
|
|
|
|
|
/* virtual */ void Write(byte *buf, size_t size)
|
|
|
void Write(byte *buf, size_t size) override
|
|
|
{
|
|
|
this->chain->Write(buf, size);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
/********************************************
|
|
@@ -2053,13 +2053,13 @@ struct ZlibLoadFilter : LoadFilter {
|
|
|
/** Clean everything up. */
|
|
|
~ZlibLoadFilter()
|
|
|
{
|
|
|
inflateEnd(&this->z);
|
|
|
}
|
|
|
|
|
|
/* virtual */ size_t Read(byte *buf, size_t size)
|
|
|
size_t Read(byte *buf, size_t size) override
|
|
|
{
|
|
|
this->z.next_out = buf;
|
|
|
this->z.avail_out = (uint)size;
|
|
|
|
|
|
do {
|
|
|
/* read more bytes from the file? */
|
|
@@ -2132,18 +2132,18 @@ struct ZlibSaveFilter : SaveFilter {
|
|
|
if (r == Z_STREAM_END) break;
|
|
|
|
|
|
if (r != Z_OK) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR, "zlib returned error code");
|
|
|
} while (this->z.avail_in || !this->z.avail_out);
|
|
|
}
|
|
|
|
|
|
/* virtual */ void Write(byte *buf, size_t size)
|
|
|
void Write(byte *buf, size_t size) override
|
|
|
{
|
|
|
this->WriteLoop(buf, size, 0);
|
|
|
}
|
|
|
|
|
|
/* virtual */ void Finish()
|
|
|
void Finish() override
|
|
|
{
|
|
|
this->WriteLoop(NULL, 0, Z_FINISH);
|
|
|
this->chain->Finish();
|
|
|
}
|
|
|
};
|
|
|
|
|
@@ -2182,13 +2182,13 @@ struct LZMALoadFilter : LoadFilter {
|
|
|
/** Clean everything up. */
|
|
|
~LZMALoadFilter()
|
|
|
{
|
|
|
lzma_end(&this->lzma);
|
|
|
}
|
|
|
|
|
|
/* virtual */ size_t Read(byte *buf, size_t size)
|
|
|
size_t Read(byte *buf, size_t size) override
|
|
|
{
|
|
|
this->lzma.next_out = buf;
|
|
|
this->lzma.avail_out = size;
|
|
|
|
|
|
do {
|
|
|
/* read more bytes from the file? */
|
|
@@ -2251,18 +2251,18 @@ struct LZMASaveFilter : SaveFilter {
|
|
|
}
|
|
|
if (r == LZMA_STREAM_END) break;
|
|
|
if (r != LZMA_OK) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR, "liblzma returned error code");
|
|
|
} while (this->lzma.avail_in || !this->lzma.avail_out);
|
|
|
}
|
|
|
|
|
|
/* virtual */ void Write(byte *buf, size_t size)
|
|
|
void Write(byte *buf, size_t size) override
|
|
|
{
|
|
|
this->WriteLoop(buf, size, LZMA_RUN);
|
|
|
}
|
|
|
|
|
|
/* virtual */ void Finish()
|
|
|
void Finish() override
|
|
|
{
|
|
|
this->WriteLoop(NULL, 0, LZMA_FINISH);
|
|
|
this->chain->Finish();
|
|
|
}
|
|
|
};
|
|
|
|