Module Name: src
Committed By: rin
Date: Wed Dec 6 12:28:53 UTC 2017
Modified Files:
src/lib/libc/gen: fmtcheck.c
Log Message:
Teach fmtcheck(3) about the flags a, A, F, G, t, and z. Taken from FreeBSD:
https://svnweb.freebsd.org/base/head/lib/libc/gen/fmtcheck.c#rev117014
To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/lib/libc/gen/fmtcheck.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/lib/libc/gen/fmtcheck.c
diff -u src/lib/libc/gen/fmtcheck.c:1.11 src/lib/libc/gen/fmtcheck.c:1.12
--- src/lib/libc/gen/fmtcheck.c:1.11 Wed Dec 6 11:33:34 2017
+++ src/lib/libc/gen/fmtcheck.c Wed Dec 6 12:28:53 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: fmtcheck.c,v 1.11 2017/12/06 11:33:34 rin Exp $ */
+/* $NetBSD: fmtcheck.c,v 1.12 2017/12/06 12:28:53 rin Exp $ */
/*-
* Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
#include <sys/cdefs.h>
#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: fmtcheck.c,v 1.11 2017/12/06 11:33:34 rin Exp $");
+__RCSID("$NetBSD: fmtcheck.c,v 1.12 2017/12/06 12:28:53 rin Exp $");
#endif
#include "namespace.h"
@@ -49,11 +49,15 @@ enum __e_fmtcheck_types {
FMTCHECK_INT,
FMTCHECK_LONG,
FMTCHECK_QUAD,
+ FMTCHECK_PTRDIFFT,
+ FMTCHECK_SIZET,
FMTCHECK_POINTER,
FMTCHECK_SHORTPOINTER,
FMTCHECK_INTPOINTER,
FMTCHECK_LONGPOINTER,
FMTCHECK_QUADPOINTER,
+ FMTCHECK_PTRDIFFTPOINTER,
+ FMTCHECK_SIZETPOINTER,
FMTCHECK_DOUBLE,
FMTCHECK_LONGDOUBLE,
FMTCHECK_STRING,
@@ -72,10 +76,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) {
@@ -97,6 +101,14 @@ get_next_format_from_precision(const cha
f++;
quad = 1;
break;
+ case 't':
+ f++;
+ ptrdifft = 1;
+ break;
+ case 'z':
+ f++;
+ sizet = 1;
+ break;
case 'L':
f++;
longdouble = 1;
@@ -129,6 +141,10 @@ get_next_format_from_precision(const cha
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') {
@@ -140,32 +156,36 @@ get_next_format_from_precision(const cha
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)) {
+ 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);
}
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_POINTER);
}