Index: trunk/src/VBox/Runtime/common/misc/message.cpp
===================================================================
--- trunk/src/VBox/Runtime/common/misc/message.cpp	(revision 26774)
+++ trunk/src/VBox/Runtime/common/misc/message.cpp	(revision 27128)
@@ -41,4 +41,49 @@
 
 
+static int rtMsgWorker(PRTSTREAM pDst, const char *pszPrefix, const char *pszFormat, va_list va)
+{
+    if (   !*pszFormat
+        || !strcmp(pszFormat, "\n"))
+        RTStrmPrintf(pDst, "\n");
+    else
+    {
+        char *pszMsg;
+        ssize_t cch = RTStrAPrintfV(&pszMsg, pszFormat, va);
+        if (cch >= 0)
+        {
+            /* print it line by line. */
+            char *psz = pszMsg;
+            do
+            {
+                char *pszEnd = strchr(psz, '\n');
+                if (!pszEnd)
+                {
+                    RTStrmPrintf(pDst, "%s: %s%s\n", pszPrefix, &g_szrtProcExePath[g_offrtProcName], psz);
+                    break;
+                }
+                if (pszEnd == psz)
+                    RTStrmPrintf(pDst, "\n");
+                else
+                {
+                    *pszEnd = '\0';
+                    RTStrmPrintf(pDst, "%s: %s%s\n", pszPrefix, &g_szrtProcExePath[g_offrtProcName], psz);
+                }
+                psz = pszEnd + 1;
+            } while (*psz);
+            RTStrFree(pszMsg);
+        }
+        else
+        {
+            /* Simple fallback for handling out-of-memory conditions. */
+            RTStrmPrintf(pDst, "%s: %s", pszPrefix, &g_szrtProcExePath[g_offrtProcName]);
+            RTStrmPrintfV(pDst, pszFormat, va);
+            if (!strchr(pszFormat, '\n'))
+                RTStrmPrintf(pDst, "\n");
+        }
+    }
+
+    return VINF_SUCCESS;
+}
+
 RTDECL(int)  RTMsgError(const char *pszFormat, ...)
 {
@@ -54,45 +99,5 @@
 RTDECL(int)  RTMsgErrorV(const char *pszFormat, va_list va)
 {
-    if (   !*pszFormat
-        || !strcmp(pszFormat, "\n"))
-        RTStrmPrintf(g_pStdErr, "\n");
-    else
-    {
-        char *pszMsg;
-        ssize_t cch = RTStrAPrintfV(&pszMsg, pszFormat, va);
-        if (cch >= 0)
-        {
-            /* print it line by line. */
-            char *psz = pszMsg;
-            do
-            {
-                char *pszEnd = strchr(psz, '\n');
-                if (!pszEnd)
-                {
-                    RTStrmPrintf(g_pStdErr, "%s: error: %s\n", &g_szrtProcExePath[g_offrtProcName], psz);
-                    break;
-                }
-                if (pszEnd == psz)
-                    RTStrmPrintf(g_pStdErr, "\n");
-                else
-                {
-                    *pszEnd = '\0';
-                    RTStrmPrintf(g_pStdErr, "%s: error: %s\n", &g_szrtProcExePath[g_offrtProcName], psz);
-                }
-                psz = pszEnd + 1;
-            } while (*psz);
-            RTStrFree(pszMsg);
-        }
-        else
-        {
-            /* Simple fallback for handling out-of-memory conditions. */
-            RTStrmPrintf(g_pStdErr, "%s: error: ", &g_szrtProcExePath[g_offrtProcName]);
-            RTStrmPrintfV(g_pStdErr, pszFormat, va);
-            if (!strchr(pszFormat, '\n'))
-                RTStrmPrintf(g_pStdErr, "\n");
-        }
-    }
-
-    return VINF_SUCCESS;
+    return rtMsgWorker(g_pStdErr, " error:", pszFormat, va);
 }
 RT_EXPORT_SYMBOL(RTMsgErrorV);
@@ -131,2 +136,38 @@
 RT_EXPORT_SYMBOL(RTMsgInitFailure);
 
+
+RTDECL(int)  RTMsgWarning(const char *pszFormat, ...)
+{
+    va_list va;
+    va_start(va, pszFormat);
+    int rc = RTMsgWarningV(pszFormat, va);
+    va_end(va);
+    return rc;
+}
+RT_EXPORT_SYMBOL(RTMsgInfo);
+
+
+RTDECL(int)  RTMsgWarningV(const char *pszFormat, va_list va)
+{
+    return rtMsgWorker(g_pStdErr, " warning:", pszFormat, va);
+}
+RT_EXPORT_SYMBOL(RTMsgWarningV);
+
+
+RTDECL(int)  RTMsgInfo(const char *pszFormat, ...)
+{
+    va_list va;
+    va_start(va, pszFormat);
+    int rc = RTMsgInfoV(pszFormat, va);
+    va_end(va);
+    return rc;
+}
+RT_EXPORT_SYMBOL(RTMsgInfo);
+
+
+RTDECL(int)  RTMsgInfoV(const char *pszFormat, va_list va)
+{
+    return rtMsgWorker(g_pStdOut, " info:", pszFormat, va);
+}
+RT_EXPORT_SYMBOL(RTMsgInfoV);
+
