| Index: net/base/bzip2_filter.cc
|
| ===================================================================
|
| --- net/base/bzip2_filter.cc (revision 33986)
|
| +++ net/base/bzip2_filter.cc (working copy)
|
| @@ -1,99 +0,0 @@
|
| -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "net/base/bzip2_filter.h"
|
| -
|
| -BZip2Filter::BZip2Filter(const FilterContext& filter_context)
|
| - : Filter(filter_context),
|
| - decoding_status_(DECODING_UNINITIALIZED),
|
| - bzip2_data_stream_(NULL) {
|
| -}
|
| -
|
| -BZip2Filter::~BZip2Filter() {
|
| - if (bzip2_data_stream_.get() &&
|
| - decoding_status_ != DECODING_UNINITIALIZED) {
|
| - BZ2_bzDecompressEnd(bzip2_data_stream_.get());
|
| - }
|
| -}
|
| -
|
| -bool BZip2Filter::InitDecoding(bool use_small_memory) {
|
| - if (decoding_status_ != DECODING_UNINITIALIZED)
|
| - return false;
|
| -
|
| - // Initialize zlib control block
|
| - bzip2_data_stream_.reset(new bz_stream);
|
| - if (!bzip2_data_stream_.get())
|
| - return false;
|
| - memset(bzip2_data_stream_.get(), 0, sizeof(bz_stream));
|
| -
|
| - int result = BZ2_bzDecompressInit(bzip2_data_stream_.get(),
|
| - 0,
|
| - use_small_memory ? 1 : 0);
|
| -
|
| - if (result != BZ_OK)
|
| - return false;
|
| -
|
| - decoding_status_ = DECODING_IN_PROGRESS;
|
| - return true;
|
| -}
|
| -
|
| -Filter::FilterStatus BZip2Filter::ReadFilteredData(char* dest_buffer,
|
| - int* dest_len) {
|
| - Filter::FilterStatus status = Filter::FILTER_ERROR;
|
| -
|
| - // check output
|
| - if (!dest_buffer || !dest_len || *dest_len <= 0)
|
| - return status;
|
| -
|
| - if (DECODING_DONE == decoding_status_) {
|
| - // this logic just follow gzip_filter, which be used to deal wth some
|
| - // server might send extra data after finish sending compress data
|
| - return CopyOut(dest_buffer, dest_len);
|
| - }
|
| -
|
| - if (decoding_status_ != DECODING_IN_PROGRESS)
|
| - return status;
|
| -
|
| - // Make sure we have valid input data
|
| - if (!next_stream_data_ || stream_data_len_ <= 0) {
|
| - *dest_len = 0;
|
| - return Filter::FILTER_NEED_MORE_DATA;
|
| - }
|
| -
|
| - // Fill in bzip2 control block
|
| - int ret, output_len = *dest_len;
|
| - *dest_len = 0;
|
| -
|
| - bzip2_data_stream_->next_in = next_stream_data_;
|
| - bzip2_data_stream_->avail_in = stream_data_len_;
|
| - bzip2_data_stream_->next_out = dest_buffer;
|
| - bzip2_data_stream_->avail_out = output_len;
|
| -
|
| - ret = BZ2_bzDecompress(bzip2_data_stream_.get());
|
| -
|
| - // get real output length, rest data and rest data length
|
| - *dest_len = output_len - bzip2_data_stream_->avail_out;
|
| -
|
| - if (0 == bzip2_data_stream_->avail_in) {
|
| - next_stream_data_ = NULL;
|
| - stream_data_len_ = 0;
|
| - } else {
|
| - next_stream_data_ = bzip2_data_stream_->next_in;
|
| - stream_data_len_ = bzip2_data_stream_->avail_in;
|
| - }
|
| -
|
| - if (BZ_OK == ret) {
|
| - if (stream_data_len_)
|
| - status = Filter::FILTER_OK;
|
| - else
|
| - status = Filter::FILTER_NEED_MORE_DATA;
|
| - } else if (BZ_STREAM_END == ret) {
|
| - status = Filter::FILTER_DONE;
|
| - decoding_status_ = DECODING_DONE;
|
| - } else {
|
| - decoding_status_ = DECODING_ERROR;
|
| - }
|
| -
|
| - return status;
|
| -}
|
|
|