[libc-commits] [libc] [libc] Wchar Stringconverter (PR #146388)
Michael Jones via libc-commits
libc-commits at lists.llvm.org
Tue Jul 1 09:37:34 PDT 2025
================
@@ -0,0 +1,87 @@
+//===-- Definition of a class for mbstate_t and conversion -----*-- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC___SUPPORT_STRING_CONVERTER_H
+#define LLVM_LIBC_SRC___SUPPORT_STRING_CONVERTER_H
+
+#include "hdr/types/char32_t.h"
+#include "hdr/types/char8_t.h"
+#include "hdr/types/size_t.h"
+#include "src/__support/common.h"
+#include "src/__support/error_or.h"
+#include "src/__support/wchar/character_converter.h"
+#include "src/__support/wchar/mbstate.h"
+
+namespace LIBC_NAMESPACE_DECL {
+namespace internal {
+
+template <typename T> class StringConverter {
+private:
+ CharacterConverter cr;
+ const T *src;
+ size_t src_len;
+ size_t src_idx;
+
+ int pushFullCharacter() {
+ if (!cr.isEmpty())
----------------
michaelrj-google wrote:
If the character is halfway complete, you'd need to push enough to finish it before you can pop. Imagine you're converting a 4 byte UTF-8 into UTF-32, and your mbstate has two of the UTF-8 bytes before you call the string conversion function. The character's incomplete so you can't pop it but it's also not empty so the current logic wouldn't push to it, even though it needs to.
https://github.com/llvm/llvm-project/pull/146388
More information about the libc-commits
mailing list