mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-12-02 18:21:51 +00:00
Update mmap implementation
Always map memory as writable, but private when read-only
This commit is contained in:
@@ -279,7 +279,6 @@ void *__mmap(const char *filename, size_t *size, bool rw) {
|
||||
return nullptr;
|
||||
}
|
||||
struct stat st;
|
||||
void *buf;
|
||||
if (fstat(fd, &st)) {
|
||||
*size = 0;
|
||||
return nullptr;
|
||||
@@ -288,7 +287,9 @@ void *__mmap(const char *filename, size_t *size, bool rw) {
|
||||
ioctl(fd, BLKGETSIZE64, size);
|
||||
else
|
||||
*size = st.st_size;
|
||||
buf = *size > 0 ? xmmap(nullptr, *size, PROT_READ | (rw ? PROT_WRITE : 0), MAP_SHARED, fd, 0) : nullptr;
|
||||
void *buf = *size > 0 ?
|
||||
xmmap(nullptr, *size, PROT_READ | PROT_WRITE, rw ? MAP_SHARED : MAP_PRIVATE, fd, 0) :
|
||||
nullptr;
|
||||
close(fd);
|
||||
return buf;
|
||||
}
|
||||
@@ -437,3 +438,16 @@ sDIR make_dir(DIR *dp) {
|
||||
sFILE make_file(FILE *fp) {
|
||||
return sFILE(fp, [](FILE *fp){ return fp ? fclose(fp) : 1; });
|
||||
}
|
||||
|
||||
raw_file::raw_file(raw_file &&o) {
|
||||
path.swap(o.path);
|
||||
attr = o.attr;
|
||||
buf = o.buf;
|
||||
sz = o.sz;
|
||||
o.buf = nullptr;
|
||||
o.sz = 0;
|
||||
}
|
||||
|
||||
raw_file::~raw_file() {
|
||||
free(buf);
|
||||
}
|
||||
|
||||
@@ -21,22 +21,13 @@ struct file_attr {
|
||||
struct raw_file {
|
||||
std::string path;
|
||||
file_attr attr;
|
||||
uint8_t *buf = nullptr;
|
||||
size_t sz = 0;
|
||||
uint8_t *buf;
|
||||
size_t sz;
|
||||
|
||||
raw_file() = default;
|
||||
raw_file() : attr({}), buf(nullptr), sz(0) {}
|
||||
raw_file(const raw_file&) = delete;
|
||||
raw_file(raw_file &&d) {
|
||||
path = std::move(d.path);
|
||||
attr = d.attr;
|
||||
buf = d.buf;
|
||||
sz = d.sz;
|
||||
d.buf = nullptr;
|
||||
d.sz = 0;
|
||||
}
|
||||
~raw_file() {
|
||||
free(buf);
|
||||
}
|
||||
raw_file(raw_file &&o);
|
||||
~raw_file();
|
||||
};
|
||||
|
||||
ssize_t fd_path(int fd, char *path, size_t size);
|
||||
|
||||
Reference in New Issue
Block a user