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);
 	}

Reply via email to