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 */

Reply via email to