diff --git a/source/lib/byte_order.h b/source/lib/byte_order.h index cec2d9c3c0..cacc2dcac4 100644 --- a/source/lib/byte_order.h +++ b/source/lib/byte_order.h @@ -127,15 +127,16 @@ LIB_API i64 movsx_le64(const u8* p, size_t size); LIB_API i64 movsx_be64(const u8* p, size_t size); -#if MSC_VERSION +#if ICC_VERSION +#define swap32 _bswap +#define swap64 _bswap64 +#elif MSC_VERSION extern unsigned short _byteswap_ushort(unsigned short); extern unsigned long _byteswap_ulong(unsigned long); extern unsigned __int64 _byteswap_uint64(unsigned __int64); -# if !ICC_VERSION // ICC doesn't need (and warns about) the pragmas -# pragma intrinsic(_byteswap_ushort) -# pragma intrinsic(_byteswap_ulong) -# pragma intrinsic(_byteswap_uint64) -# endif +#pragma intrinsic(_byteswap_ushort) +#pragma intrinsic(_byteswap_ulong) +#pragma intrinsic(_byteswap_uint64) # define swap16 _byteswap_ushort # define swap32 _byteswap_ulong # define swap64 _byteswap_uint64 diff --git a/source/lib/code_annotation.h b/source/lib/code_annotation.h index 2abd599ebf..101a907b71 100644 --- a/source/lib/code_annotation.h +++ b/source/lib/code_annotation.h @@ -27,12 +27,20 @@ #ifndef INCLUDED_CODE_ANNOTATION #define INCLUDED_CODE_ANNOTATION +#include "lib/sysdep/compiler.h" + /** * mark a function local variable or parameter as unused and avoid * the corresponding compiler warning. * use inside the function body, e.g. void f(int x) { UNUSED2(x); } **/ -#define UNUSED2(param) (void)param; +#if ICC_VERSION +// NB: #pragma unused is documented but "unrecognized" when used; +// casting to void isn't sufficient, but the following is: +# define UNUSED2(param) param = param +#else +# define UNUSED2(param) (void)param +#endif /** * mark a function parameter as unused and avoid diff --git a/source/lib/sysdep/os/win/mahaf.cpp b/source/lib/sysdep/os/win/mahaf.cpp index eb800afb25..dd23328fdb 100644 --- a/source/lib/sysdep/os/win/mahaf.cpp +++ b/source/lib/sysdep/os/win/mahaf.cpp @@ -218,7 +218,7 @@ static SC_HANDLE OpenServiceControlManager() // Least-Permission accounts to use it, but is too invasive and // thus out of the question. - // make sure the error is as expected, otherwise something is afoot. + // rule out other problems debug_assert(GetLastError() == ERROR_ACCESS_DENIED); return 0; @@ -286,9 +286,10 @@ static void StartDriver(const fs::wpath& driverPathname) if(!hService) { LPCWSTR startName = 0; // LocalSystem + // NB: Windows 7 seems to insist upon backslashes (i.e. external_file_string) hService = CreateServiceW(hSCM, AKEN_NAME, AKEN_NAME, SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, - driverPathname.string().c_str(), 0, 0, 0, startName, 0); + driverPathname.external_file_string().c_str(), 0, 0, 0, startName, 0); debug_assert(hService != 0); } @@ -302,7 +303,7 @@ static void StartDriver(const fs::wpath& driverPathname) { // starting failed. don't raise a warning because this // always happens on least-permission user accounts. - //WARN_IF_FALSE(0); + //debug_assert(0); } } } @@ -340,7 +341,7 @@ static fs::wpath DriverPathname() static LibError Init() { if(wutil_HasCommandLineArgument(L"-wNoMahaf")) - return ERR::NOT_SUPPORTED; + return ERR::NOT_SUPPORTED; // NOWARN { const fs::wpath driverPathname = DriverPathname(); @@ -351,7 +352,7 @@ static LibError Init() const DWORD shareMode = 0; hAken = CreateFileW(L"\\\\.\\Aken", GENERIC_READ, shareMode, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if(hAken == INVALID_HANDLE_VALUE) - return ERR::INVALID_HANDLE; + return ERR::INVALID_HANDLE; // NOWARN (happens often due to security restrictions) } return INFO::OK; @@ -365,6 +366,7 @@ static void Shutdown() UninstallDriver(); } + static ModuleInitState initState; LibError mahaf_Init()