blob: 517fc4eb52f8b941262b3e99e193e86e57032fdf [file] [log] [blame]
Amin Hassani924183b2017-09-27 14:50:59 -07001//
2// Copyright (C) 2017 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//
16
17#ifndef UPDATE_ENGINE_PAYLOAD_GENERATOR_DEFLATE_UTILS_H_
18#define UPDATE_ENGINE_PAYLOAD_GENERATOR_DEFLATE_UTILS_H_
19
Colin Cross26b82b12021-12-22 10:09:19 -080020#include <string>
Amin Hassani924183b2017-09-27 14:50:59 -070021#include <vector>
22
Colin Cross26b82b12021-12-22 10:09:19 -080023#include <puffin/puffdiff.h>
24
Amin Hassani924183b2017-09-27 14:50:59 -070025#include "update_engine/payload_generator/filesystem_interface.h"
26#include "update_engine/payload_generator/payload_generation_config.h"
27
28namespace chromeos_update_engine {
29namespace deflate_utils {
30
Amin Hassani3cd4df12017-08-25 11:21:53 -070031// Gets the files from the partition and processes all its files. Processing
32// includes:
33// - splitting large Squashfs containers into its smaller files.
Sen Jiang23bae402018-11-13 11:27:29 -080034// - extracting deflates in zip and gzip files.
Sen Jiangce39e672018-11-28 16:43:00 -080035bool PreprocessPartitionFiles(const PartitionConfig& part,
36 std::vector<FilesystemInterface::File>* result,
37 bool extract_deflates);
Amin Hassani3cd4df12017-08-25 11:21:53 -070038
Amin Hassani924183b2017-09-27 14:50:59 -070039// Spreads all extents in |over_extents| over |base_extents|. Here we assume the
Amin Hassani3cd4df12017-08-25 11:21:53 -070040// |over_extents| are non-overlapping and sorted by their offset.
Amin Hassani924183b2017-09-27 14:50:59 -070041//
42// |base_extents|:
43// | ----------------------- ------ --------------
44// |over_extents|:
45// | ========== ==== ========== ======
46// |over_extents| is transforms to:
47// | ========== ==== = ====== === ======
48//
49bool ShiftExtentsOverExtents(const std::vector<Extent>& base_extents,
50 std::vector<Extent>* over_extents);
51
Amin Hassani3cd4df12017-08-25 11:21:53 -070052// Spreads all extents in |over_extents| over |base_extents|. Here we assume the
53// |over_extents| are non-overlapping and sorted by their offset. An item in
54// |over_extents| is removed if it is spread in two or more extents in
55// |base_extents|.
56//
57// |base_extents|:
58// | ----------------------- ------ --------------
59// |over_extents|:
60// | ========== ==== ========== ======
61// |over_extents| is transforms to:
62// | ========== ==== ======
63//
64bool ShiftBitExtentsOverExtents(const std::vector<Extent>& base_extents,
65 std::vector<puffin::BitExtent>* over_extents);
66
67// Finds all deflate locations in |deflates| that are inside an Extent in
68// |extents|. This function should not change the order of deflates.
69std::vector<puffin::BitExtent> FindDeflates(
70 const std::vector<Extent>& extents,
71 const std::vector<puffin::BitExtent>& deflates);
72
73// Creates a new list of deflate locations (|out_deflates|) from |in_deflates|
74// by assuming all extents in the |extents| have been put together
75// linearly. This function assumes that all deflate locations given in
76// |in_deflates| are located somewhere in the |extents|. |out_deflates| should
77// be empty on call.
78//
79// |extents|:
80// | ----------------------- ------ --------------
81// |in_deflates|:
82// | ======== ==== ==== ======
83// |out_deflates|:
84// | ======== ==== ==== ======
85//
86bool CompactDeflates(const std::vector<Extent>& extents,
87 const std::vector<puffin::BitExtent>& in_deflates,
88 std::vector<puffin::BitExtent>* out_deflates);
89
90// Combines |FindDeflates| and |CompcatDeflates| for ease of use.
91bool FindAndCompactDeflates(const std::vector<Extent>& extents,
92 const std::vector<puffin::BitExtent>& in_deflates,
93 std::vector<puffin::BitExtent>* out_deflates);
94
95// Expands a BitExtents to a ByteExtent.
96puffin::ByteExtent ExpandToByteExtent(const puffin::BitExtent& extent);
Amin Hassani924183b2017-09-27 14:50:59 -070097
Kelvin Zhangcb2dc882021-11-22 09:26:50 -080098bool IsFileExtensions(
99 const std::string_view name,
100 const std::initializer_list<std::string_view>& extensions);
101
102bool DeflatePreprocessFileData(const std::string_view filename,
103 const brillo::Blob& data,
104 std::vector<puffin::BitExtent>* deflates);
Kelvin Zhang0af01222021-10-05 13:36:47 -0700105
Amin Hassani924183b2017-09-27 14:50:59 -0700106} // namespace deflate_utils
107} // namespace chromeos_update_engine
108#endif // UPDATE_ENGINE_PAYLOAD_GENERATOR_DEFLATE_UTILS_H_