genesys: Add a way to log messages using DBG_HELPER

merge-requests/237/head
Povilas Kanapickas 2019-10-27 11:48:34 +02:00
rodzic 9ca0a10938
commit 1faa322308
2 zmienionych plików z 42 dodań i 1 usunięć

Wyświetl plik

@ -114,7 +114,11 @@ void SaneException::set_msg(const char* format, std::va_list vlist)
const char* status_msg = sane_strstatus(status_);
std::size_t status_msg_len = std::strlen(status_msg);
int msg_len = std::vsnprintf(nullptr, 0, format, vlist);
std::va_list vlist2;
va_copy(vlist2, vlist);
int msg_len = std::vsnprintf(nullptr, 0, format, vlist2);
va_end(vlist2);
if (msg_len < 0) {
const char* formatting_error_msg = "(error formatting arguments)";
msg_.reserve(std::strlen(formatting_error_msg) + 3 + status_msg_len);
@ -178,4 +182,34 @@ void DebugMessageHelper::vstatus(const char* format, ...)
va_end(args);
}
void DebugMessageHelper::log(unsigned level, const char* msg)
{
DBG(level, "%s: %s\n", func_, msg);
}
void DebugMessageHelper::vlog(unsigned level, const char* format, ...)
{
std::string msg;
std::va_list args;
va_start(args, format);
int msg_len = std::vsnprintf(nullptr, 0, format, args);
va_end(args);
if (msg_len < 0) {
DBG(level, "%s: error formatting error message: %s\n", func_, format);
return;
}
msg.resize(msg_len + 1, ' ');
va_start(args, format);
std::vsnprintf(&msg.front(), msg.size(), format, args);
va_end(args);
msg.resize(msg_len, ' '); // strip the null character
DBG(level, "%s: %s\n", func_, msg.c_str());
}
} // namespace genesys

Wyświetl plik

@ -124,6 +124,13 @@ public:
void clear() { msg_[0] = '\n'; }
void log(unsigned level, const char* msg);
void vlog(unsigned level, const char* format, ...)
#ifdef __GNUC__
__attribute__((format(printf, 3, 4)))
#endif
;
private:
const char* func_ = nullptr;
char msg_[MAX_BUF_SIZE];