nicer snprintf() behavior
parent
11a47e1851
commit
4d8cc8d764
|
@ -48,19 +48,30 @@ void Logger::log(ELogLevel level, const Class *theClass,
|
||||||
if (level < m_logLevel)
|
if (level < m_logLevel)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
char tmp[2048];
|
char tmp[512], *msg = tmp;
|
||||||
va_list iterator;
|
va_list iterator;
|
||||||
va_start(iterator, fmt);
|
va_start(iterator, fmt);
|
||||||
vsnprintf(tmp, 2048, fmt, iterator);
|
size_t size = vsnprintf(tmp, sizeof(tmp), fmt, iterator);
|
||||||
va_end(iterator);
|
va_end(iterator);
|
||||||
|
|
||||||
|
if (size >= sizeof(tmp)) {
|
||||||
|
/* Overflow! -- dynamically allocate memory */
|
||||||
|
msg = new char[size+1];
|
||||||
|
va_start(iterator, fmt);
|
||||||
|
vsnprintf(msg, size+1, fmt, iterator);
|
||||||
|
va_end(iterator);
|
||||||
|
}
|
||||||
|
|
||||||
if (m_formatter == NULL) {
|
if (m_formatter == NULL) {
|
||||||
std::cerr << "PANIC: Logging has not been properly initialized!" << std::endl;
|
std::cerr << "PANIC: Logging has not been properly initialized!" << std::endl;
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string text = m_formatter->format(level, theClass,
|
std::string text = m_formatter->format(level, theClass,
|
||||||
Thread::getThread(), tmp, file, line);
|
Thread::getThread(), msg, file, line);
|
||||||
|
|
||||||
|
if (msg != tmp)
|
||||||
|
delete[] msg;
|
||||||
|
|
||||||
if (level < EError) {
|
if (level < EError) {
|
||||||
m_mutex->lock();
|
m_mutex->lock();
|
||||||
|
|
|
@ -311,14 +311,26 @@ Float log2(Float value) {
|
||||||
return std::log(value) * invLn2;
|
return std::log(value) * invLn2;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string formatString(const char *pFmt, ...) {
|
std::string formatString(const char *fmt, ...) {
|
||||||
char tmp[2048]; /* Limited to 2k */
|
char tmp[512];
|
||||||
va_list iterator;
|
va_list iterator;
|
||||||
|
|
||||||
va_start(iterator, pFmt);
|
va_start(iterator, fmt);
|
||||||
vsnprintf(tmp, 2048, pFmt, iterator);
|
size_t size = vsnprintf(tmp, sizeof(tmp), fmt, iterator);
|
||||||
va_end(iterator);
|
va_end(iterator);
|
||||||
|
|
||||||
|
if (size >= sizeof(tmp)) {
|
||||||
|
/* Overflow! -- dynamically allocate memory */
|
||||||
|
char *dest = new char[size+1];
|
||||||
|
va_start(iterator, fmt);
|
||||||
|
vsnprintf(dest, size+1, fmt, iterator);
|
||||||
|
va_end(iterator);
|
||||||
|
|
||||||
|
std::string result(dest);
|
||||||
|
delete[] dest;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
return std::string(tmp);
|
return std::string(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue