This is an automated email from the ASF dual-hosted git repository.
swebb2066 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git
The following commit(s) were added to refs/heads/master by this push:
new 50dbd370 Optimise conversion to wchar_t when LOG4CXX_CHAR=wchar_t
(#611)
50dbd370 is described below
commit 50dbd370b2dc69e3a3c9154a5540e4c0ee1e91fb
Author: Stephen Webb <[email protected]>
AuthorDate: Sat Mar 21 13:24:27 2026 +1100
Optimise conversion to wchar_t when LOG4CXX_CHAR=wchar_t (#611)
* Clang 15.0.7 does not accept its CFString implementation
---
.github/workflows/log4cxx-macos.yml | 5 ++++-
src/main/cpp/odbcappender.cpp | 4 ++--
src/main/cpp/transcoder.cpp | 14 +++++++-------
src/main/include/log4cxx/db/odbcappender.h | 2 +-
src/main/include/log4cxx/helpers/transcoder.h | 2 +-
5 files changed, 15 insertions(+), 12 deletions(-)
diff --git a/.github/workflows/log4cxx-macos.yml
b/.github/workflows/log4cxx-macos.yml
index 4a413637..b0f823bd 100644
--- a/.github/workflows/log4cxx-macos.yml
+++ b/.github/workflows/log4cxx-macos.yml
@@ -32,18 +32,21 @@ jobs:
odbc: ON
qt: OFF
multiprocess: ON
+ cfstring: OFF
- name: osx-15-clang
os: macos-15
cxx: clang++
odbc: ON
qt: ON
multiprocess: OFF
+ cfstring: ON
- name: osx-g++
os: macos-latest
cxx: g++-14
odbc: OFF
qt: OFF
multiprocess: OFF
+ cfstring: ON
steps:
- uses: actions/checkout@v4
@@ -72,7 +75,7 @@ jobs:
-DLOG4CXX_TEST_ONLY_BUILD=1 \
-DLOG4CXX_ENABLE_ODBC=${{ matrix.odbc }} \
-DLOG4CXX_MULTIPROCESS_ROLLING_FILE_APPENDER=${{ matrix.multiprocess
}} \
- -DLOG4CXX_CFSTRING=ON \
+ -DLOG4CXX_CFSTRING=${{ matrix.cfstring }} \
-DCMAKE_BUILD_TYPE=Debug \
..
cmake --build .
diff --git a/src/main/cpp/odbcappender.cpp b/src/main/cpp/odbcappender.cpp
index dc3ec235..fcffe308 100644
--- a/src/main/cpp/odbcappender.cpp
+++ b/src/main/cpp/odbcappender.cpp
@@ -536,7 +536,7 @@ void
ODBCAppender::ODBCAppenderPriv::setParameterValues(const spi::LoggingEventP
{
LogString sbuf;
item.converter->format(event, sbuf, p);
-#if LOG4CXX_LOGCHAR_IS_WCHAR_T
+#if LOG4CXX_LOGCHAR_IS_WCHAR
std::wstring& tmp = sbuf;
#else
std::wstring tmp;
@@ -658,7 +658,7 @@ void ODBCAppender::setSql(const LogString& s)
_priv->sqlStatement = s;
}
-#if LOG4CXX_WCHAR_T_API || LOG4CXX_LOGCHAR_IS_WCHAR_T || defined(WIN32) ||
defined(_WIN32)
+#if LOG4CXX_WCHAR_T_API || LOG4CXX_LOGCHAR_IS_WCHAR || defined(WIN32) ||
defined(_WIN32)
void ODBCAppender::encode(wchar_t** dest, const LogString& src, Pool& p)
{
*dest = Transcoder::wencode(src, p);
diff --git a/src/main/cpp/transcoder.cpp b/src/main/cpp/transcoder.cpp
index 55903af1..6a92de33 100644
--- a/src/main/cpp/transcoder.cpp
+++ b/src/main/cpp/transcoder.cpp
@@ -379,7 +379,7 @@ void Transcoder::encode(const LogString& src, std::string&
dst)
iter != src.end() && ((unsigned int) *iter) < 0x80;
iter++)
{
- dst.append(1, *iter);
+ dst.append(1, static_cast<char>(*iter));
}
#endif
@@ -478,11 +478,11 @@ static void encodeUTF16(unsigned int sv, String& dst)
-#if LOG4CXX_WCHAR_T_API || LOG4CXX_LOGCHAR_IS_WCHAR_T || defined(WIN32) ||
defined(_WIN32)
+#if LOG4CXX_WCHAR_T_API || LOG4CXX_LOGCHAR_IS_WCHAR || defined(WIN32) ||
defined(_WIN32)
void Transcoder::decode(const std::wstring& src, LogString& dst)
{
-#if LOG4CXX_LOGCHAR_IS_WCHAR_T
- dst.append(src, len);
+#if LOG4CXX_LOGCHAR_IS_WCHAR
+ dst.append(src);
#else
std::wstring::const_iterator i = src.begin();
@@ -506,7 +506,7 @@ void Transcoder::decode(const std::wstring& src, LogString&
dst)
void Transcoder::encode(const LogString& src, std::wstring& dst)
{
-#if LOG4CXX_LOGCHAR_IS_WCHAR_T
+#if LOG4CXX_LOGCHAR_IS_WCHAR
dst.append(src);
#else
@@ -530,8 +530,8 @@ void Transcoder::encode(const LogString& src, std::wstring&
dst)
wchar_t* Transcoder::wencode(const LogString& src, Pool& p)
{
-#if LOG4CXX_LOGCHAR_IS_WCHAR_T
- std::wstring& tmp = src;
+#if LOG4CXX_LOGCHAR_IS_WCHAR
+ const std::wstring& tmp = src;
#else
std::wstring tmp;
encode(src, tmp);
diff --git a/src/main/include/log4cxx/db/odbcappender.h
b/src/main/include/log4cxx/db/odbcappender.h
index 5a58cb3c..1cddc8d1 100644
--- a/src/main/include/log4cxx/db/odbcappender.h
+++ b/src/main/include/log4cxx/db/odbcappender.h
@@ -268,7 +268,7 @@ class LOG4CXX_EXPORT ODBCAppender : public AppenderSkeleton
private:
ODBCAppender(const ODBCAppender&);
ODBCAppender& operator=(const ODBCAppender&);
-#if LOG4CXX_WCHAR_T_API || LOG4CXX_LOGCHAR_IS_WCHAR_T || defined(WIN32) ||
defined(_WIN32)
+#if LOG4CXX_WCHAR_T_API || LOG4CXX_LOGCHAR_IS_WCHAR || defined(WIN32) ||
defined(_WIN32)
static void encode(wchar_t** dest, const LogString& src,
LOG4CXX_NS::helpers::Pool& p);
#endif
diff --git a/src/main/include/log4cxx/helpers/transcoder.h
b/src/main/include/log4cxx/helpers/transcoder.h
index 182847dd..20894283 100644
--- a/src/main/include/log4cxx/helpers/transcoder.h
+++ b/src/main/include/log4cxx/helpers/transcoder.h
@@ -105,7 +105,7 @@ class LOG4CXX_EXPORT Transcoder
-#if LOG4CXX_WCHAR_T_API || LOG4CXX_LOGCHAR_IS_WCHAR_T || defined(WIN32) ||
defined(_WIN32)
+#if LOG4CXX_WCHAR_T_API || LOG4CXX_LOGCHAR_IS_WCHAR || defined(WIN32) ||
defined(_WIN32)
static void decode(const std::wstring& src, LogString& dst);
static void encode(const LogString& src, std::wstring& dst);
static wchar_t* wencode(const LogString& src,
LOG4CXX_NS::helpers::Pool& p);