-----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") {
}