Hi,
using apr 1.5.1, but happens also with apr 1.5.0.
When compiling with the lastest Windows SDK for Win 8.1 and with
_WIN32_WINNT defined as >= 0x0502, apr_atomic.c fails to compile.
The attached patch fixes this for me.
I've added the #if defines as they appear in the windows headers so the
patch should only affect the newer SDKs.
Stefan
Index: atomic/win32/apr_atomic.c
===================================================================
--- atomic/win32/apr_atomic.c (revision 1590049)
+++ atomic/win32/apr_atomic.c (working copy)
@@ -44,7 +44,7 @@
APR_DECLARE(apr_uint32_t) apr_atomic_add32(volatile apr_uint32_t *mem,
apr_uint32_t val)
{
-#if (defined(_M_IA64) || defined(_M_AMD64))
+#if (defined(_M_IA64) || defined(_M_AMD64) || ((_WIN32_WINNT >= 0x0502) &&
defined(_WINBASE_) && !defined(_MANAGED)))
return InterlockedExchangeAdd(mem, val);
#elif defined(__MINGW32__)
return InterlockedExchangeAdd((long *)mem, val);
@@ -60,7 +60,7 @@
APR_DECLARE(void) apr_atomic_sub32(volatile apr_uint32_t *mem, apr_uint32_t
val)
{
-#if (defined(_M_IA64) || defined(_M_AMD64))
+#if (defined(_M_IA64) || defined(_M_AMD64) || ((_WIN32_WINNT >= 0x0502) &&
defined(_WINBASE_) && !defined(_MANAGED)))
InterlockedExchangeAdd(mem, -val);
#elif defined(__MINGW32__)
InterlockedExchangeAdd((long *)mem, -val);
@@ -72,7 +72,7 @@
APR_DECLARE(apr_uint32_t) apr_atomic_inc32(volatile apr_uint32_t *mem)
{
/* we return old value, win32 returns new value :( */
-#if (defined(_M_IA64) || defined(_M_AMD64)) && !defined(RC_INVOKED)
+#if (defined(_M_IA64) || defined(_M_AMD64) || ((_WIN32_WINNT >= 0x0502) &&
defined(_WINBASE_) && !defined(_MANAGED))) && !defined(RC_INVOKED)
return InterlockedIncrement(mem) - 1;
#elif defined(__MINGW32__)
return InterlockedIncrement((long *)mem) - 1;
@@ -83,7 +83,7 @@
APR_DECLARE(int) apr_atomic_dec32(volatile apr_uint32_t *mem)
{
-#if (defined(_M_IA64) || defined(_M_AMD64)) && !defined(RC_INVOKED)
+#if (defined(_M_IA64) || defined(_M_AMD64) || ((_WIN32_WINNT >= 0x0502) &&
defined(_WINBASE_) && !defined(_MANAGED))) && !defined(RC_INVOKED)
return InterlockedDecrement(mem);
#elif defined(__MINGW32__)
return InterlockedDecrement((long *)mem);
@@ -94,7 +94,7 @@
APR_DECLARE(void) apr_atomic_set32(volatile apr_uint32_t *mem, apr_uint32_t
val)
{
-#if (defined(_M_IA64) || defined(_M_AMD64)) && !defined(RC_INVOKED)
+#if (defined(_M_IA64) || defined(_M_AMD64) || ((_WIN32_WINNT >= 0x0502) &&
defined(_WINBASE_) && !defined(_MANAGED))) && !defined(RC_INVOKED)
InterlockedExchange(mem, val);
#elif defined(__MINGW32__)
InterlockedExchange((long*)mem, val);
@@ -111,7 +111,7 @@
APR_DECLARE(apr_uint32_t) apr_atomic_cas32(volatile apr_uint32_t *mem,
apr_uint32_t with,
apr_uint32_t cmp)
{
-#if (defined(_M_IA64) || defined(_M_AMD64)) && !defined(RC_INVOKED)
+#if (defined(_M_IA64) || defined(_M_AMD64) || ((_WIN32_WINNT >= 0x0502) &&
defined(_WINBASE_) && !defined(_MANAGED))) && !defined(RC_INVOKED)
return InterlockedCompareExchange(mem, with, cmp);
#elif defined(__MINGW32__)
return InterlockedCompareExchange((long*)mem, with, cmp);
@@ -122,7 +122,7 @@
APR_DECLARE(void *) apr_atomic_casptr(volatile void **mem, void *with, const
void *cmp)
{
-#if (defined(_M_IA64) || defined(_M_AMD64)) && !defined(RC_INVOKED)
+#if (defined(_M_IA64) || defined(_M_AMD64) || ((_WIN32_WINNT >= 0x0502) &&
defined(_WINBASE_) && !defined(_MANAGED))) && !defined(RC_INVOKED)
return InterlockedCompareExchangePointer((void* volatile*)mem, with,
(void*)cmp);
#elif defined(__MINGW32__)
return InterlockedCompareExchangePointer((void**)mem, with, (void*)cmp);
@@ -134,7 +134,7 @@
APR_DECLARE(apr_uint32_t) apr_atomic_xchg32(volatile apr_uint32_t *mem,
apr_uint32_t val)
{
-#if (defined(_M_IA64) || defined(_M_AMD64)) && !defined(RC_INVOKED)
+#if (defined(_M_IA64) || defined(_M_AMD64) || ((_WIN32_WINNT >= 0x0502) &&
defined(_WINBASE_) && !defined(_MANAGED))) && !defined(RC_INVOKED)
return InterlockedExchange(mem, val);
#elif defined(__MINGW32__)
return InterlockedExchange((long *)mem, val);
@@ -145,7 +145,7 @@
APR_DECLARE(void*) apr_atomic_xchgptr(volatile void **mem, void *with)
{
-#if (defined(_M_IA64) || defined(_M_AMD64) || defined(__MINGW32__)) &&
!defined(RC_INVOKED)
+#if (defined(_M_IA64) || defined(_M_AMD64) || ((_WIN32_WINNT >= 0x0502) &&
defined(_WINBASE_) && !defined(_MANAGED))) && !defined(RC_INVOKED)
return InterlockedExchangePointer((void**)mem, with);
#else
/* Too many VC6 users have stale win32 API files, stub this */