blob: d854dd2c140fff4117645f0c7c537d05965657af [file] [log] [blame]
Alex Deymoaea4c1c2015-08-19 20:24:43 -07001//
2// Copyright (C) 2009 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15//
Andrew de los Reyes80061062010-02-04 14:25:00 -080016
Gilad Arnoldcf175a02014-07-10 16:48:47 -070017#ifndef UPDATE_ENGINE_BZIP_EXTENT_WRITER_H_
18#define UPDATE_ENGINE_BZIP_EXTENT_WRITER_H_
Andrew de los Reyes80061062010-02-04 14:25:00 -080019
Andrew de los Reyes80061062010-02-04 14:25:00 -080020#include <bzlib.h>
Alex Vakulenkof68bbbc2015-02-09 12:53:18 -080021#include <vector>
22
23#include <chromeos/secure_blob.h>
24
Andrew de los Reyes80061062010-02-04 14:25:00 -080025#include "update_engine/extent_writer.h"
26#include "update_engine/utils.h"
27
28// BzipExtentWriter is a concrete ExtentWriter subclass that bzip-decompresses
29// what it's given in Write. It passes the decompressed data to an underlying
30// ExtentWriter.
31
32namespace chromeos_update_engine {
33
34class BzipExtentWriter : public ExtentWriter {
35 public:
Alex Vakulenkod2779df2014-06-16 13:19:00 -070036 explicit BzipExtentWriter(ExtentWriter* next) : next_(next) {
Andrew de los Reyes80061062010-02-04 14:25:00 -080037 memset(&stream_, 0, sizeof(stream_));
38 }
39 ~BzipExtentWriter() {}
40
Nam T. Nguyenf1d582e2014-12-08 15:07:17 -080041 bool Init(FileDescriptorPtr fd,
42 const std::vector<Extent>& extents,
43 uint32_t block_size);
Andrew de los Reyes80061062010-02-04 14:25:00 -080044 bool Write(const void* bytes, size_t count);
45 bool EndImpl();
46
47 private:
48 ExtentWriter* const next_; // The underlying ExtentWriter.
49 bz_stream stream_; // the libbz2 stream
Alex Vakulenkof68bbbc2015-02-09 12:53:18 -080050 chromeos::Blob input_buffer_;
Andrew de los Reyes80061062010-02-04 14:25:00 -080051};
52
53} // namespace chromeos_update_engine
54
Gilad Arnoldcf175a02014-07-10 16:48:47 -070055#endif // UPDATE_ENGINE_BZIP_EXTENT_WRITER_H_