MCPcopy Create free account
hub / github.com/davidgiven/fluxengine / importModifiedFile

Function importModifiedFile

src/gui2/imhex_overrides/main_menu_items.cpp:137–169  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

135 }
136
137 void importModifiedFile() {
138 fs::openFileBrowser(fs::DialogMode::Open, {}, [](const auto &path) {
139 TaskManager::createTask("hex.ui.common.processing", TaskManager::NoProgress, [path](auto &task) {
140 auto provider = ImHexApi::Provider::get();
141 auto patchData = wolv::io::File(path, wolv::io::File::Mode::Read).readVector();
142
143 if (patchData.size() != provider->getActualSize()) {
144 ui::ToastError::open("hex.builtin.menu.file.import.modified_file.popup.invalid_size"_lang);
145 return;
146 }
147
148 const auto baseAddress = provider->getBaseAddress();
149
150 std::map<u64, u8> patches;
151 for (u64 i = 0; i < patchData.size(); i++) {
152 u8 value = 0;
153 provider->read(baseAddress + i, &value, 1);
154
155 if (value != patchData[i])
156 patches[baseAddress + i] = patchData[i];
157 }
158
159 task.setMaxValue(patches.size());
160
161 for (auto &[address, value] : patches) {
162 provider->write(address, &value, sizeof(value));
163 task.increment();
164 }
165
166 provider->getUndoStack().groupOperations(patches.size(), "hex.builtin.undo_operation.patches");
167 });
168 });
169 }
170
171 }
172

Callers

nothing calls this directly

Calls 5

getActualSizeMethod · 0.80
FileClass · 0.50
sizeMethod · 0.45
readMethod · 0.45
writeMethod · 0.45

Tested by

no test coverage detected