dfhack/scripts/binpatch.lua

45 lines
1.1 KiB
Lua

-- Apply or remove binary patches at runtime.
local bp = require('binpatch')
function run_command(cmd,name)
local pfix = name..': '
local patch, err = bp.load_dif_file(name)
if not patch then
dfhack.printerr(pfix..err)
return
end
if cmd == 'check' then
local status, addr = patch:status()
if status == 'conflict' then
dfhack.printerr(string.format('%sconflict at address %x', pfix, addr))
else
print(pfix..'patch is '..status)
end
elseif cmd == 'apply' then
local ok, msg = patch:apply()
if ok then
print(pfix..msg)
else
dfhack.printerr(pfix..msg)
end
elseif cmd == 'remove' then
local ok, msg = patch:remove()
if ok then
print(pfix..msg)
else
dfhack.printerr(pfix..msg)
end
else
qerror('Invalid command: '..cmd)
end
end
local cmd,name = ...
if not cmd or not name then
qerror('Usage: binpatch check/apply/remove <patchname>')
end
run_command(cmd, name)