Subject: Re: [PATCH v3] win32: pthread_cond_init should return a value

From: Junio C Hamano <[email-masked]>
Date: Thu, 20 Nov 2025 17:46:57 -0800

"AZero13 via GitGitGadget" <[email-masked]> writes:

> From: Greg Funni <[email-masked]>
>
> This value is not checked, but it must return to match POSIX
>
> Signed-off-by: Greg Funni <[email-masked]>
> ---
>     win32: pthread_cond_init should return a value
>     
>     This value is not checked, but it must return to match POSIX
> ...
> -#define pthread_cond_init(a,b) InitializeConditionVariable((a))
> +#define pthread_cond_init(a,b) return_0((InitializeConditionVariable((a)), 0))

This is tricky and I like it.

Because InitializeConditionVariable() returns void, and return_0()
is defined as such:

    static inline int return_0(int i) { return 0; }

you cannot directly pass InitializeConditionVariable() to it, so you
use a comma operator and pass 0 to return_0().  Because the type of
the comma operator with mixed operands is the type of the rightmost
operand, the type of "InitializeConditionVariable((a)), 0" is type
of "0", so return_0() would happily take it as an int, and returns
0.

This should work correctly, but it still is tricky and yucky.

You may not have to use return_0(), but OK.

Will queue.  Thanks.