45 lines
1.1 KiB
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)
|