You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4cxx-dev@logging.apache.org by ca...@apache.org on 2007/11/19 20:53:01 UTC

svn commit: r596412 - in /logging/log4cxx/trunk/src: main/cpp/messagebuffer.cpp main/include/log4cxx/helpers/messagebuffer.h test/cpp/helpers/messagebuffertest.cpp

Author: carnold
Date: Mon Nov 19 11:52:59 2007
New Revision: 596412

URL: http://svn.apache.org/viewvc?rev=596412&view=rev
Log:
LOGCXX-209: A message of type wchar_t* not written properly

Modified:
    logging/log4cxx/trunk/src/main/cpp/messagebuffer.cpp
    logging/log4cxx/trunk/src/main/include/log4cxx/helpers/messagebuffer.h
    logging/log4cxx/trunk/src/test/cpp/helpers/messagebuffertest.cpp

Modified: logging/log4cxx/trunk/src/main/cpp/messagebuffer.cpp
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/cpp/messagebuffer.cpp?rev=596412&r1=596411&r2=596412&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/cpp/messagebuffer.cpp (original)
+++ logging/log4cxx/trunk/src/main/cpp/messagebuffer.cpp Mon Nov 19 11:52:59 2007
@@ -47,6 +47,9 @@
 	}
 	return *this;
 }
+CharMessageBuffer& CharMessageBuffer::operator<<(char* msg) {
+	return operator<<((const char*) msg);
+}
 
 CharMessageBuffer& CharMessageBuffer::operator<<(const char msg) {
 	if (stream == 0) {
@@ -128,6 +131,10 @@
 	return *this;
 }
 
+WideMessageBuffer& WideMessageBuffer::operator<<(wchar_t* msg) {
+	return operator<<((const wchar_t*) msg);
+}
+
 WideMessageBuffer& WideMessageBuffer::operator<<(const wchar_t msg) {
 	if (stream == 0) {
 		buf.append(1, msg);
@@ -207,6 +214,9 @@
 CharMessageBuffer& MessageBuffer::operator<<(const char* msg) {
 	return cbuf.operator<<(msg);
 }
+CharMessageBuffer& MessageBuffer::operator<<(char* msg) {
+	return cbuf.operator<<((const char*) msg);
+}
 
 CharMessageBuffer& MessageBuffer::operator<<(const char msg) {
 	return cbuf.operator<<(msg);
@@ -228,7 +238,12 @@
 WideMessageBuffer& MessageBuffer::operator<<(const wchar_t* msg) {
 	wbuf = new WideMessageBuffer();
 	return (*wbuf) << msg;
-}
+}
+WideMessageBuffer& MessageBuffer::operator<<(wchar_t* msg) {
+	wbuf = new WideMessageBuffer();
+	return (*wbuf) << (const wchar_t*) msg;
+}
+
 WideMessageBuffer& MessageBuffer::operator<<(const wchar_t msg) {
 	wbuf = new WideMessageBuffer();
 	return (*wbuf) << msg;

Modified: logging/log4cxx/trunk/src/main/include/log4cxx/helpers/messagebuffer.h
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/include/log4cxx/helpers/messagebuffer.h?rev=596412&r1=596411&r2=596412&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/include/log4cxx/helpers/messagebuffer.h (original)
+++ logging/log4cxx/trunk/src/main/include/log4cxx/helpers/messagebuffer.h Mon Nov 19 11:52:59 2007
@@ -58,6 +58,12 @@
          *   @return this buffer.
          */
         CharMessageBuffer& operator<<(const char* msg);
+        /**
+         *   Appends string to buffer.
+         *   @param msg string to append.
+         *   @return this buffer.
+         */
+        CharMessageBuffer& operator<<(char* msg);
 
         /**
          *   Appends character to buffer.
@@ -214,6 +220,12 @@
          *   @return this buffer.
          */
         WideMessageBuffer& operator<<(const wchar_t* msg);
+        /**
+         *   Appends string to buffer.
+         *   @param msg string to append.
+         *   @return this buffer.
+         */
+        WideMessageBuffer& operator<<(wchar_t* msg);
 
         /**
          *   Appends character to buffer.
@@ -376,6 +388,13 @@
          *   @return encapsulated CharMessageBuffer.
          */
         CharMessageBuffer& operator<<(const char* msg);
+        /**
+         *   Appends a string into the buffer and
+         *   fixes the buffer to use char characters.
+         *   @param msg message to append.
+         *   @return encapsulated CharMessageBuffer.
+         */
+        CharMessageBuffer& operator<<(char* msg);
 
         /**
          *   Appends a string into the buffer and
@@ -415,6 +434,13 @@
          *   @return encapsulated CharMessageBuffer.
          */
         WideMessageBuffer& operator<<(const wchar_t* msg);
+        /**
+         *   Appends a string into the buffer and
+         *   fixes the buffer to use char characters.
+         *   @param msg message to append.
+         *   @return encapsulated CharMessageBuffer.
+         */
+        WideMessageBuffer& operator<<(wchar_t* msg);
         /**
          *   Appends a string into the buffer and
          *   fixes the buffer to use char characters.

Modified: logging/log4cxx/trunk/src/test/cpp/helpers/messagebuffertest.cpp
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/test/cpp/helpers/messagebuffertest.cpp?rev=596412&r1=596411&r2=596412&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/test/cpp/helpers/messagebuffertest.cpp (original)
+++ logging/log4cxx/trunk/src/test/cpp/helpers/messagebuffertest.cpp Mon Nov 19 11:52:59 2007
@@ -19,7 +19,8 @@
 #include <cppunit/extensions/HelperMacros.h>
 #include <log4cxx/helpers/messagebuffer.h>
 #include <log4cxx/helpers/messagebuffer.h>
-#include <iomanip>
+#include <iomanip>
+#include "../insertwide.h"
 
 using namespace log4cxx;
 using namespace log4cxx::helpers;
@@ -31,11 +32,17 @@
 {
    CPPUNIT_TEST_SUITE(MessageBufferTest);
       CPPUNIT_TEST(testInsertChar);
-      CPPUNIT_TEST(testInsertCStr);
+      CPPUNIT_TEST(testInsertConstStr);
+      CPPUNIT_TEST(testInsertStr);
       CPPUNIT_TEST(testInsertString);
       CPPUNIT_TEST(testInsertNull);
       CPPUNIT_TEST(testInsertInt);
       CPPUNIT_TEST(testInsertManipulator);
+#if LOG4CXX_HAS_WCHAR_T
+      CPPUNIT_TEST(testInsertConstWStr);
+      CPPUNIT_TEST(testInsertWString);
+      CPPUNIT_TEST(testInsertWStr);
+#endif
    CPPUNIT_TEST_SUITE_END();
 
 
@@ -48,7 +55,7 @@
         CPPUNIT_ASSERT_EQUAL(false, buf.hasStream());
     }
 
-    void testInsertCStr() {
+    void testInsertConstStr() {
         MessageBuffer buf;
         std::string greeting("Hello, World");
         CharMessageBuffer& retval = buf << "Hello" << ", World";
@@ -56,6 +63,20 @@
         CPPUNIT_ASSERT_EQUAL(false, buf.hasStream());
     }
 
+    void testInsertStr() {
+        MessageBuffer buf;
+        std::string greeting("Hello, World");
+		char* part1 = (char*) malloc(20);
+		strcpy(part1, "Hello");
+		char* part2 = (char*) malloc(20);
+		strcpy(part2, ", World");
+        CharMessageBuffer& retval = buf << part1 << part2;
+		free(part1);
+		free(part2);
+        CPPUNIT_ASSERT_EQUAL(greeting, buf.str(retval)); 
+        CPPUNIT_ASSERT_EQUAL(false, buf.hasStream());
+    }
+
     void testInsertString() {
         MessageBuffer buf;
         std::string greeting("Hello, World");
@@ -87,7 +108,39 @@
         CPPUNIT_ASSERT_EQUAL(greeting, buf.str(retval));
         CPPUNIT_ASSERT_EQUAL(true, buf.hasStream());
     }
-
+
+#if LOG4CXX_HAS_WCHAR_T
+    void testInsertConstWStr() {
+        MessageBuffer buf;
+        std::wstring greeting(L"Hello, World");
+        WideMessageBuffer& retval = buf << L"Hello" << L", World";
+        CPPUNIT_ASSERT_EQUAL(greeting, buf.str(retval)); 
+        CPPUNIT_ASSERT_EQUAL(false, buf.hasStream());
+    }
+
+    void testInsertWString() {
+        MessageBuffer buf;
+        std::wstring greeting(L"Hello, World");
+        WideMessageBuffer& retval = buf << std::wstring(L"Hello") << std::wstring(L", World");
+        CPPUNIT_ASSERT_EQUAL(greeting, buf.str(retval)); 
+        CPPUNIT_ASSERT_EQUAL(false, buf.hasStream());
+    }
+
+    void testInsertWStr() {
+        MessageBuffer buf;
+        std::wstring greeting(L"Hello, World");
+		wchar_t* part1 = (wchar_t*) malloc(20);
+		wcscpy(part1, L"Hello");
+		wchar_t* part2 = (wchar_t*) malloc(20);
+		wcscpy(part2, L", World");
+        WideMessageBuffer& retval = buf << part1 << part2;
+		free(part1);
+		free(part2);
+        CPPUNIT_ASSERT_EQUAL(greeting, buf.str(retval)); 
+        CPPUNIT_ASSERT_EQUAL(false, buf.hasStream());
+    }
+
+#endif
 
 };