diff options
Diffstat (limited to 'o3d/import/cross/archive_processor.cc')
-rw-r--r-- | o3d/import/cross/archive_processor.cc | 71 |
1 files changed, 11 insertions, 60 deletions
diff --git a/o3d/import/cross/archive_processor.cc b/o3d/import/cross/archive_processor.cc index 8601695..a10af1b 100644 --- a/o3d/import/cross/archive_processor.cc +++ b/o3d/import/cross/archive_processor.cc @@ -41,72 +41,30 @@ const int kChunkSize = 16384; namespace o3d { -#ifdef _DEBUG // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// For debugging only, report a zlib or i/o error -void zerr(int ret) { - LOG(ERROR) << "ArchiveProcessor: "; - - switch (ret) { - case Z_ERRNO: - if (ferror(stdin)) - LOG(ERROR) << "error reading stdin\n"; - if (ferror(stdout)) - LOG(ERROR) << "error writing stdout\n"; - break; - case Z_STREAM_ERROR: - LOG(ERROR) << "invalid compression level\n"; - break; - case Z_DATA_ERROR: - LOG(ERROR) << "invalid or incomplete deflate data\n"; - break; - case Z_MEM_ERROR: - LOG(ERROR) << "out of memory\n"; - break; - case Z_VERSION_ERROR: - LOG(ERROR) << "zlib version mismatch!\n"; - break; - } -} -#endif // _DEBUG - -// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -int ArchiveProcessor::ProcessEntireStream(MemoryReadStream *stream) { - int result = Z_OK; - bool has_error = false; +StreamProcessor::Status ArchiveProcessor::ProcessEntireStream( + MemoryReadStream *stream) { + Status status; // decompress until deflate stream ends or error do { int remaining = stream->GetRemainingByteCount(); int process_this_time = remaining < kChunkSize ? remaining : kChunkSize; - result = ProcessCompressedBytes(stream, process_this_time); - - has_error = (result != Z_OK && result != Z_STREAM_END); + status = ProcessBytes(stream, process_this_time); + } while (status == IN_PROGRESS); -#ifdef _DEBUG - if (has_error) { - zerr(result); - } -#endif - } while (result != Z_STREAM_END && !has_error); - - if (result == Z_STREAM_END) { - // if we got to the end of stream, then we're good... - result = Z_OK; - } - - return result; + return status; } // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -int ArchiveProcessor::ProcessFile(const char *filename) { +StreamProcessor::Status ArchiveProcessor::ProcessFile(const char *filename) { struct stat file_info; int result = stat(filename, &file_info); - if (result != 0) return -1; + if (result != 0) return FAILURE; int file_length = file_info.st_size; - if (file_length == 0) return -1; + if (file_length == 0) return FAILURE; MemoryBuffer<uint8> buffer; buffer.Allocate(file_length); @@ -115,20 +73,13 @@ int ArchiveProcessor::ProcessFile(const char *filename) { // Test by reading in a tar.gz file and sending through the // progressive streaming system FILE *fp = fopen(filename, "rb"); - if (!fp) return -1; // can't open file! + if (!fp) return FAILURE; // can't open file! fread(p, sizeof(uint8), file_length, fp); fclose(fp); MemoryReadStream stream(p, file_length); - result = ProcessEntireStream(&stream); - - if (result == Z_STREAM_END) { - // if we got to the end of stream, then we're good... - result = Z_OK; - } - - return result; + return ProcessEntireStream(&stream); } } // namespace o3d |