diff options
Diffstat (limited to 'libmsi/wine')
-rw-r--r-- | libmsi/wine/debug.h | 243 |
1 files changed, 67 insertions, 176 deletions
diff --git a/libmsi/wine/debug.h b/libmsi/wine/debug.h index ba6fabe..cb5da28 100644 --- a/libmsi/wine/debug.h +++ b/libmsi/wine/debug.h @@ -22,142 +22,34 @@ #define __WINE_WINE_DEBUG_H #include <stdarg.h> +#include <stdlib.h> +#include <string.h> +#include <stdio.h> #include <windef.h> +#include <winbase.h> +#include <winnls.h> #ifndef GUID_DEFINED #include <guiddef.h> #endif -#ifdef __WINE_WINE_TEST_H -#error This file should not be used in Wine tests -#endif - #ifdef __cplusplus extern "C" { #endif -struct _GUID; - /* * Internal definitions (do not use these directly) */ enum __wine_debug_class { - __WINE_DBCL_FIXME, - __WINE_DBCL_ERR, - __WINE_DBCL_WARN, - __WINE_DBCL_TRACE, - - __WINE_DBCL_INIT = 7 /* lazy init flag */ -}; - -struct __wine_debug_channel -{ - unsigned char flags; - char name[15]; -}; - -#ifndef WINE_NO_TRACE_MSGS -# define __WINE_GET_DEBUGGING_TRACE(dbch) ((dbch)->flags & (1 << __WINE_DBCL_TRACE)) -#else -# define __WINE_GET_DEBUGGING_TRACE(dbch) 0 -#endif - -#ifndef WINE_NO_DEBUG_MSGS -# define __WINE_GET_DEBUGGING_WARN(dbch) ((dbch)->flags & (1 << __WINE_DBCL_WARN)) -# define __WINE_GET_DEBUGGING_FIXME(dbch) ((dbch)->flags & (1 << __WINE_DBCL_FIXME)) -#else -# define __WINE_GET_DEBUGGING_WARN(dbch) 0 -# define __WINE_GET_DEBUGGING_FIXME(dbch) 0 -#endif - -/* define error macro regardless of what is configured */ -#define __WINE_GET_DEBUGGING_ERR(dbch) ((dbch)->flags & (1 << __WINE_DBCL_ERR)) - -#define __WINE_GET_DEBUGGING(dbcl,dbch) __WINE_GET_DEBUGGING##dbcl(dbch) - -#define __WINE_IS_DEBUG_ON(dbcl,dbch) \ - (__WINE_GET_DEBUGGING##dbcl(dbch) && (__wine_dbg_get_channel_flags(dbch) & (1 << __WINE_DBCL##dbcl))) - -#ifdef __GNUC__ - -#define __WINE_DPRINTF(dbcl,dbch) \ - do { if(__WINE_GET_DEBUGGING(dbcl,(dbch))) { \ - struct __wine_debug_channel * const __dbch = (dbch); \ - const enum __wine_debug_class __dbcl = __WINE_DBCL##dbcl; \ - __WINE_DBG_LOG - -#define __WINE_DBG_LOG(args...) \ - wine_dbg_log( __dbcl, __dbch, __FUNCTION__, args); } } while(0) - -#define __WINE_PRINTF_ATTR(fmt,args) __attribute__((format (printf,fmt,args))) - - -#ifdef WINE_NO_TRACE_MSGS -#define WINE_TRACE(args...) do { } while(0) -#define WINE_TRACE_(ch) WINE_TRACE -#endif - -#ifdef WINE_NO_DEBUG_MSGS -#define WINE_WARN(args...) do { } while(0) -#define WINE_WARN_(ch) WINE_WARN -#define WINE_FIXME(args...) do { } while(0) -#define WINE_FIXME_(ch) WINE_FIXME -#endif - -#elif defined(__SUNPRO_C) - -#define __WINE_DPRINTF(dbcl,dbch) \ - do { if(__WINE_GET_DEBUGGING(dbcl,(dbch))) { \ - struct __wine_debug_channel * const __dbch = (dbch); \ - const enum __WINE_DEBUG_CLASS __dbcl = __WINE_DBCL##dbcl; \ - __WINE_DBG_LOG - -#define __WINE_DBG_LOG(...) \ - wine_dbg_log( __dbcl, __dbch, __func__, __VA_ARGS__); } } while(0) - -#define __WINE_PRINTF_ATTR(fmt,args) - -#ifdef WINE_NO_TRACE_MSGS -#define WINE_TRACE(...) do { } while(0) -#define WINE_TRACE_(ch) WINE_TRACE -#endif - -#ifdef WINE_NO_DEBUG_MSGS -#define WINE_WARN(...) do { } while(0) -#define WINE_WARN_(ch) WINE_WARN -#define WINE_FIXME(...) do { } while(0) -#define WINE_FIXME_(ch) WINE_FIXME -#endif - -#else /* !__GNUC__ && !__SUNPRO_C */ - -#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_PRINTF_ATTR(fmt, args) + DBCL_FIXME, + DBCL_ERR, + DBCL_WARN, + DBCL_TRACE, -#endif /* !__GNUC__ && !__SUNPRO_C */ - -struct __wine_debug_functions -{ - char * (*get_temp_buffer)( size_t n ); - void (*release_temp_buffer)( char *buffer, size_t n ); - const char * (*dbgstr_an)( const char * s, int n ); - const char * (*dbgstr_wn)( const WCHAR *s, int n ); - int (*dbg_vprintf)( const char *format, va_list args ); - int (*dbg_vlog)( enum __wine_debug_class cls, struct __wine_debug_channel *channel, - const char *function, const char *format, va_list args ); + DBCL_INIT = 7 /* lazy init flag */ }; -extern unsigned char __wine_dbg_get_channel_flags( struct __wine_debug_channel *channel ); -extern int __wine_dbg_set_channel_flags( struct __wine_debug_channel *channel, - unsigned char set, unsigned char clear ); -extern void __wine_dbg_set_functions( const struct __wine_debug_functions *new_funcs, - struct __wine_debug_functions *old_funcs, size_t size ); - /* * Exported definitions and macros */ @@ -165,13 +57,55 @@ extern void __wine_dbg_set_functions( const struct __wine_debug_functions *new_f /* These functions return a printable version of a string, including quotes. The string will be valid for some time, but not indefinitely as strings are re-used. */ -extern const char *wine_dbgstr_an( const char * s, int n ); -extern const char *wine_dbgstr_wn( const WCHAR *s, int n ); -extern const char *wine_dbg_sprintf( const char *format, ... ) __WINE_PRINTF_ATTR(1,2); +static inline const char *wine_dbgstr_an( const char * s, int n ) +{ + if (!s) return ""; + return s; +} +static inline const char *wine_dbgstr_wn( const WCHAR *s, int n ) +{ + static LPSTR p_ret[10]; + static int i; + + LPSTR ret; + DWORD len; + + if (!s) return ""; + i = (i + 1) % 10; + ret = p_ret[i]; + len = WideCharToMultiByte( CP_ACP, 0, s, -1, NULL, 0, NULL, NULL); + ret = realloc( ret, len ); + if (ret) + WideCharToMultiByte( CP_ACP, 0, s, -1, ret, len, NULL, NULL ); + return ret; +} + +static inline const char *wine_dbg_sprintf( const char *format, ...) +{ + static LPSTR p_ret[10]; + static int i; + + LPSTR ret; + DWORD len; + va_list ap; -extern int wine_dbg_printf( const char *format, ... ) __WINE_PRINTF_ATTR(1,2); -extern int wine_dbg_log( enum __wine_debug_class cls, struct __wine_debug_channel *ch, const char *func, - const char *format, ... ) __WINE_PRINTF_ATTR(4,5); + va_start(ap, format); + len = _vscprintf(format, ap); + va_end(ap); + + i = (i + 1) % 10; + ret = p_ret[i]; + ret = realloc(ret, len + 1); + + va_start(ap, format); + vsprintf(ret, format, ap); + va_end(ap); + return ret; +} + +#define wine_dbg_printf(format,...) (printf(format, ## __VA_ARGS__), fflush(stdout)) +#define WINE_DPRINTF(class, function, format, ...) \ + wine_dbg_printf(#class ":%s:" format, function, ## __VA_ARGS__) static inline const char *wine_dbgstr_a( const char *s ) { @@ -219,67 +153,24 @@ static inline const char *wine_dbgstr_longlong( ULONGLONG ll ) else return wine_dbg_sprintf( "%lx", (unsigned long)ll ); } -#ifndef WINE_TRACE -#define WINE_TRACE __WINE_DPRINTF(_TRACE,__wine_dbch___default) -#define WINE_TRACE_(ch) __WINE_DPRINTF(_TRACE,&__wine_dbch_##ch) -#endif -#define WINE_TRACE_ON(ch) __WINE_IS_DEBUG_ON(_TRACE,&__wine_dbch_##ch) - -#ifndef WINE_WARN -#define WINE_WARN __WINE_DPRINTF(_WARN,__wine_dbch___default) -#define WINE_WARN_(ch) __WINE_DPRINTF(_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 -#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_DECLARE_DEBUG_CHANNEL(ch) \ - static struct __wine_debug_channel __wine_dbch_##ch = { ~0, #ch } -#define WINE_DEFAULT_DEBUG_CHANNEL(ch) \ - static struct __wine_debug_channel __wine_dbch_##ch = { ~0, #ch }; \ - static struct __wine_debug_channel * const __wine_dbch___default = &__wine_dbch_##ch - -#define WINE_DPRINTF wine_dbg_printf -#define WINE_MESSAGE wine_dbg_printf - -#ifdef __WINESRC__ /* Wine uses shorter names that are very likely to conflict with other software */ static inline const char *debugstr_an( const char * s, int n ) { return wine_dbgstr_an( s, n ); } static inline const char *debugstr_wn( const WCHAR *s, int n ) { return wine_dbgstr_wn( s, n ); } -static inline const char *debugstr_guid( const struct _GUID *id ) { return wine_dbgstr_guid(id); } +static inline const char *debugstr_guid( const GUID *id ) { return wine_dbgstr_guid( id ); } static inline const char *debugstr_a( const char *s ) { return wine_dbgstr_an( s, -1 ); } static inline const char *debugstr_w( const WCHAR *s ) { return wine_dbgstr_wn( s, -1 ); } -#define TRACE WINE_TRACE -#define TRACE_(ch) WINE_TRACE_(ch) -#define TRACE_ON(ch) WINE_TRACE_ON(ch) - -#define WARN WINE_WARN -#define WARN_(ch) WINE_WARN_(ch) -#define WARN_ON(ch) WINE_WARN_ON(ch) - -#define FIXME WINE_FIXME -#define FIXME_(ch) WINE_FIXME_(ch) -#define FIXME_ON(ch) WINE_FIXME_ON(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 DPRINTF WINE_DPRINTF -#define MESSAGE WINE_MESSAGE +#define TRACE(fmt, ...) (void)0 // WINE_DPRINTF(TRACE, __func__, fmt, ## __VA_ARGS__) +#define TRACE_ON(channel) 0 +#define WARN(fmt, ...) (void)0 // WINE_DPRINTF(WARN, __func__, fmt, ## __VA_ARGS__) +#define WARN_ON(channel) 0 +#define FIXME(fmt, ...) (void)0 // WINE_DPRINTF(FIXME, __func__, fmt, ## __VA_ARGS__) +#define FIXME_ON(channel) 0 +#define ERR(fmt, ...) (void)0 // WINE_DPRINTF(ERR, __func__, fmt, ## __VA_ARGS__) +#define ERR_ON(channel) 0 -#endif /* __WINESRC__ */ #ifdef __cplusplus } |