]> Repos - portaudio/commitdiff
implemented optional log output to Visual Studio Output window if PA_ENABLE_MSVC_DEBU...
authordmitrykos <dmitrykos@0f58301d-fd10-0410-b4af-bbb618454e57>
Wed, 10 Mar 2010 21:47:01 +0000 (21:47 +0000)
committerdmitrykos <dmitrykos@0f58301d-fd10-0410-b4af-bbb618454e57>
Wed, 10 Mar 2010 21:47:01 +0000 (21:47 +0000)
src/common/pa_debugprint.c

index f05f40ef40d8d5a22e9e19457749290445e42362..7ee8f7f232b4769d4b7b0da205afb21ee141cbeb 100644 (file)
     @todo Consider reentrancy and possibly corrupted strdump buffer.\r
 */\r
 \r
-\r
 #include <stdio.h>\r
 #include <stdarg.h>\r
 \r
 #include "pa_debugprint.h"\r
 \r
+// for OutputDebugStringA\r
+#if defined(_MSC_VER) && defined(PA_ENABLE_MSVC_DEBUG_OUTPUT)\r
+       #define WIN32_LEAN_AND_MEAN // exclude rare headers\r
+       #include "windows.h"\r
+#endif\r
 \r
+// User callback\r
+static PaUtilLogCallback userCB = NULL;\r
 \r
-static PaUtilLogCallback userCB=0;\r
-\r
-\r
+// Sets user callback\r
 void PaUtil_SetDebugPrintFunction(PaUtilLogCallback cb)\r
 {\r
     userCB = cb;\r
@@ -72,41 +76,51 @@ void PaUtil_SetDebugPrintFunction(PaUtilLogCallback cb)
 /*\r
  If your platform doesn\92t have vsnprintf, you are stuck with a\r
  VERY dangerous alternative, vsprintf (with no n)\r
- */\r
-\r
-#if _MSC_VER\r
-/* Some Windows Mobile SDKs don't define vsnprintf but all define _vsnprintf (hopefully).\r
-   According to MSDN "vsnprintf is identical to _vsnprintf". So we use _vsnprintf with MSC.\r
 */\r
-#define VSNPRINTF  _vsnprintf \r
+#if _MSC_VER\r
+       /* Some Windows Mobile SDKs don't define vsnprintf but all define _vsnprintf (hopefully).\r
+          According to MSDN "vsnprintf is identical to _vsnprintf". So we use _vsnprintf with MSC.\r
+       */\r
+       #define VSNPRINTF  _vsnprintf \r
 #else\r
-#define VSNPRINTF  vsnprintf\r
+       #define VSNPRINTF  vsnprintf\r
 #endif\r
 \r
-#define SIZEDUMP 1024\r
-\r
+#define PA_LOG_BUF_SIZE 2048\r
 \r
 void PaUtil_DebugPrint( const char *format, ... )\r
 {\r
+       // Optional logging into Output console of Visual Studio\r
+#if defined(_MSC_VER) && defined(PA_ENABLE_MSVC_DEBUG_OUTPUT)\r
+       {\r
+               char buf[PA_LOG_BUF_SIZE];\r
+               va_list ap;\r
+               va_start(ap, format);\r
+               VSNPRINTF(buf, sizeof(buf), format, ap);\r
+               buf[sizeof(buf)-1] = 0;\r
+               OutputDebugStringA(buf);\r
+               va_end(ap);\r
+       }\r
+#endif\r
 \r
-    if (userCB)\r
+       // Output to User-Callback\r
+    if (userCB != NULL)\r
     {\r
-        char strdump[SIZEDUMP];\r
-\r
+        char strdump[PA_LOG_BUF_SIZE];\r
         va_list ap;\r
-        va_start( ap, format );\r
-        VSNPRINTF( strdump, SIZEDUMP, format, ap );\r
-        strdump[SIZEDUMP-1] = 0;\r
+        va_start(ap, format);\r
+        VSNPRINTF(strdump, sizeof(strdump), format, ap);\r
+        strdump[sizeof(strdump)-1] = 0;\r
         userCB(strdump);\r
-        va_end( ap ); \r
+        va_end(ap);\r
     }\r
     else\r
+       // Standard output to stderr\r
     {\r
         va_list ap;\r
-        va_start( ap, format );\r
-        vfprintf( stderr, format, ap );\r
-        va_end( ap );\r
-        fflush( stderr );\r
+        va_start(ap, format);\r
+        vfprintf(stderr, format, ap);\r
+        va_end(ap);\r
+        fflush(stderr);\r
     }\r
-\r
 }\r