diff options
author | Felix Geyer <debfx-pkg@fobos.de> | 2011-07-29 17:55:18 +0200 |
---|---|---|
committer | Felix Geyer <debfx-pkg@fobos.de> | 2011-07-29 17:55:18 +0200 |
commit | cba113ca2826bc4814be2f69a7704c865a37d4ea (patch) | |
tree | 511123b10dd1e58e56958520534f5c50e6f570fc /src/VBox/Runtime/common/misc/message.cpp | |
parent | 6a16f6900dd884e07125b51c9625f6be0a1f9b70 (diff) | |
download | virtualbox-cba113ca2826bc4814be2f69a7704c865a37d4ea.tar.gz |
Imported Upstream version 4.1.0-dfsgupstream/4.1.0-dfsg
Diffstat (limited to 'src/VBox/Runtime/common/misc/message.cpp')
-rw-r--r-- | src/VBox/Runtime/common/misc/message.cpp | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/src/VBox/Runtime/common/misc/message.cpp b/src/VBox/Runtime/common/misc/message.cpp index 937858708..a136c84e1 100644 --- a/src/VBox/Runtime/common/misc/message.cpp +++ b/src/VBox/Runtime/common/misc/message.cpp @@ -1,4 +1,4 @@ -/* $Id: message.cpp $ */ +/* $Id: message.cpp 37951 2011-07-14 10:13:59Z vboxsync $ */ /** @file * IPRT - Error reporting to standard error. */ @@ -36,6 +36,31 @@ #include "internal/process.h" +/******************************************************************************* +* Global Variables * +*******************************************************************************/ +/** The program name we're using. */ +static const char * volatile g_pszProgName = NULL; +/** Custom program name set via RTMsgSetProgName. */ +static char g_szProgName[128]; + + +RTDECL(int) RTMsgSetProgName(const char *pszFormat, ...) +{ + g_pszProgName = &g_szrtProcExePath[g_offrtProcName]; + + va_list va; + va_start(va, pszFormat); + RTStrPrintfV(g_szProgName, sizeof(g_szProgName) - 1, pszFormat, va); + va_end(va); + + g_pszProgName = g_szProgName; + + return VINF_SUCCESS; +} +RT_EXPORT_SYMBOL(RTMsgSetProgName); + + static int rtMsgWorker(PRTSTREAM pDst, const char *pszPrefix, const char *pszFormat, va_list va) { if ( !*pszFormat @@ -43,6 +68,10 @@ static int rtMsgWorker(PRTSTREAM pDst, const char *pszPrefix, const char *pszFor RTStrmPrintf(pDst, "\n"); else { + const char *pszProgName = g_pszProgName; + if (!pszProgName) + g_pszProgName = pszProgName = &g_szrtProcExePath[g_offrtProcName]; + char *pszMsg; ssize_t cch = RTStrAPrintfV(&pszMsg, pszFormat, va); if (cch >= 0) @@ -54,7 +83,7 @@ static int rtMsgWorker(PRTSTREAM pDst, const char *pszPrefix, const char *pszFor char *pszEnd = strchr(psz, '\n'); if (!pszEnd) { - RTStrmPrintf(pDst, "%s: %s%s\n", &g_szrtProcExePath[g_offrtProcName], pszPrefix, psz); + RTStrmPrintf(pDst, "%s: %s%s\n", pszProgName, pszPrefix, psz); break; } if (pszEnd == psz) @@ -62,7 +91,7 @@ static int rtMsgWorker(PRTSTREAM pDst, const char *pszPrefix, const char *pszFor else { *pszEnd = '\0'; - RTStrmPrintf(pDst, "%s: %s%s\n", &g_szrtProcExePath[g_offrtProcName], pszPrefix, psz); + RTStrmPrintf(pDst, "%s: %s%s\n", pszProgName, pszPrefix, psz); } psz = pszEnd + 1; } while (*psz); @@ -71,7 +100,7 @@ static int rtMsgWorker(PRTSTREAM pDst, const char *pszPrefix, const char *pszFor else { /* Simple fallback for handling out-of-memory conditions. */ - RTStrmPrintf(pDst, "%s: %s", &g_szrtProcExePath[g_offrtProcName], pszPrefix); + RTStrmPrintf(pDst, "%s: %s", pszProgName, pszPrefix); RTStrmPrintfV(pDst, pszFormat, va); if (!strchr(pszFormat, '\n')) RTStrmPrintf(pDst, "\n"); |