Merge pull request #4227 from MarcZX100/codex/carry-mbstowcs-4027

fix(libc): count full string with null mbstowcs destination
This commit is contained in:
Dean 2026-10-12 21:42:35 +13:00 committed by GitHub
commit c22e2344ba
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 4 additions and 1 deletions

View File

@ -125,10 +125,11 @@ inline int SonyWcscpyS(std::uint16_t* dest, std::size_t size, const std::uint16_
inline std::size_t SonyMbstowcs(std::uint16_t* dest, const char* src, std::size_t size) {
if (!src) return 0;
if (!dest) return std::strlen(src);
std::size_t converted = 0;
while (converted < size) {
const auto value = static_cast<unsigned char>(src[converted]);
if (dest) dest[converted] = value;
dest[converted] = value;
if (value == 0) return converted;
++converted;
}

View File

@ -144,6 +144,8 @@ int main() {
Require(sceAmprMbstowcs(wide, "ABC", 8) == 3);
Require(wide[0] == 65 && wide[1] == 66 && wide[2] == 67 && wide[3] == 0);
Require(sceAmprMbstowcs(nullptr, "ABC", 8) == 3);
Require(sceAmprMbstowcs(nullptr, "ABC", 0) == 3 && sceAmprMbstowcs(nullptr, "ABC", 1) == 3);
Require(mbstowcs_nid_postfix(nullptr, "ABC", 0) == 3 && mbstowcs_nid_postfix(nullptr, "ABC", 1) == 3);
Require(sceAmprMbstowcs(wide, "ABC", 2) == 2);
Require(mbstowcs_nid_postfix(wide, "ABC", 8) == 3);