[Resend] Add '_ONCE' variants of DPRINTF, FIXME, WARN.
Max TenEyck Woodbury
max at mtew.isa-geek.net
Sat Jul 17 00:29:25 CDT 2010
---
include/wine/debug.h | 45 +++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 45 insertions(+), 0 deletions(-)
diff --git a/include/wine/debug.h b/include/wine/debug.h
index ba6fabe..378a4de 100644
--- a/include/wine/debug.h
+++ b/include/wine/debug.h
@@ -87,6 +87,14 @@ struct __wine_debug_channel
const enum __wine_debug_class __dbcl = __WINE_DBCL##dbcl; \
__WINE_DBG_LOG
+#define __WINE_DPRINTF_ONCE(dbcl,dbch) \
+ do { static volatile unsigned char once = 0U; \
+ if(once == 0U && __WINE_GET_DEBUGGING(dbcl,(dbch)) ) { \
+ struct __wine_debug_channel * const __dbch = (dbch); \
+ const enum __wine_debug_class __dbcl = __WINE_DBCL##dbcl; \
+ once = ~(unsigned char)0U; \
+ __WINE_DBG_LOG
+
#define __WINE_DBG_LOG(args...) \
wine_dbg_log( __dbcl, __dbch, __FUNCTION__, args); } } while(0)
@@ -101,8 +109,12 @@ struct __wine_debug_channel
#ifdef WINE_NO_DEBUG_MSGS
#define WINE_WARN(args...) do { } while(0)
#define WINE_WARN_(ch) WINE_WARN
+#define WINE_WARN_ONCE(args...) do { } while(0)
+#define WINE_WARN_ONCE_(ch) WINE_WARN_ONCE
#define WINE_FIXME(args...) do { } while(0)
#define WINE_FIXME_(ch) WINE_FIXME
+#define WINE_FIXME_ONCE(args...) do { } while(0)
+#define WINE_FIXME_ONCE_ONCE_(ch) WINE_FIXME_ONCE
#endif
#elif defined(__SUNPRO_C)
@@ -113,6 +125,14 @@ struct __wine_debug_channel
const enum __WINE_DEBUG_CLASS __dbcl = __WINE_DBCL##dbcl; \
__WINE_DBG_LOG
+#define __WINE_DPRINTF_ONCE(dbcl,dbch) \
+ do { static volatile unsigned char once = 0U; \
+ if(__WINE_GET_DEBUGGING(dbcl,(dbch))) { \
+ struct __wine_debug_channel * const __dbch = (dbch); \
+ const enum __WINE_DEBUG_CLASS __dbcl = __WINE_DBCL##dbcl; \
+ once = ~(unsigned char)0U; \
+ __WINE_DBG_LOG
+
#define __WINE_DBG_LOG(...) \
wine_dbg_log( __dbcl, __dbch, __func__, __VA_ARGS__); } } while(0)
@@ -126,8 +146,12 @@ struct __wine_debug_channel
#ifdef WINE_NO_DEBUG_MSGS
#define WINE_WARN(...) do { } while(0)
#define WINE_WARN_(ch) WINE_WARN
+#define WINE_WARN_ONCE(args...) do { } while(0)
+#define WINE_WARN_ONCE_(ch) WINE_WARN_ONCE
#define WINE_FIXME(...) do { } while(0)
#define WINE_FIXME_(ch) WINE_FIXME
+#define WINE_FIXME_ONCE(args...) do { } while(0)
+#define WINE_FIXME_ONCE_ONCE_(ch) WINE_FIXME_ONCE
#endif
#else /* !__GNUC__ && !__SUNPRO_C */
@@ -137,6 +161,11 @@ struct __wine_debug_channel
(wine_dbg_log(__WINE_DBCL##dbcl,(dbch),__FILE__,"%d: ",__LINE__) == -1)) ? \
(void)0 : (void)wine_dbg_printf
+#define __WINE_DPRINTF_ONCE(dbcl,dbch) /* FIXME */ \
+ (!__WINE_GET_DEBUGGING(dbcl,(dbch)) || \
+ (wine_dbg_log(__WINE_DBCL##dbcl,(dbch),__FILE__,"%d: ",__LINE__) == -1)) ? \
+ (void)0 : (void)wine_dbg_printf
+
#define __WINE_PRINTF_ATTR(fmt, args)
#endif /* !__GNUC__ && !__SUNPRO_C */
@@ -229,17 +258,27 @@ static inline const char *wine_dbgstr_longlong( ULONGLONG ll )
#define WINE_WARN __WINE_DPRINTF(_WARN,__wine_dbch___default)
#define WINE_WARN_(ch) __WINE_DPRINTF(_WARN,&__wine_dbch_##ch)
#endif
+#ifndef WINE_WARN_ONCE
+#define WINE_WARN_ONCE __WINE_DPRINTF_ONCE(_WARN,__wine_dbch___default)
+#define WINE_WARN_ONCE_(ch) __WINE_DPRINTF_ONCE(_WARN,&__wine_dbch_##ch)
+#endif
#define WINE_WARN_ON(ch) __WINE_IS_DEBUG_ON(_WARN,&__wine_dbch_##ch)
#ifndef WINE_FIXME
#define WINE_FIXME __WINE_DPRINTF(_FIXME,__wine_dbch___default)
#define WINE_FIXME_(ch) __WINE_DPRINTF(_FIXME,&__wine_dbch_##ch)
#endif
+#ifndef WINE_FIXME_ONCE
+#define WINE_FIXME_ONCE __WINE_DPRINTF_ONCE(_FIXME,__wine_dbch___default)
+#define WINE_FIXME_ONCE_(ch) __WINE_DPRINTF_ONCE(_FIXME,__wine_dbch_##ch)
+#endif
#define WINE_FIXME_ON(ch) __WINE_IS_DEBUG_ON(_FIXME,&__wine_dbch_##ch)
#define WINE_ERR __WINE_DPRINTF(_ERR,__wine_dbch___default)
#define WINE_ERR_(ch) __WINE_DPRINTF(_ERR,&__wine_dbch_##ch)
#define WINE_ERR_ON(ch) __WINE_IS_DEBUG_ON(_ERR,&__wine_dbch_##ch)
+#define WINE_ERR_ONCE __WINE_DPRINTF_ONCE(_ERR,__wine_dbch___default)
+#define WINE_ERR_ONCE_(ch) __WINE_DPRINTF_ONCE(_ERR,&__wine_dbch_##ch)
#define WINE_DECLARE_DEBUG_CHANNEL(ch) \
static struct __wine_debug_channel __wine_dbch_##ch = { ~0, #ch }
@@ -266,15 +305,21 @@ static inline const char *debugstr_w( const WCHAR *s ) { return wine_dbgstr_wn(
#define WARN WINE_WARN
#define WARN_(ch) WINE_WARN_(ch)
#define WARN_ON(ch) WINE_WARN_ON(ch)
+#define WARN_ONCE WINE_WARN_ONCE
+#define WARN_ONCE_(ch) WINE_WARE_ONCE_(ch)
#define FIXME WINE_FIXME
#define FIXME_(ch) WINE_FIXME_(ch)
#define FIXME_ON(ch) WINE_FIXME_ON(ch)
+#define FIXME_ONCE WINE_FIXME_ONCE
+#define FIXME_ONCE_(ch) WINE_FIXME_ONCE_(ch)
#undef ERR /* Solaris got an 'ERR' define in <sys/reg.h> */
#define ERR WINE_ERR
#define ERR_(ch) WINE_ERR_(ch)
#define ERR_ON(ch) WINE_ERR_ON(ch)
+#define ERR_ONCE WINE_ERR_ONCEE
+#define ERR_ONCE_(ch) WINE_ERR_ONCE_(ch)
#define DPRINTF WINE_DPRINTF
#define MESSAGE WINE_MESSAGE
--
1.7.1.1
More information about the wine-patches
mailing list