I've uploaded a new upstream version of cxxtools a few days ago. It has just some bug fixes, but none that have bugs in the BTS. The diff is rather large since I'm running autotools in debian/rules, but I've attached the filtered output of debdiff cxxtools_1.4.3-2.dsc cxxtools_1.4.3.1-1.dsc which is hopefully more readable. I don't think that the new version has anything controversial in it. cxxtools has a couple of rdepends, which are both my packages too. Please consider hinting cxxtools to testing.
diff -Nru /tmp/dQC5taSqUd/cxxtools-1.4.3/ChangeLog /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/ChangeLog --- /tmp/dQC5taSqUd/cxxtools-1.4.3/ChangeLog 2006-08-15 00:33:02.000000000 +0300 +++ /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/ChangeLog 2006-11-27 22:50:00.000000000 +0200 @@ -1,6 +1,20 @@ +2006-11-22 tommi@tntnet.org + + - make loggers more private and instantiate existing loggers later + - "putchar" is a macro somewhere - rename member-method to workaround + this name-conflict + +2006-11-20 tommi@tntnet.org + + - fix tcpstream to correctly report end-of-file in all circumstances + +2006-09-11 tommi@tntnet.org + + - fixed buffer-overflow in logger when formatting dates + 2006-08-10 tommi@tntnet.org - - new helper-class IConverter for easyer usage of iconv(3) and iconvstream + - new helper-class IConverter for easier usage of iconv(3) and iconvstream 2006-07-27 tommi@tntnet.org diff -Nru /tmp/dQC5taSqUd/cxxtools-1.4.3/Makefile.in /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/Makefile.in diff -Nru /tmp/dQC5taSqUd/cxxtools-1.4.3/aclocal.m4 /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/aclocal.m4 diff -Nru /tmp/dQC5taSqUd/cxxtools-1.4.3/config.guess /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/config.guess diff -Nru /tmp/dQC5taSqUd/cxxtools-1.4.3/config.sub /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/config.sub diff -Nru /tmp/dQC5taSqUd/cxxtools-1.4.3/configure /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/configure diff -Nru /tmp/dQC5taSqUd/cxxtools-1.4.3/configure.in /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/configure.in --- /tmp/dQC5taSqUd/cxxtools-1.4.3/configure.in 2006-07-28 11:10:33.000000000 +0300 +++ /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/configure.in 2006-11-26 01:00:06.000000000 +0200 @@ -1,4 +1,4 @@ -AC_INIT(cxxtools, 1.4.3, [Tommi Maekitalo <tommi@tntnet.org>]) +AC_INIT(cxxtools, 1.4.3.1, [Tommi Maekitalo <tommi@tntnet.org>]) AM_INIT_AUTOMAKE abi_current=3 diff -Nru /tmp/dQC5taSqUd/cxxtools-1.4.3/debian/changelog /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/debian/changelog --- /tmp/dQC5taSqUd/cxxtools-1.4.3/debian/changelog 2006-12-11 17:00:47.000000000 +0200 +++ /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/debian/changelog 2006-12-11 17:00:48.000000000 +0200 @@ -1,3 +1,9 @@ +cxxtools (1.4.3.1-1) unstable; urgency=low + + * New upstream release + + -- Kari Pahula <kaol@debian.org> Thu, 7 Dec 2006 00:06:47 +0200 + cxxtools (1.4.3-2) unstable; urgency=low * Added dependency on libstdc++-dev for libcxxtools-dev diff -Nru /tmp/dQC5taSqUd/cxxtools-1.4.3/demo/Makefile.in /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/demo/Makefile.in diff -Nru /tmp/dQC5taSqUd/cxxtools-1.4.3/demo/logsh.cpp /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/demo/logsh.cpp --- /tmp/dQC5taSqUd/cxxtools-1.4.3/demo/logsh.cpp 2006-06-18 23:48:04.000000000 +0300 +++ /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/demo/logsh.cpp 2006-11-29 00:10:33.000000000 +0200 @@ -79,6 +79,8 @@ log_error(argv[a]); else if (warn) log_warn(argv[a]); + else if (info) + log_info(argv[a]); else if (debug) log_debug(argv[a]); } diff -Nru /tmp/dQC5taSqUd/cxxtools-1.4.3/include/Makefile.in /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/include/Makefile.in diff -Nru /tmp/dQC5taSqUd/cxxtools-1.4.3/include/cxxtools/base64stream.h /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/include/cxxtools/base64stream.h --- /tmp/dQC5taSqUd/cxxtools-1.4.3/include/cxxtools/base64stream.h 2006-06-18 23:52:05.000000000 +0300 +++ /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/include/cxxtools/base64stream.h 2006-11-27 22:45:30.000000000 +0200 @@ -55,7 +55,7 @@ int sync(); private: - void putchar(char ch); + void putChar(char ch); int getval(); }; diff -Nru /tmp/dQC5taSqUd/cxxtools-1.4.3/include/cxxtools/httprequest.h /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/include/cxxtools/httprequest.h --- /tmp/dQC5taSqUd/cxxtools-1.4.3/include/cxxtools/httprequest.h 2006-06-18 23:52:04.000000000 +0300 +++ /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/include/cxxtools/httprequest.h 2006-11-26 01:00:04.000000000 +0200 @@ -90,8 +90,8 @@ QueryParams& getQueryParams() { return params; } const QueryParams& getQueryParams() const { return params; } - void set(const std::string name, const std::string value) { params.add(name, value); } - void set(const std::string value) { params.add(value); } + void set(const std::string& name, const std::string& value) { params.add(name, value); } + void set(const std::string& value) { params.add(value); } void execute(); diff -Nru /tmp/dQC5taSqUd/cxxtools-1.4.3/libltdl/Makefile.in /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/libltdl/Makefile.in diff -Nru /tmp/dQC5taSqUd/cxxtools-1.4.3/libltdl/acinclude.m4 /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/libltdl/acinclude.m4 diff -Nru /tmp/dQC5taSqUd/cxxtools-1.4.3/libltdl/aclocal.m4 /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/libltdl/aclocal.m4 diff -Nru /tmp/dQC5taSqUd/cxxtools-1.4.3/libltdl/config.guess /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/libltdl/config.guess diff -Nru /tmp/dQC5taSqUd/cxxtools-1.4.3/libltdl/config.sub /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/libltdl/config.sub diff -Nru /tmp/dQC5taSqUd/cxxtools-1.4.3/libltdl/configure /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/libltdl/configure diff -Nru /tmp/dQC5taSqUd/cxxtools-1.4.3/libltdl/ltdl.c /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/libltdl/ltdl.c diff -Nru /tmp/dQC5taSqUd/cxxtools-1.4.3/libltdl/ltmain.sh /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/libltdl/ltmain.sh diff -Nru /tmp/dQC5taSqUd/cxxtools-1.4.3/ltmain.sh /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/ltmain.sh diff -Nru /tmp/dQC5taSqUd/cxxtools-1.4.3/src/Makefile.in /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/src/Makefile.in diff -Nru /tmp/dQC5taSqUd/cxxtools-1.4.3/src/base64stream.cpp /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/src/base64stream.cpp --- /tmp/dQC5taSqUd/cxxtools-1.4.3/src/base64stream.cpp 2006-06-18 23:48:04.000000000 +0300 +++ /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/src/base64stream.cpp 2006-11-27 22:45:53.000000000 +0200 @@ -39,34 +39,34 @@ case 1: B = 0; C = 0; - putchar(cv[(A >> 2) & 0x3F]); - putchar(cv[((A << 4) | ((B >> 4) & 0xF)) & 0x3F]); - putchar('='); - putchar('='); + putChar(cv[(A >> 2) & 0x3F]); + putChar(cv[((A << 4) | ((B >> 4) & 0xF)) & 0x3F]); + putChar('='); + putChar('='); break; case 2: C = 0; - putchar(cv[(A >> 2) & 0x3F]); - putchar(cv[((A << 4) | ((B >> 4) & 0xF)) & 0x3F]); - putchar(cv[((B << 2) | ((C >> 6) & 0x3)) & 0x3F]); - putchar('='); + putChar(cv[(A >> 2) & 0x3F]); + putChar(cv[((A << 4) | ((B >> 4) & 0xF)) & 0x3F]); + putChar(cv[((B << 2) | ((C >> 6) & 0x3)) & 0x3F]); + putChar('='); break; case 3: - putchar(cv[(A >> 2) & 0x3F]); - putchar(cv[((A << 4) | ((B >> 4) & 0xF)) & 0x3F]); - putchar(cv[((B << 2) | ((C >> 6) & 0x3)) & 0x3F]); - putchar(cv[( C ) & 0x3F]); + putChar(cv[(A >> 2) & 0x3F]); + putChar(cv[((A << 4) | ((B >> 4) & 0xF)) & 0x3F]); + putChar(cv[((B << 2) | ((C >> 6) & 0x3)) & 0x3F]); + putChar(cv[( C ) & 0x3F]); break; } - putchar('\n'); - putchar('='); - putchar('='); - putchar('='); - putchar('='); - putchar('\n'); + putChar('\n'); + putChar('='); + putChar('='); + putChar('='); + putChar('='); + putChar('\n'); setp(obuffer, obuffer + 3); indecode = false; @@ -79,10 +79,10 @@ char A = obuffer[0]; char B = obuffer[1]; char C = obuffer[2]; - putchar(cv[(A >> 2) & 0x3F]); - putchar(cv[((A << 4) | ((B >> 4) & 0xF)) & 0x3F]); - putchar(cv[((B << 2) | ((C >> 6) & 0x3)) & 0x3F]); - putchar(cv[( C ) & 0x3F]); + putChar(cv[(A >> 2) & 0x3F]); + putChar(cv[((A << 4) | ((B >> 4) & 0xF)) & 0x3F]); + putChar(cv[((B << 2) | ((C >> 6) & 0x3)) & 0x3F]); + putChar(cv[( C ) & 0x3F]); } setp(obuffer, obuffer + 3); @@ -149,7 +149,7 @@ return 0; } -void Base64stream_streambuf::putchar(char ch) +void Base64stream_streambuf::putChar(char ch) { sinksource->sputc(ch); if (ch == '\n') diff -Nru /tmp/dQC5taSqUd/cxxtools-1.4.3/src/dlloader.cpp /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/src/dlloader.cpp --- /tmp/dQC5taSqUd/cxxtools-1.4.3/src/dlloader.cpp 2006-06-18 23:48:04.000000000 +0300 +++ /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/src/dlloader.cpp 2006-11-26 01:00:05.000000000 +0200 @@ -20,6 +20,7 @@ */ #include "cxxtools/dlloader.h" +#include "cxxtools/log.h" #include "config.h" #ifdef USE_LIBTOOL @@ -53,6 +54,8 @@ #endif +log_define("cxxtools.dlloader"); + namespace cxxtools { @@ -118,14 +121,19 @@ { close(); + log_debug("dlinit"); DLINIT(); + log_debug("dlopen(\"" << name << "\")"); handle = DLOPEN(name); if (!handle) { + log_debug("dlopen(\"" << name << "\") failed"); DLEXIT(); throw DlopenError(name); } + + log_debug("dlopen => " << handle); } void Library::close() @@ -134,6 +142,7 @@ { if (prev == this) { + log_debug("dlclose " << handle); DLCLOSE(handle); DLEXIT(); } @@ -149,10 +158,15 @@ Symbol Library::sym(const char* name) const { + log_debug("dlsym(" << handle << ", \"" << name << "\")"); void* sym = DLSYM(handle, name); if (sym == 0) + { + log_debug("dlsym: symbol \"" << name << "\" not found"); throw SymbolNotFound(name); + } + log_debug("dlsym => " << sym); return Symbol(*this, sym); } diff -Nru /tmp/dQC5taSqUd/cxxtools-1.4.3/src/log.cpp /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/src/log.cpp --- /tmp/dQC5taSqUd/cxxtools-1.4.3/src/log.cpp 2006-08-10 23:35:01.000000000 +0300 +++ /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/src/log.cpp 2006-11-26 01:00:05.000000000 +0200 @@ -35,6 +35,7 @@ #include <sys/stat.h> #include <unistd.h> #include <stdio.h> +#include <cctype> namespace cxxtools { @@ -182,48 +183,74 @@ loghost.connect(host.c_str(), port); } - typedef std::list<Logger*> loggers_type; - static loggers_type baseLoggers; - static loggers_type cacheLoggers; RWLock Logger::rwmutex; Mutex Logger::mutex; - Logger::log_level_type Logger::std_level = LOG_LEVEL_ERROR; - static Logger::log_level_type getBaseLogLevel(const std::string& category) + namespace { - // search best-fit Logger - std::string::size_type best_len = 0; - Logger::log_level_type best_level = Logger::getStdLevel(); + typedef std::list<Logger*> loggers_type; - for (loggers_type::iterator it = baseLoggers.begin(); - it != baseLoggers.end(); ++it) + loggers_type& getBaseLoggers() { - if ((*it)->getCategory() == category) + static loggers_type* baseLoggers = 0; + if (baseLoggers == 0) { - best_level = (*it)->getLogLevel(); - break; + MutexLock lock(Logger::mutex); + if (baseLoggers == 0) + baseLoggers = new loggers_type(); } - else if ((*it)->getCategory().size() > best_len - && (*it)->getCategory().size() < category.size() - && category.at((*it)->getCategory().size()) == '.' - && category.compare(0, (*it)->getCategory().size(), (*it)->getCategory()) == 0) + return *baseLoggers; + } + + loggers_type& getCacheLoggers() + { + static loggers_type* cacheLoggers = 0; + if (cacheLoggers == 0) { - best_len = (*it)->getCategory().size(); - // update log-level - best_level = (*it)->getLogLevel(); + MutexLock lock(Logger::mutex); + if (cacheLoggers == 0) + cacheLoggers = new loggers_type(); } + return *cacheLoggers; } - return best_level; - } + Logger::log_level_type getBaseLogLevel(const std::string& category) + { + // search best-fit Logger + std::string::size_type best_len = 0; + Logger::log_level_type best_level = Logger::getStdLevel(); + + loggers_type& baseLoggers = getBaseLoggers(); + for (loggers_type::iterator it = baseLoggers.begin(); + it != baseLoggers.end(); ++it) + { + if ((*it)->getCategory() == category) + { + best_level = (*it)->getLogLevel(); + break; + } + else if ((*it)->getCategory().size() > best_len + && (*it)->getCategory().size() < category.size() + && category.at((*it)->getCategory().size()) == '.' + && category.compare(0, (*it)->getCategory().size(), (*it)->getCategory()) == 0) + { + best_len = (*it)->getCategory().size(); + // update log-level + best_level = (*it)->getLogLevel(); + } + } - static void reinitializeLoggers() - { - // reinitialize already instantiated loggers - for (loggers_type::iterator it = cacheLoggers.begin(); - it != cacheLoggers.end(); ++it) - (*it)->setLogLevel(getBaseLogLevel((*it)->getCategory())); + return best_level; + } + + void reinitializeLoggers() + { + // reinitialize already instantiated loggers + for (loggers_type::iterator it = getCacheLoggers().begin(); + it != getCacheLoggers().end(); ++it) + (*it)->setLogLevel(getBaseLogLevel((*it)->getCategory())); + } } Logger* Logger::getLogger(const std::string& category) @@ -231,12 +258,12 @@ // search existing Logger RdLock rdLock(rwmutex); - loggers_type::iterator lower_bound_it = cacheLoggers.begin(); - while (lower_bound_it != cacheLoggers.end() + loggers_type::iterator lower_bound_it = getCacheLoggers().begin(); + while (lower_bound_it != getCacheLoggers().end() && (*lower_bound_it)->getCategory() < category) ++lower_bound_it; - if (lower_bound_it != cacheLoggers.end() + if (lower_bound_it != getCacheLoggers().end() && (*lower_bound_it)->getCategory() == category) return *lower_bound_it; @@ -245,12 +272,12 @@ WrLock wrLock(rwmutex); // we have to do it again after gaining write-lock - lower_bound_it = cacheLoggers.begin(); - while (lower_bound_it != cacheLoggers.end() + lower_bound_it = getCacheLoggers().begin(); + while (lower_bound_it != getCacheLoggers().end() && (*lower_bound_it)->getCategory() < category) ++lower_bound_it; - if (lower_bound_it != cacheLoggers.end() + if (lower_bound_it != getCacheLoggers().end() && (*lower_bound_it)->getCategory() == category) return *lower_bound_it; @@ -259,7 +286,7 @@ log_level_type base_level = getBaseLogLevel(category); // insert the new Logger in list and return pointer to the new list-element - return *(cacheLoggers.insert(lower_bound_it, new LoggerImpl(category, base_level))); + return *(getCacheLoggers().insert(lower_bound_it, new LoggerImpl(category, base_level))); } Logger* Logger::setLevel(const std::string& category, log_level_type l) @@ -267,6 +294,7 @@ WrLock lock(rwmutex); // search for existing Logger + loggers_type& baseLoggers = getBaseLoggers(); loggers_type::iterator it = baseLoggers.begin(); while (it != baseLoggers.end() && (*it)->getCategory() < category) @@ -301,7 +329,7 @@ gettimeofday(&t, 0); // format date only once per second: - static char date[20]; + static char date[21]; static time_t psec = 0; time_t sec = static_cast<time_t>(t.tv_sec); if (sec != psec) @@ -437,7 +465,7 @@ void log_init_cxxtools(const std::string& propertyfilename) { cxxtools::Logger::setRootLevel(cxxtools::Logger::LOG_LEVEL_ERROR); - cxxtools::baseLoggers.clear(); + cxxtools::getBaseLoggers().clear(); std::ifstream in(propertyfilename.c_str()); diff -Nru /tmp/dQC5taSqUd/cxxtools-1.4.3/src/tcpstream.cpp /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/src/tcpstream.cpp --- /tmp/dQC5taSqUd/cxxtools-1.4.3/src/tcpstream.cpp 2006-06-18 23:48:04.000000000 +0300 +++ /tmp/Kkq4uJnRD6/cxxtools-1.4.3.1/src/tcpstream.cpp 2006-11-26 01:00:05.000000000 +0200 @@ -192,7 +192,7 @@ } - return n; + return n < 0 ? 0 : n; } Stream::size_type Stream::write(const char* buffer, @@ -262,7 +262,7 @@ setp(m_buffer, m_buffer + m_bufsize); if (c != traits_type::eof()) { - *pptr() = (char_type)c; + *pptr() = traits_type::to_char_type(c); pbump(1); } @@ -278,7 +278,7 @@ return traits_type::eof(); setg(m_buffer, m_buffer, m_buffer + n); - return (int_type)(unsigned char)m_buffer[0]; + return traits_type::to_int_type(m_buffer[0]); } int streambuf::sync()
Attachment:
signature.asc
Description: Digital signature