From: David Kahurani <k.kahurani(a)gmail.com>
Based on libvkd3d.
Signed-off-by: David Kahurani <k.kahurani(a)gmail.com>
Signed-off-by: Zebediah Figura <zfigura(a)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)
--
2.35.1