Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | --- printf-pos.c.orig 2010-10-25 19:45:24.000000000 -0700 +++ printf-pos.c 2010-10-25 19:47:02.000000000 -0700 @@ -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 * 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, (*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; |