2007-08-02 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>

Merged Dan's patch:
	* src/ByteArrayDiskWriter.cc: ios_base -> ios

	Use va_copy to avoid core dump on amd64:
	* src/SimpleLogger.cc
pull/1/head
Tatsuhiro Tsujikawa 2007-08-02 14:17:00 +00:00
parent 46e8c332cd
commit 54be1cbc4f
3 changed files with 23 additions and 4 deletions

View File

@ -1,3 +1,11 @@
2007-08-02 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Merged Dan's patch:
* src/ByteArrayDiskWriter.cc: ios_base -> ios
Use va_copy to avoid core dump on amd64:
* src/SimpleLogger.cc
2007-08-01 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com> 2007-08-01 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Make a2netcompat.h include a2io.h to fix compilation error: Make a2netcompat.h include a2io.h to fix compilation error:

View File

@ -67,18 +67,18 @@ void ByteArrayDiskWriter::openExistingFile(const string& filename,
void ByteArrayDiskWriter::writeData(const char* data, int32_t dataLength, int64_t position) { void ByteArrayDiskWriter::writeData(const char* data, int32_t dataLength, int64_t position) {
if(size() < position) { if(size() < position) {
buf.seekg(0, ios_base::end); buf.seekg(0, ios::end);
for(int32_t i = size(); i < position; ++i) { for(int32_t i = size(); i < position; ++i) {
buf.put('\0'); buf.put('\0');
} }
} else { } else {
buf.seekg(position, ios_base::beg); buf.seekg(position, ios::beg);
} }
buf.write(data, dataLength); buf.write(data, dataLength);
} }
int32_t ByteArrayDiskWriter::readData(char* data, int32_t len, int64_t position) { int32_t ByteArrayDiskWriter::readData(char* data, int32_t len, int64_t position) {
buf.seekg(position, ios_base::beg); buf.seekg(position, ios::beg);
buf.read(data, len); buf.read(data, len);
// TODO we have to call buf.clear() here? YES // TODO we have to call buf.clear() here? YES
buf.clear(); buf.clear();

View File

@ -41,6 +41,14 @@
#include <stdarg.h> #include <stdarg.h>
#include <errno.h> #include <errno.h>
#if !defined(va_copy)
# if defined(__va_copy)
# define va_copy(dest, src) __va_copy(dest, src)
# else
# define va_copy(dest, src) (dest = src)
# endif
#endif
#define WRITE_LOG(LEVEL, MSG) \ #define WRITE_LOG(LEVEL, MSG) \
va_list ap;\ va_list ap;\
va_start(ap, MSG);\ va_start(ap, MSG);\
@ -89,6 +97,8 @@ void SimpleLogger::writeHeader(FILE* file, string date, string level) const {
void SimpleLogger::writeLog(FILE* file, Logger::LEVEL level, const char* msg, va_list ap, Exception* e, bool printHeader) const void SimpleLogger::writeLog(FILE* file, Logger::LEVEL level, const char* msg, va_list ap, Exception* e, bool printHeader) const
{ {
va_list apCopy;
va_copy(apCopy, ap);
string levelStr; string levelStr;
switch(level) { switch(level) {
case Logger::DEBUG: case Logger::DEBUG:
@ -117,7 +127,7 @@ void SimpleLogger::writeLog(FILE* file, Logger::LEVEL level, const char* msg, va
if(printHeader) { if(printHeader) {
writeHeader(file, datestr, levelStr); writeHeader(file, datestr, levelStr);
} }
vfprintf(file, string(Util::replace(msg, "\r", "")+"\n").c_str(), ap); vfprintf(file, string(Util::replace(msg, "\r", "")+"\n").c_str(), apCopy);
for(Exception* nestedEx = e; nestedEx; nestedEx = nestedEx->getCause()) { for(Exception* nestedEx = e; nestedEx; nestedEx = nestedEx->getCause()) {
// TODO a quick hack not to print header in console // TODO a quick hack not to print header in console
if(printHeader) { if(printHeader) {
@ -126,6 +136,7 @@ void SimpleLogger::writeLog(FILE* file, Logger::LEVEL level, const char* msg, va
fprintf(file, "exception: %s\n", Util::replace(nestedEx->getMsg(), "\r", "").c_str()); fprintf(file, "exception: %s\n", Util::replace(nestedEx->getMsg(), "\r", "").c_str());
} }
fflush(file); fflush(file);
va_end(apCopy);
} }
void SimpleLogger::writeFile(Logger::LEVEL level, const char* msg, va_list ap, Exception* e) const { void SimpleLogger::writeFile(Logger::LEVEL level, const char* msg, va_list ap, Exception* e) const {