On 6/7/23 09:54, Konstantin Kostiuk wrote:
Hi Philippe,

On Wed, Jul 5, 2023 at 11:35 PM Philippe Mathieu-Daudé <[email protected] <mailto:[email protected]>> wrote:

    Hi Konstantin,

    On 5/7/23 16:12, Konstantin Kostiuk wrote:
     > Signed-off-by: Konstantin Kostiuk <[email protected]
    <mailto:[email protected]>>
     > ---
     >   qga/vss-win32/vss-debug.h | 31 +++++++++++++++++++++++++++++++
     >   1 file changed, 31 insertions(+)
     >   create mode 100644 qga/vss-win32/vss-debug.h


> +#define PRINT_DEBUG(fmt, ...) {              \ > +    char user_sting[512] = { 0 };              \ > +    char full_string[640] = { 0 };               \ > +    snprintf(user_sting, 512, fmt, ## __VA_ARGS__);              \
     > +    snprintf(full_string, 640, QGA_PROVIDER_NAME"[%lu]: %s
    %s\n",             \
> +        GetCurrentThreadId(), __func__, user_sting);               \ > +    OutputDebugString(full_string);              \ > +    fprintf(stderr, "%s", full_string);              \
     > +}

    Why not simply use a plain function?


I am not sure what you mean.

If you mean to call OutputDebugString directly, then we need to concatenate the proper string
for each call.
If you mean convert PRINT_DEBUG to function, then we can't use the __func__ macro in PRINT_DEBUG to get the real function name. We can convert PRINT_DEBUG to function and a new macro that will call PRINT_DEBUG and pass a proper value of __fucn__.

What solution is better there?

  void qga_debug(const char *funcname, const char *fmt, ...);

and g_strdup_vprintf()?

Reply via email to