Patched stdlib changes to compile on Windows.
diff --git a/src/atomic/SDL_atomic.c b/src/atomic/SDL_atomic.c
index 60d6f51..265d0bd5 100644
--- a/src/atomic/SDL_atomic.c
+++ b/src/atomic/SDL_atomic.c
@@ -152,7 +152,9 @@
 void*
 SDL_AtomicSetPtr(void **a, void *v)
 {
-#ifdef HAVE_MSC_ATOMICS
+#if defined(HAVE_MSC_ATOMICS) && (_M_IX86)
+    return (void *) _InterlockedExchange((long *)a, (long) v);
+#elif defined(HAVE_MSC_ATOMICS) && (!_M_IX86)
     return _InterlockedExchangePointer(a, v);
 #elif defined(HAVE_GCC_ATOMICS)
     return __sync_lock_test_and_set(a, v);
diff --git a/src/stdlib/SDL_getenv.c b/src/stdlib/SDL_getenv.c
index 10fa7c5..55b93e3 100644
--- a/src/stdlib/SDL_getenv.c
+++ b/src/stdlib/SDL_getenv.c
@@ -26,13 +26,12 @@
 
 #include "SDL_stdinc.h"
 
-#if !defined(SDL_setenv) && defined(__WIN32__)
+#if defined(__WIN32__) && (!defined(HAVE_SETENV) || !defined(HAVE_GETENV))
 /* Note this isn't thread-safe! */
 static char *SDL_envmem = NULL; /* Ugh, memory leak */
 static size_t SDL_envmemlen = 0;
 #endif
 
-
 /* Put a variable into the environment */
 #if defined(HAVE_SETENV)
 int
diff --git a/src/stdlib/SDL_string.c b/src/stdlib/SDL_string.c
index d291f38..be07ebb 100644
--- a/src/stdlib/SDL_string.c
+++ b/src/stdlib/SDL_string.c
@@ -986,7 +986,7 @@
 }
 #else
 int
-SDL_vsscanf(const char *text, const char *fmt, ...)
+SDL_vsscanf(const char *text, const char *fmt, va_list ap)
 {
     int retval = 0;