|
|
|
@ -253,7 +253,6 @@ static int wprintf_core(FILE *f, const wchar_t *fmt, va_list *ap, union arg *nl_ |
|
|
|
/* Check validity of argument type (nl/normal) */ |
|
|
|
if (st==NOARG) { |
|
|
|
if (argpos>=0) return -1; |
|
|
|
else if (!f) continue; |
|
|
|
} else { |
|
|
|
if (argpos>=0) nl_type[argpos]=st, arg=nl_arg[argpos]; |
|
|
|
else if (f) pop_arg(&arg, st, ap); |
|
|
|
@ -287,8 +286,7 @@ static int wprintf_core(FILE *f, const wchar_t *fmt, va_list *ap, union arg *nl_ |
|
|
|
case 'S': |
|
|
|
a = arg.p; |
|
|
|
z = wmemchr(a, 0, p); |
|
|
|
if (!z) z=a+p; |
|
|
|
else p=z-a; |
|
|
|
if (z) p=z-a; |
|
|
|
if (w<p) w=p; |
|
|
|
if (!(fl&LEFT_ADJ)) fprintf(f, "%.*s", w-p, ""); |
|
|
|
out(f, a, p); |
|
|
|
@ -349,8 +347,12 @@ int vfwprintf(FILE *restrict f, const wchar_t *restrict fmt, va_list ap) |
|
|
|
union arg nl_arg[NL_ARGMAX]; |
|
|
|
int ret; |
|
|
|
|
|
|
|
/* the copy allows passing va_list* even if va_list is an array */ |
|
|
|
va_copy(ap2, ap); |
|
|
|
if (wprintf_core(0, fmt, &ap2, nl_arg, nl_type) < 0) return -1; |
|
|
|
if (wprintf_core(0, fmt, &ap2, nl_arg, nl_type) < 0) { |
|
|
|
va_end(ap2); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
|
|
|
|
FLOCK(f); |
|
|
|
ret = wprintf_core(f, fmt, &ap2, nl_arg, nl_type); |
|
|
|
|