[PATCH 1/4] include/wine: Introduce a FIXME_ONCE macro.

Zebediah Figura zfigura at codeweavers.com
Fri Mar 4 17:41:27 CST 2022


From: David Kahurani <k.kahurani at gmail.com>

Based on libvkd3d.

Signed-off-by: David Kahurani <k.kahurani at gmail.com>
Signed-off-by: Zebediah Figura <zfigura at 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




More information about the wine-devel mailing list