summaryrefslogtreecommitdiff
path: root/libc/stdio/vfwprintf.cpp
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2017-11-02 16:58:44 -0700
committerElliott Hughes <enh@google.com>2017-11-02 16:58:44 -0700
commit618303ca4ad2754071ba6955da690fec2b27a76d (patch)
tree97f8db830c0241850a8bdb3008127b9a92afecfc /libc/stdio/vfwprintf.cpp
parent46621f43b083d9743545b31e97011a1c44e784b2 (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.cpp25
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;