-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi,
I have investigated a more portable way of getting rid of the warning on AMD64 regarding the log4cxx_intptr_t type. This type is only used in StringHelper::formatHex(), which iteself is again only used to convert the thread id returned by apr_os_thread_current(). The APR itself already provides a portable way of converting an apr_os_thread_id to a string by passing a special format specifier to apr_snprintf(). Thus, my solution (patch attached) is to use this portable method and to completely remove the not-so-portable log4cxx_intptr_t type. Drawback(?): this specific format specifier for apr_os_thread_id was introduced as new feature with APR 1.2, which would mean that APR 1.2 will be mandatory (not a big issue in my opinion) starting with this patch. Any comments? Thanks and best Regards, Andreas - -- Andreas Fester mailto:[EMAIL PROTECTED] WWW: http://www.littletux.net ICQ: 326674288 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.1 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org iD8DBQFDY1cjZ3bQVzeW+rsRAqFGAKCqeFiO2MaxSDjRxoJVGf1mSRfdtgCfRv8O 1dbI/zo7pIhzS2lJRMe6pzY= =RLX4 -----END PGP SIGNATURE-----
diff -urN log4cxx-0.9.8.old/include/log4cxx/helpers/stringhelper.h log4cxx-0.9.8/include/log4cxx/helpers/stringhelper.h --- log4cxx-0.9.8.old/include/log4cxx/helpers/stringhelper.h 2005-10-23 03:06:24.000000000 +0200 +++ log4cxx-0.9.8/include/log4cxx/helpers/stringhelper.h 2005-10-29 12:47:37.000000000 +0200 @@ -53,8 +53,6 @@ static LogString toString(bool val); - static LogString formatHex(const void* handle); - static std::string toLowerCase(const std::string& s); static bool getline(std::string& buf, std::string& line); diff -urN log4cxx-0.9.8.old/include/log4cxx/private/log4cxx_private.h log4cxx-0.9.8/include/log4cxx/private/log4cxx_private.h --- log4cxx-0.9.8.old/include/log4cxx/private/log4cxx_private.h 2005-10-23 03:07:57.000000000 +0200 +++ log4cxx-0.9.8/include/log4cxx/private/log4cxx_private.h 2005-10-29 12:47:55.000000000 +0200 @@ -43,11 +43,6 @@ typedef log4cxx_int64_t log4cxx_time_t; typedef int log4cxx_status_t; -// -// unsigned int same size as void* -// -typedef unsigned int log4cxx_intptr_t; - #define LOG4CXX_LOCALE_ENCODING_UTF8 0 #define LOG4CXX_LOCALE_ENCODING_ISO_8859_1 0 #define LOG4CXX_LOCALE_ENCODING_US_ASCII 0 diff -urN log4cxx-0.9.8.old/src/loggingevent.cpp log4cxx-0.9.8/src/loggingevent.cpp --- log4cxx-0.9.8.old/src/loggingevent.cpp 2005-10-15 09:34:35.000000000 +0200 +++ log4cxx-0.9.8/src/loggingevent.cpp 2005-10-29 12:45:39.000000000 +0200 @@ -26,9 +26,11 @@ #include <log4cxx/helpers/socket.h> #include <log4cxx/helpers/aprinitializer.h> #include <log4cxx/helpers/threadspecificdata.h> +#include <log4cxx/helpers/transcoder.h> #include <apr_time.h> #include <apr_portable.h> +#include <apr_strings.h> #include <log4cxx/helpers/stringhelper.h> using namespace log4cxx; @@ -192,7 +194,15 @@ const LogString LoggingEvent::getCurrentThreadName() { #if APR_HAS_THREADS - return StringHelper::formatHex((const void*) apr_os_thread_current()); + apr_os_thread_t threadId = apr_os_thread_current(); + + // apr_os_thread_t encoded in HEX takes needs as many characters + // as two times the size of the type, plus an additional null byte + char result[sizeof(apr_os_thread_t) * 2 + 1]; + apr_snprintf(result, sizeof result, "%pt", threadId); + + LOG4CXX_DECODE_CHAR(str, (const char*) result); + return LOG4CXX_STR("0x") + str; #else return LOG4CXX_STR("0x00000000"); #endif diff -urN log4cxx-0.9.8.old/src/stringhelper.cpp log4cxx-0.9.8/src/stringhelper.cpp --- log4cxx-0.9.8.old/src/stringhelper.cpp 2005-10-23 03:06:24.000000000 +0200 +++ log4cxx-0.9.8/src/stringhelper.cpp 2005-10-29 12:47:15.000000000 +0200 @@ -281,21 +281,6 @@ #endif - -LogString StringHelper::formatHex(const void* ptr) { - const logchar* hexdigits = LOG4CXX_STR("0123456789ABCDEF"); - log4cxx_intptr_t iptr = (log4cxx_intptr_t) ptr; - int width = sizeof(ptr)*2 + 2; - LogString s(width, LOG4CXX_STR('x')); - s[0] = LOG4CXX_STR('0'); - for(int i = width - 1; i >= 2; i--) { - s[i] = hexdigits[iptr & 0x0F]; - iptr = iptr >> 4; - } - return s; -} - - LogString StringHelper::format(const LogString& pattern, const std::vector<LogString>& params) { LogString result; diff -urN log4cxx-0.9.8.old/tests/src/patternlayouttest.cpp log4cxx-0.9.8/tests/src/patternlayouttest.cpp --- log4cxx-0.9.8.old/tests/src/patternlayouttest.cpp 2005-10-15 09:34:41.000000000 +0200 +++ log4cxx-0.9.8/tests/src/patternlayouttest.cpp 2005-10-29 12:27:53.000000000 +0200 @@ -283,7 +283,7 @@ // // combo of relative time and thread identifier // (the \\\\1 preserve a leading space) - Filter filter2(".*0x[0-9A-F]*]", "[main]"); + Filter filter2(".*0x[0-9a-f]*]", "[main]"); std::vector<Filter *> filters; diff -urN log4cxx-0.9.8.old/tests/src/util/threadfilter.cpp log4cxx-0.9.8/tests/src/util/threadfilter.cpp --- log4cxx-0.9.8.old/tests/src/util/threadfilter.cpp 2005-10-15 09:34:41.000000000 +0200 +++ log4cxx-0.9.8/tests/src/util/threadfilter.cpp 2005-10-29 12:10:22.000000000 +0200 @@ -19,4 +19,4 @@ using namespace log4cxx; using namespace log4cxx::helpers; -ThreadFilter::ThreadFilter() : Filter("\\[0x[0-9A-F]*]", "\\[main]") {} +ThreadFilter::ThreadFilter() : Filter("\\[0x[0-9a-f]*]", "\\[main]") {} diff -urN log4cxx-0.9.8.old/tests/src/util/xmlthreadfilter.cpp log4cxx-0.9.8/tests/src/util/xmlthreadfilter.cpp --- log4cxx-0.9.8.old/tests/src/util/xmlthreadfilter.cpp 2005-10-15 09:34:41.000000000 +0200 +++ log4cxx-0.9.8/tests/src/util/xmlthreadfilter.cpp 2005-10-29 12:30:59.000000000 +0200 @@ -20,5 +20,5 @@ using namespace log4cxx::helpers; XMLThreadFilter::XMLThreadFilter() - : Filter("0x[0-9A-F]*", "main") { + : Filter("0x[0-9a-f]*", "main") { }