18void qOhosVPrintf(LogLevel logLevel,
const char *format, std::va_list ap)
20 std::array<
char, 4096> entryBuffer;
22 int prefixVsnprintfRes = std::snprintf(
23 entryBuffer.data(), entryBuffer.size(),
24 "[QtForOhos]: T: 0x%llx, M: ",
25 reinterpret_cast<
unsigned long long>(QThread::currentThreadId()));
27 Q_ASSERT(prefixVsnprintfRes >= 0);
29 auto prefixSize =
std::min(
static_cast<size_t>(prefixVsnprintfRes), entryBuffer.size() - 1);
31 auto *msgBuffer = entryBuffer.data() + prefixSize;
32 auto msgBufferSize = entryBuffer.size() - prefixSize;
34 int vsnprintfRes = std::vsnprintf(msgBuffer, msgBufferSize, format, ap);
35 if (vsnprintfRes < 0) {
36 std::snprintf(msgBuffer, msgBufferSize,
"[error formatting log msg: %s]", format);
37 }
else if (
static_cast<
unsigned>(vsnprintfRes) >= msgBufferSize) {
38 constexpr auto *ellipsis =
"...";
39 std::strcpy(msgBuffer + msgBufferSize - (
std::strlen(ellipsis) + 1), ellipsis);
42 qOhosLogMessage(logLevel,
"OHOS plugin", entryBuffer.data());