gallium: code for PIPE_SUBSYSTEM_WINDOWS_USER
authorJonathan White <jwhite@tungstengraphics.com>
Mon, 23 Jun 2008 22:24:58 +0000 (16:24 -0600)
committerBrian Paul <brian.paul@tungstengraphics.com>
Mon, 23 Jun 2008 22:25:26 +0000 (16:25 -0600)
src/gallium/auxiliary/util/p_debug.c

index b1106a5e55ff2f8dd5ae15b619e07b2487c04199..7b28900a25dc788fc52376d14d0c69e2e3c6b47d 100644 (file)
 
 #include <stdarg.h>
 
+
 #ifdef PIPE_SUBSYSTEM_WINDOWS_DISPLAY
+
 #include <windows.h>
 #include <winddi.h>
+
+#elif defined(PIPE_SUBSYSTEM_WINDOWS_USER)
+
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN      // Exclude rarely-used stuff from Windows headers
+#endif
+#include <windows.h>
+
 #else
+
 #include <stdio.h>
 #include <stdlib.h>
+
 #endif
 
+
+
 #include "pipe/p_compiler.h" 
 #include "pipe/p_util.h" 
 #include "pipe/p_debug.h" 
@@ -74,6 +88,17 @@ void _debug_vprintf(const char *format, va_list ap)
 #else
    /* TODO: Implement debug print for WINCE */
 #endif
+#elif defined(PIPE_SUBSYSTEM_WINDOWS_USER)
+   /* EngDebugPrint does not handle float point arguments, so we need to use
+    * our own vsnprintf implementation. It is also very slow, so buffer until
+    * we find a newline. */
+   static char buf[512 + 1] = {'\0'};
+   size_t len = strlen(buf);
+   int ret = util_vsnprintf(buf + len, sizeof(buf) - len, format, ap);
+   if(ret > (int)(sizeof(buf) - len - 1) || util_strchr(buf + len, '\n')) {
+      OutputDebugStringA(buf);
+      buf[0] = '\0';
+   }
 #else
    vfprintf(stderr, format, ap);
 #endif