Index: include/__config
===================================================================
--- include/__config	(revision 191942)
+++ include/__config	(working copy)
@@ -86,6 +86,10 @@
 #  endif
 #endif  // _WIN32
 
+#ifdef __MINGW32__
+#  define __USE_MINGW_ANSI_STDIO 1
+#endif
+
 #ifdef __linux__
 #  if defined(__GNUC__) && _GNUC_VER >= 403
 #    define _LIBCPP_HAS_IS_BASE_OF
Index: include/support/win32/locale_win32.h
===================================================================
--- include/support/win32/locale_win32.h	(revision 191942)
+++ include/support/win32/locale_win32.h	(working copy)
@@ -103,9 +103,9 @@
 #define sscanf_l( __s, __l, __f, ...) _sscanf_l( __s, __f, __l, __VA_ARGS__ )
 #define vsscanf_l( __s, __l, __f, ...) _sscanf_l( __s, __f, __l, __VA_ARGS__ )
 #define sprintf_l( __s, __l, __f, ... ) _sprintf_l( __s, __f, __l, __VA_ARGS__ )
-#define snprintf_l( __s, __n, __l, __f, ... ) _snprintf_l( __s, __n, __f, __l, __VA_ARGS__ )
 #define vsprintf_l( __s, __l, __f, ... ) _vsprintf_l( __s, __f, __l, __VA_ARGS__ )
 #define vsnprintf_l( __s, __n, __l, __f, ... ) _vsnprintf_l( __s, __n, __f, __l, __VA_ARGS__ )
+int snprintf_l(char *ret, size_t n, locale_t loc, const char *format, ...);
 int asprintf_l( char **ret, locale_t loc, const char *format, ... );
 int vasprintf_l( char **ret, locale_t loc, const char *format, va_list ap );
 
Index: src/support/win32/locale_win32.cpp
===================================================================
--- src/support/win32/locale_win32.cpp	(revision 191942)
+++ src/support/win32/locale_win32.cpp	(working copy)
@@ -80,6 +80,16 @@
     return wctob( c );
 }
 
+int snprintf_l(char *ret, size_t n, locale_t loc, const char *format, ...)
+{
+    __locale_raii __current( uselocale(loc), uselocale );
+    va_list ap;
+    va_start( ap, format );
+    int result = vsnprintf( ret, n, format, ap );
+    va_end(ap);
+    return result;
+}
+
 int asprintf_l( char **ret, locale_t loc, const char *format, ... )
 {
     va_list ap;
