RFC: include: Add '_ONCE' variants of DPRINTF, FIXME, WARN and ERR
Sven Baars
sven.wine at gmail.com
Sun Jan 2 17:33:40 CST 2011
Dan Kegel wrote:
> How about this:
>
> #define WINE_ONCE(x) { static int wine_once_var##__LINE__; if
> (!wine_once_var##__LINE__++) { x; }}
>
> Example use:
>
> - static int once;
> - if (!once++) FIXME_(keyboard)("(%p,%d,0x%08x,%X):
> stub\n",hwnd,id,modifiers,vk);
> + WINE_ONCE(FIXME_(keyboard)("(%p,%d,0x%08x,%X):
> stub\n",hwnd,id,modifiers,vk));
Hmm... Yeah... That's also a solution of course. Though it's not as
elegant :P
But I'm not sure if the ##__LINE__ is really necessary. And the ++ might
cause an overflow. So this might be better
#define WINE_ONCE(x) { \
static int wine_once_var; \
if (!wine_once_var) { \
wine_once_var = 1; \
x; }}
and possibly
#ifdef __WINESRC__
#define ONCE(x) WINE_ONCE(x)
#endif
And then a char can be used to save space (if that's of any concern).
And volatile in case the compiler does some weird things (but probably
won't).
Thanks for the idea Dan.
Sven
More information about the wine-devel
mailing list