From ddfb3fb7f37e759dd1f8071024a62c137b8080b4 Mon Sep 17 00:00:00 2001 From: cjee21 <77721854+cjee21@users.noreply.github.com> Date: Wed, 3 Jun 2026 17:26:37 +0800 Subject: [PATCH 1/2] Safer toupper and tolower usage --- Source/ZenLib/Ztring.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Source/ZenLib/Ztring.cpp b/Source/ZenLib/Ztring.cpp index e1b80c8..aeccb99 100644 --- a/Source/ZenLib/Ztring.cpp +++ b/Source/ZenLib/Ztring.cpp @@ -2374,7 +2374,11 @@ bool Ztring::IsNumber() const //Mise en minuscules Ztring &Ztring::MakeLowerCase() { - transform(begin(), end(), begin(), (int(*)(int))tolower); //(int(*)(int)) is a patch for unix +#if defined(__UNICODE__) + transform(begin(), end(), begin(), [](wchar_t c) { return towlower(c); }); +#else // defined(__UNICODE__) + transform(begin(), end(), begin(), [](unsigned char c) { return tolower(c); }); +#endif // defined(__UNICODE__) return *this; } @@ -2382,7 +2386,11 @@ Ztring &Ztring::MakeLowerCase() // Mise en majuscules Ztring &Ztring::MakeUpperCase() { - transform(begin(), end(), begin(), (int(*)(int))toupper); //(int(*)(int)) is a patch for unix +#if defined(__UNICODE__) + transform(begin(), end(), begin(), [](wchar_t c) { return towupper(c); }); +#else // defined(__UNICODE__) + transform(begin(), end(), begin(), [](unsigned char c) { return toupper(c); }); +#endif // defined(__UNICODE__) return *this; } From 6da6cea6337f25bcc93ea2d42f2cf1bfccfcdc9e Mon Sep 17 00:00:00 2001 From: cjee21 <77721854+cjee21@users.noreply.github.com> Date: Wed, 3 Jun 2026 17:40:11 +0800 Subject: [PATCH 2/2] CI: Add UTF-8 builds --- .github/workflows/ZenLib_Checks.yml | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ZenLib_Checks.yml b/.github/workflows/ZenLib_Checks.yml index 20fe596..59d2360 100644 --- a/.github/workflows/ZenLib_Checks.yml +++ b/.github/workflows/ZenLib_Checks.yml @@ -60,23 +60,18 @@ jobs: CMake: strategy: matrix: - include: - - runner: windows-latest - CXXFLAGS: "/WX" - - runner: ubuntu-latest - CXXFLAGS: "-Werror" - - runner: macos-latest - CXXFLAGS: "-Werror" + runner: [windows-latest, windows-11-arm, ubuntu-latest, macos-latest] + unicode_setting: [default, utf-8] fail-fast: false - name: CMake (${{ matrix.runner }}) + name: CMake (${{ matrix.runner }}${{ matrix.unicode_setting == 'utf-8' && ', utf-8' || '' }}) runs-on: ${{ matrix.runner }} env: - CXXFLAGS: ${{ matrix.CXXFLAGS }} + CXXFLAGS: ${{ contains(matrix.runner, 'windows') && '/WX' || '-Werror' }} steps: - name: Checkout ZenLib uses: actions/checkout@v6 - name: Configure CMake project - run: cmake -S Project/CMake -B build -DCMAKE_BUILD_TYPE=Release + run: cmake -S Project/CMake -B build -DCMAKE_BUILD_TYPE=Release ${{ matrix.unicode_setting == 'utf-8' && '-DENABLE_UNICODE=OFF' || '' }} - name: Build CMake project run: cmake --build build ${{ runner.os == 'Windows' && '--config Release' || '-j4' }}