[libc-commits] [libc] [libc] Support %lc in printf (PR #169983)
Alexey Samsonov via libc-commits
libc-commits at lists.llvm.org
Sun Dec 21 11:00:45 PST 2025
================
@@ -33,7 +41,27 @@ LIBC_INLINE int convert_char(Writer<write_mode> *writer,
RET_IF_RESULT_NEGATIVE(writer->write(' ', padding_spaces));
}
- RET_IF_RESULT_NEGATIVE(writer->write(c));
+#ifndef LIBC_COPT_PRINTF_DISABLE_WIDE
+ if (to_conv.length_modifier == LengthModifier::l) {
+ wint_t wi = static_cast<wint_t>(to_conv.conv_val_raw);
+
+ if (wi == WEOF) {
+ return -1;
+ }
+
+ char mb_str[MB_LEN_MAX];
+ internal::mbstate mbstate;
+ wchar_t wc = static_cast<wchar_t>(wi);
+
+ auto ret = internal::wcrtomb(mb_str, wc, &mbstate);
+ if (!ret.has_value()) {
+ return -1;
----------------
vonosmas wrote:
Same here, I think you should properly propagate the value from from `wcrtomb`. I think it should return EINVAL on a failed conversion, which is probably a correct value to pass-through?
https://github.com/llvm/llvm-project/pull/169983
More information about the libc-commits
mailing list