summaryrefslogtreecommitdiff
path: root/lib/version-etc.h
diff options
context:
space:
mode:
authorEric Blake <ebb9@byu.net>2009-06-25 12:13:35 -0600
committerEric Blake <ebb9@byu.net>2009-06-25 21:09:03 -0600
commit836f3974faad2f3de7bafd46719b77d6632a4c96 (patch)
treee2b3fd6489d2c9aef5bf84e2b0714ae0c495e06b /lib/version-etc.h
parent5696a5eaf981123faccc39145a966fa13c335b18 (diff)
downloadgnulib-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.h20
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);