From ee868cce5b412b103ff167deb59c3d5237363199 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Wed, 19 Aug 2009 13:19:31 +0200 Subject: [PATCH] tests: Make wine_dbgstr_w available in test.h for all tests. --- dlls/kernel32/tests/process.c | 17 --------- dlls/ntdsapi/tests/ntdsapi.c | 9 ----- dlls/oleaut32/tests/tmarshal.c | 80 ---------------------------------------- dlls/shell32/tests/shlfolder.c | 9 ----- include/wine/test.h | 83 +++++++++++++++++++++++++++++++++++++++++- 5 files changed, 82 insertions(+), 116 deletions(-) diff --git a/dlls/kernel32/tests/process.c b/dlls/kernel32/tests/process.c index 21f3c525c9a..5d8f65beafb 100644 --- a/dlls/kernel32/tests/process.c +++ b/dlls/kernel32/tests/process.c @@ -54,23 +54,6 @@ wine_dbgstr_w(expected), wine_dbgstr_w(value)); \ } while (0) -/* A simpler version of wine_dbgstr_w. Note that the returned buffer will be - * invalid after 16 calls to this funciton. */ -static const char *wine_dbgstr_w(LPCWSTR wstr) -{ - static char *buffers[16]; - static int curr_buffer = 0; - - int size; - - curr_buffer = (curr_buffer + 1) % 16; - HeapFree(GetProcessHeap(), 0, buffers[curr_buffer]); - size = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL); - buffers[curr_buffer] = HeapAlloc(GetProcessHeap(), 0, size); - size = WideCharToMultiByte(CP_ACP, 0, wstr, -1, buffers[curr_buffer], size, NULL, NULL); - return buffers[curr_buffer]; -} - static HINSTANCE hkernel32; static LPVOID (WINAPI *pVirtualAllocEx)(HANDLE, LPVOID, SIZE_T, DWORD, DWORD); static BOOL (WINAPI *pVirtualFreeEx)(HANDLE, LPVOID, SIZE_T, DWORD); diff --git a/dlls/ntdsapi/tests/ntdsapi.c b/dlls/ntdsapi/tests/ntdsapi.c index 08436ae8e85..8290ed2cbf1 100644 --- a/dlls/ntdsapi/tests/ntdsapi.c +++ b/dlls/ntdsapi/tests/ntdsapi.c @@ -28,15 +28,6 @@ #include "wine/test.h" -static const char *wine_dbgstr_w(LPCWSTR str) -{ - static char buf[512]; - if (!str) - return "(null)"; - WideCharToMultiByte(CP_ACP, 0, str, -1, buf, sizeof(buf), NULL, NULL); - return buf; -} - static void test_DsMakeSpn(void) { DWORD ret; diff --git a/dlls/oleaut32/tests/tmarshal.c b/dlls/oleaut32/tests/tmarshal.c index ec23204ba4a..80148ff620a 100644 --- a/dlls/oleaut32/tests/tmarshal.c +++ b/dlls/oleaut32/tests/tmarshal.c @@ -44,86 +44,6 @@ const MYSTRUCT MYSTRUCT_ARRAY[5] = { {0x5a5b5c5d, ULL_CONST(0x5e5f5051, 0x52535455)}, }; -/* Debugging functions from wine/libs/wine/debug.c */ - -/* allocate some tmp string space */ -/* FIXME: this is not 100% thread-safe */ -static char *get_tmp_space( int size ) -{ - static char *list[32]; - static long pos; - char *ret; - int idx; - - idx = ++pos % (sizeof(list)/sizeof(list[0])); - if (list[idx]) - ret = HeapReAlloc( GetProcessHeap(), 0, list[idx], size ); - else - ret = HeapAlloc( GetProcessHeap(), 0, size ); - if (ret) list[idx] = ret; - return ret; -} - -/* default implementation of wine_dbgstr_wn */ -static const char *default_dbgstr_wn( const WCHAR *str, int n ) -{ - char *dst, *res; - - if (!HIWORD(str)) - { - if (!str) return "(null)"; - res = get_tmp_space( 6 ); - sprintf( res, "#%04x", LOWORD(str) ); - return res; - } - if (n == -1) n = lstrlenW(str); - if (n < 0) n = 0; - else if (n > 200) n = 200; - dst = res = get_tmp_space( n * 5 + 7 ); - *dst++ = 'L'; - *dst++ = '"'; - while (n-- > 0) - { - WCHAR c = *str++; - switch (c) - { - case '\n': *dst++ = '\\'; *dst++ = 'n'; break; - case '\r': *dst++ = '\\'; *dst++ = 'r'; break; - case '\t': *dst++ = '\\'; *dst++ = 't'; break; - case '"': *dst++ = '\\'; *dst++ = '"'; break; - case '\\': *dst++ = '\\'; *dst++ = '\\'; break; - default: - if (c >= ' ' && c <= 126) - *dst++ = (char)c; - else - { - *dst++ = '\\'; - sprintf(dst,"%04x",c); - dst+=4; - } - } - } - *dst++ = '"'; - if (*str) - { - *dst++ = '.'; - *dst++ = '.'; - *dst++ = '.'; - } - *dst = 0; - return res; -} - -const char *wine_dbgstr_wn( const WCHAR *s, int n ) -{ - return default_dbgstr_wn(s, n); -} - -const char *wine_dbgstr_w( const WCHAR *s ) -{ - return default_dbgstr_wn( s, -1 ); -} - #define RELEASEMARSHALDATA WM_USER diff --git a/dlls/shell32/tests/shlfolder.c b/dlls/shell32/tests/shlfolder.c index 535c9ada568..ed3a8b5a59e 100644 --- a/dlls/shell32/tests/shlfolder.c +++ b/dlls/shell32/tests/shlfolder.c @@ -81,15 +81,6 @@ static void init_function_pointers(void) ok(hr == S_OK, "SHGetMalloc failed %08x\n", hr); } -static const char *wine_dbgstr_w(LPCWSTR str) -{ - static char buf[512]; - if (!str) - return "(null)"; - WideCharToMultiByte(CP_ACP, 0, str, -1, buf, sizeof(buf), NULL, NULL); - return buf; -} - static void test_ParseDisplayName(void) { HRESULT hr; diff --git a/include/wine/test.h b/include/wine/test.h index a8f6f03d282..42a56c0ec75 100644 --- a/include/wine/test.h +++ b/include/wine/test.h @@ -62,6 +62,9 @@ extern void winetest_end_todo( const char* platform ); extern int winetest_get_mainargs( char*** pargv ); extern void winetest_wait_child_process( HANDLE process ); +extern const char *wine_dbgstr_wn( const WCHAR *str, int n ); +static inline const char *wine_dbgstr_w( const WCHAR *s ) { return wine_dbgstr_wn( s, -1 ); } + #ifdef STANDALONE #define START_TEST(name) \ static void func_##name(void); \ @@ -196,6 +199,8 @@ typedef struct int current_line; /* line of current check */ int todo_level; /* current todo nesting level */ int todo_do_loop; + char *str_pos; /* position in debug buffer */ + char strings[2000]; /* buffer for debug strings */ } tls_data; static DWORD tls_index; @@ -208,13 +213,33 @@ static tls_data* get_tls_data(void) data=TlsGetValue(tls_index); if (!data) { - data=HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(tls_data)); + data=HeapAlloc(GetProcessHeap(), 0, sizeof(tls_data)); + data->todo_level = 0; + data->str_pos = data->strings; TlsSetValue(tls_index,data); } SetLastError(last_error); return data; } +/* allocate some tmp space for a string */ +static char *get_temp_buffer( size_t n ) +{ + tls_data *data = get_tls_data(); + char *res = data->str_pos; + + if (res + n >= &data->strings[sizeof(data->strings)]) res = data->strings; + data->str_pos = res + n; + return res; +} + +/* release extra space that we requested in gimme1() */ +static void release_temp_buffer( char *ptr, size_t size ) +{ + tls_data *data = get_tls_data(); + data->str_pos = ptr + size; +} + static void exit_process( int code ) { fflush( stdout ); @@ -407,6 +432,62 @@ void winetest_wait_child_process( HANDLE process ) } } +const char *wine_dbgstr_wn( const WCHAR *str, int n ) +{ + char *dst, *res; + size_t size; + + if (!((ULONG_PTR)str >> 16)) + { + if (!str) return "(null)"; + res = get_temp_buffer( 6 ); + sprintf( res, "#%04x", LOWORD(str) ); + return res; + } + if (n == -1) + { + const WCHAR *end = str; + while (*end) end++; + n = end - str; + } + if (n < 0) n = 0; + size = 12 + min( 300, n * 5 ); + dst = res = get_temp_buffer( size ); + *dst++ = 'L'; + *dst++ = '"'; + while (n-- > 0 && dst <= res + size - 10) + { + WCHAR c = *str++; + switch (c) + { + case '\n': *dst++ = '\\'; *dst++ = 'n'; break; + case '\r': *dst++ = '\\'; *dst++ = 'r'; break; + case '\t': *dst++ = '\\'; *dst++ = 't'; break; + case '"': *dst++ = '\\'; *dst++ = '"'; break; + case '\\': *dst++ = '\\'; *dst++ = '\\'; break; + default: + if (c >= ' ' && c <= 126) + *dst++ = c; + else + { + *dst++ = '\\'; + sprintf(dst,"%04x",c); + dst+=4; + } + } + } + *dst++ = '"'; + if (n > 0) + { + *dst++ = '.'; + *dst++ = '.'; + *dst++ = '.'; + } + *dst++ = 0; + release_temp_buffer( res, dst - res ); + return res; +} + /* Find a test by name */ static const struct test *find_test( const char *name ) { -- 2.11.4.GIT