2001-11-07 16:24:30

by Erik Mouw

[permalink] [raw]
Subject: [PATCH] add function attributes to sprintf() and snprintf()

Hi,

This patch adds function attributes to sprintf() and snprintf() so the
compiler can catch formatting errors at compile time. Patch is against
2.4.13-ac8, but it should apply cleanly against 2.4.14 as well.


Erik

--
J.A.K. (Erik) Mouw, Information and Communication Theory Group, Faculty
of Information Technology and Systems, Delft University of Technology,
PO BOX 5031, 2600 GA Delft, The Netherlands Phone: +31-15-2783635
Fax: +31-15-2781843 Email: [email protected]
WWW: http://www-ict.its.tudelft.nl/~erik/


Index: include/linux/kernel.h
===================================================================
RCS file: /home/erik/cvsroot/elinux/include/linux/kernel.h,v
retrieving revision 1.1.1.143
diff -u -r1.1.1.143 kernel.h
--- linux/include/linux/kernel.h 2001/11/07 00:36:34 1.1.1.143
+++ linux/include/linux/kernel.h 2001/11/07 15:49:54
@@ -60,9 +60,11 @@
extern long simple_strtol(const char *,char **,unsigned int);
extern unsigned long long simple_strtoull(const char *,char **,unsigned int);
extern long long simple_strtoll(const char *,char **,unsigned int);
-extern int sprintf(char * buf, const char * fmt, ...);
+extern int sprintf(char * buf, const char * fmt, ...)
+ __attribute__ ((format (printf, 2, 3)));
extern int vsprintf(char *buf, const char *, va_list);
-extern int snprintf(char * buf, size_t size, const char *fmt, ...);
+extern int snprintf(char * buf, size_t size, const char * fmt, ...)
+ __attribute__ ((format (printf, 3, 4)));
extern int vsnprintf(char *buf, size_t size, const char *fmt, va_list args);

extern int sscanf(const char *, const char *, ...)


2001-11-09 05:26:38

by James Antill

[permalink] [raw]
Subject: Re: [PATCH] add function attributes to sprintf() and snprintf()

Erik Mouw <[email protected]> writes:

> Hi,
>
> This patch adds function attributes to sprintf() and snprintf() so the
> compiler can catch formatting errors at compile time. Patch is against
> 2.4.13-ac8, but it should apply cleanly against 2.4.14 as well.

This is done inside gcc as sprintf/snprintf/vsnprintf etc. are all
standard symbols so gcc automatically adds the attributes for them.

In gcc 3.x it's all done in gcc/builtin-attrs.def

--
# James Antill -- [email protected]
:0:
* ^From: .*james@and\.org
/dev/null