extend versionhelpers
This commit is contained in:
parent
cc97cc0761
commit
6626480358
13 changed files with 140 additions and 53 deletions
72
src/versionhelpers.c
Normal file
72
src/versionhelpers.c
Normal file
|
@ -0,0 +1,72 @@
|
|||
#include <windows.h>
|
||||
#include "versionhelpers.h"
|
||||
|
||||
typedef NTSTATUS(WINAPI* RTLVERIFYVERSIONINFOPROC)(PRTL_OSVERSIONINFOEXW, ULONG, ULONGLONG);
|
||||
typedef const char* (CDECL* WINE_GET_VERSIONPROC)();
|
||||
typedef void (CDECL* WINE_GET_HOST_VERSIONPROC)(const char** sysname, const char** release);
|
||||
|
||||
static RTLVERIFYVERSIONINFOPROC RtlVerifyVersionInfo;
|
||||
static WINE_GET_VERSIONPROC wine_get_version;
|
||||
static WINE_GET_HOST_VERSIONPROC wine_get_host_version;
|
||||
|
||||
/* GetProcAddress is rather slow so we use a function to inizialize it once on startup */
|
||||
void verhelp_init()
|
||||
{
|
||||
HMODULE mod = GetModuleHandleA("ntdll.dll");
|
||||
if (mod)
|
||||
{
|
||||
RtlVerifyVersionInfo = (RTLVERIFYVERSIONINFOPROC)GetProcAddress(mod, "RtlVerifyVersionInfo");
|
||||
wine_get_version = (WINE_GET_VERSIONPROC)GetProcAddress(mod, "wine_get_version");
|
||||
wine_get_host_version = (WINE_GET_HOST_VERSIONPROC)GetProcAddress(mod, "wine_get_host_version");
|
||||
}
|
||||
}
|
||||
|
||||
BOOL verhelp_verify_version(PRTL_OSVERSIONINFOEXW versionInfo, ULONG typeMask, ULONGLONG conditionMask)
|
||||
{
|
||||
return RtlVerifyVersionInfo ?
|
||||
RtlVerifyVersionInfo(versionInfo, typeMask, conditionMask) == 0 :
|
||||
VerifyVersionInfoW(versionInfo, typeMask, conditionMask);
|
||||
}
|
||||
|
||||
const char* verhelp_wine_get_version()
|
||||
{
|
||||
return wine_get_version ? wine_get_version() : NULL;
|
||||
}
|
||||
|
||||
void verhelp_wine_get_host_version(const char** sysname, const char** release)
|
||||
{
|
||||
if (wine_get_host_version)
|
||||
{
|
||||
wine_get_host_version(sysname, release);
|
||||
return;
|
||||
}
|
||||
|
||||
if (sysname)
|
||||
*sysname = NULL;
|
||||
|
||||
if (release)
|
||||
*release = NULL;
|
||||
}
|
||||
|
||||
BOOL verhelp_is_wine()
|
||||
{
|
||||
return wine_get_version != NULL;
|
||||
}
|
||||
|
||||
BOOL verhelp_is_macos()
|
||||
{
|
||||
const char* sysname = NULL;
|
||||
const char* release = NULL;
|
||||
verhelp_wine_get_host_version(&sysname, &release);
|
||||
|
||||
return sysname && _strcmpi(sysname, "Darwin") == 0;
|
||||
}
|
||||
|
||||
BOOL verhelp_is_linux()
|
||||
{
|
||||
const char* sysname = NULL;
|
||||
const char* release = NULL;
|
||||
verhelp_wine_get_host_version(&sysname, &release);
|
||||
|
||||
return sysname && _strcmpi(sysname, "Linux") == 0;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue