]> git.saurik.com Git - apple/libc.git/blobdiff - stdio/FreeBSD/printf-pos.c
Libc-1439.100.3.tar.gz
[apple/libc.git] / stdio / FreeBSD / printf-pos.c
index 2cae4e6e80b109e8e17a9cc4fc1535c8a1598ddc..4de7aba54b9915f64ea0517b4d43b431efefb1a6 100644 (file)
@@ -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;