diff options
author | Guy Harris <guy@alum.mit.edu> | 2000-11-21 21:24:52 +0000 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2000-11-21 21:24:52 +0000 |
commit | 90eccd89b898d0edff6ae9faffc32855b687f2f3 (patch) | |
tree | 123796d209de7d78df16a01b428a6a47649aa454 /snprintf.h | |
parent | de9a50d3e749731cf7c1f0628957c5a77618db55 (diff) |
Some compilers, e.g. Microsoft Visual C++, don't define __STDC__ unless
extensions to ANSI C are disabled if they may cause strictly conforming
programs not to compile, or to work differently if those extensions are
enabled. (Other compilers #define it as 0, e.g. Sun's and, I think,
other AT&T-derived compilers; still others cheerfully define it as 1
even when those extensions are enabled, e.g. GCC.)
As such, checking whether __STDC__ is defined, or is defined as a
non-zero value, isn't the right way to check whether function prototypes
are supported; MSVC++ 6.0 supports them, but, by default, leaves
extensions of the sort described above enabled, and thus doesn't define
__STDC__. This means that the compiler warns about arguments to
"snprintf()" when compiling it, as the declaration is an old-style
declaration.
As Ethereal uses function prototypes, there's not much point in making
it possible for its private "snprintf()" to be compiled or used when
function prototypes aren't supported; just get rid of the tests for
__STDC__, so that it's compiled with function prototypes regardless of
whether __STDC__ is defined or not.
While we're at it, have "snprintf()" give it a "__attribute__((format
(printf, 3, 4))))" when compiled by GCC 2.x or later, so that
format/argument checks can be done even on platforms lacking
"snprintf()".
svn path=/trunk/; revision=2689
Diffstat (limited to 'snprintf.h')
-rw-r--r-- | snprintf.h | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/snprintf.h b/snprintf.h index 3e0cb937b5..00bf7b358b 100644 --- a/snprintf.h +++ b/snprintf.h @@ -1,11 +1,11 @@ /* - * $Id: snprintf.h,v 1.4 2000/08/11 22:00:49 guy Exp $ + * $Id: snprintf.h,v 1.5 2000/11/21 21:24:52 guy Exp $ */ #ifndef __ETHEREAL_SNPRINTF_H__ #define __ETHEREAL_SNPRINTF_H__ -#if defined(HAVE_STDARG_H) && defined(__STDC__) && __STDC__ +#if defined(HAVE_STDARG_H) # include <stdarg.h> #else # include <varargs.h> @@ -14,11 +14,11 @@ extern int vsnprintf(char *string, size_t length, const char * format, va_list args); -#if defined(HAVE_STDARG_H) && defined(__STDC__) && __STDC__ -extern int snprintf(char *string, size_t length, const char * format, ...); +#if __GNUC__ == 2 +extern int snprintf(char *string, size_t length, const char * format, ...) + __attribute__((format (printf, 3, 4))); #else -extern int snprintf(char *string, size_t length, const char * format, - int va_alist); +extern int snprintf(char *string, size_t length, const char * format, ...); #endif #endif |