don't break if no zlib

This commit is contained in:
David Rose 2002-08-08 18:31:17 +00:00
parent 246b224786
commit 63aeb3b130

View File

@ -762,10 +762,17 @@ open_read_subfile(int index) {
subfile->_data_start + (streampos)subfile->_data_length); subfile->_data_start + (streampos)subfile->_data_length);
if ((subfile->_flags & SF_compressed) != 0) { if ((subfile->_flags & SF_compressed) != 0) {
#ifndef HAVE_ZLIB
express_cat.error()
<< "zlib not compiled in; cannot read compressed multifiles.\n";
delete stream;
return NULL;
#else // HAVE_ZLIB
// Oops, the subfile is compressed. So actually, return an // Oops, the subfile is compressed. So actually, return an
// IDecompressStream that wraps around the ISubStream. // IDecompressStream that wraps around the ISubStream.
IDecompressStream *wrapper = new IDecompressStream(stream, true); IDecompressStream *wrapper = new IDecompressStream(stream, true);
stream = wrapper; stream = wrapper;
#endif // HAVE_ZLIB
} }
if (stream->fail()) { if (stream->fail()) {
@ -998,8 +1005,14 @@ string Multifile::
add_new_subfile(const string &subfile_name, Subfile *subfile, add_new_subfile(const string &subfile_name, Subfile *subfile,
int compression_level) { int compression_level) {
if (compression_level != 0) { if (compression_level != 0) {
#ifndef HAVE_ZLIB
express_cat.warning()
<< "zlib not compiled in; cannot generated compressed multifiles.\n";
compression_level = 0;
#else // HAVE_ZLIB
subfile->_flags |= SF_compressed; subfile->_flags |= SF_compressed;
subfile->_compression_level = compression_level; subfile->_compression_level = compression_level;
#endif // HAVE_ZLIB
} }
if (_next_index != (streampos)0) { if (_next_index != (streampos)0) {
@ -1369,6 +1382,11 @@ write_data(ostream &write, istream *read, streampos fpos) {
} else { } else {
// We do have source data. Copy it in, and also measure its // We do have source data. Copy it in, and also measure its
// length. // length.
#ifndef HAVE_ZLIB
// Without ZLIB, we can't support compression. The flag had
// better not be set.
nassertr((_flags & SF_compressed) == 0, fpos);
#else // HAVE_ZLIB
if ((_flags & SF_compressed) != 0) { if ((_flags & SF_compressed) != 0) {
// Write it compressed. // Write it compressed.
streampos write_start = write.tellp(); streampos write_start = write.tellp();
@ -1383,17 +1401,19 @@ write_data(ostream &write, istream *read, streampos fpos) {
zstream.close(); zstream.close();
streampos write_end = write.tellp(); streampos write_end = write.tellp();
_data_length = (size_t)(write_end - write_start); _data_length = (size_t)(write_end - write_start);
} else { } else
// Write it uncompressed. #endif // HAVE_ZLIB
_uncompressed_length = 0; {
int byte = source->get(); // Write it uncompressed.
while (!source->eof() && !source->fail()) { _uncompressed_length = 0;
_uncompressed_length++; int byte = source->get();
write.put(byte); while (!source->eof() && !source->fail()) {
byte = source->get(); _uncompressed_length++;
write.put(byte);
byte = source->get();
}
_data_length = _uncompressed_length;
} }
_data_length = _uncompressed_length;
}
} }
// We can't set _data_start until down here, after we have read the // We can't set _data_start until down here, after we have read the