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