From: Yuxuan Shui yshui@codeweavers.com
Across the codebase there are several test cases where the arguments to ok() is not safe to evaluate unless the test case fails.
For example:
ok(i == ARRAY_SIZE(array), "i is too small: %d\n", array[i]);
Only when the test fails (i.e. i < ARRAY_SIZE(array)), is array[i] safe to evaluate.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=58320 --- include/wine/test.h | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/include/wine/test.h b/include/wine/test.h index 8f3f3bb0d50..6e68db6d57c 100644 --- a/include/wine/test.h +++ b/include/wine/test.h @@ -84,6 +84,7 @@ struct winetest_thread_data char strings[2000]; /* buffer for debug strings */ char context[8][128]; /* data to print before messages */ unsigned int context_count; /* number of context prefixes */ + int condition; /* current condition */ };
extern struct winetest_thread_data *winetest_get_thread_data(void); @@ -364,16 +365,27 @@ static int winetest_vok( int condition, const char *msg, va_list args ) } }
-static void winetest_ok( int condition, const char *msg, ... ) __WINE_PRINTF_ATTR(2,3); -static inline void winetest_ok( int condition, const char *msg, ... ) +static void winetest_ok_( const char *msg, ... ) __WINE_PRINTF_ATTR(1,2); +static inline void winetest_ok_( const char *msg, ... ) { va_list valist;
va_start(valist, msg); - winetest_vok(condition, msg, valist); + winetest_vok(winetest_get_thread_data()->condition, msg, valist); va_end(valist); }
+static inline int winetest_should_log( int condition ) +{ + struct winetest_thread_data *data = winetest_get_thread_data(); + data->condition = condition; + + /* if test is todo, then we would always log, otherwise we only log if test failed. */ + return data->todo_level || !condition; +} + +#define winetest_ok(cond, ...) (winetest_should_log(cond) ? winetest_ok_(__VA_ARGS__) : winetest_ok_(NULL)) + static void winetest_trace( const char *msg, ... ) __WINE_PRINTF_ATTR(1,2); static inline void winetest_trace( const char *msg, ... ) {