X-Git-Url: https://git.saurik.com/apple/libc.git/blobdiff_plain/9385eb3d10ebe5eb398c52040ec3dbfba9b0cdcf..85a3883466ad89169695b8a34635132d36a8fd2a:/gen/FreeBSD/fmtcheck.c diff --git a/gen/FreeBSD/fmtcheck.c b/gen/FreeBSD/fmtcheck.c index 92593a6..e907995 100644 --- a/gen/FreeBSD/fmtcheck.c +++ b/gen/FreeBSD/fmtcheck.c @@ -35,7 +35,7 @@ /* $NetBSD: fmtcheck.c,v 1.2 2000/11/01 01:17:20 briggs Exp $ */ #include -__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 #include @@ -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); }