blob: 8a79e13034e8242b8e9f37b79170f5fee3511678 [file] [log] [blame]
Aaron Wisnerdb511202018-06-26 15:38:35 -05001#pragma once
2
3#include <inttypes.h>
4#include <stdlib.h>
5
6#include <string>
David Andersonaa87dc52023-01-27 20:39:06 -08007#include <vector>
Aaron Wisnerdb511202018-06-26 15:38:35 -05008
Dmitrii Merkurev0ee285a2023-02-11 00:02:22 +00009#include <android-base/logging.h>
10#include <android-base/result.h>
David Andersonaa87dc52023-01-27 20:39:06 -080011#include <android-base/unique_fd.h>
Aaron Wisnerdb511202018-06-26 15:38:35 -050012#include <bootimg.h>
David Andersonaa87dc52023-01-27 20:39:06 -080013#include <liblp/liblp.h>
14#include <sparse/sparse.h>
15
Dmitrii Merkurev0ee285a2023-02-11 00:02:22 +000016using android::base::ErrnoError;
17using android::base::Error;
18using android::base::Result;
19using android::base::ResultError;
20
Dmitrii Merkurev47855542023-02-28 21:02:48 +000021template <typename T, typename U>
22inline T Expect(Result<T, U> r) {
23 if (r.ok()) {
24 return r.value();
25 }
26
27 LOG(FATAL) << r.error().message();
28
29 return r.value();
30}
Dmitrii Merkurev0ee285a2023-02-11 00:02:22 +000031
David Andersonaa87dc52023-01-27 20:39:06 -080032using SparsePtr = std::unique_ptr<sparse_file, decltype(&sparse_file_destroy)>;
Aaron Wisnerdb511202018-06-26 15:38:35 -050033
34/* util stuff */
35double now();
Aaron Wisnerdb511202018-06-26 15:38:35 -050036void set_verbose();
37
Aaron Wisnerdb511202018-06-26 15:38:35 -050038// These printf-like functions are implemented in terms of vsnprintf, so they
39// use the same attribute for compile-time format string checking.
40void die(const char* fmt, ...) __attribute__((__noreturn__))
41__attribute__((__format__(__printf__, 1, 2)));
David Anderson7c84b9f2019-06-27 22:15:29 -070042
Aaron Wisnerdb511202018-06-26 15:38:35 -050043void verbose(const char* fmt, ...) __attribute__((__format__(__printf__, 1, 2)));
David Anderson7c84b9f2019-06-27 22:15:29 -070044
45void die(const std::string& str) __attribute__((__noreturn__));
David Andersonaa87dc52023-01-27 20:39:06 -080046
47bool should_flash_in_userspace(const android::fs_mgr::LpMetadata& metadata,
48 const std::string& partition_name);
49bool is_sparse_file(android::base::borrowed_fd fd);
50int64_t get_file_size(android::base::borrowed_fd fd);
51
52class ImageSource {
53 public:
54 virtual ~ImageSource(){};
55 virtual bool ReadFile(const std::string& name, std::vector<char>* out) const = 0;
56 virtual android::base::unique_fd OpenFile(const std::string& name) const = 0;
57};