diff options
| author | 2025-04-16 02:13:01 +0100 | |
|---|---|---|
| committer | 2025-04-16 21:31:20 +0100 | |
| commit | 4fddfa831d2a33ab3eee7ceb5f181c82d5aa78d2 (patch) | |
| tree | f62a0fc1a0b3d7ffcd7967b98885453636309686 /src/fastfwd.c | |
| parent | 5c805aac744df43dd96f70bc7e39337d9c3a966a (diff) | |
| download | sst-4fddfa831d2a33ab3eee7ceb5f181c82d5aa78d2.tar.gz sst-4fddfa831d2a33ab3eee7ceb5f181c82d5aa78d2.zip  | |
Rework API for inline hooking
This both simplifies and complicates things, but probably hopefully
maybe simplifies things overall. Certainly in cases like the L4D1 demo
thing where there's 3 inline hooks at once, it seems simpler to be able
to batch the fallible stuff to avoid rollbacks. In cases where you only
need one hook, it's a bit more verbose, but what can you do.
Thanks bill for discussing this with me pretty exhaustively and giving a
lot of good input.
I think both of us still kind of hate it actually.
Diffstat (limited to 'src/fastfwd.c')
| -rw-r--r-- | src/fastfwd.c | 15 | 
1 files changed, 7 insertions, 8 deletions
diff --git a/src/fastfwd.c b/src/fastfwd.c index 73db41e..1b7588d 100644 --- a/src/fastfwd.c +++ b/src/fastfwd.c @@ -232,19 +232,18 @@ INIT {  		return FEAT_INCOMPAT;  	}  	if_cold (!(func = find_floatcall(func, 1, "_Host_RunFrame"))) { -		errmsg_errorx("couldn't find _Host_RunFrame"); +		errmsg_errorx("couldn't find _Host_RunFrame function");  		return FEAT_INCOMPAT;  	}  	if_cold (!find_Host_AccumulateTime(func)) { -		errmsg_errorx("couldn't find Host_AccumulateTime"); +		errmsg_errorx("couldn't find Host_AccumulateTime function");  		return FEAT_INCOMPAT;  	} -	orig_Host_AccumulateTime = (Host_AccumulateTime_func)hook_inline( -			(void *)orig_Host_AccumulateTime, (void *)hook_Host_AccumulateTime); -	if_cold (!orig_Host_AccumulateTime) { -		errmsg_errorsys("couldn't hook Host_AccumulateTime function"); -		return FEAT_FAIL; -	} +	struct hook_inline_featsetup_ret h = hook_inline_featsetup( +			(void *)orig_Host_AccumulateTime, (void **)&orig_Host_AccumulateTime, +			"Host_AccumulateTime"); +	if_cold (h.err) return h.err; +	hook_inline_commit(h.prologue, (void *)&hook_Host_AccumulateTime);  	return FEAT_OK;  }  | 
