/** * @interface_method_impl{DBGCCMDHLP,pfnPrintfV} */ static DECLCALLBACK(int) dbgcHlpPrintfV(PDBGCCMDHLP pCmdHlp, size_t *pcbWritten, const char *pszFormat, va_list args) { PDBGC pDbgc = DBGC_CMDHLP2DBGC(pCmdHlp); /* * Do the formatting and output. */ pDbgc->rcOutput = 0; size_t cb = RTStrFormatV(dbgcFormatOutput, pDbgc, dbgcStringFormatter, pDbgc, pszFormat, args); if (pcbWritten) *pcbWritten = cb; return pDbgc->rcOutput; }
/** * @copydoc DBGCCMDHLP::pfnFailV */ static DECLCALLBACK(int) dbgcHlpFailV(PDBGCCMDHLP pCmdHlp, PCDBGCCMD pCmd, const char *pszFormat, va_list va) { PDBGC pDbgc = DBGC_CMDHLP2DBGC(pCmdHlp); /* * Do the formatting and output. */ pDbgc->rcOutput = VINF_SUCCESS; RTStrFormat(dbgcFormatOutput, pDbgc, dbgcStringFormatter, pDbgc, "%s: error: ", pCmd->pszCmd); if (RT_FAILURE(pDbgc->rcOutput)) return pDbgc->rcOutput; RTStrFormatV(dbgcFormatOutput, pDbgc, dbgcStringFormatter, pDbgc, pszFormat, va); if (RT_FAILURE(pDbgc->rcOutput)) return pDbgc->rcOutput; if (pDbgc->chLastOutput != '\n') dbgcFormatOutput(pDbgc, "\n", 1); return VERR_DBGC_COMMAND_FAILED; }
RTCString &RTCString::printfV(const char *pszFormat, va_list va) { cleanup(); RTStrFormatV(printfOutputCallback, this, NULL, NULL, pszFormat, va); return *this; }
/** * Partial vsprintf worker implementation. * * @returns number of bytes formatted. * @param pfnOutput Output worker. * Called in two ways. Normally with a string an it's length. * For termination, it's called with NULL for string, 0 for length. * @param pvArg Argument to output worker. * @param pszFormat Format string. * @param args Argument list. */ RTDECL(size_t) RTLogFormatV(PFNRTSTROUTPUT pfnOutput, void *pvArg, const char *pszFormat, va_list args) { return RTStrFormatV(pfnOutput, pvArg, rtlogFormatStr, NULL, pszFormat, args); }