diff options
author | Elliott Hughes <enh@google.com> | 2017-11-02 16:58:44 -0700 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2017-11-02 16:58:44 -0700 |
commit | 618303ca4ad2754071ba6955da690fec2b27a76d (patch) | |
tree | 97f8db830c0241850a8bdb3008127b9a92afecfc /libc/stdio/vfwprintf.cpp | |
parent | 46621f43b083d9743545b31e97011a1c44e784b2 (diff) |
More printf de-duplication.
Fix the 'j' (intmax_t/uintmax_t) length qualifier in the wide
variant. (With new tests that fail without this fix.)
Fix a typo in the wide support for intmax_t*, which isn't testable because
%n is disabled on Android (and will be removed in a later cleanup pass).
Also move the public vfprintf/vfwprint functions into stdio.cpp.
Bug: http://b/67371539
Test: ran tests
Change-Id: Ib003599b1e9cb789044a068940b59e447f2cb7cb
Diffstat (limited to 'libc/stdio/vfwprintf.cpp')
-rw-r--r-- | libc/stdio/vfwprintf.cpp | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/libc/stdio/vfwprintf.cpp b/libc/stdio/vfwprintf.cpp index 80eb78a67..38acccf53 100644 --- a/libc/stdio/vfwprintf.cpp +++ b/libc/stdio/vfwprintf.cpp @@ -83,8 +83,7 @@ union arg { wchar_t* pwchararg; }; -static int __find_arguments(const wchar_t* fmt0, va_list ap, union arg** argtable, - size_t* argtablesiz); +static int __find_arguments(const CHAR_TYPE* fmt0, va_list ap, union arg** argtable, size_t* argtablesiz); static int __grow_type_table(unsigned char** typetable, int* tablesize); /* @@ -997,17 +996,6 @@ finish: return (ret); } -int vfwprintf(FILE* __restrict fp, const wchar_t* __restrict fmt0, __va_list ap) { - int r; - - FLOCKFILE(fp); - r = __vfwprintf(fp, fmt0, ap); - FUNLOCKFILE(fp); - - return (r); -} -DEF_STRONG(vfwprintf); - /* * Type ids for argument type table. */ @@ -1192,6 +1180,9 @@ static int __find_arguments(const wchar_t* fmt0, va_list ap, union arg** argtabl flags |= SHORTINT; } goto rflag; + case 'j': + flags |= MAXINT; + goto rflag; case 'l': if (*fmt == 'l') { fmt++; @@ -1367,9 +1358,15 @@ done: case TP_SSIZEINT: (*argtable)[n].pssizearg = va_arg(ap, ssize_t*); break; - case TP_MAXINT: + case T_MAXINT: (*argtable)[n].intmaxarg = va_arg(ap, intmax_t); break; + case T_MAXUINT: + (*argtable)[n].uintmaxarg = va_arg(ap, uintmax_t); + break; + case TP_MAXINT: + (*argtable)[n].pintmaxarg = va_arg(ap, intmax_t*); + break; case T_WINT: (*argtable)[n].wintarg = va_arg(ap, wint_t); break; |