From 00ad7cdd3d05d09a43bda972c823fdc440feabb9 Mon Sep 17 00:00:00 2001 From: Michael Smith Date: Thu, 24 Mar 2022 02:06:28 +0000 Subject: Clean up gameinfo_init() and other random stuff - Just ask the engine for the game directory instead of doing the stupid argv sniffing hacks from the early days of trying to get the damn thing working. - Also add some other path variables, functions and whatnot, and do some other minor tidying up. - Also also, another damn copyright year, somebody please help me. Unfortunate negative effect off this change: con_init() no longer reports the game name, because it has to happen before gameinfo_init(). I've decided I don't really care, though. --- src/os-win32.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src/os-win32.h') diff --git a/src/os-win32.h b/src/os-win32.h index fb31d67..c7c0bae 100644 --- a/src/os-win32.h +++ b/src/os-win32.h @@ -41,6 +41,7 @@ typedef unsigned short os_char; #define _stat64(path, buf) _wstat64(path, buf) #define os_stat _stat64 #define os_getenv _wgetenv +#define os_getcwd _wgetcwd #define OS_DLSUFFIX ".dll" @@ -50,6 +51,18 @@ static inline void *os_dlsym(void *m, const char *s) { return (void *)GetProcAddress(m, s); } +static inline bool os_dlfile(void *m, unsigned short *buf, int sz) { + unsigned int n = GetModuleFileNameW(m, buf, sz); + if (n == 0 || n == sz) return false; + // get the canonical capitalisation, as for some reason GetModuleFileName() + // returns all lowercase. this doesn't really matter except it looks nicer + GetLongPathNameW(buf, buf, n + 1); + // the drive letter will also be lower case, if it is an actual drive letter + // of course. it should be; I'm not gonna lose sleep over UNC paths and such + if (buf[0] >= L'a' && buf[0] <= L'z' && buf[1] == L':') buf[0] &= ~32u; + return true; +} + static inline bool os_mprot(void *addr, int len, int fl) { unsigned long old; return !!VirtualProtect(addr, len, fl, &old); -- cgit v1.2.3