#include "raw_data.hpp" using namespace std; int mmap_data::patch(str_pairs list) { if (buf == nullptr) return 0; int count = 0; for (uint8_t *p = buf, *eof = buf + sz; p < eof; ++p) { for (auto [from, to] : list) { if (memcmp(p, from.data(), from.length() + 1) == 0) { LOGD("Replace [%s] -> [%s]\n", from.data(), to.data()); memset(p, 0, from.length()); memcpy(p, to.data(), to.length()); ++count; p += from.length(); } } } return count; } bool mmap_data::contains(string_view pattern) { if (buf == nullptr) return false; for (uint8_t *p = buf, *eof = buf + sz; p < eof; ++p) { if (memcmp(p, pattern.data(), pattern.length() + 1) == 0) { LOGD("Found pattern [%s]\n", pattern.data()); return true; } } return false; } void mmap_data::consume(mmap_data &other) { buf = other.buf; sz = other.sz; other.buf = nullptr; other.sz = 0; } mmap_data mmap_data::rw(const char *name) { mmap_data data; mmap_rw(name, data.buf, data.sz); return data; } mmap_data mmap_data::ro(const char *name) { mmap_data data; mmap_ro(name, data.buf, data.sz); return data; }