/* $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>
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,
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) {
f++;
quad = 1;
break;
+ case 't':
+ f++;
+ ptrdifft = 1;
+ break;
+ case 'z':
+ f++;
+ sizet = 1;
+ break;
case 'L':
f++;
longdouble = 1;
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') {
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);
}