diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index 876b343..ab02568 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -350,6 +350,7 @@
   misc/mbrtowc.c \
   misc/mbsrtowcs.c \
   misc/wcrtomb.c \
+  misc/wcsrtombs.c \
   misc/wctrans.c \
   misc/wctype.c \
   secapi/_vscprintf_p.c \
@@ -917,6 +918,7 @@
   misc/strnlen.c \
   misc/wassert.c \
   misc/wcrtomb.c \
+  misc/wcsrtombs.c \
   misc/wcsnlen.c \
   secapi/getenv_s.c \
   stdio/_fseeki64.c \
diff --git a/mingw-w64-crt/misc/wcrtomb.c b/mingw-w64-crt/misc/wcrtomb.c
index e467434..09a5f35 100644
--- a/mingw-w64-crt/misc/wcrtomb.c
+++ b/mingw-w64-crt/misc/wcrtomb.c
@@ -3,14 +3,12 @@
  * This file is part of the mingw-w64 runtime package.
  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  */
-#ifndef WIN32_LEAN_AND_MEAN
-#define WIN32_LEAN_AND_MEAN
-#endif
-#include <locale.h>
-#include <wchar.h>
-#include <stdlib.h>
 #include <errno.h>
-#include <limits.h>
+#include <locale.h>
+#include <stdlib.h>
+#include <wchar.h>
+
+#define WIN32_LEAN_AND_MEAN
 #include <windows.h>
 
 size_t wcrtomb (
@@ -76,67 +74,3 @@
   _set_errno (EILSEQ);
   return (size_t) -1;
 }
-
-size_t wcsrtombs (
-  char *__restrict__ mbs,
-  const wchar_t **__restrict__ wcs,
-  size_t count,
-  mbstate_t *__restrict__ state
-) {
-  /* Buffer to store single converted character */
-  char mbc[2];
-  /* Total number of bytes stored in `mbs` */
-  size_t mbcConverted = 0;
-
-  /* Next wide character to convert */
-  const wchar_t *wc = *wcs;
-
-  while (1) {
-    const size_t length = wcrtomb (mbc, *wc, state);
-
-    /* Conversion failed */
-    if (length == (size_t) -1) {
-      if (mbs != NULL) {
-        *wcs = wc;
-      }
-      return (size_t) -1;
-    }
-
-    /* POSIX and ISO C are silent about this */
-    if (mbs != NULL && count == 0) {
-      return 0;
-    }
-
-    /* Terminating '\0' has been converted, stop */
-    if (mbc[0] == '\0') {
-      if (mbs != NULL) {
-        *mbs = '\0';
-        *wcs = NULL;
-      }
-      break;
-    }
-
-    /* Storing `mbc` in `mbs` would exceed `count` */
-    if (mbs != NULL && mbcConverted + length > count) {
-      *wcs = wc;
-      break;
-    }
-
-    /* Write `mbc` to `mbs` */
-    if (mbs != NULL) {
-      memcpy (mbs, mbc, length);
-      mbs += length;
-    }
-
-    mbcConverted += length;
-    wc += 1;
-
-    /* `count` bytes have been written to `mbs`, stop */
-    if (mbs != NULL && mbcConverted == count) {
-      *wcs = wc;
-      break;
-    }
-  }
-
-  return mbcConverted;
-}
diff --git a/mingw-w64-crt/misc/wcsrtombs.c b/mingw-w64-crt/misc/wcsrtombs.c
new file mode 100644
index 0000000..7dfc5e8
--- /dev/null
+++ b/mingw-w64-crt/misc/wcsrtombs.c
@@ -0,0 +1,71 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#include <string.h>
+#include <wchar.h>
+
+size_t wcsrtombs (
+  char *__restrict__ mbs,
+  const wchar_t **__restrict__ wcs,
+  size_t count,
+  mbstate_t *__restrict__ state
+) {
+  /* Buffer to store single converted character */
+  char mbc[2];
+  /* Total number of bytes stored in `mbs` */
+  size_t mbcConverted = 0;
+
+  /* Next wide character to convert */
+  const wchar_t *wc = *wcs;
+
+  while (1) {
+    const size_t length = wcrtomb (mbc, *wc, state);
+
+    /* Conversion failed */
+    if (length == (size_t) -1) {
+      if (mbs != NULL) {
+        *wcs = wc;
+      }
+      return (size_t) -1;
+    }
+
+    /* POSIX and ISO C are silent about this */
+    if (mbs != NULL && count == 0) {
+      return 0;
+    }
+
+    /* Terminating '\0' has been converted, stop */
+    if (mbc[0] == '\0') {
+      if (mbs != NULL) {
+        *mbs = '\0';
+        *wcs = NULL;
+      }
+      break;
+    }
+
+    /* Storing `mbc` in `mbs` would exceed `count` */
+    if (mbs != NULL && mbcConverted + length > count) {
+      *wcs = wc;
+      break;
+    }
+
+    /* Write `mbc` to `mbs` */
+    if (mbs != NULL) {
+      memcpy (mbs, mbc, length);
+      mbs += length;
+    }
+
+    mbcConverted += length;
+    wc += 1;
+
+    /* `count` bytes have been written to `mbs`, stop */
+    if (mbs != NULL && mbcConverted == count) {
+      *wcs = wc;
+      break;
+    }
+  }
+
+  return mbcConverted;
+}
