[PATCH] msvcrt: Add vf[w]printf_p & vf[w]printf_p_l.

Piotr Caban piotr.caban at gmail.com
Fri Oct 13 10:48:34 CDT 2017


Hi Gijs,

I think support for MSVCRT_PRINTF_POSITIONAL_PARAMS 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:

static int vfprintf_helper(DWORD options, MSVCRT_FILE* file, const char 
*format,
         MSVCRT__locale_t locale, __ms_va_list valist)
{
     printf_arg args_ctx[MSVCRT__ARGMAX+1];
     BOOL tmp_buf;
     int ret;

     if(!MSVCRT_CHECK_PMT( file != NULL )) return -1;
     if(!MSVCRT_CHECK_PMT( format != NULL )) return -1;

     if(options & MSVCRT_PRINTF_POSITIONAL_PARAMS) {
         memset(args_ctx, 0, sizeof(args_ctx));
         ret = create_positional_ctx_a(args_ctx, format, valist);
         if(ret < 0) {
             MSVCRT__invalid_parameter(NULL, NULL, NULL, 0, 0);
             *MSVCRT__errno() = MSVCRT_EINVAL;
             return ret;
         } else if(!ret)
             otions &= ~MSVCRT_PRINTF_POSITIONAL_PARAMS;
     }

     MSVCRT__lock_file(file);
     tmp_buf = add_std_buffer(file);
     ret = pf_printf_a(puts_clbk_file_a, file, format, locale, options,
             options & MSVCRT_PRINTF_POSITIONAL_PARAMS ? 
arg_clbk_positional : arg_clbk_valist,
             options & MSVCRT_PRINTF_POSITIONAL_PARAMS ? args_ctx : 
NULL, &valist);
     if(tmp_buf) remove_std_buffer(file);
     MSVCRT__unlock_file(file);

     return ret;
}

Thanks,
Piotr



More information about the wine-devel mailing list