1
0

fix: fix macos build issue again

This commit is contained in:
2026-01-23 15:11:55 +08:00
parent 71eb0741f6
commit 19df293463

View File

@@ -3,6 +3,7 @@
#if defined(YYCC_FEAT_ICONV)
#include "../macro/endian_detector.hpp"
#include "../macro/os_detector.hpp"
#include <cerrno>
#include <stdexcept>
#include <cstdint>
@@ -202,11 +203,14 @@ namespace yycc::encoding::iconv {
// If we use UTF16 or UTF32 code name directly, it will produce a BOM at data head.
// That's not what we expected.
// So we need manually check runtime endian and explicitly specify endian in code name.
//
// Also, at the same time, iconv on macOS do not support "WCHAR_T" encoding,
// so we need manually set it as UTF32 encoding.
// See https://developer.apple.com/forums/thread/811508 for more infos.
using namespace std::literals::string_view_literals;
constexpr auto UTF8_CODENAME_LITERAL = "UTF-8"sv;
constexpr auto WCHAR_CODENAME_LITERAL = "WCHAR_T"sv;
constexpr auto UTF16_CODENAME_LITERAL =
#if defined(YYCC_ENDIAN_LITTLE)
"UTF-16LE"sv;
@@ -219,6 +223,13 @@ namespace yycc::encoding::iconv {
#else
"UTF-32BE"sv;
#endif
constexpr auto WCHAR_CODENAME_LITERAL =
#if defined(YYCC_OS_MACOS)
UTF32_CODENAME_LITERAL;
static_assert(sizeof(wchar_t) == sizeof(char32_t), "unexpected wchar_t size");
#else
"WCHAR_T"sv;
#endif
// TODO:
// There is a memory copy in this function. Consider optimizing it in future.