blob: acffbac39a2059b6c8c32288a37a19de554aa8ed [file] [log] [blame]
Andrew de los Reyes80061062010-02-04 14:25:00 -08001// Copyright (c) 2009 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_BZIP_EXTENT_WRITER_H__
6#define CHROMEOS_PLATFORM_UPDATE_ENGINE_BZIP_EXTENT_WRITER_H__
7
8#include <vector>
9#include <bzlib.h>
10#include "update_engine/extent_writer.h"
11#include "update_engine/utils.h"
12
13// BzipExtentWriter is a concrete ExtentWriter subclass that bzip-decompresses
14// what it's given in Write. It passes the decompressed data to an underlying
15// ExtentWriter.
16
17namespace chromeos_update_engine {
18
19class BzipExtentWriter : public ExtentWriter {
20 public:
21 BzipExtentWriter(ExtentWriter* next) : next_(next) {
22 memset(&stream_, 0, sizeof(stream_));
23 }
24 ~BzipExtentWriter() {}
25
Andrew de los Reyes09e56d62010-04-23 13:45:53 -070026 bool Init(int fd, const std::vector<Extent>& extents, uint32_t block_size);
Andrew de los Reyes80061062010-02-04 14:25:00 -080027 bool Write(const void* bytes, size_t count);
28 bool EndImpl();
29
30 private:
31 ExtentWriter* const next_; // The underlying ExtentWriter.
32 bz_stream stream_; // the libbz2 stream
33 std::vector<char> input_buffer_;
34};
35
36} // namespace chromeos_update_engine
37
38#endif // CHROMEOS_PLATFORM_UPDATE_ENGINE_BZIP_EXTENT_WRITER_H__