From: David Kahurani k.kahurani@gmail.com
Based on libvkd3d.
Signed-off-by: David Kahurani k.kahurani@gmail.com Signed-off-by: Zebediah Figura zfigura@codeweavers.com --- include/wine/debug.h | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+)
diff --git a/include/wine/debug.h b/include/wine/debug.h index 58f92754164..9e96f217d91 100644 --- a/include/wine/debug.h +++ b/include/wine/debug.h @@ -85,6 +85,15 @@ struct __wine_debug_channel const enum __wine_debug_class __dbcl = __WINE_DBCL##dbcl; \ __WINE_DBG_LOG
+#define __WINE_DPRINTF_ONCE(dbcl1,dbcl2,dbch) \ + do { if(__WINE_GET_DEBUGGING(dbcl1,(dbch))) { \ + static int __wine_dbg_next_time;\ + struct __wine_debug_channel * const __dbch = (dbch); \ + const enum __wine_debug_class __dbcl = \ + __wine_dbg_next_time ? __WINE_DBCL##dbcl2 : __WINE_DBCL##dbcl1; \ + __wine_dbg_next_time = 1; \ + __WINE_DBG_LOG + #define __WINE_DBG_LOG(args...) \ wine_dbg_log( __dbcl, __dbch, __FUNCTION__, args); } } while(0)
@@ -104,6 +113,7 @@ struct __wine_debug_channel #define WINE_WARN(args...) do { } while(0) #define WINE_WARN_(ch) WINE_WARN #define WINE_FIXME(args...) do { } while(0) +#define WINE_FIXME_ONCE(args...) do { } while(0) #define WINE_FIXME_(ch) WINE_FIXME #endif
@@ -115,6 +125,15 @@ struct __wine_debug_channel const enum __WINE_DEBUG_CLASS __dbcl = __WINE_DBCL##dbcl; \ __WINE_DBG_LOG
+#define __WINE_DPRINTF_ONCE(dbcl1,dbcl2,dbch) \ + do { if(__WINE_GET_DEBUGGING(dbcl1,(dbch))) { \ + static int __wine_dbg_next_time;\ + struct __wine_debug_channel * const __dbch = (dbch); \ + const enum __WINE_DEBUG_CLASS __dbcl = \ + __wine_dbg_next_time ? __WINE_DBCL##dbcl2 : __WINE_DBCL##dbcl1; \ + __wine_dbg_next_time = 1; \ + __WINE_DBG_LOG + #define __WINE_DBG_LOG(...) \ wine_dbg_log( __dbcl, __dbch, __func__, __VA_ARGS__); } } while(0)
@@ -129,16 +148,36 @@ struct __wine_debug_channel #define WINE_WARN(...) do { } while(0) #define WINE_WARN_(ch) WINE_WARN #define WINE_FIXME(...) do { } while(0) +#define WINE_FIXME_ONCE(...) do { } while(0) #define WINE_FIXME_(ch) WINE_FIXME #endif
#else /* !__GNUC__ && !__SUNPRO_C */
+#define __WINE_DPRINTF_ONCE(dbcl1,dbcl2,dbch) \ + do { \ + static BOOL __wine_next_time_level;\ + const enum __wine_debug_class __dbcl = \ + __wine_next_time_level ? __WINE_DBCL##dbcl2 : __WINE_DBCL##dbcl1;\ + (!__WINE_GET_DEBUGGING(dbcl1,(dbch)) || \ + (wine_dbg_log(__dbcl,(dbch),__FILE__,"%d: ",__LINE__) == -1)) ? \ + (void)0 : (void)wine_dbg_printf \ + __wine_next_time_level = TRUE; } while (0) + #define __WINE_DPRINTF(dbcl,dbch) \ (!__WINE_GET_DEBUGGING(dbcl,(dbch)) || \ (wine_dbg_log(__WINE_DBCL##dbcl,(dbch),__FILE__,"%d: ",__LINE__) == -1)) ? \ (void)0 : (void)wine_dbg_printf
+#define __WINE_DPRINTF_ONCE(dbcl1,dbcl2,dbch) \ + do { if(__WINE_GET_DEBUGGING(dbcl1,(dbch))) { \ + static int __wine_dbg_next_time;\ + struct __wine_debug_channel * const __dbch = (dbch); \ + const enum __WINE_DEBUG_CLASS __dbcl = \ + __wine_dbg_next_time ? __WINE_DBCL##dbcl2 : __WINE_DBCL##dbcl1; \ + __wine_dbg_next_time = 1; \ + wine_dbg_log( __dbcl, __dbch, __func__, __VA_ARGS__); } } while(0) + #define __WINE_PRINTF_ATTR(fmt, args)
#endif /* !__GNUC__ && !__SUNPRO_C */ @@ -487,6 +526,7 @@ static inline const char *wine_dbgstr_variant( const VARIANT *v )
#ifndef WINE_FIXME #define WINE_FIXME __WINE_DPRINTF(_FIXME,__wine_dbch___default) +#define WINE_FIXME_ONCE __WINE_DPRINTF_ONCE(_FIXME,_WARN,__wine_dbch___default) #define WINE_FIXME_(ch) __WINE_DPRINTF(_FIXME,&__wine_dbch_##ch) #endif #define WINE_FIXME_ON(ch) __WINE_IS_DEBUG_ON(_FIXME,&__wine_dbch_##ch) @@ -526,6 +566,7 @@ static inline const char *debugstr_variant( const VARIANT *v ) { return wine_dbg #define WARN_ON(ch) WINE_WARN_ON(ch)
#define FIXME WINE_FIXME +#define FIXME_ONCE WINE_FIXME_ONCE #define FIXME_(ch) WINE_FIXME_(ch) #define FIXME_ON(ch) WINE_FIXME_ON(ch)