diff options
Diffstat (limited to 'dev-libs/log4cxx/files/log4cxx-0.10.0-unixODBC.patch')
-rw-r--r-- | dev-libs/log4cxx/files/log4cxx-0.10.0-unixODBC.patch | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/dev-libs/log4cxx/files/log4cxx-0.10.0-unixODBC.patch b/dev-libs/log4cxx/files/log4cxx-0.10.0-unixODBC.patch new file mode 100644 index 000000000000..cedca2ccdf42 --- /dev/null +++ b/dev-libs/log4cxx/files/log4cxx-0.10.0-unixODBC.patch @@ -0,0 +1,75 @@ +http://issues.apache.org/jira/browse/LOGCXX-299 +http://bugs.gentoo.org/show_bug.cgi?id=254920 + +diff -ur apache-log4cxx-0.10.0.orig/src/main/cpp/odbcappender.cpp apache-log4cxx-0.10.0/src/main/cpp/odbcappender.cpp +--- apache-log4cxx-0.10.0.orig/src/main/cpp/odbcappender.cpp 2008-04-01 01:34:09.000000000 +0300 ++++ apache-log4cxx-0.10.0/src/main/cpp/odbcappender.cpp 2010-02-24 14:39:37.000000000 +0200 +@@ -167,7 +167,8 @@ + throw SQLException( SQL_HANDLE_DBC, con, "Failed to allocate sql handle.", p); + } + +- SQLWCHAR* wsql = Transcoder::wencode(sql, p); ++ SQLWCHAR* wsql; ++ encode(&wsql, sql, p); + ret = SQLExecDirectW(stmt, wsql, SQL_NTS); + + if (ret < 0) +@@ -237,9 +238,10 @@ + } + + +- SQLWCHAR* wURL = Transcoder::wencode(databaseURL, p); ++ SQLWCHAR* wURL; ++ encode(&wURL, databaseURL, p); + +- wchar_t szOutConnectionString[1024]; ++ SQLWCHAR szOutConnectionString[1024]; + SQLSMALLINT nOutConnctionLength = 0; + + ret = SQLDriverConnectW( connection, NULL, +@@ -331,3 +333,31 @@ + } + } + } ++ ++void ODBCAppender::encode(wchar_t** dest, const LogString& src, Pool& p) { ++ *dest = Transcoder::wencode(src, p); ++} ++ ++void ODBCAppender::encode(unsigned short** dest, ++ const LogString& src, Pool& p) { ++ // worst case double number of characters from UTF-8 or wchar_t ++ *dest = (unsigned short*) ++ p.palloc((src.size() + 1) * 2 * sizeof(unsigned short)); ++ unsigned short* current = *dest; ++ for(LogString::const_iterator i = src.begin(); ++ i != src.end();) { ++ unsigned int sv = Transcoder::decode(src, i); ++ if (sv < 0x10000) { ++ *current++ = (unsigned short) sv; ++ } else { ++ unsigned char u = (unsigned char) (sv >> 16); ++ unsigned char w = (unsigned char) (u - 1); ++ unsigned short hs = (0xD800 + ((w & 0xF) << 6) + ((sv & 0xFFFF) >> 10)); ++ unsigned short ls = (0xDC00 + (sv && 0x3FF)); ++ *current++ = (unsigned short) hs; ++ *current++ = (unsigned short) ls; ++ } ++ } ++ *current = 0; ++} ++ +diff -ur apache-log4cxx-0.10.0.orig/src/main/include/log4cxx/db/odbcappender.h apache-log4cxx-0.10.0/src/main/include/log4cxx/db/odbcappender.h +--- apache-log4cxx-0.10.0.orig/src/main/include/log4cxx/db/odbcappender.h 2008-04-01 01:34:09.000000000 +0300 ++++ apache-log4cxx-0.10.0/src/main/include/log4cxx/db/odbcappender.h 2010-02-24 14:39:39.000000000 +0200 +@@ -279,6 +279,10 @@ + private: + ODBCAppender(const ODBCAppender&); + ODBCAppender& operator=(const ODBCAppender&); ++ static void encode(wchar_t** dest, const LogString& src, ++ log4cxx::helpers::Pool& p); ++ static void encode(unsigned short** dest, const LogString& src, ++ log4cxx::helpers::Pool& p); + }; // class ODBCAppender + LOG4CXX_PTR_DEF(ODBCAppender); + |