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 5109466a Prevent compilation errors when logchar is unichar (#142)
5109466a is described below

commit 5109466a844d1e5fb8b455a23077765a30325a24
Author: Stephen Webb <[email protected]>
AuthorDate: Mon Oct 17 15:20:48 2022 +1100

    Prevent compilation errors when logchar is unichar (#142)
---
 src/main/cpp/logstream.cpp                         |  5 +++
 src/main/cpp/messagebuffer.cpp                     |  5 +++
 src/main/cpp/ndc.cpp                               |  4 +--
 src/main/cpp/threadutility.cpp                     |  8 +++--
 src/main/cpp/transcoder.cpp                        |  4 +--
 src/main/include/CMakeLists.txt                    |  9 ++++++
 .../include/log4cxx/private/log4cxx_private.h.in   |  3 +-
 src/test/cpp/pattern/patternparsertestcase.cpp     |  6 ++--
 src/test/cpp/rolling/manualrollingtest.cpp         |  7 ++--
 src/test/cpp/rolling/timebasedrollingtest.cpp      | 37 ++++++++++------------
 src/test/cpp/streamtestcase.cpp                    | 12 +++++--
 11 files changed, 62 insertions(+), 38 deletions(-)

diff --git a/src/main/cpp/logstream.cpp b/src/main/cpp/logstream.cpp
index 29c3bcfa..a914040c 100644
--- a/src/main/cpp/logstream.cpp
+++ b/src/main/cpp/logstream.cpp
@@ -15,6 +15,11 @@
  * limitations under the License.
  */
 
+#include <log4cxx/log4cxx.h>
+/* Prevent std::basic_streambuf etc destructor ... already defined in 
logstream.obj */
+#if defined(_MSC_VER) && (LOG4CXX_UNICHAR_API || LOG4CXX_CFSTRING_API)
+#define __FORCE_INSTANCE
+#endif
 #include <log4cxx/logstring.h>
 #include <log4cxx/stream.h>
 #include <log4cxx/helpers/transcoder.h>
diff --git a/src/main/cpp/messagebuffer.cpp b/src/main/cpp/messagebuffer.cpp
index a551b133..5cc61598 100644
--- a/src/main/cpp/messagebuffer.cpp
+++ b/src/main/cpp/messagebuffer.cpp
@@ -15,6 +15,11 @@
  * limitations under the License.
  */
 
+#include <log4cxx/log4cxx.h>
+/* Prevent error C2491: 'std::numpunct<_Elem>::id': definition of dllimport 
static data member not allowed */
+#if defined(_MSC_VER) && (LOG4CXX_UNICHAR_API || LOG4CXX_CFSTRING_API)
+#define __FORCE_INSTANCE
+#endif
 #include <log4cxx/helpers/messagebuffer.h>
 #include <log4cxx/helpers/transcoder.h>
 
diff --git a/src/main/cpp/ndc.cpp b/src/main/cpp/ndc.cpp
index 597f0fce..e2194ab5 100644
--- a/src/main/cpp/ndc.cpp
+++ b/src/main/cpp/ndc.cpp
@@ -327,7 +327,7 @@ bool NDC::pop(std::basic_string<UniChar>& dst)
 
                if (!stack.empty())
                {
-                       Transcoder::encode(stack.top().message, dst);
+                       Transcoder::encode(getMessage(stack.top()), dst);
                        stack.pop();
                        data->recycle();
                        return true;
@@ -349,7 +349,7 @@ bool NDC::peek(std::basic_string<UniChar>& dst)
 
                if (!stack.empty())
                {
-                       Transcoder::encode(stack.top().message, dst);
+                       Transcoder::encode(getMessage(stack.top()), dst);
                        return true;
                }
 
diff --git a/src/main/cpp/threadutility.cpp b/src/main/cpp/threadutility.cpp
index c14c12fd..057ecd86 100644
--- a/src/main/cpp/threadutility.cpp
+++ b/src/main/cpp/threadutility.cpp
@@ -116,11 +116,13 @@ void ThreadUtility::threadStartedNameThread(LogString 
threadName,
                                                         std::thread::id 
/*threadId*/,
                                                         
std::thread::native_handle_type nativeHandle){
 #if LOG4CXX_HAS_PTHREAD_SETNAME
-       if( pthread_setname_np( static_cast<pthread_t>( nativeHandle ), 
threadName.c_str() ) < 0 ){
-               LOGLOG_ERROR( LOG4CXX_STR("unable to set thread name") );
+       LOG4CXX_ENCODE_CHAR(sthreadName, threadName);
+       if (pthread_setname_np(static_cast<pthread_t>(nativeHandle), 
sthreadName.c_str()) < 0) {
+               LOGLOG_ERROR(LOG4CXX_STR("unable to set thread name"));
        }
 #elif LOG4CXX_HAS_SETTHREADDESCRIPTION
-       HRESULT hr = SetThreadDescription(static_cast<HANDLE>(nativeHandle), 
threadName.c_str());
+       LOG4CXX_ENCODE_WCHAR(wthreadName, threadName);
+       HRESULT hr = SetThreadDescription(static_cast<HANDLE>(nativeHandle), 
wthreadName.c_str());
        if(FAILED(hr)){
                LOGLOG_ERROR( LOG4CXX_STR("unable to set thread name") );
        }
diff --git a/src/main/cpp/transcoder.cpp b/src/main/cpp/transcoder.cpp
index e3eff9a3..9b4b96b8 100644
--- a/src/main/cpp/transcoder.cpp
+++ b/src/main/cpp/transcoder.cpp
@@ -30,7 +30,7 @@
 #endif
 #include <log4cxx/private/log4cxx_private.h>
 
-#if LOG4CXX_LOGCHAR_IS_UNICHAR || LOG4CXX_CFSTRING_API || LOG4CXX_UNICHAR_API
+#if LOG4CXX_CFSTRING_API
        #include <CoreFoundation/CFString.h>
 #endif
 
@@ -651,7 +651,7 @@ CFStringRef Transcoder::encode(const LogString& src)
        LOG4CXX_ENCODE_UNICHAR(tmp, src);
        return CFStringCreateWithCharacters(kCFAllocatorDefault, tmp.data(), 
tmp.size());
 }
-#endif
+#endif // #if LOG4CXX_CFSTRING_API
 
 
 logchar Transcoder::decode(char val)
diff --git a/src/main/include/CMakeLists.txt b/src/main/include/CMakeLists.txt
index e31443fb..32122e41 100644
--- a/src/main/include/CMakeLists.txt
+++ b/src/main/include/CMakeLists.txt
@@ -39,9 +39,18 @@ endif()
 
 if(${LOG4CXX_CHAR} STREQUAL "unichar")
   set(LOGCHAR_IS_UNICHAR 1)
+  set(LOGCHAR_IS_WCHAR 0)
+  set(LOGCHAR_IS_UTF8 0)
 elseif(${LOG4CXX_CHAR} STREQUAL "wchar_t")
   set(LOGCHAR_IS_WCHAR 1)
+  set(LOGCHAR_IS_UNICHAR 0)
+  set(LOGCHAR_IS_UTF8 0)
+elseif(${LOG4CXX_CHAR} STREQUAL "utf-8")
+    set(LOGCHAR_IS_UNICHAR 0)
+    set(LOGCHAR_IS_WCHAR 0)
+    set(LOGCHAR_IS_UTF8 1)
 endif()
+
 option(LOG4CXX_WCHAR_T "Enable wchar_t API methods" ON)
 option(LOG4CXX_UNICHAR "Enable UniChar API methods" OFF)
 set(INIT_IOS_BASE 0)
diff --git a/src/main/include/log4cxx/private/log4cxx_private.h.in 
b/src/main/include/log4cxx/private/log4cxx_private.h.in
index 26281e07..88604f3d 100644
--- a/src/main/include/log4cxx/private/log4cxx_private.h.in
+++ b/src/main/include/log4cxx/private/log4cxx_private.h.in
@@ -35,7 +35,6 @@
 #define LOG4CXX_HAS_STD_LOCALE @HAS_STD_LOCALE@
 #define LOG4CXX_FORCE_WIDE_CONSOLE 0
 #define LOG4CXX_FORCE_BYTE_CONSOLE 0
-#define LOG4CXX_MEMSET_IOS_BASE 0
 #define LOG4CXX_HAVE_ODBC @HAS_ODBC@
 #define LOG4CXX_HAS_MBSRTOWCS @HAS_MBSRTOWCS@
 #define LOG4CXX_HAS_WCSTOMBS @HAS_WCSTOMBS@
@@ -71,6 +70,8 @@
 
 #if defined(_MSC_VER)
 #define LOG4CXX_MEMSET_IOS_BASE 1
+#else
+#define LOG4CXX_MEMSET_IOS_BASE 0
 #endif
 
 #endif
diff --git a/src/test/cpp/pattern/patternparsertestcase.cpp 
b/src/test/cpp/pattern/patternparsertestcase.cpp
index 93221b02..61f42310 100644
--- a/src/test/cpp/pattern/patternparsertestcase.cpp
+++ b/src/test/cpp/pattern/patternparsertestcase.cpp
@@ -87,11 +87,13 @@ public:
                LogString threadName = LOG4CXX_STR("log4cxx-thr");
 
 #if LOG4CXX_HAS_PTHREAD_SETNAME
-       if( pthread_setname_np( pthread_self(), threadName.c_str() ) < 0 ){
+       LOG4CXX_ENCODE_CHAR(sthreadName, threadName);
+       if( pthread_setname_np( pthread_self(), sthreadName.c_str() ) < 0 ){
                LOGLOG_ERROR( LOG4CXX_STR("unable to set thread name") );
        }
 #elif LOG4CXX_HAS_SETTHREADDESCRIPTION
-       HRESULT hr = SetThreadDescription(GetCurrentThread(), 
threadName.c_str());
+       LOG4CXX_ENCODE_WCHAR(wthreadName, threadName);
+       HRESULT hr = SetThreadDescription(GetCurrentThread(), 
wthreadName.c_str());
        if(FAILED(hr)){
                LOGLOG_ERROR( LOG4CXX_STR("unable to set thread name") );
        }
diff --git a/src/test/cpp/rolling/manualrollingtest.cpp 
b/src/test/cpp/rolling/manualrollingtest.cpp
index 13d5a925..9223ece5 100644
--- a/src/test/cpp/rolling/manualrollingtest.cpp
+++ b/src/test/cpp/rolling/manualrollingtest.cpp
@@ -328,11 +328,8 @@ public:
                std::uniform_int_distribution<std::mt19937::result_type> 
dist(1,100000);
                LogString filenamePattern = LOG4CXX_STR("output/directory-");
 
-#if LOG4CXX_LOGCHAR_IS_WCHAR
-               LogString dirNumber = std::to_wstring(dist(rng));
-#else
-               LogString dirNumber = std::to_string(dist(rng));
-#endif
+               LogString dirNumber;
+               StringHelper::toString(dist(rng), dirNumber);
 
                filenamePattern.append( dirNumber );
                LogString filenamePatternPrefix = filenamePattern;
diff --git a/src/test/cpp/rolling/timebasedrollingtest.cpp 
b/src/test/cpp/rolling/timebasedrollingtest.cpp
index 7825d947..9225d458 100644
--- a/src/test/cpp/rolling/timebasedrollingtest.cpp
+++ b/src/test/cpp/rolling/timebasedrollingtest.cpp
@@ -119,7 +119,7 @@ private:
        template<size_t N>
        void buildTsFnames(
                                Pool&           pool,
-               const   logchar*        prefix,
+               const   LogString&      prefix,
                                LogString       (&fnames)[N],
                                bool            compressed              = false,
                                bool            startInFuture   = false)
@@ -227,7 +227,7 @@ private:
         */
        void compareWitness(
                                Pool&           pool,
-               const   logchar*        prefix,
+               const   LogString&      prefix,
                const   LogString&      fname,
                                size_t          witnessIdx,
                                size_t          srcLine)
@@ -255,7 +255,7 @@ private:
        template<size_t N>
        void compareWitnesses(
                                Pool&           pool,
-               const   logchar*        prefix,
+               const   LogString&      prefix,
                                LogString       (&fnames)[N],
                                size_t          srcLine)
        {
@@ -284,7 +284,7 @@ private:
        template<size_t N>
        void checkFilesExist(
                                Pool&           pool,
-               const   logchar*        prefix,
+               const   LogString&      prefix,
                                LogString       (&fnames)[N],
                                size_t          witnessIdx,
                                size_t          srcLine)
@@ -406,10 +406,10 @@ public:
                rfa->activateOptions(pool);
                logger->addAppender(rfa);
 
-               this->buildTsFnames(pool, LOG4CXX_STR("test1-"), fnames);
+               this->buildTsFnames<4>(pool, LOG4CXX_STR("test1-"), fnames);
                this->delayUntilNextSecondWithMsg();
                this->logMsgAndSleep(   pool, nrOfFnames + 1, __LOG4CXX_FUNC__, 
__LINE__);
-               this->compareWitnesses( pool, LOG4CXX_STR("test1."), fnames, 
__LINE__);
+               this->compareWitnesses<4>(      pool, LOG4CXX_STR("test1."), 
fnames, __LINE__);
        }
 
 
@@ -434,7 +434,7 @@ public:
                rfa1->activateOptions(pool);
                logger->addAppender(rfa1);
 
-               this->buildTsFnames(pool, LOG4CXX_STR("test2-"), fnames);
+               this->buildTsFnames<4>(pool, LOG4CXX_STR("test2-"), fnames);
                this->delayUntilNextSecondWithMsg();
                this->logMsgAndSleep(pool, 3, __LOG4CXX_FUNC__, __LINE__);
 
@@ -454,7 +454,7 @@ public:
                logger->addAppender(rfa2);
 
                this->logMsgAndSleep(   pool, 2, __LOG4CXX_FUNC__, __LINE__, 3);
-               this->compareWitnesses( pool, LOG4CXX_STR("test2."), fnames, 
__LINE__);
+               this->compareWitnesses<4>(      pool, LOG4CXX_STR("test2."), 
fnames, __LINE__);
        }
 
 
@@ -479,11 +479,11 @@ public:
                rfa->activateOptions(pool);
                logger->addAppender(rfa);
 
-               this->buildTsFnames(pool, LOG4CXX_STR("test3-"), fnames, true);
+               this->buildTsFnames<4>(pool, LOG4CXX_STR("test3-"), fnames, 
true);
                fnames[nrOfFnames - 1].resize(fnames[nrOfFnames - 1].size() - 
3);
                this->delayUntilNextSecondWithMsg();
                this->logMsgAndSleep(   pool, nrOfFnames + 1, __LOG4CXX_FUNC__, 
__LINE__);
-               this->checkFilesExist(  pool, LOG4CXX_STR("test3."), fnames, 
nrOfFnames - 1, __LINE__);
+               this->checkFilesExist<4>(       pool, LOG4CXX_STR("test3."), 
fnames, nrOfFnames - 1, __LINE__);
        }
 
        /**
@@ -513,7 +513,7 @@ public:
                logger->addAppender(rfa1);
 
                this->delGenericLogFile(pool, rfa1->getFile());
-               this->buildTsFnames(pool, LOG4CXX_STR("test4-"), fnames);
+               this->buildTsFnames<4>(pool, LOG4CXX_STR("test4-"), fnames);
                fnames[0].assign(rfa1->getFile());
                this->delayUntilNextSecondWithMsg();
                this->logMsgAndSleep(pool, nrOfLogMsgs, __LOG4CXX_FUNC__, 
__LINE__);
@@ -567,12 +567,12 @@ public:
                logger->addAppender(rfa);
 
                this->delGenericLogFile(pool, rfa->getFile());
-               this->buildTsFnames(pool, LOG4CXX_STR("test5-"), fnames);
+               this->buildTsFnames<4>(pool, LOG4CXX_STR("test5-"), fnames);
                fnames[0].assign(rfa->getFile());
 
                this->delayUntilNextSecondWithMsg();
                this->logMsgAndSleep(   pool, nrOfLogMsgs, __LOG4CXX_FUNC__, 
__LINE__);
-               this->compareWitnesses( pool, LOG4CXX_STR("test5."), fnames, 
__LINE__);
+               this->compareWitnesses<4>(      pool, LOG4CXX_STR("test5."), 
fnames, __LINE__);
        }
 
        /**
@@ -599,7 +599,7 @@ public:
                logger->addAppender(rfa);
 
                this->delGenericLogFile(pool, rfa->getFile());
-               this->buildTsFnames(pool, LOG4CXX_STR("test6-"), fnames, true);
+               this->buildTsFnames<4>(pool, LOG4CXX_STR("test6-"), fnames, 
true);
                fnames[0].assign(rfa->getFile());
 
                this->delayUntilNextSecondWithMsg();
@@ -655,11 +655,8 @@ public:
                std::mt19937 rng(dev());
                std::uniform_int_distribution<std::mt19937::result_type> 
dist(1,100000);
                LogString filenamePattern = LOG4CXX_STR("" DIR_PRE_OUTPUT);
-#if LOG4CXX_LOGCHAR_IS_WCHAR
-               LogString dirNumber = std::to_wstring(dist(rng));
-#else
-               LogString dirNumber = std::to_string(dist(rng));
-#endif
+               LogString dirNumber;
+               StringHelper::toString(dist(rng), dirNumber);
                LogString directoryName = LOG4CXX_STR("tbr-rollIntoDir-");
                directoryName.append( dirNumber );
                filenamePattern.append( directoryName );
@@ -676,7 +673,7 @@ public:
                const logchar* prefix = 
directoryName.append(LOG4CXX_STR("/file-")).data();
 
                this->delGenericLogFile(pool, rfa->getFile());
-               this->buildTsFnames(pool, prefix, fnames);
+               this->buildTsFnames<4>(pool, prefix, fnames);
                fnames[0].assign(rfa->getFile());
 
                this->delayUntilNextSecondWithMsg();
diff --git a/src/test/cpp/streamtestcase.cpp b/src/test/cpp/streamtestcase.cpp
index 6f7267c5..e89d7192 100644
--- a/src/test/cpp/streamtestcase.cpp
+++ b/src/test/cpp/streamtestcase.cpp
@@ -14,6 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
+#include <log4cxx/log4cxx.h>
+ /* Prevent error C2491: 'std::numpunct<_Elem>::id': definition of dllimport 
static data member not allowed */
+#if defined(_MSC_VER) && (LOG4CXX_UNICHAR_API || LOG4CXX_CFSTRING_API)
+#define __FORCE_INSTANCE
+#endif
 #include <ostream>
 #include <iomanip>
 
@@ -475,7 +481,7 @@ public:
        {
                LoggerPtr root(Logger::getRootLogger());
                const log4cxx::UniChar msg[] = { 'T', 'h', 'i', 's', ' ', 'i', 
's', ' ', 'a', ' ', 't', 'e', 's', 't', 0 };
-               LOG4CXX_INFO(root, msg)
+               LOG4CXX_INFO(root, msg);
                LOGUNIT_ASSERT_EQUAL((size_t) 1, 
vectorAppender->getVector().size());
        }
 
@@ -484,7 +490,7 @@ public:
                LoggerPtr root(Logger::getRootLogger());
                const log4cxx::UniChar msg1[] = { 'T', 'h', 'i', 's', ' ', 'i', 
's', ' ', 'a', ' ', 't', 'e', 's', 't', 0 };
                const log4cxx::UniChar msg2[] = { ':', ' ', 'D', 'e', 't', 'a', 
'i', 'l', 's', ' ', 't', 'o', ' ', 'f', 'o', 'l', 'l', 'o', 'w', 0 };
-               LOG4CXX_INFO(root, msg1 << msg2)
+               LOG4CXX_INFO(root, msg1 << msg2);
                LOGUNIT_ASSERT_EQUAL((size_t) 1, 
vectorAppender->getVector().size());
        }
 
@@ -493,7 +499,7 @@ public:
                LoggerPtr root(Logger::getRootLogger());
                const log4cxx::UniChar openBracket[] = { '[', 0 };
                const log4cxx::UniChar closeBracket[] = { ']', 0 };
-               LOG4CXX_INFO(root, openBracket << std::fixed << 
std::setprecision(2) << std::setw(7) << std::right << 
std::setfill((log4cxx::UniChar) '_') << 10.0 << closeBracket)
+               LOG4CXX_INFO(root, openBracket << std::fixed << 
std::setprecision(2) << std::setw(7) << std::right << 
std::setfill((log4cxx::UniChar)'_') << 10.0 << closeBracket);
                spi::LoggingEventPtr event(vectorAppender->getVector()[0]);
                LogString msg(event->getMessage());
                LOGUNIT_ASSERT_EQUAL(LogString(LOG4CXX_STR("[__10.00]")), msg);

Reply via email to