summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/long-options.c15
-rw-r--r--lib/long-options.h4
-rw-r--r--lib/version-etc.c104
-rw-r--r--lib/version-etc.h8
4 files changed, 21 insertions, 110 deletions
diff --git a/lib/long-options.c b/lib/long-options.c
index 94fea1587..58bc93c1d 100644
--- a/lib/long-options.c
+++ b/lib/long-options.c
@@ -25,10 +25,9 @@
#include "long-options.h"
-#include <stdarg.h>
#include <stdio.h>
-#include <stdlib.h>
#include <getopt.h>
+#include <stdlib.h>
#include "version-etc.h"
@@ -48,8 +47,8 @@ parse_long_options (int argc,
const char *command_name,
const char *package,
const char *version,
- void (*usage_func)(),
- ...)
+ const char *authors,
+ void (*usage_func)())
{
int c;
int saved_opterr;
@@ -68,12 +67,8 @@ parse_long_options (int argc,
(*usage_func) (0);
case 'v':
- {
- va_list args;
- va_start (args, usage_func);
- version_etc_va (stdout, command_name, package, version, args);
- exit (0);
- }
+ version_etc (stdout, command_name, package, version, authors);
+ exit (0);
default:
/* Don't process any other long-named options. */
diff --git a/lib/long-options.h b/lib/long-options.h
index 78a33a389..e89b3512d 100644
--- a/lib/long-options.h
+++ b/lib/long-options.h
@@ -22,5 +22,5 @@ void parse_long_options (int _argc,
const char *_command_name,
const char *_package,
const char *_version,
- void (*_usage) (int),
- ...);
+ const char *_authors,
+ void (*_usage) (int));
diff --git a/lib/version-etc.c b/lib/version-etc.c
index 031c2e921..663aa8dcf 100644
--- a/lib/version-etc.c
+++ b/lib/version-etc.c
@@ -21,13 +21,9 @@
# include <config.h>
#endif
-#include <stdarg.h>
#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
#include "unlocked-io.h"
#include "version-etc.h"
-#include "xalloc.h"
#include "gettext.h"
#define _(msgid) gettext (msgid)
@@ -39,77 +35,26 @@ char* version_etc_copyright =
"Copyright (C) 2003 Free Software Foundation, Inc.";
-/* Like version_etc, below, but with the NULL-terminated author list
- provided via a variable of type va_list. */
-void
-version_etc_va (FILE *stream,
- char const *command_name, char const *package,
- char const *version, va_list authors)
-{
- unsigned int n_authors;
- va_list saved_authors;
+/* Display the --version information the standard way.
-#ifdef __va_copy
- __va_copy (saved_authors, authors);
-#else
- saved_authors = authors;
-#endif
+ If COMMAND_NAME is NULL, the PACKAGE is asumed to be the name of
+ the program. The formats are therefore:
- for (n_authors = 0; va_arg (authors, char const *); ++n_authors)
- {
- /* empty */
- }
- va_end (authors);
+ PACKAGE VERSION
- if (n_authors == 0)
- abort ();
+ or
+ COMMAND_NAME (PACKAGE) VERSION. */
+void
+version_etc (FILE *stream,
+ const char *command_name, const char *package,
+ const char *version, const char *authors)
+{
if (command_name)
fprintf (stream, "%s (%s) %s\n", command_name, package, version);
else
fprintf (stream, "%s %s\n", package, version);
-
- switch (n_authors)
- {
- case 1:
- vfprintf (stream, _("Written by %s.\n"), saved_authors);
- break;
- case 2:
- vfprintf (stream, _("Written by %s and %s.\n"), saved_authors);
- break;
- case 3:
- vfprintf (stream, _("Written by %s, %s, and %s.\n"), saved_authors);
- break;
- case 4:
- vfprintf (stream, _("Written by %s, %s, %s, and %s.\n"), saved_authors);
- break;
- default:
- {
-
- /* Note that the following must have one `%s' and one `%%s'. */
-#define FMT_TEMPLATE _("Written by %sand %%s.\n")
-
- /* for the string "%s, %s, ..., %s, " */
- size_t s_len = (n_authors - 1) * strlen ("%s, ");
- char *s_fmt = xmalloc (s_len + 1);
-
- /* This could be a few bytes tighter, but don't bother because
- that'd just make it a little more fragile. */
- char *full_fmt = xmalloc (strlen (FMT_TEMPLATE) + s_len + 1);
-
- unsigned int i;
- char *s = s_fmt;
- for (i = 0; i < n_authors - 1; i++)
- s = stpcpy (s, "%s, ");
- sprintf (full_fmt, FMT_TEMPLATE, s_fmt);
- free (s_fmt);
-
- vfprintf (stream, full_fmt, saved_authors);
- free (full_fmt);
- }
- break;
- }
- va_end (saved_authors);
+ fprintf (stream, _("Written by %s.\n"), authors);
putc ('\n', stream);
fputs (version_etc_copyright, stream);
@@ -120,28 +65,3 @@ This is free software; see the source for copying conditions. There is NO\n\
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"),
stream);
}
-
-
-/* Display the --version information the standard way.
-
- If COMMAND_NAME is NULL, the PACKAGE is asumed to be the name of
- the program. The formats are therefore:
-
- PACKAGE VERSION
-
- or
-
- COMMAND_NAME (PACKAGE) VERSION.
-
- There must be one or more author names (each as a separate string)
- after the VERSION argument, and the final argument must be `NULL'. */
-void
-version_etc (FILE *stream,
- char const *command_name, char const *package,
- char const *version, ...)
-{
- va_list authors;
-
- va_start (authors, version);
- version_etc_va (stream, command_name, package, version, authors);
-}
diff --git a/lib/version-etc.h b/lib/version-etc.h
index 7056aaaeb..e2ef98185 100644
--- a/lib/version-etc.h
+++ b/lib/version-etc.h
@@ -24,12 +24,8 @@
extern char *version_etc_copyright;
-void version_etc_va (FILE *stream,
- char const *command_name, char const *package,
- char const *version, va_list authors);
-
void version_etc (FILE *stream,
- char const *command_name, char const *package,
- char const *version, ...);
+ const char *command_name, const char *package,
+ const char *version, const char *authors);
#endif /* VERSION_ETC_H */