mirror of
https://github.com/topjohnwu/Magisk.git
synced 2024-12-25 07:17:38 +00:00
Macro -> template
This commit is contained in:
parent
384c257a74
commit
2d82ad93dd
@ -291,11 +291,11 @@ dyn_img_hdr *boot_img::create_hdr(uint8_t *addr, format_t type) {
|
|||||||
#define get_block(name) \
|
#define get_block(name) \
|
||||||
name = hdr_addr + off; \
|
name = hdr_addr + off; \
|
||||||
off += hdr->name##_size(); \
|
off += hdr->name##_size(); \
|
||||||
off = do_align(off, hdr->page_size());
|
off = align_to(off, hdr->page_size());
|
||||||
|
|
||||||
#define get_ignore(name) \
|
#define get_ignore(name) \
|
||||||
if (hdr->name##_size()) { \
|
if (hdr->name##_size()) { \
|
||||||
auto blk_sz = do_align(hdr->name##_size(), hdr->page_size()); \
|
auto blk_sz = align_to(hdr->name##_size(), hdr->page_size()); \
|
||||||
ignore_size += blk_sz; \
|
ignore_size += blk_sz; \
|
||||||
off += blk_sz; \
|
off += blk_sz; \
|
||||||
}
|
}
|
||||||
@ -505,7 +505,7 @@ int unpack(const char *image, bool skip_decomp, bool hdr) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define file_align_with(page_size) \
|
#define file_align_with(page_size) \
|
||||||
write_zero(fd, align_off(lseek(fd, 0, SEEK_CUR) - off.header, page_size))
|
write_zero(fd, align_padding(lseek(fd, 0, SEEK_CUR) - off.header, page_size))
|
||||||
|
|
||||||
#define file_align() file_align_with(boot.hdr->page_size())
|
#define file_align() file_align_with(boot.hdr->page_size())
|
||||||
|
|
||||||
|
@ -523,7 +523,7 @@ struct dyn_img_vnd_v3 : public dyn_img_hdr_vendor {
|
|||||||
impl_val(header_size)
|
impl_val(header_size)
|
||||||
impl_val(dtb_size)
|
impl_val(dtb_size)
|
||||||
|
|
||||||
size_t hdr_space() override { auto sz = page_size(); return do_align(hdr_size(), sz); }
|
size_t hdr_space() override { return align_to(hdr_size(), page_size()); }
|
||||||
|
|
||||||
// Make API compatible
|
// Make API compatible
|
||||||
char *extra_cmdline() override { return &v4_vnd->cmdline[BOOT_ARGS_SIZE]; }
|
char *extra_cmdline() override { return &v4_vnd->cmdline[BOOT_ARGS_SIZE]; }
|
||||||
|
@ -111,7 +111,7 @@ bool cpio::exists(const char *name) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define do_out(buf, len) pos += fwrite(buf, 1, len, out);
|
#define do_out(buf, len) pos += fwrite(buf, 1, len, out);
|
||||||
#define out_align() do_out(zeros, align_off(pos, 4))
|
#define out_align() do_out(zeros, align_padding(pos, 4))
|
||||||
void cpio::dump(FILE *out) {
|
void cpio::dump(FILE *out) {
|
||||||
size_t pos = 0;
|
size_t pos = 0;
|
||||||
unsigned inode = 300000;
|
unsigned inode = 300000;
|
||||||
@ -211,7 +211,7 @@ bool cpio::mv(const char *from, const char *to) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define pos_align(p) p = do_align(p, 4)
|
#define pos_align(p) p = align_to(p, 4)
|
||||||
|
|
||||||
void cpio::load_cpio(const char *buf, size_t sz) {
|
void cpio::load_cpio(const char *buf, size_t sz) {
|
||||||
size_t pos = 0;
|
size_t pos = 0;
|
||||||
|
@ -297,8 +297,8 @@ static bool dt_table_patch(const Header *hdr, const char *out) {
|
|||||||
auto size = fdt_totalsize(fdt);
|
auto size = fdt_totalsize(fdt);
|
||||||
total_size += xwrite(fd, fdt, size);
|
total_size += xwrite(fd, fdt, size);
|
||||||
if constexpr (!is_aosp) {
|
if constexpr (!is_aosp) {
|
||||||
val.second.len = do_align(size, align);
|
val.second.len = align_to(size, align);
|
||||||
write_zero(fd, align_off(lseek(fd, 0, SEEK_CUR), align));
|
write_zero(fd, align_padding(lseek(fd, 0, SEEK_CUR), align));
|
||||||
}
|
}
|
||||||
free(fdt);
|
free(fdt);
|
||||||
}
|
}
|
||||||
|
@ -10,8 +10,16 @@
|
|||||||
|
|
||||||
#include "xwrap.hpp"
|
#include "xwrap.hpp"
|
||||||
|
|
||||||
#define do_align(p, a) (((p) + (a) - 1) / (a) * (a))
|
template <typename T>
|
||||||
#define align_off(p, a) (do_align(p, a) - (p))
|
static inline T align_to(T v, int a) {
|
||||||
|
static_assert(std::is_integral<T>::value);
|
||||||
|
return (v + a - 1) / a * a;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
static inline T align_padding(T v, int a) {
|
||||||
|
return align_to(v, a) - v;
|
||||||
|
}
|
||||||
|
|
||||||
struct file_attr {
|
struct file_attr {
|
||||||
struct stat st;
|
struct stat st;
|
||||||
|
@ -20,7 +20,7 @@ void *memory_block::allocate(size_t sz) {
|
|||||||
nullptr, CAPACITY, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0));
|
nullptr, CAPACITY, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0));
|
||||||
_curr = _area;
|
_curr = _area;
|
||||||
}
|
}
|
||||||
return _curr.fetch_add(do_align(sz, ALIGN));
|
return _curr.fetch_add(align_to(sz, ALIGN));
|
||||||
}
|
}
|
||||||
|
|
||||||
void memory_block::release() {
|
void memory_block::release() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user