diff options
author | Eric Blake <ebb9@byu.net> | 2009-06-25 12:13:35 -0600 |
---|---|---|
committer | Eric Blake <ebb9@byu.net> | 2009-06-25 21:09:03 -0600 |
commit | 836f3974faad2f3de7bafd46719b77d6632a4c96 (patch) | |
tree | e2b3fd6489d2c9aef5bf84e2b0714ae0c495e06b /lib/version-etc.h | |
parent | 5696a5eaf981123faccc39145a966fa13c335b18 (diff) | |
download | gnulib-836f3974faad2f3de7bafd46719b77d6632a4c96.tar.gz |
version-etc: fix regression
* lib/version-etc.h (ATTRIBUTE_SENTINEL): Define for new enough
gcc.
(version_etc): Use it, to catch bugs with trailing NULL.
* lib/version-etc.c (version_etc_arn): Delete unused argument.
(version_etc_va): Fix logic bug.
* modules/version-etc-tests: Add test.
* tests/test-version-etc.c: New file.
* tests/test-version-etc.sh: Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
Diffstat (limited to 'lib/version-etc.h')
-rw-r--r-- | lib/version-etc.h | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/lib/version-etc.h b/lib/version-etc.h index 078601c409..8ce02fecb8 100644 --- a/lib/version-etc.h +++ b/lib/version-etc.h @@ -22,6 +22,15 @@ # include <stdarg.h> # include <stdio.h> +/* The `sentinel' attribute was added in gcc 4.0. */ +#ifndef ATTRIBUTE_SENTINEL +# if 4 <= __GNUC__ +# define ATTRIBUTE_SENTINEL __attribute__ ((__sentinel__)) +# else +# define ATTRIBUTE_SENTINEL /* empty */ +# endif +#endif + extern const char version_etc_copyright[]; /* The three functions below display the --version information in the @@ -39,28 +48,29 @@ extern const char version_etc_copyright[]; The functions differ in the way they are passed author names: */ -/* N_AUTHORS names are supplied in array AUTHORS */ +/* N_AUTHORS names are supplied in array AUTHORS. */ extern void version_etc_arn (FILE *stream, const char *command_name, const char *package, const char *version, const char * const * authors, size_t n_authors); -/* Names are passed in the NULL-terminated array AUTHORS */ +/* Names are passed in the NULL-terminated array AUTHORS. */ extern void version_etc_ar (FILE *stream, const char *command_name, const char *package, const char *version, const char * const * authors); -/* Names are passed in the NULL-terminated va_list */ +/* Names are passed in the NULL-terminated va_list. */ extern void version_etc_va (FILE *stream, const char *command_name, const char *package, const char *version, va_list authors); /* Names are passed as separate arguments, with an additional - NULL argument at the end. */ + NULL argument at the end. */ extern void version_etc (FILE *stream, const char *command_name, const char *package, const char *version, - /* const char *author1, ...*/ ...); + /* const char *author1, ..., NULL */ ...) + ATTRIBUTE_SENTINEL; /* Display the usual `Report bugs to' stanza */ extern void emit_bug_reporting_address (void); |