From 5cbad2b060e125e69335f5678c466116e29dede7 Mon Sep 17 00:00:00 2001 From: Matheus Date: Sat, 30 May 2026 12:46:01 -0300 Subject: [PATCH] mlibc: backport mbtowc fix --- patches/mlibc/jinx-working-patch.patch | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/patches/mlibc/jinx-working-patch.patch b/patches/mlibc/jinx-working-patch.patch index 5196a4fe..e6b6fcd9 100644 --- a/patches/mlibc/jinx-working-patch.patch +++ b/patches/mlibc/jinx-working-patch.patch @@ -11,6 +11,30 @@ index 71033d0..4d40869 100644 } } while (true) { +diff --git mlibc-clean/options/ansi/generic/stdlib.cpp mlibc-workdir/options/ansi/generic/stdlib.cpp +index ac05b7a..967d759 100644 +--- mlibc-clean/options/ansi/generic/stdlib.cpp ++++ mlibc-workdir/options/ansi/generic/stdlib.cpp +@@ -447,7 +447,6 @@ int mblen(const char *mbs, size_t mb_limit) { + + int mbtowc(wchar_t *__restrict wc, const char *__restrict mb, size_t max_size) { + auto cc = mlibc::current_charcode(); +- __ensure(max_size); + + // If wc is NULL, decode into a single local character which we discard + // to obtain the length. +@@ -457,6 +456,11 @@ int mbtowc(wchar_t *__restrict wc, const char *__restrict mb, size_t max_size) { + + if (mb) { + if (*mb) { ++ if (max_size == 0) { ++ errno = EILSEQ; ++ return -1; ++ } ++ + mlibc::code_seq wseq{wc, wc + 1}; + mlibc::code_seq nseq{mb, mb + frg::min(max_size, MB_CUR_MAX)}; + auto e = cc->decode_wtranscode(nseq, wseq, mbtowc_state); diff --git mlibc-clean/options/glibc/generic/execinfo.cpp mlibc-workdir/options/glibc/generic/execinfo.cpp index 1ed110d..ded9114 100644 --- mlibc-clean/options/glibc/generic/execinfo.cpp