X-Git-Url: https://git.saurik.com/apple/libc.git/blobdiff_plain/1f2f436a38f7ae2d39a943ad2898d8fed4ed2e58..refs/heads/master:/stdio/FreeBSD/printf-pos.c diff --git a/stdio/FreeBSD/printf-pos.c b/stdio/FreeBSD/printf-pos.c index 2cae4e6..4de7aba 100644 --- a/stdio/FreeBSD/printf-pos.c +++ b/stdio/FreeBSD/printf-pos.c @@ -63,7 +63,10 @@ enum typeid { T_LONG, T_U_LONG, TP_LONG, T_LLONG, T_U_LLONG, TP_LLONG, T_PTRDIFFT, TP_PTRDIFFT, T_SSIZET, T_SIZET, TP_SSIZET, T_INTMAXT, T_UINTMAXT, TP_INTMAXT, TP_VOID, TP_CHAR, TP_SCHAR, - T_DOUBLE, T_LONG_DOUBLE, T_WINT, TP_WCHAR + T_DOUBLE, T_LONG_DOUBLE, T_WINT, TP_WCHAR, +#ifdef VECTORS + T_VECTOR, +#endif }; /* An expandable array of types. */ @@ -240,7 +243,7 @@ addwaster(struct typetable *types, wchar_t **fmtp) * It will be replaces with a malloc-ed one if it overflows. * Returns 0 on success. On failure, returns nonzero and sets errno. */ -int +__private_extern__ int __find_arguments (const char *fmt0, va_list ap, union arg **argtable) { char *fmt; /* format string */ @@ -342,7 +345,11 @@ reswitch: switch (ch) { /*FALLTHROUGH*/ case 'c': error = addtype(&types, +#ifdef VECTORS + (flags & LONGINT) ? T_WINT : ((flags & VECTOR) ? T_VECTOR : T_INT)); +#else (flags & LONGINT) ? T_WINT : T_INT); +#endif if (error) goto error; break; @@ -351,6 +358,12 @@ reswitch: switch (ch) { /*FALLTHROUGH*/ case 'd': case 'i': +#ifdef VECTORS + if (flags & VECTOR) { + if ((error = addtype(&types, T_VECTOR))) + goto error; + } else +#endif if ((error = addsarg(&types, flags))) goto error; break; @@ -360,10 +373,15 @@ reswitch: switch (ch) { case 'e': case 'E': case 'f': + case 'F': case 'g': case 'G': error = addtype(&types, +#ifdef VECTORS + (flags & VECTOR) ? T_VECTOR : ((flags & LONGDBL) ? T_LONG_DOUBLE : T_DOUBLE)); +#else (flags & LONGDBL) ? T_LONG_DOUBLE : T_DOUBLE); +#endif if (error) goto error; break; @@ -392,11 +410,21 @@ reswitch: switch (ch) { flags |= LONGINT; /*FALLTHROUGH*/ case 'o': +#ifdef VECTORS + if (flags & VECTOR) { + if ((error = addtype(&types, T_VECTOR))) + goto error; + } else +#endif if ((error = adduarg(&types, flags))) goto error; break; case 'p': +#ifdef VECTORS + if ((error = addtype(&types, (flags & VECTOR) ? T_VECTOR : TP_VOID))) +#else if ((error = addtype(&types, TP_VOID))) +#endif goto error; break; case 'S': @@ -414,6 +442,12 @@ reswitch: switch (ch) { case 'u': case 'X': case 'x': +#ifdef VECTORS + if (flags & VECTOR) { + if ((error = addtype(&types, T_VECTOR))) + goto error; + } else +#endif if ((error = adduarg(&types, flags))) goto error; break; @@ -431,7 +465,7 @@ error: } /* wchar version of __find_arguments. */ -int +__private_extern__ int __find_warguments (const wchar_t *fmt0, va_list ap, union arg **argtable) { wchar_t *fmt; /* format string */ @@ -551,6 +585,7 @@ reswitch: switch (ch) { case 'e': case 'E': case 'f': + case 'F': case 'g': case 'G': error = addtype(&types, @@ -741,6 +776,11 @@ build_arg_table(struct typetable *types, va_list ap, union arg **argtable) (*argtable) [n].longdoublearg = va_arg (ap, long double); #endif break; +#ifdef VECTORS + case T_VECTOR: + (*argtable) [n].vectorarg = va_arg (ap, VECTORTYPE); + break; +#endif /* VECTORS */ case TP_CHAR: (*argtable) [n].pchararg = va_arg (ap, char *); break;