<div dir="ltr">Hi Piotr,<div><br></div><div>That does look a lot better, thanks!</div><div>I've sent an updated version.</div><div><br></div><div>Sincerely,</div><div>Gijs</div></div><div class="gmail_extra"><br><div class="gmail_quote">2017-10-13 17:48 GMT+02:00 Piotr Caban <span dir="ltr"><<a href="mailto:piotr.caban@gmail.com" target="_blank">piotr.caban@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Gijs,<br>
<br>
I think support for MSVCRT_PRINTF_POSITIONAL_PARAM<wbr>S flag may be integrated into helper. Thanks to it you will be able to implement vfprintf_p without changing all helper callers. I'm thinking about something like this:<span class=""><br>
<br>
static int vfprintf_helper(DWORD options, MSVCRT_FILE* file, const char *format,<br></span>
        MSVCRT__locale_t locale, __ms_va_list valist)<br>
{<br>
    printf_arg args_ctx[MSVCRT__ARGMAX+1];<br>
    BOOL tmp_buf;<br>
    int ret;<br>
<br>
    if(!MSVCRT_CHECK_PMT( file != NULL )) return -1;<br>
    if(!MSVCRT_CHECK_PMT( format != NULL )) return -1;<br>
<br>
    if(options & MSVCRT_PRINTF_POSITIONAL_PARAM<wbr>S) {<br>
        memset(args_ctx, 0, sizeof(args_ctx));<span class=""><br>
        ret = create_positional_ctx_a(args_c<wbr>tx, format, valist);<br></span>
        if(ret < 0) {<span class=""><br>
            MSVCRT__invalid_parameter(NULL<wbr>, NULL, NULL, 0, 0);<br></span>
            *MSVCRT__errno() = MSVCRT_EINVAL;<br>
            return ret;<br>
        } else if(!ret)<br>
            otions &= ~MSVCRT_PRINTF_POSITIONAL_PARA<wbr>MS;<br>
    }<br>
<br>
    MSVCRT__lock_file(file);<br>
    tmp_buf = add_std_buffer(file);<span class=""><br>
    ret = pf_printf_a(puts_clbk_file_a, file, format, locale, options,<br></span>
            options & MSVCRT_PRINTF_POSITIONAL_PARAM<wbr>S ? arg_clbk_positional : arg_clbk_valist,<br>
            options & MSVCRT_PRINTF_POSITIONAL_PARAM<wbr>S ? args_ctx : NULL, &valist);<br>
    if(tmp_buf) remove_std_buffer(file);<br>
    MSVCRT__unlock_file(file);<br>
<br>
    return ret;<br>
}<br>
<br>
Thanks,<br>
Piotr<br>
</blockquote></div><br></div>