GetDeviceID is not private
[dsound-openal.git] / debug.c
blob4e09f2fab69045ba1b8311f2bafdbfcfea670d41
1 #ifdef __WINESRC__
2 #error This file should not be compiled with Wine.
3 #endif
5 #include <stdarg.h>
6 #include <stdio.h>
7 #include <stdlib.h>
9 #include <windows.h>
11 /* allocate some tmp string space */
12 /* FIXME: this is not 100% thread-safe */
13 static char *get_temp_buffer( size_t size )
15 static char *list[32];
16 static LONG pos;
17 char *ret;
18 int idx;
20 idx = InterlockedExchangeAdd( &pos, 1 ) % (sizeof(list)/sizeof(list[0]));
21 if ((ret = realloc( list[idx], size ))) list[idx] = ret;
22 return ret;
26 /* release unused part of the buffer */
27 static void release_temp_buffer( char *buffer, size_t size )
29 /* don't bother doing anything */
32 /* printf with temp buffer allocation */
33 const char *wine_dbg_sprintf( const char *format, ... )
35 static const int max_size = 200;
36 char *ret;
37 int len;
38 va_list valist;
40 va_start(valist, format);
41 ret = get_temp_buffer( max_size );
42 len = vsnprintf( ret, max_size, format, valist );
43 if (len == -1 || len >= max_size) ret[max_size-1] = 0;
44 else release_temp_buffer( ret, len + 1 );
45 va_end(valist);
46 return ret;
49 /* default implementation of wine_dbgstr_wn */
50 const char *wine_dbgstr_wn( const WCHAR *str, int n )
52 char *dst, *res;
53 size_t size;
55 if (!((ULONG_PTR)str >> 16))
57 if (!str) return "(null)";
58 res = get_temp_buffer( 6 );
59 sprintf( res, "#%04x", LOWORD(str) );
60 return res;
62 if (n == -1)
64 const WCHAR *end = str;
65 while (*end) end++;
66 n = end - str;
68 if (n < 0) n = 0;
69 size = 12 + min( 300, n * 5 );
70 dst = res = get_temp_buffer( size );
71 *dst++ = 'L';
72 *dst++ = '"';
73 while (n-- > 0 && dst <= res + size - 10)
75 WCHAR c = *str++;
76 switch (c)
78 case '\n': *dst++ = '\\'; *dst++ = 'n'; break;
79 case '\r': *dst++ = '\\'; *dst++ = 'r'; break;
80 case '\t': *dst++ = '\\'; *dst++ = 't'; break;
81 case '"': *dst++ = '\\'; *dst++ = '"'; break;
82 case '\\': *dst++ = '\\'; *dst++ = '\\'; break;
83 default:
84 if (c >= ' ' && c <= 126)
85 *dst++ = c;
86 else
88 *dst++ = '\\';
89 sprintf(dst,"%04x",c);
90 dst+=4;
94 *dst++ = '"';
95 if (n > 0)
97 *dst++ = '.';
98 *dst++ = '.';
99 *dst++ = '.';
101 *dst++ = 0;
102 release_temp_buffer( res, dst - res );
103 return res;