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