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 2008/03/11 06:39:18 UTC

svn commit: r635805 - in /logging/log4cxx/trunk/src/main: cpp/exception.cpp cpp/odbcappender.cpp include/log4cxx/db/odbcappender.h include/log4cxx/helpers/exception.h

Author: carnold
Date: Mon Mar 10 22:39:14 2008
New Revision: 635805

URL: http://svn.apache.org/viewvc?rev=635805&view=rev
Log:
LOGCXX-248: ODBCAppender has Unicode issues

Modified:
    logging/log4cxx/trunk/src/main/cpp/exception.cpp
    logging/log4cxx/trunk/src/main/cpp/odbcappender.cpp
    logging/log4cxx/trunk/src/main/include/log4cxx/db/odbcappender.h
    logging/log4cxx/trunk/src/main/include/log4cxx/helpers/exception.h

Modified: logging/log4cxx/trunk/src/main/cpp/exception.cpp
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/cpp/exception.cpp?rev=635805&r1=635804&r2=635805&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/cpp/exception.cpp (original)
+++ logging/log4cxx/trunk/src/main/cpp/exception.cpp Mon Mar 10 22:39:14 2008
@@ -41,17 +41,13 @@
   msg[len] = 0;
 }
 
-Exception::Exception(const std::string& m) {
-  size_t len = m.size();
-  if (len > MSG_SIZE) {
-      len = MSG_SIZE;
-  }
+Exception::Exception(const char* m) {
 #if defined(__STDC_LIB_EXT1__) || defined(__STDC_SECURE_LIB__)
-  memcpy_s(msg, sizeof msg, m.data(), len);
+  strncpy_s(msg, sizeof msg, m, MSG_SIZE);
 #else
-  memcpy(msg, m.data(), len);
+  strncpy(msg, m, MSG_SIZE);
 #endif
-  msg[len] = 0;
+  msg[MSG_SIZE] = 0;
 }
 
 

Modified: logging/log4cxx/trunk/src/main/cpp/odbcappender.cpp
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/cpp/odbcappender.cpp?rev=635805&r1=635804&r2=635805&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/cpp/odbcappender.cpp (original)
+++ logging/log4cxx/trunk/src/main/cpp/odbcappender.cpp Mon Mar 10 22:39:14 2008
@@ -20,6 +20,7 @@
 #include <log4cxx/helpers/stringhelper.h>
 #include <log4cxx/helpers/transcoder.h>
 #include <log4cxx/patternlayout.h>
+#include <apr_strings.h>
 
 #if !defined(LOG4CXX)
 #define LOG4CXX 1
@@ -39,12 +40,13 @@
 using namespace log4cxx::spi;
 
 SQLException::SQLException(short fHandleType, 
-                           void* hInput, const char* prolog) 
-                           : Exception(formatMessage(fHandleType, hInput, prolog)) {
+                           void* hInput, const char* prolog,
+                           log4cxx::helpers::Pool& p) 
+                           : Exception(formatMessage(fHandleType, hInput, prolog, p)) {
 }
 
 
-SQLException::SQLException(const std::string& msg) 
+SQLException::SQLException(const char* msg) 
    : Exception(msg) {
 }
 
@@ -52,8 +54,8 @@
    : Exception(src) {
 }
 
-std::string SQLException::formatMessage(short fHandleType,
-                          void* hInput, const char* prolog) {
+const char* SQLException::formatMessage(short fHandleType,
+                          void* hInput, const char* prolog, log4cxx::helpers::Pool& p) {
    std::string strReturn(prolog);
    strReturn.append(" - ");
 #if LOG4CXX_HAVE_ODBC
@@ -76,7 +78,7 @@
    strReturn.append("log4cxx built without ODBC support");
 #endif
 
-   return strReturn;
+   return apr_pstrdup((apr_pool_t*) p.getAPRPool(), strReturn.c_str());
 }
 
 
@@ -162,7 +164,7 @@
       ret = SQLAllocHandle( SQL_HANDLE_STMT, con, &stmt);
       if (ret < 0)
       {
-         throw SQLException( SQL_HANDLE_DBC, con, "Failed to allocate sql handle.");
+         throw SQLException( SQL_HANDLE_DBC, con, "Failed to allocate sql handle.", p);
       }
 
       SQLWCHAR* wsql = Transcoder::wencode(sql, p); 
@@ -170,7 +172,7 @@
 
      if (ret < 0)
       {
-         throw SQLException(SQL_HANDLE_STMT, stmt, "Failed to execute sql statement.");
+         throw SQLException(SQL_HANDLE_STMT, stmt, "Failed to execute sql statement.", p);
       }
    }
    catch (SQLException& e)
@@ -209,7 +211,7 @@
       ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
       if (ret < 0)
       {
-         SQLException ex(SQL_HANDLE_ENV, env, "Failed to allocate SQL handle.");
+         SQLException ex(SQL_HANDLE_ENV, env, "Failed to allocate SQL handle.", p);
          env = SQL_NULL_HENV;
          throw ex;
       }
@@ -217,7 +219,7 @@
       ret = SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, SQL_IS_INTEGER);
       if (ret < 0)
       {
-         SQLException ex(SQL_HANDLE_ENV, env, "Failed to set odbc version.");
+         SQLException ex(SQL_HANDLE_ENV, env, "Failed to set odbc version.", p);
          SQLFreeHandle(SQL_HANDLE_ENV, env);
          env = SQL_NULL_HENV;
          throw ex;
@@ -229,7 +231,7 @@
       ret = SQLAllocHandle(SQL_HANDLE_DBC, env, &connection);
       if (ret < 0)
       {
-         SQLException ex(SQL_HANDLE_DBC, connection, "Failed to allocate sql handle.");
+         SQLException ex(SQL_HANDLE_DBC, connection, "Failed to allocate sql handle.", p);
          connection = SQL_NULL_HDBC;
          throw ex;
       }
@@ -248,7 +250,7 @@
 
      if (ret < 0)
       {
-         SQLException ex(SQL_HANDLE_DBC, connection, "Failed to connect to database.");
+         SQLException ex(SQL_HANDLE_DBC, connection, "Failed to connect to database.", p);
          SQLFreeHandle(SQL_HANDLE_DBC, connection);
          connection = SQL_NULL_HDBC;
          throw ex;

Modified: logging/log4cxx/trunk/src/main/include/log4cxx/db/odbcappender.h
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/include/log4cxx/db/odbcappender.h?rev=635805&r1=635804&r2=635805&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/include/log4cxx/db/odbcappender.h (original)
+++ logging/log4cxx/trunk/src/main/include/log4cxx/db/odbcappender.h Mon Mar 10 22:39:14 2008
@@ -38,12 +38,14 @@
             class LOG4CXX_EXPORT SQLException : public log4cxx::helpers::Exception {
             public:
                 SQLException(short fHandleType, 
-                            void* hInput, const char* prolog);
-                SQLException(const std::string& msg);
+                            void* hInput, const char* prolog,
+                            log4cxx::helpers::Pool& p);
+                SQLException(const char* msg);
                 SQLException(const SQLException& src);
             private:
-                std::string formatMessage(short fHandleType,
-                    void* hInput, const char* prolog);
+                const char* formatMessage(short fHandleType,
+                    void* hInput, const char* prolog,
+                    log4cxx::helpers::Pool& p);
             };
 
                 /**

Modified: logging/log4cxx/trunk/src/main/include/log4cxx/helpers/exception.h
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/include/log4cxx/helpers/exception.h?rev=635805&r1=635804&r2=635805&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/include/log4cxx/helpers/exception.h (original)
+++ logging/log4cxx/trunk/src/main/include/log4cxx/helpers/exception.h Mon Mar 10 22:39:14 2008
@@ -32,7 +32,7 @@
                 class LOG4CXX_EXPORT Exception : public ::std::exception
                 {
                 public:
-                        Exception(const std::string& msg);
+                        Exception(const char* msg);
                         Exception(const LogString& msg);
                         Exception(const Exception& src);
                         Exception& operator=(const Exception& src);