diff --git a/configure b/configure
index 18f57ae5b61e6dda871caa9112911210363544cc..a1cc82d5b091860917a61a5f750c90e39ba3ace0 100755
--- a/configure
+++ b/configure
@@ -691,6 +691,12 @@ add_host_ldflags(){
     append host_ldflags $($host_ldflags_filter "$@")
 }
 
+add_compat(){
+    append compat_objs $1
+    shift
+    map 'add_cppflags -D$v' "$@"
+}
+
 check_cmd(){
     log "$@"
     "$@" >> $logfile 2>&1
@@ -1272,7 +1278,6 @@ HAVE_LIST="
     asm_types_h
     attribute_may_alias
     attribute_packed
-    broken_snprintf
     cbrtf
     clock_gettime
     closesocket
@@ -3221,18 +3226,17 @@ elif check_header _mingw.h; then
         die "ERROR: MinGW runtime version must be >= 3.15."
     if check_cpp_condition _mingw.h "defined(__MINGW64_VERSION_MAJOR) && \
             __MINGW64_VERSION_MAJOR < 3"; then
-        enable broken_snprintf
+        add_compat msvcrt/snprintf.o
         add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
     fi
 elif check_cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
     libc_type=newlib
 elif check_func_headers stdlib.h _get_doserrno; then
     libc_type=msvcrt
-    enable broken_snprintf
-    add_cflags -Dstrtod=avpriv_strtod
-    add_cflags -Dsnprintf=avpriv_snprintf   \
-               -D_snprintf=avpriv_snprintf  \
-               -Dvsnprintf=avpriv_vsnprintf
+    add_compat strtod.o strtod=avpriv_strtod
+    add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
+                                 _snprintf=avpriv_snprintf  \
+                                 vsnprintf=avpriv_vsnprintf
 elif check_cpp_condition stddef.h "defined __KLIBC__"; then
     libc_type=klibc
 fi
@@ -4242,6 +4246,7 @@ CFLAGS-ffplay=$sdl_cflags
 ZLIB=$($ldflags_filter -lz)
 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
 EXTRALIBS=$extralibs
+COMPAT_OBJS=$compat_objs
 INSTALL=$install
 LIBTARGET=${LIBTARGET}
 SLIBNAME=${SLIBNAME}
diff --git a/libavcodec/rangecoder.c b/libavcodec/rangecoder.c
index 986fc4cafa3d6523e3e5657a1a6c79130df46642..33984aa207118f2af2680f023b66e577b17f6273 100644
--- a/libavcodec/rangecoder.c
+++ b/libavcodec/rangecoder.c
@@ -151,8 +151,10 @@ STOP_TIMER("put_rac")
 
     for (i = 0; i < SIZE; i++) {
 START_TIMER
-        if ((r[i] & 1) != get_rac(&c, state))
+        if ((r[i] & 1) != get_rac(&c, state)) {
             av_log(NULL, AV_LOG_ERROR, "rac failure at %d\n", i);
+            return 1;
+        }
 STOP_TIMER("get_rac")
     }
 
diff --git a/libavutil/Makefile b/libavutil/Makefile
index 841eec5901a9cc8a1f1b45f84aaaac5ad8e1ae98..d290ff91ca1f27727c5b5726a244a0fd370e06b7 100644
--- a/libavutil/Makefile
+++ b/libavutil/Makefile
@@ -96,9 +96,8 @@ OBJS = adler32.o                                                        \
        xga_font_data.o                                                  \
        xtea.o                                                           \
 
-OBJS-$(HAVE_BROKEN_SNPRINTF) += ../compat/msvcrt/snprintf.o
 
-OBJS-$(HAVE_MSVCRT) += ../compat/strtod.o
+OBJS += $(COMPAT_OBJS:%=../compat/%)
 
 SKIPHEADERS          = old_pix_fmts.h