RTDECL(void) RTLogPrintf(const char *pszFormat, ...) { va_list va; va_start(va, pszFormat); RTLogBackdoorPrintfV(pszFormat, va); va_end(va); }
RTDECL(void) RTLogLoggerEx(PRTLOGGER pLogger, unsigned fFlags, unsigned iGroup, const char *pszFormat, ...) { va_list va; va_start(va, pszFormat); RTLogBackdoorPrintfV(pszFormat, va); va_end(va); }
RT_C_DECLS_BEGIN ULONG __cdecl DbgPrint(PCH pszFormat, ...) { va_list args; va_start(args, pszFormat); RTLogBackdoorPrintfV(pszFormat, args); va_end(args); return 0; }
RTDECL(size_t) RTLogBackdoorPrintf(const char *pszFormat, ...) { va_list args; size_t cb; va_start(args, pszFormat); cb = RTLogBackdoorPrintfV(pszFormat, args); va_end(args); return cb; }
RTDECL(size_t) RTLogBackdoorPrintf(const char *pszFormat, ...) { #ifdef IN_GUEST_R0 return 0; #else va_list args; size_t cb; va_start(args, pszFormat); cb = RTLogBackdoorPrintfV(pszFormat, args); va_end(args); return cb; #endif }
/** * Worker for RTAssertMsg2V and RTAssertMsg2AddV * * @param fInitial True if it's RTAssertMsg2V, otherwise false. * @param pszFormat The message format string. * @param va The format arguments. */ static void rtAssertMsg2Worker(bool fInitial, const char *pszFormat, va_list va) { va_list vaCopy; size_t cch; /* * The global first. */ if (fInitial) { va_copy(vaCopy, va); cch = RTStrPrintfV(g_szRTAssertMsg2, sizeof(g_szRTAssertMsg2), pszFormat, vaCopy); ASMAtomicWriteU32(&g_cchRTAssertMsg2, (uint32_t)cch); va_end(vaCopy); } else { cch = ASMAtomicReadU32(&g_cchRTAssertMsg2); if (cch < sizeof(g_szRTAssertMsg2) - 4) { va_copy(vaCopy, va); cch += RTStrPrintfV(&g_szRTAssertMsg2[cch], sizeof(g_szRTAssertMsg2) - cch, pszFormat, vaCopy); ASMAtomicWriteU32(&g_cchRTAssertMsg2, (uint32_t)cch); va_end(vaCopy); } } /* * If not quiet, make some noise. */ if (!RTAssertAreQuiet()) { RTERRVARS SavedErrVars; RTErrVarsSave(&SavedErrVars); #ifdef IN_RING0 # ifdef IN_GUEST_R0 va_copy(vaCopy, va); RTLogBackdoorPrintfV(pszFormat, vaCopy); va_end(vaCopy); # endif /** @todo fully integrate this with the logger... play safe a bit for now. */ rtR0AssertNativeMsg2V(fInitial, pszFormat, va); #else /* !IN_RING0 */ # if !defined(IN_RING3) && !defined(LOG_NO_COM) # if 0 /* Enable this iff you have a COM port and really want this debug info. */ va_copy(vaCopy, va); RTLogComPrintfV(pszFormat, vaCopy); va_end(vaCopy); # endif # endif PRTLOGGER pLog = RTLogRelGetDefaultInstance(); if (pLog) { va_copy(vaCopy, va); RTLogRelPrintfV(pszFormat, vaCopy); va_end(vaCopy); # ifndef IN_RC /* flushing is done automatically in RC */ RTLogFlush(pLog); # endif } pLog = RTLogDefaultInstance(); if (pLog) { va_copy(vaCopy, va); RTLogPrintfV(pszFormat, vaCopy); va_end(vaCopy); # ifndef IN_RC /* flushing is done automatically in RC */ RTLogFlush(pLog); #endif } # ifdef IN_RING3 /* print to stderr, helps user and gdb debugging. */ char szMsg[sizeof(g_szRTAssertMsg2)]; va_copy(vaCopy, va); RTStrPrintfV(szMsg, sizeof(szMsg), pszFormat, vaCopy); va_end(vaCopy); fprintf(stderr, "%s", szMsg); fflush(stderr); # endif #endif /* !IN_RING0 */ RTErrVarsRestore(&SavedErrVars); } }
RTDECL(void) RTLogRelPrintfV(const char *pszFormat, va_list va) { RTLogBackdoorPrintfV(pszFormat, va); }