I accidentally sent patches with .patch extension. I attached them here with 
.txt extension.

- Kirill Makurin
From f7ec8948247147b1fb59a76ff3a5aca57380698c Mon Sep 17 00:00:00 2001
From: Kirill Makurin <[email protected]>
Date: Fri, 22 Aug 2025 02:31:00 +0900
Subject: [PATCH 1/7] crt: update comments for btowc and wctob functions in def
 files

Include the reason why btowc and wctob are being replaced.

Signed-off-by: Kirill Makurin <[email protected]>
---
 mingw-w64-crt/lib-common/api-ms-win-crt-convert-l1-1-0.def.in | 4 ++--
 mingw-w64-crt/lib-common/msvcr120_app.def.in                  | 4 ++--
 mingw-w64-crt/lib-common/msvcrt.def.in                        | 4 ++--
 mingw-w64-crt/lib-common/ucrtbase-common.def.in               | 4 ++--
 mingw-w64-crt/lib32/msvcr100.def.in                           | 4 ++--
 mingw-w64-crt/lib32/msvcr100d.def.in                          | 4 ++--
 mingw-w64-crt/lib32/msvcr110.def.in                           | 4 ++--
 mingw-w64-crt/lib32/msvcr110d.def.in                          | 4 ++--
 mingw-w64-crt/lib32/msvcr120.def.in                           | 4 ++--
 mingw-w64-crt/lib32/msvcr120d.def.in                          | 4 ++--
 mingw-w64-crt/lib32/msvcr80.def.in                            | 4 ++--
 mingw-w64-crt/lib32/msvcr80d.def.in                           | 4 ++--
 mingw-w64-crt/lib32/msvcr90.def.in                            | 4 ++--
 mingw-w64-crt/lib32/msvcr90d.def.in                           | 4 ++--
 mingw-w64-crt/lib64/msvcr100.def.in                           | 4 ++--
 mingw-w64-crt/lib64/msvcr100d.def.in                          | 4 ++--
 mingw-w64-crt/lib64/msvcr110.def.in                           | 4 ++--
 mingw-w64-crt/lib64/msvcr110d.def.in                          | 4 ++--
 mingw-w64-crt/lib64/msvcr120.def.in                           | 4 ++--
 mingw-w64-crt/lib64/msvcr120d.def.in                          | 4 ++--
 mingw-w64-crt/lib64/msvcr80.def.in                            | 4 ++--
 mingw-w64-crt/lib64/msvcr80d.def.in                           | 4 ++--
 mingw-w64-crt/lib64/msvcr90.def.in                            | 4 ++--
 mingw-w64-crt/lib64/msvcr90d.def.in                           | 4 ++--
 mingw-w64-crt/libarm32/msvcr110.def.in                        | 4 ++--
 mingw-w64-crt/libarm32/msvcr110d.def.in                       | 4 ++--
 mingw-w64-crt/libarm32/msvcr120.def.in                        | 4 ++--
 mingw-w64-crt/libarm32/msvcr120d.def.in                       | 4 ++--
 28 files changed, 56 insertions(+), 56 deletions(-)

diff --git a/mingw-w64-crt/lib-common/api-ms-win-crt-convert-l1-1-0.def.in 
b/mingw-w64-crt/lib-common/api-ms-win-crt-convert-l1-1-0.def.in
index fd49dc01d..55426497a 100644
--- a/mingw-w64-crt/lib-common/api-ms-win-crt-convert-l1-1-0.def.in
+++ b/mingw-w64-crt/lib-common/api-ms-win-crt-convert-l1-1-0.def.in
@@ -93,7 +93,7 @@ atof
 atoi
 atol
 atoll
-; btowc ; use replacement
+; btowc ; replaced for consistency with wctob
 c16rtomb
 c32rtomb
 mbrtoc16
@@ -128,7 +128,7 @@ wcstombs_s
 wcstoul
 wcstoull
 wcstoumax
-; wctob ; use replacement
+; wctob ; replaced, CRT version may sign-extend its return value
 wctomb
 wctomb_s
 wctrans
diff --git a/mingw-w64-crt/lib-common/msvcr120_app.def.in 
b/mingw-w64-crt/lib-common/msvcr120_app.def.in
index 083b1f22e..3f0e89035 100644
--- a/mingw-w64-crt/lib-common/msvcr120_app.def.in
+++ b/mingw-w64-crt/lib-common/msvcr120_app.def.in
@@ -1877,7 +1877,7 @@ atol
 atoll
 bsearch
 bsearch_s
-; btowc ; use replacement
+; btowc ; replaced for consistency with wctob
 cabs
 cabsf
 F_ARM32(cabsl) ; Can't use long double functions from the CRT on x86
@@ -2321,7 +2321,7 @@ wcstoul
 wcstoull
 wcstoumax
 wcsxfrm
-; wctob ; use replacement
+; wctob ; replaced, CRT version may sign-extend its return value
 wctomb
 wctomb_s
 wctrans
diff --git a/mingw-w64-crt/lib-common/msvcrt.def.in 
b/mingw-w64-crt/lib-common/msvcrt.def.in
index a7bb31f27..04760001f 100644
--- a/mingw-w64-crt/lib-common/msvcrt.def.in
+++ b/mingw-w64-crt/lib-common/msvcrt.def.in
@@ -1795,7 +1795,7 @@ _wtol_l
 _wutime32 F_I386(== _wutime) ; i386 _wutime32 replaced by alias
 F_ARM_ANY(asctime_s) ; i386 and x64 asctime_s replaced by emu
 bsearch_s
-; F_ARM_ANY(btowc) ; always use replacement
+; F_ARM_ANY(btowc) ; replaced for consistency with wctob
 clearerr_s
 fopen_s
 fprintf_s
@@ -1849,7 +1849,7 @@ F_ARM_ANY(wcsnlen) ; i386 and x64 wcsnlen replaced by emu
 wcsrtombs_s
 F_ARM_ANY(wcstok_s) ; i386 and x64 wcstok_s replaced by emu
 wcstombs_s
-; F_ARM_ANY(wctob) ; always use replacement
+; F_ARM_ANY(wctob) ; replaced, CRT version may sign-extend its return value
 wctomb_s
 wprintf_s
 wscanf_s
diff --git a/mingw-w64-crt/lib-common/ucrtbase-common.def.in 
b/mingw-w64-crt/lib-common/ucrtbase-common.def.in
index dd4f0815b..c0a273e0f 100644
--- a/mingw-w64-crt/lib-common/ucrtbase-common.def.in
+++ b/mingw-w64-crt/lib-common/ucrtbase-common.def.in
@@ -2233,7 +2233,7 @@ atol
 atoll
 bsearch
 bsearch_s
-; btowc ; use replacement
+; btowc ; replaced for consistency with wctob
 c16rtomb
 c32rtomb
 cabs
@@ -2656,7 +2656,7 @@ wcstoul
 wcstoull
 wcstoumax
 wcsxfrm
-; wctob ; use replacement
+; wctob ; replaced, CRT version may sign-extend its return value
 wctomb
 wctomb_s
 wctrans
diff --git a/mingw-w64-crt/lib32/msvcr100.def.in 
b/mingw-w64-crt/lib32/msvcr100.def.in
index 4016060b9..58542e577 100644
--- a/mingw-w64-crt/lib32/msvcr100.def.in
+++ b/mingw-w64-crt/lib32/msvcr100.def.in
@@ -1662,7 +1662,7 @@ atoi
 atol
 bsearch
 bsearch_s
-; btowc ; use replacement
+; btowc ; replaced for consistency with wctob
 calloc
 ceil DATA
 clearerr
@@ -1892,7 +1892,7 @@ wcstombs
 wcstombs_s
 wcstoul
 wcsxfrm
-; wctob ; use replacement
+; wctob ; replaced, CRT version may sign-extend its return value
 wctomb
 wctomb_s
 wmemcpy_s
diff --git a/mingw-w64-crt/lib32/msvcr100d.def.in 
b/mingw-w64-crt/lib32/msvcr100d.def.in
index 40d9e3499..8534faa32 100644
--- a/mingw-w64-crt/lib32/msvcr100d.def.in
+++ b/mingw-w64-crt/lib32/msvcr100d.def.in
@@ -1729,7 +1729,7 @@ atoi
 atol
 bsearch
 bsearch_s
-; btowc ; use replacement
+; btowc ; replaced for consistency with wctob
 calloc
 ceil DATA ; overwritten
 clearerr
@@ -1955,7 +1955,7 @@ wcstombs
 wcstombs_s
 wcstoul
 wcsxfrm
-; wctob ; use replacement
+; wctob ; replaced, CRT version may sign-extend its return value
 wctomb
 wctomb_s
 wmemcpy_s
diff --git a/mingw-w64-crt/lib32/msvcr110.def.in 
b/mingw-w64-crt/lib32/msvcr110.def.in
index eb8c50d46..e6894b92a 100644
--- a/mingw-w64-crt/lib32/msvcr110.def.in
+++ b/mingw-w64-crt/lib32/msvcr110.def.in
@@ -1795,7 +1795,7 @@ atoi
 atol
 bsearch
 bsearch_s
-; btowc ; use replacement
+; btowc ; replaced for consistency with wctob
 calloc
 ceil DATA
 clearerr
@@ -2021,7 +2021,7 @@ wcstombs
 wcstombs_s
 wcstoul
 wcsxfrm
-; wctob ; use replacement
+; wctob ; replaced, CRT version may sign-extend its return value
 wctomb
 wctomb_s
 wmemcpy_s
diff --git a/mingw-w64-crt/lib32/msvcr110d.def.in 
b/mingw-w64-crt/lib32/msvcr110d.def.in
index cae199097..38d99e2dd 100644
--- a/mingw-w64-crt/lib32/msvcr110d.def.in
+++ b/mingw-w64-crt/lib32/msvcr110d.def.in
@@ -1862,7 +1862,7 @@ atoi
 atol
 bsearch
 bsearch_s
-; btowc ; use replacement
+; btowc ; replaced for consistency with wctob
 calloc
 ceil DATA ; overwritten
 clearerr
@@ -2088,7 +2088,7 @@ wcstombs
 wcstombs_s
 wcstoul
 wcsxfrm
-; wctob ; use replacement
+; wctob ; replaced, CRT version may sign-extend its return value
 wctomb
 wctomb_s
 wmemcpy_s
diff --git a/mingw-w64-crt/lib32/msvcr120.def.in 
b/mingw-w64-crt/lib32/msvcr120.def.in
index 385567bc8..757146375 100644
--- a/mingw-w64-crt/lib32/msvcr120.def.in
+++ b/mingw-w64-crt/lib32/msvcr120.def.in
@@ -1853,7 +1853,7 @@ atol
 atoll
 bsearch
 bsearch_s
-; btowc ; use replacement
+; btowc ; replaced for consistency with wctob
 cabs
 cabsf
 ; cabsl ; Can't use long double functions from the CRT on x86
@@ -2284,7 +2284,7 @@ wcstoul
 wcstoull
 wcstoumax
 wcsxfrm
-; wctob ; use replacement
+; wctob ; replaced, CRT version may sign-extend its return value
 wctomb
 wctomb_s
 wctrans
diff --git a/mingw-w64-crt/lib32/msvcr120d.def.in 
b/mingw-w64-crt/lib32/msvcr120d.def.in
index eb0257866..fb75756bf 100644
--- a/mingw-w64-crt/lib32/msvcr120d.def.in
+++ b/mingw-w64-crt/lib32/msvcr120d.def.in
@@ -1920,7 +1920,7 @@ atol
 atoll
 bsearch
 bsearch_s
-; btowc ; use replacement
+; btowc ; replaced for consistency with wctob
 cabs
 cabsf
 ; cabsl ; Can't use long double functions from the CRT on x86
@@ -2351,7 +2351,7 @@ wcstoul
 wcstoull
 wcstoumax
 wcsxfrm
-; wctob ; use replacement
+; wctob ; replaced, CRT version may sign-extend its return value
 wctomb
 wctomb_s
 wctrans
diff --git a/mingw-w64-crt/lib32/msvcr80.def.in 
b/mingw-w64-crt/lib32/msvcr80.def.in
index f3f78df13..cbc51da18 100644
--- a/mingw-w64-crt/lib32/msvcr80.def.in
+++ b/mingw-w64-crt/lib32/msvcr80.def.in
@@ -1303,7 +1303,7 @@ atoi
 atol
 bsearch
 bsearch_s
-; btowc ; use replacement
+; btowc ; replaced for consistency with wctob
 calloc
 ceil DATA
 clearerr
@@ -1526,7 +1526,7 @@ wcstombs
 wcstombs_s
 wcstoul
 wcsxfrm
-; wctob ; use replacement
+; wctob ; replaced, CRT version may sign-extend its return value
 wctomb
 wctomb_s
 wprintf
diff --git a/mingw-w64-crt/lib32/msvcr80d.def.in 
b/mingw-w64-crt/lib32/msvcr80d.def.in
index 0df1c1243..dc8341012 100644
--- a/mingw-w64-crt/lib32/msvcr80d.def.in
+++ b/mingw-w64-crt/lib32/msvcr80d.def.in
@@ -1386,7 +1386,7 @@ atoi
 atol
 bsearch
 bsearch_s
-; btowc ; use replacement
+; btowc ; replaced for consistency with wctob
 calloc
 ceil DATA ; overwritten
 clearerr
@@ -1609,7 +1609,7 @@ wcstombs
 wcstombs_s
 wcstoul
 wcsxfrm
-; wctob ; use replacement
+; wctob ; replaced, CRT version may sign-extend its return value
 wctomb
 wctomb_s
 wprintf
diff --git a/mingw-w64-crt/lib32/msvcr90.def.in 
b/mingw-w64-crt/lib32/msvcr90.def.in
index bfb97ff60..4455d1e4f 100644
--- a/mingw-w64-crt/lib32/msvcr90.def.in
+++ b/mingw-w64-crt/lib32/msvcr90.def.in
@@ -1296,7 +1296,7 @@ atoi
 atol
 bsearch
 bsearch_s
-; btowc ; use replacement
+; btowc ; replaced for consistency with wctob
 calloc
 ceil DATA
 clearerr
@@ -1524,7 +1524,7 @@ wcstombs
 wcstombs_s
 wcstoul
 wcsxfrm
-; wctob ; use replacement
+; wctob ; replaced, CRT version may sign-extend its return value
 wctomb
 wctomb_s
 wprintf
diff --git a/mingw-w64-crt/lib32/msvcr90d.def.in 
b/mingw-w64-crt/lib32/msvcr90d.def.in
index 69f0d8e4c..19f6f4a17 100644
--- a/mingw-w64-crt/lib32/msvcr90d.def.in
+++ b/mingw-w64-crt/lib32/msvcr90d.def.in
@@ -1368,7 +1368,7 @@ atoi
 atol
 bsearch
 bsearch_s
-; btowc ; use replacement
+; btowc ; replaced for consistency with wctob
 calloc
 ceil DATA
 clearerr
@@ -1596,7 +1596,7 @@ wcstombs
 wcstombs_s
 wcstoul
 wcsxfrm
-; wctob ; use replacement
+; wctob ; replaced, CRT version may sign-extend its return value
 wctomb
 wctomb_s
 wprintf
diff --git a/mingw-w64-crt/lib64/msvcr100.def.in 
b/mingw-w64-crt/lib64/msvcr100.def.in
index 24698cc8d..58d757b35 100644
--- a/mingw-w64-crt/lib64/msvcr100.def.in
+++ b/mingw-w64-crt/lib64/msvcr100.def.in
@@ -1612,7 +1612,7 @@ atoi
 atol
 bsearch
 bsearch_s
-; btowc ; use replacement
+; btowc ; replaced for consistency with wctob
 calloc
 ceil DATA
 ceilf DATA
@@ -1854,7 +1854,7 @@ wcstombs
 wcstombs_s
 wcstoul
 wcsxfrm
-; wctob ; use replacement
+; wctob ; replaced, CRT version may sign-extend its return value
 wctomb
 wctomb_s
 wmemcpy_s
diff --git a/mingw-w64-crt/lib64/msvcr100d.def.in 
b/mingw-w64-crt/lib64/msvcr100d.def.in
index e3c7e1b71..ff7662c31 100644
--- a/mingw-w64-crt/lib64/msvcr100d.def.in
+++ b/mingw-w64-crt/lib64/msvcr100d.def.in
@@ -1677,7 +1677,7 @@ atoi
 atol
 bsearch
 bsearch_s
-; btowc ; use replacement
+; btowc ; replaced for consistency with wctob
 calloc
 ceil DATA ; overwritten
 ceilf DATA ; overwritten
@@ -1919,7 +1919,7 @@ wcstombs
 wcstombs_s
 wcstoul
 wcsxfrm
-; wctob ; use replacement
+; wctob ; replaced, CRT version may sign-extend its return value
 wctomb
 wctomb_s
 wmemcpy_s
diff --git a/mingw-w64-crt/lib64/msvcr110.def.in 
b/mingw-w64-crt/lib64/msvcr110.def.in
index 8ef9f860f..4b3374c42 100644
--- a/mingw-w64-crt/lib64/msvcr110.def.in
+++ b/mingw-w64-crt/lib64/msvcr110.def.in
@@ -1736,7 +1736,7 @@ atoi
 atol
 bsearch
 bsearch_s
-; btowc ; use replacement
+; btowc ; replaced for consistency with wctob
 calloc
 ceil
 ceilf
@@ -1978,7 +1978,7 @@ wcstombs
 wcstombs_s
 wcstoul
 wcsxfrm
-; wctob ; use replacement
+; wctob ; replaced, CRT version may sign-extend its return value
 wctomb
 wctomb_s
 wmemcpy_s
diff --git a/mingw-w64-crt/lib64/msvcr110d.def.in 
b/mingw-w64-crt/lib64/msvcr110d.def.in
index ad13f3aad..792a504ac 100644
--- a/mingw-w64-crt/lib64/msvcr110d.def.in
+++ b/mingw-w64-crt/lib64/msvcr110d.def.in
@@ -1801,7 +1801,7 @@ atoi
 atol
 bsearch
 bsearch_s
-; btowc ; use replacement
+; btowc ; replaced for consistency with wctob
 calloc
 ceil
 ceilf
@@ -2043,7 +2043,7 @@ wcstombs
 wcstombs_s
 wcstoul
 wcsxfrm
-; wctob ; use replacement
+; wctob ; replaced, CRT version may sign-extend its return value
 wctomb
 wctomb_s
 wmemcpy_s
diff --git a/mingw-w64-crt/lib64/msvcr120.def.in 
b/mingw-w64-crt/lib64/msvcr120.def.in
index 0401dbf20..caa8aac6f 100644
--- a/mingw-w64-crt/lib64/msvcr120.def.in
+++ b/mingw-w64-crt/lib64/msvcr120.def.in
@@ -1793,7 +1793,7 @@ atol
 atoll
 bsearch
 bsearch_s
-; btowc ; use replacement
+; btowc ; replaced for consistency with wctob
 cabs
 cabsf
 ; cabsl ; Can't use long double functions from the CRT on x86
@@ -2240,7 +2240,7 @@ wcstoul
 wcstoull
 wcstoumax
 wcsxfrm
-; wctob ; use replacement
+; wctob ; replaced, CRT version may sign-extend its return value
 wctomb
 wctomb_s
 wctrans
diff --git a/mingw-w64-crt/lib64/msvcr120d.def.in 
b/mingw-w64-crt/lib64/msvcr120d.def.in
index bf914c744..8df009dda 100644
--- a/mingw-w64-crt/lib64/msvcr120d.def.in
+++ b/mingw-w64-crt/lib64/msvcr120d.def.in
@@ -1858,7 +1858,7 @@ atol
 atoll
 bsearch
 bsearch_s
-; btowc ; use replacement
+; btowc ; replaced for consistency with wctob
 cabs
 cabsf
 ; cabsl ; Can't use long double functions from the CRT on x86
@@ -2305,7 +2305,7 @@ wcstoul
 wcstoull
 wcstoumax
 wcsxfrm
-; wctob ; use replacement
+; wctob ; replaced, CRT version may sign-extend its return value
 wctomb
 wctomb_s
 wctrans
diff --git a/mingw-w64-crt/lib64/msvcr80.def.in 
b/mingw-w64-crt/lib64/msvcr80.def.in
index aaefaa677..affa2c86e 100644
--- a/mingw-w64-crt/lib64/msvcr80.def.in
+++ b/mingw-w64-crt/lib64/msvcr80.def.in
@@ -1235,7 +1235,7 @@ atoi
 atol
 bsearch
 bsearch_s
-; btowc ; use replacement
+; btowc ; replaced for consistency with wctob
 calloc
 ceil DATA
 ceilf DATA
@@ -1474,7 +1474,7 @@ wcstombs
 wcstombs_s
 wcstoul
 wcsxfrm
-; wctob ; use replacement
+; wctob ; replaced, CRT version may sign-extend its return value
 wctomb
 wctomb_s
 wprintf
diff --git a/mingw-w64-crt/lib64/msvcr80d.def.in 
b/mingw-w64-crt/lib64/msvcr80d.def.in
index 5888e92f9..8c5da2797 100644
--- a/mingw-w64-crt/lib64/msvcr80d.def.in
+++ b/mingw-w64-crt/lib64/msvcr80d.def.in
@@ -1312,7 +1312,7 @@ atoi
 atol
 bsearch
 bsearch_s
-; btowc ; use replacement
+; btowc ; replaced for consistency with wctob
 calloc
 ceil DATA ; overwritten
 ceilf DATA ; overwritten
@@ -1551,7 +1551,7 @@ wcstombs
 wcstombs_s
 wcstoul
 wcsxfrm
-; wctob ; use replacement
+; wctob ; replaced, CRT version may sign-extend its return value
 wctomb
 wctomb_s
 wprintf
diff --git a/mingw-w64-crt/lib64/msvcr90.def.in 
b/mingw-w64-crt/lib64/msvcr90.def.in
index c3524fff2..ba6640690 100644
--- a/mingw-w64-crt/lib64/msvcr90.def.in
+++ b/mingw-w64-crt/lib64/msvcr90.def.in
@@ -1232,7 +1232,7 @@ atoi
 atol
 bsearch
 bsearch_s
-; btowc ; use replacement
+; btowc ; replaced for consistency with wctob
 calloc
 ceil DATA
 ceilf DATA
@@ -1472,7 +1472,7 @@ wcstombs
 wcstombs_s
 wcstoul
 wcsxfrm
-; wctob ; use replacement
+; wctob ; replaced, CRT version may sign-extend its return value
 wctomb
 wctomb_s
 wprintf
diff --git a/mingw-w64-crt/lib64/msvcr90d.def.in 
b/mingw-w64-crt/lib64/msvcr90d.def.in
index e88cffa39..c4f5688a8 100644
--- a/mingw-w64-crt/lib64/msvcr90d.def.in
+++ b/mingw-w64-crt/lib64/msvcr90d.def.in
@@ -1298,7 +1298,7 @@ atoi
 atol
 bsearch
 bsearch_s
-; btowc ; use replacement
+; btowc ; replaced for consistency with wctob
 calloc
 ceil DATA
 ceilf DATA
@@ -1538,7 +1538,7 @@ wcstombs
 wcstombs_s
 wcstoul
 wcsxfrm
-; wctob ; use replacement
+; wctob ; replaced, CRT version may sign-extend its return value
 wctomb
 wctomb_s
 wprintf
diff --git a/mingw-w64-crt/libarm32/msvcr110.def.in 
b/mingw-w64-crt/libarm32/msvcr110.def.in
index bba35f0be..a8b580d77 100644
--- a/mingw-w64-crt/libarm32/msvcr110.def.in
+++ b/mingw-w64-crt/libarm32/msvcr110.def.in
@@ -1722,7 +1722,7 @@ atoi
 atol
 bsearch
 bsearch_s
-; btowc ; use replacement
+; btowc ; replaced for consistency with wctob
 calloc
 ceil
 ceilf
@@ -1965,7 +1965,7 @@ wcstombs
 wcstombs_s
 wcstoul
 wcsxfrm
-; wctob ; use replacement
+; wctob ; replaced, CRT version may sign-extend its return value
 wctomb
 wctomb_s
 wmemcpy_s
diff --git a/mingw-w64-crt/libarm32/msvcr110d.def.in 
b/mingw-w64-crt/libarm32/msvcr110d.def.in
index 4ef8581d8..b0a5f5c3b 100644
--- a/mingw-w64-crt/libarm32/msvcr110d.def.in
+++ b/mingw-w64-crt/libarm32/msvcr110d.def.in
@@ -1787,7 +1787,7 @@ atoi
 atol
 bsearch
 bsearch_s
-; btowc ; use replacement
+; btowc ; replaced for consistency with wctob
 calloc
 ceil
 ceilf
@@ -2030,7 +2030,7 @@ wcstombs
 wcstombs_s
 wcstoul
 wcsxfrm
-; wctob ; use replacement
+; wctob ; replaced, CRT version may sign-extend its return value
 wctomb
 wctomb_s
 wmemcpy_s
diff --git a/mingw-w64-crt/libarm32/msvcr120.def.in 
b/mingw-w64-crt/libarm32/msvcr120.def.in
index 32c423fa8..746913c22 100644
--- a/mingw-w64-crt/libarm32/msvcr120.def.in
+++ b/mingw-w64-crt/libarm32/msvcr120.def.in
@@ -1760,7 +1760,7 @@ atol
 atoll
 bsearch
 bsearch_s
-; btowc ; use replacement
+; btowc ; replaced for consistency with wctob
 cabs
 cabsf
 cabsl
@@ -2208,7 +2208,7 @@ wcstoul
 wcstoull
 wcstoumax
 wcsxfrm
-; wctob ; use replacement
+; wctob ; replaced, CRT version may sign-extend its return value
 wctomb
 wctomb_s
 wctrans
diff --git a/mingw-w64-crt/libarm32/msvcr120d.def.in 
b/mingw-w64-crt/libarm32/msvcr120d.def.in
index 84faadae1..0473b44ed 100644
--- a/mingw-w64-crt/libarm32/msvcr120d.def.in
+++ b/mingw-w64-crt/libarm32/msvcr120d.def.in
@@ -1825,7 +1825,7 @@ atol
 atoll
 bsearch
 bsearch_s
-; btowc ; use replacement
+; btowc ; replaced for consistency with wctob
 cabs
 cabsf
 cabsl
@@ -2273,7 +2273,7 @@ wcstoul
 wcstoull
 wcstoumax
 wcsxfrm
-; wctob ; use replacement
+; wctob ; replaced, CRT version may sign-extend its return value
 wctomb
 wctomb_s
 wctrans
-- 
2.50.1.windows.1

From 350180cbb363161849f2e49bc35b997ede7788fe Mon Sep 17 00:00:00 2001
From: Kirill Makurin <[email protected]>
Date: Fri, 22 Aug 2025 02:32:09 +0900
Subject: [PATCH 2/7] crt: remove static helper function wcrtomb_cp

wcrtomb_cp's logic has been moved to wcrtomb.
wcsrtombs now directly calls wcrtomb instead of wcrtomb_cp.

Signed-off-by: Kirill Makurin <[email protected]>
---
 mingw-w64-crt/misc/wcrtomb.c | 32 +++++++++-----------------------
 1 file changed, 9 insertions(+), 23 deletions(-)

diff --git a/mingw-w64-crt/misc/wcrtomb.c b/mingw-w64-crt/misc/wcrtomb.c
index 71ded9cbc..e46743411 100644
--- a/mingw-w64-crt/misc/wcrtomb.c
+++ b/mingw-w64-crt/misc/wcrtomb.c
@@ -13,12 +13,10 @@
 #include <limits.h>
 #include <windows.h>
 
-static size_t wcrtomb_cp (
+size_t wcrtomb (
   char *__restrict__ mbc,
   wchar_t wc,
-  mbstate_t *__restrict__ state,
-  unsigned cp,
-  int mb_cur_max
+  mbstate_t *__restrict__ state
 ) {
   /* Set `state` to initial state */
   if (mbc == NULL) {
@@ -42,6 +40,12 @@ static size_t wcrtomb_cp (
     return 1;
   }
 
+  /* Code page used by current locale */
+  unsigned cp = ___lc_codepage_func ();
+
+  /* Maximum character length in `cp` */
+  int mb_cur_max = ___mb_cur_max_func ();
+
   /* Handle "C" locale */
   if (cp == 0) {
     if (wc > 0xFF) {
@@ -73,30 +77,12 @@ eilseq:
   return (size_t) -1;
 }
 
-size_t wcrtomb (
-  char *__restrict__ mbc,
-  wchar_t wc,
-  mbstate_t *__restrict__ state
-) {
-  /* Code page used by current locale */
-  unsigned cp = ___lc_codepage_func ();
-  /* Maximum character length in `cp` */
-  int mb_cur_max = MB_CUR_MAX;
-
-  return wcrtomb_cp (mbc, wc, state, cp, mb_cur_max);
-}
-
 size_t wcsrtombs (
   char *__restrict__ mbs,
   const wchar_t **__restrict__ wcs,
   size_t count,
   mbstate_t *__restrict__ state
 ) {
-  /* Code page used by current locale */
-  unsigned cp = ___lc_codepage_func ();
-  /* Maximum character length in `cp` */
-  int mb_cur_max = MB_CUR_MAX;
-
   /* Buffer to store single converted character */
   char mbc[2];
   /* Total number of bytes stored in `mbs` */
@@ -106,7 +92,7 @@ size_t wcsrtombs (
   const wchar_t *wc = *wcs;
 
   while (1) {
-    const size_t length = wcrtomb_cp (mbc, *wc, state, cp, mb_cur_max);
+    const size_t length = wcrtomb (mbc, *wc, state);
 
     /* Conversion failed */
     if (length == (size_t) -1) {
-- 
2.50.1.windows.1

From ab32979bf83c9559bf330548a1a837c17329a25c Mon Sep 17 00:00:00 2001
From: Kirill Makurin <[email protected]>
Date: Fri, 22 Aug 2025 02:33:03 +0900
Subject: [PATCH 3/7] crt: split wcrtomb.c to two files wcrtomb.c and
 wcsrtombs.c

Signed-off-by: Kirill Makurin <[email protected]>
---
 mingw-w64-crt/Makefile.am      |  2 +
 mingw-w64-crt/misc/wcrtomb.c   | 74 ++--------------------------------
 mingw-w64-crt/misc/wcsrtombs.c | 71 ++++++++++++++++++++++++++++++++
 3 files changed, 77 insertions(+), 70 deletions(-)
 create mode 100644 mingw-w64-crt/misc/wcsrtombs.c

diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index 876b3431b..ab02568cb 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -350,6 +350,7 @@ src_msvcrt=\
   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 @@ src_pre_msvcr80=\
   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 e46743411..09a5f3574 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 <errno.h>
 #include <locale.h>
-#include <wchar.h>
 #include <stdlib.h>
-#include <errno.h>
-#include <limits.h>
+#include <wchar.h>
+
+#define WIN32_LEAN_AND_MEAN
 #include <windows.h>
 
 size_t wcrtomb (
@@ -76,67 +74,3 @@ eilseq:
   _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 000000000..7dfc5e88d
--- /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;
+}
-- 
2.50.1.windows.1

From 1421115af56aa9d994ce632885ff1c8aef4d24f9 Mon Sep 17 00:00:00 2001
From: Kirill Makurin <[email protected]>
Date: Fri, 22 Aug 2025 02:34:39 +0900
Subject: [PATCH 4/7] crt: use errno instead of _set_errno() in wcrtomb.c

For some old CRTs _set_errno() is emulated, while errno is
always available.

Signed-off-by: Kirill Makurin <[email protected]>
---
 mingw-w64-crt/misc/wcrtomb.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/mingw-w64-crt/misc/wcrtomb.c b/mingw-w64-crt/misc/wcrtomb.c
index 09a5f3574..552d6bd0a 100644
--- a/mingw-w64-crt/misc/wcrtomb.c
+++ b/mingw-w64-crt/misc/wcrtomb.c
@@ -26,7 +26,7 @@ size_t wcrtomb (
 
   /* Detect invalid conversion state */
   if (state != NULL && *state) {
-    _set_errno (EINVAL);
+    errno = EINVAL;
     return (size_t) -1;
   }
 
@@ -71,6 +71,6 @@ size_t wcrtomb (
   return ret;
 
 eilseq:
-  _set_errno (EILSEQ);
+  errno = EILSEQ;
   return (size_t) -1;
 }
-- 
2.50.1.windows.1

From d0d2fe736c145f6e7f5f91ba299de81ba6d5eaea Mon Sep 17 00:00:00 2001
From: Kirill Makurin <[email protected]>
Date: Fri, 22 Aug 2025 02:35:51 +0900
Subject: [PATCH 5/7] crt: fix return value of mbrlen and mbrtowc functions
 with DBCS code pages

CRT's mbrlen and mbrtowc functions return incorrect value if
previous call to either of them has returned (size_t)-2 when
converting using DBCS code page.

Previously, mingw-w64's implementation of those functions was
implementing the same buggy behavior for compatibility with CRT.

This commit fixes return value of mbrlen and mbrtowc functions.
Tests for mbrlen and mbrtowc functions are updated accordingly.

Signed-off-by: Kirill Makurin <[email protected]>
---
 mingw-w64-crt/misc/mbrtowc.c        | 8 +++++++-
 mingw-w64-crt/testcases/t_mbrlen.c  | 5 +----
 mingw-w64-crt/testcases/t_mbrtowc.c | 5 +----
 3 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/mingw-w64-crt/misc/mbrtowc.c b/mingw-w64-crt/misc/mbrtowc.c
index be5830a00..75c9f98f0 100644
--- a/mingw-w64-crt/misc/mbrtowc.c
+++ b/mingw-w64-crt/misc/mbrtowc.c
@@ -68,8 +68,12 @@ size_t mbrtowc (
   /* Length of potential multibyte character */
   int length = 1;
 
+  /* Number of bytes consumed from `mbs` */
+  int bytes_consumed = 0;
+
   if (conversion_state.bytes[0]) {
     conversion_state.bytes[1] = mbs[0];
+    bytes_consumed = 1;
     length = 2;
   } else if (mb_cur_max == 2 && isleadbyte (mbs[0])) {
     conversion_state.bytes[0] = mbs[0];
@@ -81,9 +85,11 @@ size_t mbrtowc (
     }
 
     conversion_state.bytes[1] = mbs[1];
+    bytes_consumed = 2;
     length = 2;
   } else {
     conversion_state.bytes[0] = mbs[0];
+    bytes_consumed = 1;
   }
 
   /* Store terminating '\0' */
@@ -116,7 +122,7 @@ size_t mbrtowc (
     *state = 0;
   }
 
-  return length;
+  return bytes_consumed;
 
 eilseq:
   errno = EILSEQ;
diff --git a/mingw-w64-crt/testcases/t_mbrlen.c 
b/mingw-w64-crt/testcases/t_mbrlen.c
index 4d297e3b7..2e723a1a5 100644
--- a/mingw-w64-crt/testcases/t_mbrlen.c
+++ b/mingw-w64-crt/testcases/t_mbrlen.c
@@ -118,12 +118,9 @@ int main (void) {
 
   /**
    * Complete multibyte character
-   *
-   * NOTE: return value does not conform to ISO C and POSIX.
-   * This behavior is implemented for consistency with CRT.
    */
 
-  assert (mbrlen ((char *) Multibyte + 1, 1, &state) == 2);
+  assert (mbrlen ((char *) Multibyte + 1, 1, &state) == 1);
   assert (mbsinit (&state));
   assert (errno == 0);
 
diff --git a/mingw-w64-crt/testcases/t_mbrtowc.c 
b/mingw-w64-crt/testcases/t_mbrtowc.c
index 1b94207ca..cb11b144f 100644
--- a/mingw-w64-crt/testcases/t_mbrtowc.c
+++ b/mingw-w64-crt/testcases/t_mbrtowc.c
@@ -136,13 +136,10 @@ int main (void) {
 
   /**
    * Complete multibyte character
-   *
-   * NOTE: return value does not conform to ISO C and POSIX.
-   * This behavior is implemented for consistency with CRT.
    */
   wc = WEOF;
 
-  assert (mbrtowc (&wc, (char *) Multibyte + 1, 1, &state) == 2);
+  assert (mbrtowc (&wc, (char *) Multibyte + 1, 1, &state) == 1);
   assert (wc != WEOF);
   assert (mbsinit (&state));
   assert (errno == 0);
-- 
2.50.1.windows.1

From 33151a0ed3553a4b0f6eea13ce9478a86f371acf Mon Sep 17 00:00:00 2001
From: Kirill Makurin <[email protected]>
Date: Fri, 22 Aug 2025 02:37:59 +0900
Subject: [PATCH 6/7] crt: use replacements for C95 conversion functions with
 all msvcr*.dll CRTs

Previously, replacements for C95 conversion functions were used
only with msvcrt.dll and earlier CRTs.

Comments for C95 conversion functions in msvcrt.def.in have been
updated to include the reason why they are being replaced.

Signed-off-by: Kirill Makurin <[email protected]>
---
 mingw-w64-crt/Makefile.am                    | 15 +++++----------
 mingw-w64-crt/lib-common/msvcr120_app.def.in | 10 +++++-----
 mingw-w64-crt/lib-common/msvcrt.def.in       | 10 +++++-----
 mingw-w64-crt/lib32/msvcp60.def              | 12 ++++++------
 mingw-w64-crt/lib32/msvcr100.def.in          | 10 +++++-----
 mingw-w64-crt/lib32/msvcr100d.def.in         | 10 +++++-----
 mingw-w64-crt/lib32/msvcr110.def.in          | 10 +++++-----
 mingw-w64-crt/lib32/msvcr110d.def.in         | 10 +++++-----
 mingw-w64-crt/lib32/msvcr120.def.in          | 10 +++++-----
 mingw-w64-crt/lib32/msvcr120d.def.in         | 10 +++++-----
 mingw-w64-crt/lib32/msvcr80.def.in           | 10 +++++-----
 mingw-w64-crt/lib32/msvcr80d.def.in          | 10 +++++-----
 mingw-w64-crt/lib32/msvcr90.def.in           | 10 +++++-----
 mingw-w64-crt/lib32/msvcr90d.def.in          | 10 +++++-----
 mingw-w64-crt/lib64/msvcp60.def              | 10 +++++-----
 mingw-w64-crt/lib64/msvcr100.def.in          | 10 +++++-----
 mingw-w64-crt/lib64/msvcr100d.def.in         | 10 +++++-----
 mingw-w64-crt/lib64/msvcr110.def.in          | 10 +++++-----
 mingw-w64-crt/lib64/msvcr110d.def.in         | 10 +++++-----
 mingw-w64-crt/lib64/msvcr120.def.in          | 10 +++++-----
 mingw-w64-crt/lib64/msvcr120d.def.in         | 10 +++++-----
 mingw-w64-crt/lib64/msvcr80.def.in           | 10 +++++-----
 mingw-w64-crt/lib64/msvcr80d.def.in          | 10 +++++-----
 mingw-w64-crt/lib64/msvcr90.def.in           | 10 +++++-----
 mingw-w64-crt/lib64/msvcr90d.def.in          | 10 +++++-----
 mingw-w64-crt/libarm32/msvcp60.def           | 10 +++++-----
 mingw-w64-crt/libarm32/msvcr110.def.in       | 10 +++++-----
 mingw-w64-crt/libarm32/msvcr110d.def.in      | 10 +++++-----
 mingw-w64-crt/libarm32/msvcr120.def.in       | 10 +++++-----
 mingw-w64-crt/libarm32/msvcr120d.def.in      | 10 +++++-----
 30 files changed, 151 insertions(+), 156 deletions(-)

diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index ab02568cb..7a986d591 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -168,9 +168,14 @@ src_libws2_32=libsrc/ws2_32.c \
 src_msvcrt_common=\
   misc/_onexit.c \
   misc/btowc.c \
+  misc/mbrlen.c \
+  misc/mbrtowc.c \
   misc/mbsinit.c \
+  misc/mbsrtowcs.c \
   misc/onexit_table.c \
   misc/register_tls_atexit.c \
+  misc/wcrtomb.c \
+  misc/wcsrtombs.c \
   misc/wctob.c \
   stdio/_getc_nolock.c \
   stdio/_getwc_nolock.c \
@@ -346,11 +351,6 @@ src_msvcrt=\
   misc/iswblank.c \
   misc/_isblank_l.c \
   misc/_iswblank_l.c \
-  misc/mbrlen.c \
-  misc/mbrtowc.c \
-  misc/mbsrtowcs.c \
-  misc/wcrtomb.c \
-  misc/wcsrtombs.c \
   misc/wctrans.c \
   misc/wctype.c \
   secapi/_vscprintf_p.c \
@@ -911,14 +911,9 @@ src_pre_msvcr80=\
   misc/_set_fmode.c \
   misc/imaxabs.c \
   misc/invalid_parameter_handler.c \
-  misc/mbrlen.c \
-  misc/mbrtowc.c \
-  misc/mbsrtowcs.c \
   misc/output_format.c \
   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/lib-common/msvcr120_app.def.in 
b/mingw-w64-crt/lib-common/msvcr120_app.def.in
index 3f0e89035..32a85cde7 100644
--- a/mingw-w64-crt/lib-common/msvcr120_app.def.in
+++ b/mingw-w64-crt/lib-common/msvcr120_app.def.in
@@ -2116,9 +2116,9 @@ lroundf
 F_ARM32(lroundl) ; Can't use long double functions from the CRT on x86
 malloc
 mblen
-mbrlen
-mbrtowc
-mbsrtowcs
+; mbrlen ; replaced, CRT version does not conform to C95
+; mbrtowc ; replaced, CRT version does not conform to C95
+; mbsrtowcs ; replaced, CRT version does not conform to C95
 mbsrtowcs_s
 mbstowcs
 mbstowcs_s
@@ -2283,7 +2283,7 @@ vwprintf
 vwprintf_s
 vwscanf
 vwscanf_s
-wcrtomb
+; wcrtomb ; replaced, CRT version does not report invalid conversion state
 wcrtomb_s
 wcscat
 wcscat_s
@@ -2303,7 +2303,7 @@ wcsncpy_s
 wcsnlen
 wcspbrk
 wcsrchr
-wcsrtombs
+; wcsrtombs ; replaced, CRT version does not report invalid conversion state
 wcsrtombs_s
 wcsspn
 wcsstr
diff --git a/mingw-w64-crt/lib-common/msvcrt.def.in 
b/mingw-w64-crt/lib-common/msvcrt.def.in
index 04760001f..5c31c7916 100644
--- a/mingw-w64-crt/lib-common/msvcrt.def.in
+++ b/mingw-w64-crt/lib-common/msvcrt.def.in
@@ -1804,10 +1804,10 @@ fscanf_s
 fwprintf_s
 fwscanf_s
 F_ARM_ANY(getenv_s) ; i386 and x64 getenv_s replaced by emu
-; F_ARM_ANY(mbrlen) ; always use replacement
-; F_ARM_ANY(mbrtowc) ; always use replacement
+; F_ARM_ANY(mbrlen) ; replaced, CRT version does not conform to C95
+; F_ARM_ANY(mbrtowc) ; replaced, CRT version does not conform to C95
 mbsdup_dbg
-; F_ARM_ANY(mbsrtowcs) ; always use replacement
+; F_ARM_ANY(mbsrtowcs) ; replaced, CRT version does not conform to C95
 mbsrtowcs_s
 mbstowcs_s
 F_ARM_ANY(memcpy_s) ; i386 and x64 memcpy_s replaced by emu
@@ -1838,14 +1838,14 @@ vprintf_s
 F_ARM_ANY(vsprintf_s) ; i386 and x64 vsprintf_s replaced by emu
 vswprintf_s
 vwprintf_s
-; F_ARM_ANY(wcrtomb) ; always use replacement
+; F_ARM_ANY(wcrtomb) ; replaced, CRT version does not report invalid 
conversion state
 wcrtomb_s
 wcscat_s
 wcscpy_s
 wcsncat_s
 wcsncpy_s
 F_ARM_ANY(wcsnlen) ; i386 and x64 wcsnlen replaced by emu
-; F_ARM_ANY(wcsrtombs) ; always use replacement
+; F_ARM_ANY(wcsrtombs) ; replaced, CRT version does not report invalid 
conversion state
 wcsrtombs_s
 F_ARM_ANY(wcstok_s) ; i386 and x64 wcstok_s replaced by emu
 wcstombs_s
diff --git a/mingw-w64-crt/lib32/msvcp60.def b/mingw-w64-crt/lib32/msvcp60.def
index f6a5dc93f..0a16172ce 100644
--- a/mingw-w64-crt/lib32/msvcp60.def
+++ b/mingw-w64-crt/lib32/msvcp60.def
@@ -60,12 +60,12 @@ EXPORTS
 ;_Xbig
 
 btowc
-mbrlen
-mbrtowc
-mbsrtowcs
+; mbrlen ; replaced, CRT version does not conform to C95
+; mbrtowc ; replaced, CRT version does not conform to C95
+; mbsrtowcs ; replaced, CRT version does not conform to C95
 towctrans
-wcrtomb
-wcsrtombs
+; wcrtomb ; replaced, CRT version does not report invalid conversion state
+; wcsrtombs ; replaced, CRT version does not report invalid conversion state
 wctob
 wctrans
-wctype
\ No newline at end of file
+wctype
diff --git a/mingw-w64-crt/lib32/msvcr100.def.in 
b/mingw-w64-crt/lib32/msvcr100.def.in
index 58542e577..2d00f87f0 100644
--- a/mingw-w64-crt/lib32/msvcr100.def.in
+++ b/mingw-w64-crt/lib32/msvcr100.def.in
@@ -1756,9 +1756,9 @@ log10
 longjmp
 malloc
 mblen
-mbrlen
-mbrtowc
-mbsrtowcs
+; mbrlen ; replaced, CRT version does not conform to C95
+; mbrtowc ; replaced, CRT version does not conform to C95
+; mbsrtowcs ; replaced, CRT version does not conform to C95
 mbsrtowcs_s
 mbstowcs
 mbstowcs_s
@@ -1860,7 +1860,7 @@ vsprintf_s
 vswprintf_s
 vwprintf
 vwprintf_s
-wcrtomb
+; wcrtomb ; replaced, CRT version does not report invalid conversion state
 wcrtomb_s
 wcscat
 wcscat_s
@@ -1880,7 +1880,7 @@ wcsncpy_s
 wcsnlen
 wcspbrk
 wcsrchr
-wcsrtombs
+; wcsrtombs ; replaced, CRT version does not report invalid conversion state
 wcsrtombs_s
 wcsspn
 wcsstr
diff --git a/mingw-w64-crt/lib32/msvcr100d.def.in 
b/mingw-w64-crt/lib32/msvcr100d.def.in
index 8534faa32..e1f6b4770 100644
--- a/mingw-w64-crt/lib32/msvcr100d.def.in
+++ b/mingw-w64-crt/lib32/msvcr100d.def.in
@@ -1821,9 +1821,9 @@ log10
 longjmp
 malloc
 mblen
-mbrlen
-mbrtowc
-mbsrtowcs
+; mbrlen ; replaced, CRT version does not conform to C95
+; mbrtowc ; replaced, CRT version does not conform to C95
+; mbsrtowcs ; replaced, CRT version does not conform to C95
 mbsrtowcs_s
 mbstowcs
 mbstowcs_s
@@ -1923,7 +1923,7 @@ vsprintf_s
 vswprintf_s
 vwprintf
 vwprintf_s
-wcrtomb
+; wcrtomb ; replaced, CRT version does not report invalid conversion state
 wcrtomb_s
 wcscat
 wcscat_s
@@ -1943,7 +1943,7 @@ wcsncpy_s
 wcsnlen
 wcspbrk
 wcsrchr
-wcsrtombs
+; wcsrtombs ; replaced, CRT version does not report invalid conversion state
 wcsrtombs_s
 wcsspn
 wcsstr
diff --git a/mingw-w64-crt/lib32/msvcr110.def.in 
b/mingw-w64-crt/lib32/msvcr110.def.in
index e6894b92a..be2491f6f 100644
--- a/mingw-w64-crt/lib32/msvcr110.def.in
+++ b/mingw-w64-crt/lib32/msvcr110.def.in
@@ -1887,9 +1887,9 @@ log10 ; If we implement log10, we can set it to DATA only.
 longjmp
 malloc
 mblen
-mbrlen
-mbrtowc
-mbsrtowcs
+; mbrlen ; replaced, CRT version does not conform to C95
+; mbrtowc ; replaced, CRT version does not conform to C95
+; mbsrtowcs ; replaced, CRT version does not conform to C95
 mbsrtowcs_s
 mbstowcs
 mbstowcs_s
@@ -1989,7 +1989,7 @@ vsprintf_s
 vswprintf_s
 vwprintf
 vwprintf_s
-wcrtomb
+; wcrtomb ; replaced, CRT version does not report invalid conversion state
 wcrtomb_s
 wcscat
 wcscat_s
@@ -2009,7 +2009,7 @@ wcsncpy_s
 wcsnlen
 wcspbrk
 wcsrchr
-wcsrtombs
+; wcsrtombs ; replaced, CRT version does not report invalid conversion state
 wcsrtombs_s
 wcsspn
 wcsstr
diff --git a/mingw-w64-crt/lib32/msvcr110d.def.in 
b/mingw-w64-crt/lib32/msvcr110d.def.in
index 38d99e2dd..16d06696c 100644
--- a/mingw-w64-crt/lib32/msvcr110d.def.in
+++ b/mingw-w64-crt/lib32/msvcr110d.def.in
@@ -1954,9 +1954,9 @@ log10
 longjmp
 malloc
 mblen
-mbrlen
-mbrtowc
-mbsrtowcs
+; mbrlen ; replaced, CRT version does not conform to C95
+; mbrtowc ; replaced, CRT version does not conform to C95
+; mbsrtowcs ; replaced, CRT version does not conform to C95
 mbsrtowcs_s
 mbstowcs
 mbstowcs_s
@@ -2056,7 +2056,7 @@ vsprintf_s
 vswprintf_s
 vwprintf
 vwprintf_s
-wcrtomb
+; wcrtomb ; replaced, CRT version does not report invalid conversion state
 wcrtomb_s
 wcscat
 wcscat_s
@@ -2076,7 +2076,7 @@ wcsncpy_s
 wcsnlen
 wcspbrk
 wcsrchr
-wcsrtombs
+; wcsrtombs ; replaced, CRT version does not report invalid conversion state
 wcsrtombs_s
 wcsspn
 wcsstr
diff --git a/mingw-w64-crt/lib32/msvcr120.def.in 
b/mingw-w64-crt/lib32/msvcr120.def.in
index 757146375..aaa965780 100644
--- a/mingw-w64-crt/lib32/msvcr120.def.in
+++ b/mingw-w64-crt/lib32/msvcr120.def.in
@@ -2086,9 +2086,9 @@ lroundf
 ; lroundl ; Can't use long double functions from the CRT on x86
 malloc
 mblen
-mbrlen
-mbrtowc
-mbsrtowcs
+; mbrlen ; replaced, CRT version does not conform to C95
+; mbrtowc ; replaced, CRT version does not conform to C95
+; mbsrtowcs ; replaced, CRT version does not conform to C95
 mbsrtowcs_s
 mbstowcs
 mbstowcs_s
@@ -2246,7 +2246,7 @@ vwprintf
 vwprintf_s
 vwscanf
 vwscanf_s
-wcrtomb
+; wcrtomb ; replaced, CRT version does not report invalid conversion state
 wcrtomb_s
 wcscat
 wcscat_s
@@ -2266,7 +2266,7 @@ wcsncpy_s
 wcsnlen
 wcspbrk
 wcsrchr
-wcsrtombs
+; wcsrtombs ; replaced, CRT version does not report invalid conversion state
 wcsrtombs_s
 wcsspn
 wcsstr
diff --git a/mingw-w64-crt/lib32/msvcr120d.def.in 
b/mingw-w64-crt/lib32/msvcr120d.def.in
index fb75756bf..f670d0bbf 100644
--- a/mingw-w64-crt/lib32/msvcr120d.def.in
+++ b/mingw-w64-crt/lib32/msvcr120d.def.in
@@ -2153,9 +2153,9 @@ lroundf
 ; lroundl ; Can't use long double functions from the CRT on x86
 malloc
 mblen
-mbrlen
-mbrtowc
-mbsrtowcs
+; mbrlen ; replaced, CRT version does not conform to C95
+; mbrtowc ; replaced, CRT version does not conform to C95
+; mbsrtowcs ; replaced, CRT version does not conform to C95
 mbsrtowcs_s
 mbstowcs
 mbstowcs_s
@@ -2313,7 +2313,7 @@ vwprintf
 vwprintf_s
 vwscanf
 vwscanf_s
-wcrtomb
+; wcrtomb ; replaced, CRT version does not report invalid conversion state
 wcrtomb_s
 wcscat
 wcscat_s
@@ -2333,7 +2333,7 @@ wcsncpy_s
 wcsnlen
 wcspbrk
 wcsrchr
-wcsrtombs
+; wcsrtombs ; replaced, CRT version does not report invalid conversion state
 wcsrtombs_s
 wcsspn
 wcsstr
diff --git a/mingw-w64-crt/lib32/msvcr80.def.in 
b/mingw-w64-crt/lib32/msvcr80.def.in
index cbc51da18..981870755 100644
--- a/mingw-w64-crt/lib32/msvcr80.def.in
+++ b/mingw-w64-crt/lib32/msvcr80.def.in
@@ -1392,9 +1392,9 @@ log10 ; If we implement log10, we can set it to DATA only.
 longjmp
 malloc
 mblen
-mbrlen
-mbrtowc
-mbsrtowcs
+; mbrlen ; replaced, CRT version does not conform to C95
+; mbrtowc ; replaced, CRT version does not conform to C95
+; mbsrtowcs ; replaced, CRT version does not conform to C95
 mbsrtowcs_s
 mbstowcs
 mbstowcs_s
@@ -1494,7 +1494,7 @@ vsprintf_s
 vswprintf_s
 vwprintf
 vwprintf_s
-wcrtomb
+; wcrtomb ; replaced, CRT version does not report invalid conversion state
 wcrtomb_s
 wcscat
 wcscat_s
@@ -1514,7 +1514,7 @@ wcsncpy_s
 wcsnlen
 wcspbrk
 wcsrchr
-wcsrtombs
+; wcsrtombs ; replaced, CRT version does not report invalid conversion state
 wcsrtombs_s
 wcsspn
 wcsstr
diff --git a/mingw-w64-crt/lib32/msvcr80d.def.in 
b/mingw-w64-crt/lib32/msvcr80d.def.in
index dc8341012..a98c5dd36 100644
--- a/mingw-w64-crt/lib32/msvcr80d.def.in
+++ b/mingw-w64-crt/lib32/msvcr80d.def.in
@@ -1475,9 +1475,9 @@ log10
 longjmp
 malloc
 mblen
-mbrlen
-mbrtowc
-mbsrtowcs
+; mbrlen ; replaced, CRT version does not conform to C95
+: mbrtowc ; replaced, CRT version does not conform to C95
+: mbsrtowcs ; replaced, CRT version does not conform to C95
 mbsrtowcs_s
 mbstowcs
 mbstowcs_s
@@ -1577,7 +1577,7 @@ vsprintf_s
 vswprintf_s
 vwprintf
 vwprintf_s
-wcrtomb
+; wcrtomb ; replaced, CRT version does not report invalid conversion state
 wcrtomb_s
 wcscat
 wcscat_s
@@ -1597,7 +1597,7 @@ wcsncpy_s
 wcsnlen
 wcspbrk
 wcsrchr
-wcsrtombs
+; wcsrtombs ; replaced, CRT version does not report invalid conversion state
 wcsrtombs_s
 wcsspn
 wcsstr
diff --git a/mingw-w64-crt/lib32/msvcr90.def.in 
b/mingw-w64-crt/lib32/msvcr90.def.in
index 4455d1e4f..6f626415f 100644
--- a/mingw-w64-crt/lib32/msvcr90.def.in
+++ b/mingw-w64-crt/lib32/msvcr90.def.in
@@ -1388,9 +1388,9 @@ log10
 longjmp
 malloc
 mblen
-mbrlen
-mbrtowc
-mbsrtowcs
+; mbrlen ; replaced, CRT version does not conform to C95
+; mbrtowc ; replaced, CRT version does not conform to C95
+; mbsrtowcs ; replaced, CRT version does not conform to C95
 mbsrtowcs_s
 mbstowcs
 mbstowcs_s
@@ -1492,7 +1492,7 @@ vsprintf_s
 vswprintf_s
 vwprintf
 vwprintf_s
-wcrtomb
+; wcrtomb ; replaced, CRT version does not report invalid conversion state
 wcrtomb_s
 wcscat
 wcscat_s
@@ -1512,7 +1512,7 @@ wcsncpy_s
 wcsnlen
 wcspbrk
 wcsrchr
-wcsrtombs
+; wcsrtombs ; replaced, CRT version does not report invalid conversion state
 wcsrtombs_s
 wcsspn
 wcsstr
diff --git a/mingw-w64-crt/lib32/msvcr90d.def.in 
b/mingw-w64-crt/lib32/msvcr90d.def.in
index 19f6f4a17..8bca8f485 100644
--- a/mingw-w64-crt/lib32/msvcr90d.def.in
+++ b/mingw-w64-crt/lib32/msvcr90d.def.in
@@ -1460,9 +1460,9 @@ log10
 longjmp
 malloc
 mblen
-mbrlen
-mbrtowc
-mbsrtowcs
+; mbrlen ; replaced, CRT version does not conform to C95
+; mbrtowc ; replaced, CRT version does not conform to C95
+; mbsrtowcs ; replaced, CRT version does not conform to C95
 mbsrtowcs_s
 mbstowcs
 mbstowcs_s
@@ -1564,7 +1564,7 @@ vsprintf_s
 vswprintf_s
 vwprintf
 vwprintf_s
-wcrtomb
+; wcrtomb ; replaced, CRT version does not report invalid conversion state
 wcrtomb_s
 wcscat
 wcscat_s
@@ -1584,7 +1584,7 @@ wcsncpy_s
 wcsnlen
 wcspbrk
 wcsrchr
-wcsrtombs
+; wcsrtombs ; replaced, CRT version does not report invalid conversion state
 wcsrtombs_s
 wcsspn
 wcsstr
diff --git a/mingw-w64-crt/lib64/msvcp60.def b/mingw-w64-crt/lib64/msvcp60.def
index b0c348a38..cef5f5195 100644
--- a/mingw-w64-crt/lib64/msvcp60.def
+++ b/mingw-w64-crt/lib64/msvcp60.def
@@ -4713,12 +4713,12 @@ _Wcsxfrm
 _Xbig
 __Wcrtomb_lk
 btowc
-mbrlen
-mbrtowc
-mbsrtowcs
+; mbrlen ; replaced, CRT version does not conform to C95
+; mbrtowc ; replaced, CRT version does not conform to C95
+; mbsrtowcs ; replaced, CRT version does not conform to C95
 towctrans
-wcrtomb
-wcsrtombs
+; wcrtomb ; replaced, CRT version does not report invalid conversion state
+; wcsrtombs ; replaced, CRT version does not report invalid conversion state
 wctob
 wctrans
 wctype
diff --git a/mingw-w64-crt/lib64/msvcr100.def.in 
b/mingw-w64-crt/lib64/msvcr100.def.in
index 58d757b35..df860c09d 100644
--- a/mingw-w64-crt/lib64/msvcr100.def.in
+++ b/mingw-w64-crt/lib64/msvcr100.def.in
@@ -1712,9 +1712,9 @@ logf DATA
 longjmp
 malloc
 mblen
-mbrlen
-mbrtowc
-mbsrtowcs
+; mbrlen ; replaced, CRT version does not conform to C95
+; mbrtowc ; replaced, CRT version does not conform to C95
+; mbsrtowcs ; replaced, CRT version does not conform to C95
 mbsrtowcs_s
 mbstowcs
 mbstowcs_s
@@ -1822,7 +1822,7 @@ vsprintf_s
 vswprintf_s
 vwprintf
 vwprintf_s
-wcrtomb
+; wcrtomb ; replaced, CRT version does not report invalid conversion state
 wcrtomb_s
 wcscat
 wcscat_s
@@ -1842,7 +1842,7 @@ wcsncpy_s
 wcsnlen
 wcspbrk
 wcsrchr
-wcsrtombs
+; wcsrtombs ; replaced, CRT version does not report invalid conversion state
 wcsrtombs_s
 wcsspn
 wcsstr
diff --git a/mingw-w64-crt/lib64/msvcr100d.def.in 
b/mingw-w64-crt/lib64/msvcr100d.def.in
index ff7662c31..6fd09a588 100644
--- a/mingw-w64-crt/lib64/msvcr100d.def.in
+++ b/mingw-w64-crt/lib64/msvcr100d.def.in
@@ -1777,9 +1777,9 @@ logf DATA ; overwritten
 longjmp
 malloc
 mblen
-mbrlen
-mbrtowc
-mbsrtowcs
+; mbrlen ; replaced, CRT version does not conform to C95
+; mbrtowc ; replaced, CRT version does not conform to C95
+; mbsrtowcs ; replaced, CRT version does not conform to C95
 mbsrtowcs_s
 mbstowcs
 mbstowcs_s
@@ -1887,7 +1887,7 @@ vsprintf_s
 vswprintf_s
 vwprintf
 vwprintf_s
-wcrtomb
+; wcrtomb ; replaced, CRT version does not report invalid conversion state
 wcrtomb_s
 wcscat
 wcscat_s
@@ -1907,7 +1907,7 @@ wcsncpy_s
 wcsnlen
 wcspbrk
 wcsrchr
-wcsrtombs
+; wcsrtombs ; replaced, CRT version does not report invalid conversion state
 wcsrtombs_s
 wcsspn
 wcsstr
diff --git a/mingw-w64-crt/lib64/msvcr110.def.in 
b/mingw-w64-crt/lib64/msvcr110.def.in
index 4b3374c42..80f9fa554 100644
--- a/mingw-w64-crt/lib64/msvcr110.def.in
+++ b/mingw-w64-crt/lib64/msvcr110.def.in
@@ -1836,9 +1836,9 @@ logf
 longjmp
 malloc
 mblen
-mbrlen
-mbrtowc
-mbsrtowcs
+; mbrlen ; replaced, CRT version does not conform to C95
+; mbrtowc ; replaced, CRT version does not conform to C95
+; mbsrtowcs ; replaced, CRT version does not conform to C95
 mbsrtowcs_s
 mbstowcs
 mbstowcs_s
@@ -1946,7 +1946,7 @@ vsprintf_s
 vswprintf_s
 vwprintf
 vwprintf_s
-wcrtomb
+; wcrtomb ; replaced, CRT version does not report invalid conversion state
 wcrtomb_s
 wcscat
 wcscat_s
@@ -1966,7 +1966,7 @@ wcsncpy_s
 wcsnlen
 wcspbrk
 wcsrchr
-wcsrtombs
+; wcsrtombs ; replaced, CRT version does not report invalid conversion state
 wcsrtombs_s
 wcsspn
 wcsstr
diff --git a/mingw-w64-crt/lib64/msvcr110d.def.in 
b/mingw-w64-crt/lib64/msvcr110d.def.in
index 792a504ac..3bb047b4c 100644
--- a/mingw-w64-crt/lib64/msvcr110d.def.in
+++ b/mingw-w64-crt/lib64/msvcr110d.def.in
@@ -1901,9 +1901,9 @@ logf
 longjmp
 malloc
 mblen
-mbrlen
-mbrtowc
-mbsrtowcs
+; mbrlen ; replaced, CRT version does not conform to C95
+; mbrtowc ; replaced, CRT version does not conform to C95
+; mbsrtowcs ; replaced, CRT version does not conform to C95
 mbsrtowcs_s
 mbstowcs
 mbstowcs_s
@@ -2011,7 +2011,7 @@ vsprintf_s
 vswprintf_s
 vwprintf
 vwprintf_s
-wcrtomb
+; wcrtomb ; replaced, CRT version does not report invalid conversion state
 wcrtomb_s
 wcscat
 wcscat_s
@@ -2031,7 +2031,7 @@ wcsncpy_s
 wcsnlen
 wcspbrk
 wcsrchr
-wcsrtombs
+; wcsrtombs ; replaced, CRT version does not report invalid conversion state
 wcsrtombs_s
 wcsspn
 wcsstr
diff --git a/mingw-w64-crt/lib64/msvcr120.def.in 
b/mingw-w64-crt/lib64/msvcr120.def.in
index caa8aac6f..4f19699b1 100644
--- a/mingw-w64-crt/lib64/msvcr120.def.in
+++ b/mingw-w64-crt/lib64/msvcr120.def.in
@@ -2034,9 +2034,9 @@ lroundf
 ; lroundl ; Can't use long double functions from the CRT on x86
 malloc
 mblen
-mbrlen
-mbrtowc
-mbsrtowcs
+; mbrlen ; replaced, CRT version does not conform to C95
+; mbrtowc ; replaced, CRT version does not conform to C95
+; mbsrtowcs ; replaced, CRT version does not conform to C95
 mbsrtowcs_s
 mbstowcs
 mbstowcs_s
@@ -2202,7 +2202,7 @@ vwprintf
 vwprintf_s
 vwscanf
 vwscanf_s
-wcrtomb
+; wcrtomb ; replaced, CRT version does not report invalid conversion state
 wcrtomb_s
 wcscat
 wcscat_s
@@ -2222,7 +2222,7 @@ wcsncpy_s
 wcsnlen
 wcspbrk
 wcsrchr
-wcsrtombs
+; wcsrtombs ; replaced, CRT version does not report invalid conversion state
 wcsrtombs_s
 wcsspn
 wcsstr
diff --git a/mingw-w64-crt/lib64/msvcr120d.def.in 
b/mingw-w64-crt/lib64/msvcr120d.def.in
index 8df009dda..f4a1d6b24 100644
--- a/mingw-w64-crt/lib64/msvcr120d.def.in
+++ b/mingw-w64-crt/lib64/msvcr120d.def.in
@@ -2099,9 +2099,9 @@ lroundf
 ; lroundl ; Can't use long double functions from the CRT on x86
 malloc
 mblen
-mbrlen
-mbrtowc
-mbsrtowcs
+; mbrlen ; replaced, CRT version does not conform to C95
+; mbrtowc ; replaced, CRT version does not conform to C95
+; mbsrtowcs ; replaced, CRT version does not conform to C95
 mbsrtowcs_s
 mbstowcs
 mbstowcs_s
@@ -2267,7 +2267,7 @@ vwprintf
 vwprintf_s
 vwscanf
 vwscanf_s
-wcrtomb
+; wcrtomb ; replaced, CRT version does not report invalid conversion state
 wcrtomb_s
 wcscat
 wcscat_s
@@ -2287,7 +2287,7 @@ wcsncpy_s
 wcsnlen
 wcspbrk
 wcsrchr
-wcsrtombs
+; wcsrtombs ; replaced, CRT version does not report invalid conversion state
 wcsrtombs_s
 wcsspn
 wcsstr
diff --git a/mingw-w64-crt/lib64/msvcr80.def.in 
b/mingw-w64-crt/lib64/msvcr80.def.in
index affa2c86e..362ca3efe 100644
--- a/mingw-w64-crt/lib64/msvcr80.def.in
+++ b/mingw-w64-crt/lib64/msvcr80.def.in
@@ -1332,9 +1332,9 @@ logf DATA
 longjmp
 malloc
 mblen
-mbrlen
-mbrtowc
-mbsrtowcs
+; mbrlen ; replaced, CRT version does not conform to C95
+; mbrtowc ; replaced, CRT version does not conform to C95
+; mbsrtowcs ; replaced, CRT version does not conform to C95
 mbsrtowcs_s
 mbstowcs
 mbstowcs_s
@@ -1442,7 +1442,7 @@ vsprintf_s
 vswprintf_s
 vwprintf
 vwprintf_s
-wcrtomb
+; wcrtomb ; replaced, CRT version does not report invalid conversion state
 wcrtomb_s
 wcscat
 wcscat_s
@@ -1462,7 +1462,7 @@ wcsncpy_s
 wcsnlen
 wcspbrk
 wcsrchr
-wcsrtombs
+; wcsrtombs ; replaced, CRT version does not report invalid conversion state
 wcsrtombs_s
 wcsspn
 wcsstr
diff --git a/mingw-w64-crt/lib64/msvcr80d.def.in 
b/mingw-w64-crt/lib64/msvcr80d.def.in
index 8c5da2797..66ff58201 100644
--- a/mingw-w64-crt/lib64/msvcr80d.def.in
+++ b/mingw-w64-crt/lib64/msvcr80d.def.in
@@ -1409,9 +1409,9 @@ logf DATA ; overwritten
 longjmp
 malloc
 mblen
-mbrlen
-mbrtowc
-mbsrtowcs
+; mbrlen ; replaced, CRT version does not conform to C95
+; mbrtowc ; replaced, CRT version does not conform to C95
+; mbsrtowcs ; replaced, CRT version does not conform to C95
 mbsrtowcs_s
 mbstowcs
 mbstowcs_s
@@ -1519,7 +1519,7 @@ vsprintf_s
 vswprintf_s
 vwprintf
 vwprintf_s
-wcrtomb
+; wcrtomb ; replaced, CRT version does not report invalid conversion state
 wcrtomb_s
 wcscat
 wcscat_s
@@ -1539,7 +1539,7 @@ wcsncpy_s
 wcsnlen
 wcspbrk
 wcsrchr
-wcsrtombs
+; wcsrtombs ; replaced, CRT version does not report invalid conversion state
 wcsrtombs_s
 wcsspn
 wcsstr
diff --git a/mingw-w64-crt/lib64/msvcr90.def.in 
b/mingw-w64-crt/lib64/msvcr90.def.in
index ba6640690..d04136ed0 100644
--- a/mingw-w64-crt/lib64/msvcr90.def.in
+++ b/mingw-w64-crt/lib64/msvcr90.def.in
@@ -1330,9 +1330,9 @@ logf DATA
 longjmp
 malloc
 mblen
-mbrlen
-mbrtowc
-mbsrtowcs
+; mbrlen ; replaced, CRT version does not conform to C95
+; mbrtowc ; replaced, CRT version does not conform to C95
+; mbsrtowcs ; replaced, CRT version does not conform to C95
 mbsrtowcs_s
 mbstowcs
 mbstowcs_s
@@ -1440,7 +1440,7 @@ vsprintf_s
 vswprintf_s
 vwprintf
 vwprintf_s
-wcrtomb
+; wcrtomb ; replaced, CRT version does not report invalid conversion state
 wcrtomb_s
 wcscat
 wcscat_s
@@ -1460,7 +1460,7 @@ wcsncpy_s
 wcsnlen
 wcspbrk
 wcsrchr
-wcsrtombs
+; wcsrtombs ; replaced, CRT version does not report invalid conversion state
 wcsrtombs_s
 wcsspn
 wcsstr
diff --git a/mingw-w64-crt/lib64/msvcr90d.def.in 
b/mingw-w64-crt/lib64/msvcr90d.def.in
index c4f5688a8..1a2526443 100644
--- a/mingw-w64-crt/lib64/msvcr90d.def.in
+++ b/mingw-w64-crt/lib64/msvcr90d.def.in
@@ -1396,9 +1396,9 @@ logf DATA
 longjmp
 malloc
 mblen
-mbrlen
-mbrtowc
-mbsrtowcs
+; mbrlen ; replaced, CRT version does not conform to C95
+; mbrtowc ; replaced, CRT version does not conform to C95
+; mbsrtowcs ; replaced, CRT version does not conform to C95
 mbsrtowcs_s
 mbstowcs
 mbstowcs_s
@@ -1506,7 +1506,7 @@ vsprintf_s
 vswprintf_s
 vwprintf
 vwprintf_s
-wcrtomb
+; wcrtomb ; replaced, CRT version does not report invalid conversion state
 wcrtomb_s
 wcscat
 wcscat_s
@@ -1526,7 +1526,7 @@ wcsncpy_s
 wcsnlen
 wcspbrk
 wcsrchr
-wcsrtombs
+; wcsrtombs ; replaced, CRT version does not report invalid conversion state
 wcsrtombs_s
 wcsspn
 wcsstr
diff --git a/mingw-w64-crt/libarm32/msvcp60.def 
b/mingw-w64-crt/libarm32/msvcp60.def
index ccb242c4e..24516c830 100644
--- a/mingw-w64-crt/libarm32/msvcp60.def
+++ b/mingw-w64-crt/libarm32/msvcp60.def
@@ -2294,12 +2294,12 @@ _Wcrtomb
 _Xbig
 __Wcrtomb_lk
 btowc
-mbrlen
-mbrtowc
-mbsrtowcs
+; mbrlen ; replaced, CRT version does not conform to C95
+; mbrtowc ; replaced, CRT version does not conform to C95
+; mbsrtowcs ; replaced, CRT version does not conform to C95
 towctrans
-wcrtomb
-wcsrtombs
+; wcrtomb ; replaced, CRT version does not report invalid conversion state
+; wcsrtombs ; replaced, CRT version does not report invalid conversion state
 wctob
 wctrans
 wctype
diff --git a/mingw-w64-crt/libarm32/msvcr110.def.in 
b/mingw-w64-crt/libarm32/msvcr110.def.in
index a8b580d77..d863b6434 100644
--- a/mingw-w64-crt/libarm32/msvcr110.def.in
+++ b/mingw-w64-crt/libarm32/msvcr110.def.in
@@ -1823,9 +1823,9 @@ logf
 longjmp
 malloc
 mblen
-mbrlen
-mbrtowc
-mbsrtowcs
+; mbrlen ; replaced, CRT version does not conform to C95
+; mbrtowc ; replaced, CRT version does not conform to C95
+; mbsrtowcs ; replaced, CRT version does not conform to C95
 mbsrtowcs_s
 mbstowcs
 mbstowcs_s
@@ -1933,7 +1933,7 @@ vsprintf_s
 vswprintf_s
 vwprintf
 vwprintf_s
-wcrtomb
+; wcrtomb ; replaced, CRT version does not report invalid conversion state
 wcrtomb_s
 wcscat
 wcscat_s
@@ -1953,7 +1953,7 @@ wcsncpy_s
 wcsnlen
 wcspbrk
 wcsrchr
-wcsrtombs
+; wcsrtombs ; replaced, CRT version does not report invalid conversion state
 wcsrtombs_s
 wcsspn
 wcsstr
diff --git a/mingw-w64-crt/libarm32/msvcr110d.def.in 
b/mingw-w64-crt/libarm32/msvcr110d.def.in
index b0a5f5c3b..699f0e8de 100644
--- a/mingw-w64-crt/libarm32/msvcr110d.def.in
+++ b/mingw-w64-crt/libarm32/msvcr110d.def.in
@@ -1888,9 +1888,9 @@ logf
 longjmp
 malloc
 mblen
-mbrlen
-mbrtowc
-mbsrtowcs
+; mbrlen ; replaced, CRT version does not conform to C95
+; mbrtowc ; replaced, CRT version does not conform to C95
+; mbsrtowcs ; replaced, CRT version does not conform to C95
 mbsrtowcs_s
 mbstowcs
 mbstowcs_s
@@ -1998,7 +1998,7 @@ vsprintf_s
 vswprintf_s
 vwprintf
 vwprintf_s
-wcrtomb
+; wcrtomb ; replaced, CRT version does not report invalid conversion state
 wcrtomb_s
 wcscat
 wcscat_s
@@ -2018,7 +2018,7 @@ wcsncpy_s
 wcsnlen
 wcspbrk
 wcsrchr
-wcsrtombs
+; wcsrtombs ; replaced, CRT version does not report invalid conversion state
 wcsrtombs_s
 wcsspn
 wcsstr
diff --git a/mingw-w64-crt/libarm32/msvcr120.def.in 
b/mingw-w64-crt/libarm32/msvcr120.def.in
index 746913c22..3218c4897 100644
--- a/mingw-w64-crt/libarm32/msvcr120.def.in
+++ b/mingw-w64-crt/libarm32/msvcr120.def.in
@@ -2002,9 +2002,9 @@ lroundf
 lroundl
 malloc
 mblen
-mbrlen
-mbrtowc
-mbsrtowcs
+; mbrlen ; replaced, CRT version does not conform to C95
+; mbrtowc ; replaced, CRT version does not conform to C95
+; mbsrtowcs ; replaced, CRT version does not conform to C95
 mbsrtowcs_s
 mbstowcs
 mbstowcs_s
@@ -2170,7 +2170,7 @@ vwprintf
 vwprintf_s
 vwscanf
 vwscanf_s
-wcrtomb
+; wcrtomb ; replaced, CRT version does not report invalid conversion state
 wcrtomb_s
 wcscat
 wcscat_s
@@ -2190,7 +2190,7 @@ wcsncpy_s
 wcsnlen
 wcspbrk
 wcsrchr
-wcsrtombs
+; wcsrtombs ; replaced, CRT version does not report invalid conversion state
 wcsrtombs_s
 wcsspn
 wcsstr
diff --git a/mingw-w64-crt/libarm32/msvcr120d.def.in 
b/mingw-w64-crt/libarm32/msvcr120d.def.in
index 0473b44ed..096f4d17d 100644
--- a/mingw-w64-crt/libarm32/msvcr120d.def.in
+++ b/mingw-w64-crt/libarm32/msvcr120d.def.in
@@ -2067,9 +2067,9 @@ lroundf
 lroundl
 malloc
 mblen
-mbrlen
-mbrtowc
-mbsrtowcs
+; mbrlen ; replaced, CRT version does not conform to C95
+; mbrtowc ; replaced, CRT version does not conform to C95
+; mbsrtowcs ; replaced, CRT version does not conform to C95
 mbsrtowcs_s
 mbstowcs
 mbstowcs_s
@@ -2235,7 +2235,7 @@ vwprintf
 vwprintf_s
 vwscanf
 vwscanf_s
-wcrtomb
+; wcrtomb ; replaced, CRT version does not report invalid conversion state
 wcrtomb_s
 wcscat
 wcscat_s
@@ -2255,7 +2255,7 @@ wcsncpy_s
 wcsnlen
 wcspbrk
 wcsrchr
-wcsrtombs
+; wcsrtombs ; replaced, CRT version does not report invalid conversion state
 wcsrtombs_s
 wcsspn
 wcsstr
-- 
2.50.1.windows.1

From 4ba06d9541dd2a214987ef0aca2ff5e9608d9e73 Mon Sep 17 00:00:00 2001
From: Kirill Makurin <[email protected]>
Date: Fri, 22 Aug 2025 02:39:07 +0900
Subject: [PATCH 7/7] crt: run tests for C95 conversion function with all
 msvcr*.dll CRTs

Previously, these tests were skipped for msvcr80.dll and later.

Signed-off-by: Kirill Makurin <[email protected]>
---
 mingw-w64-crt/testcases/t_mbrlen.c    | 2 +-
 mingw-w64-crt/testcases/t_mbrtowc.c   | 2 +-
 mingw-w64-crt/testcases/t_mbsrtowcs.c | 2 +-
 mingw-w64-crt/testcases/t_wcrtomb.c   | 2 +-
 mingw-w64-crt/testcases/t_wcsrtombs.c | 2 +-
 5 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/mingw-w64-crt/testcases/t_mbrlen.c 
b/mingw-w64-crt/testcases/t_mbrlen.c
index 2e723a1a5..b66e277c0 100644
--- a/mingw-w64-crt/testcases/t_mbrlen.c
+++ b/mingw-w64-crt/testcases/t_mbrlen.c
@@ -23,7 +23,7 @@ char Multibyte[] = {(char) 0x81, (char) 0x81};
 char InvalidMultibyte[] = {(char) 0x81, 0};
 
 int main (void) {
-#if __MSVCRT_VERSION__ >= 0x0800
+#ifdef _UCRT
   return 77;
 #endif
   mbstate_t state = {0};
diff --git a/mingw-w64-crt/testcases/t_mbrtowc.c 
b/mingw-w64-crt/testcases/t_mbrtowc.c
index cb11b144f..e37986d3d 100644
--- a/mingw-w64-crt/testcases/t_mbrtowc.c
+++ b/mingw-w64-crt/testcases/t_mbrtowc.c
@@ -23,7 +23,7 @@ char Multibyte[] = {(char) 0x81, (char) 0x81};
 char InvalidMultibyte[] = {(char) 0x81, 0};
 
 int main (void) {
-#if __MSVCRT_VERSION__ >= 0x0800
+#ifdef _UCRT
   return 77;
 #endif
   mbstate_t state = {0};
diff --git a/mingw-w64-crt/testcases/t_mbsrtowcs.c 
b/mingw-w64-crt/testcases/t_mbsrtowcs.c
index ba2b83805..9cfd9c968 100644
--- a/mingw-w64-crt/testcases/t_mbsrtowcs.c
+++ b/mingw-w64-crt/testcases/t_mbsrtowcs.c
@@ -21,7 +21,7 @@ unsigned char MixedText[] = {0x93, 0xFA, 'n', 'i', 0x96, 
0x7B, 'h', 'o', 'n', 0x
 unsigned char BadText[] = {0x93, 0xFA, 0x96, 0x7B, 0x8C, 0x0};
 
 int main (void) {
-#if __MSVCRT_VERSION__ >= 0x0800
+#ifdef _UCRT
   return 77;
 #endif
   mbstate_t state = {0};
diff --git a/mingw-w64-crt/testcases/t_wcrtomb.c 
b/mingw-w64-crt/testcases/t_wcrtomb.c
index f6e44f410..83a89d90e 100644
--- a/mingw-w64-crt/testcases/t_wcrtomb.c
+++ b/mingw-w64-crt/testcases/t_wcrtomb.c
@@ -21,7 +21,7 @@ static void set_conversion_state (mbstate_t *state, int 
bytes) {
 }
 
 int main (void) {
-#if __MSVCRT_VERSION__ >= 0x0800
+#ifdef _UCRT
   return 77;
 #endif
   mbstate_t state = {0};
diff --git a/mingw-w64-crt/testcases/t_wcsrtombs.c 
b/mingw-w64-crt/testcases/t_wcsrtombs.c
index f2c660daa..b5f744f83 100644
--- a/mingw-w64-crt/testcases/t_wcsrtombs.c
+++ b/mingw-w64-crt/testcases/t_wcsrtombs.c
@@ -17,7 +17,7 @@ wchar_t MixedText[] = L"日NI本HON語GO";
 wchar_t BadText[] = {L'テ', L'く', WEOF, L'ト'};
 
 int main (void) {
-#if __MSVCRT_VERSION__ >= 0x0800
+#ifdef _UCRT
   return 77;
 #endif
   const wchar_t *original_text = NULL;
-- 
2.50.1.windows.1

_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to