]> git.saurik.com Git - apple/libc.git/blobdiff - gen/FreeBSD/fmtcheck.c
Libc-391.5.21.tar.gz
[apple/libc.git] / gen / FreeBSD / fmtcheck.c
index 92593a6be8d0630adcc7fbe16bdc275a87837cfe..e90799556df8237379c9129bda8621a71909886a 100644 (file)
@@ -35,7 +35,7 @@
 
 /*     $NetBSD: fmtcheck.c,v 1.2 2000/11/01 01:17:20 briggs Exp $      */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/gen/fmtcheck.c,v 1.5 2002/06/27 13:20:54 deischen Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/gen/fmtcheck.c,v 1.7 2004/05/02 10:55:05 das Exp $");
 
 #include <stdio.h>
 #include <string.h>
@@ -49,12 +49,18 @@ enum __e_fmtcheck_types {
        FMTCHECK_INT,
        FMTCHECK_LONG,
        FMTCHECK_QUAD,
+       FMTCHECK_PTRDIFFT,
+       FMTCHECK_SIZET,
        FMTCHECK_SHORTPOINTER,
        FMTCHECK_INTPOINTER,
        FMTCHECK_LONGPOINTER,
        FMTCHECK_QUADPOINTER,
+       FMTCHECK_PTRDIFFTPOINTER,
+       FMTCHECK_SIZETPOINTER,
+#ifndef NO_FLOATING_POINT
        FMTCHECK_DOUBLE,
        FMTCHECK_LONGDOUBLE,
+#endif
        FMTCHECK_STRING,
        FMTCHECK_WIDTH,
        FMTCHECK_PRECISION,
@@ -71,10 +77,10 @@ typedef enum __e_fmtcheck_types EFT;
 static EFT
 get_next_format_from_precision(const char **pf)
 {
-       int             sh, lg, quad, longdouble;
+       int             sh, lg, quad, longdouble, ptrdifft, sizet;
        const char      *f;
 
-       sh = lg = quad = longdouble = 0;
+       sh = lg = quad = longdouble = ptrdifft = sizet = 0;
 
        f = *pf;
        switch (*f) {
@@ -96,6 +102,14 @@ get_next_format_from_precision(const char **pf)
                f++;
                quad = 1;
                break;
+       case 't':
+               f++;
+               ptrdifft = 1;
+               break;
+       case 'z':
+               f++;
+               sizet = 1;
+               break;
        case 'L':
                f++;
                longdouble = 1;
@@ -111,6 +125,10 @@ get_next_format_from_precision(const char **pf)
                        RETURN(pf,f,FMTCHECK_LONG);
                if (quad)
                        RETURN(pf,f,FMTCHECK_QUAD);
+               if (ptrdifft)
+                       RETURN(pf,f,FMTCHECK_PTRDIFFT);
+               if (sizet)
+                       RETURN(pf,f,FMTCHECK_SIZET);
                RETURN(pf,f,FMTCHECK_INT);
        }
        if (*f == 'n') {
@@ -122,32 +140,38 @@ get_next_format_from_precision(const char **pf)
                        RETURN(pf,f,FMTCHECK_LONGPOINTER);
                if (quad)
                        RETURN(pf,f,FMTCHECK_QUADPOINTER);
+               if (ptrdifft)
+                       RETURN(pf,f,FMTCHECK_PTRDIFFTPOINTER);
+               if (sizet)
+                       RETURN(pf,f,FMTCHECK_SIZETPOINTER);
                RETURN(pf,f,FMTCHECK_INTPOINTER);
        }
        if (strchr("DOU", *f)) {
-               if (sh + lg + quad + longdouble)
+               if (sh + lg + quad + longdouble + ptrdifft + sizet)
                        RETURN(pf,f,FMTCHECK_UNKNOWN);
                RETURN(pf,f,FMTCHECK_LONG);
        }
-       if (strchr("eEfg", *f)) {
+#ifndef NO_FLOATING_POINT
+       if (strchr("aAeEfFgG", *f)) {
                if (longdouble)
                        RETURN(pf,f,FMTCHECK_LONGDOUBLE);
-               if (sh + lg + quad)
+               if (sh + lg + quad + ptrdifft + sizet)
                        RETURN(pf,f,FMTCHECK_UNKNOWN);
                RETURN(pf,f,FMTCHECK_DOUBLE);
        }
+#endif
        if (*f == 'c') {
-               if (sh + lg + quad + longdouble)
+               if (sh + lg + quad + longdouble + ptrdifft + sizet)
                        RETURN(pf,f,FMTCHECK_UNKNOWN);
                RETURN(pf,f,FMTCHECK_INT);
        }
        if (*f == 's') {
-               if (sh + lg + quad + longdouble)
+               if (sh + lg + quad + longdouble + ptrdifft + sizet)
                        RETURN(pf,f,FMTCHECK_UNKNOWN);
                RETURN(pf,f,FMTCHECK_STRING);
        }
        if (*f == 'p') {
-               if (sh + lg + quad + longdouble)
+               if (sh + lg + quad + longdouble + ptrdifft + sizet)
                        RETURN(pf,f,FMTCHECK_UNKNOWN);
                RETURN(pf,f,FMTCHECK_LONG);
        }