diff options
Diffstat (limited to 'src/ac.c')
| -rw-r--r-- | src/ac.c | 23 | 
1 files changed, 10 insertions, 13 deletions
| @@ -1,5 +1,5 @@  /* - * Copyright © 2024 Michael Smith <mikesmiffy128@gmail.com> + * Copyright © 2025 Michael Smith <mikesmiffy128@gmail.com>   * Copyright © 2023 Willian Henrique <wsimanbrazil@yahoo.com.br>   *   * Permission to use, copy, modify, and/or distribute this software for any @@ -32,13 +32,13 @@  #include "crypto.h"  #include "democustom.h"  #include "demorec.h" -#include "hook.h"  #include "engineapi.h"  #include "errmsg.h"  #include "event.h"  #include "feature.h"  #include "gamedata.h"  #include "gametype.h" +#include "hook.h"  #include "intdefs.h"  #include "langext.h"  #include "mem.h" @@ -50,6 +50,7 @@  #include "x86util.h"  FEATURE() +GAMESPECIFIC(L4D) // TODO(compat): wanna add support for more stuff, obviously!  REQUIRE(bind)  REQUIRE(democustom)  REQUIRE_GAMEDATA(vtidx_GetDesktopResolution) @@ -291,7 +292,7 @@ static void hook_Key_Event(struct inputevent *ev) {  	//const char *desc[] = {"DOWN", "UP", "DBL"};  	//const char desclen[] = {4, 2, 3};  	switch (ev->type) { -		CASES(BTNDOWN, BTNUP, BTNDOUBLECLICK):; +		CASES(BTNDOWN, BTNUP, BTNDOUBLECLICK):  			// TODO(rta): do something interesting with button data  			//uchar buf[28], *p = buf;  			//msg_putasz4(p, 2); p += 1; @@ -378,24 +379,20 @@ HANDLE_EVENT(PluginUnloaded, void) {  	// TODO(rta): do something with plugin list here  } -PREINIT { -	return GAMETYPE_MATCHES(L4D); // TODO(compat): add more here obviously -} -  INIT { -	if_cold (!find_Key_Event()) return false; +	if_cold (!find_Key_Event()) return FEAT_INCOMPAT;  	orig_Key_Event = (Key_Event_func)hook_inline((void *)orig_Key_Event,  			(void *)&hook_Key_Event);  	if_cold (!orig_Key_Event) {  		errmsg_errorsys("couldn't hook Key_Event function"); -		return false; +		return FEAT_FAIL;  	}  #ifdef _WIN32  	keybox = VirtualAlloc(0, 4096, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);  	if_cold (!keybox) {  		errmsg_errorsys("couldn't allocate memory for session state"); -		return false; +		return FEAT_FAIL;  	}  	if_cold (!VirtualLock(keybox, 4096)) {  		errmsg_errorsys("couldn't secure session state"); @@ -411,7 +408,7 @@ INIT {  	keybox = mmap(0, 4096, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0);  	if_cold (keybox == MAP_FAILED) {  		errmsg_errorstd("couldn't allocate memory for session state"); -		return false; +		return FEAT_FAIL;  	}  	// linux-specific madvise stuff (there are some equivalents in OpenBSD and  	// FreeBSD, if anyone's wondering, but we don't need to worry about those) @@ -432,7 +429,7 @@ INIT {  		// run of bytes  		memcpy(keybox->lbpub, lbpubkeys[LBPK_L4D], 32);  	} -	return true; +	return FEAT_OK;  #ifdef _WIN32  e:	WerUnregisterExcludedMemoryBlock(keybox); // this'd better not fail! @@ -441,7 +438,7 @@ e2:	VirtualFree(keybox, 4096, MEM_RELEASE);  e:	munmap(keybox, 4096);  #endif  	unhook_inline((void *)orig_Key_Event); -	return false; +	return FEAT_FAIL;  }  END { | 
