diff --git a/configure.in b/configure.in
index 6ff5cc4e51bc8757811d0525d86b4d6231d6706a..1ef0bd5de773edd194bd9a99c76f45a1f45fbd1b 100644
--- a/configure.in
+++ b/configure.in
@@ -521,7 +521,22 @@ if test "x$POCC" != xyes ; then
 AC_TYPE_OFF_T
 AC_TYPE_PID_T
 fi
-AC_TYPE_SSIZE_T
+
+# Older versions of MinGW do not define ssize_t in sys/types
+AC_MSG_CHECKING([for ssize_t])
+AC_CACHE_VAL(ac_cv_type_$1,
+[AC_EGREP_CPP([ssize_t@<:@^a-zA-Z_0-9@:>@],
+[#include <sys/types.h>
+#if STDC_HEADERS
+#include <stdlib.h>
+#include <stddef.h>
+#endif], [ac_cv_type_ssize_t=yes], [ac_cv_type_ssize_t=no])])
+
+AC_MSG_RESULT([$ac_cv_type_ssize_t])
+if test $ac_cv_type_ssize_t = yes; then
+  AC_DEFINE(HAVE_SSIZE_T, 1,
+    [Define to 1 if the system has the type `ssize_t'.])
+fi
 
 dnl keyword "volatile" check
 AC_CACHE_CHECK(volatile declaration,timidity_cv_type_volatile,
diff --git a/timidity/timidity.c b/timidity/timidity.c
index 66bd151ff8335a4532d92f3c14daf50ae39faccc..f4cc65b926e3a6b744736596db56149825e82d44 100644
--- a/timidity/timidity.c
+++ b/timidity/timidity.c
@@ -5122,7 +5122,11 @@ static void interesting_message(void)
 static RETSIGTYPE sigterm_exit(int sig)
 {
     char s[4];
+#if defined(__MINGW32__) && !defined(HAVE_SSIZE_T)
+    int dummy;
+#else
     ssize_t dummy;
+#endif
 
     /* NOTE: Here, fprintf is dangerous because it is not re-enterance
      * function.  It is possible coredump if the signal is called in printf's.