Skip to content

Commit f13e3b3

Browse files
committed
Fix string functions on windows
1 parent 344e6bb commit f13e3b3

File tree

2 files changed

+23
-8
lines changed

2 files changed

+23
-8
lines changed

modules/yup_core/text/yup_CharacterFunctions.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,11 @@ yup_wchar CharacterFunctions::toUpperCase (const yup_wchar character) noexcept
343343
if (iter != std::cend (lowerCaseToUpperCaseMap()))
344344
return iter->second;
345345

346+
#if YUP_WINDOWS
347+
if (! iswascii ((wint_t) character) || ! iswlower ((wint_t) character))
348+
return character;
349+
#endif
350+
346351
return (yup_wchar) towupper ((wint_t) character);
347352
}
348353

@@ -352,6 +357,11 @@ yup_wchar CharacterFunctions::toLowerCase (const yup_wchar character) noexcept
352357
if (iter != std::cend (upperCaseToLowerCaseMap()))
353358
return iter->second;
354359

360+
#if YUP_WINDOWS
361+
if (! iswascii ((wint_t) character) || ! iswupper ((wint_t) character))
362+
return character;
363+
#endif
364+
355365
return (yup_wchar) towlower ((wint_t) character);
356366
}
357367

modules/yup_core/text/yup_String.cpp

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2062,29 +2062,34 @@ String String::formattedRaw (const char* pf, ...)
20622062

20632063
YUP_BEGIN_IGNORE_DEPRECATION_WARNINGS
20642064

2065-
#if YUP_ANDROID
2065+
#if YUP_WINDOWS
2066+
// On Windows, use narrow character functions to avoid encoding issues
2067+
// with mixed narrow format strings and arguments
2068+
HeapBlock<char> temp (bufferSize);
2069+
int num = (int) _vsnprintf (temp.get(), bufferSize - 1, pf, args);
2070+
if (num >= static_cast<int> (bufferSize))
2071+
num = -1;
2072+
#elif YUP_ANDROID
20662073
HeapBlock<char> temp (bufferSize);
20672074
int num = (int) vsnprintf (temp.get(), bufferSize - 1, pf, args);
20682075
if (num >= static_cast<int> (bufferSize))
20692076
num = -1;
20702077
#else
20712078
String wideCharVersion (pf);
20722079
HeapBlock<wchar_t> temp (bufferSize);
2073-
const int num = (int)
2074-
#if YUP_WINDOWS
2075-
_vsnwprintf
2076-
#else
2077-
vswprintf
2078-
#endif
2079-
(temp.get(), bufferSize - 1, wideCharVersion.toWideCharPointer(), args);
2080+
const int num = (int) vswprintf (temp.get(), bufferSize - 1, wideCharVersion.toWideCharPointer(), args);
20802081
#endif
20812082

20822083
YUP_END_IGNORE_DEPRECATION_WARNINGS
20832084

20842085
va_end (args);
20852086

20862087
if (num > 0)
2088+
#if YUP_WINDOWS || YUP_ANDROID
2089+
return String (CharPointer_UTF8 (temp.get()));
2090+
#else
20872091
return String (temp.get());
2092+
#endif
20882093

20892094
bufferSize += 256;
20902095

0 commit comments

Comments
 (0)