Patch to support --help

Joseph S. Myers jsm at polyomino.org.uk
Fri Jan 2 17:07:48 UTC 2009


The tools zdump and zic support the GNU-standard --version option (output 
version information to stdout and exit successfully), but not the 
associated --help option (output usage and bug reporting information to 
stdout and exit successfully).  This patch adds such support.  tzselect 
supports neither option, so this patch adds support for both options to 
it.

diff -ru tzcode.orig/tzselect.ksh tzcode/tzselect.ksh
--- tzcode.orig/tzselect.ksh	2008-09-10 02:33:17.000000000 +0000
+++ tzcode/tzselect.ksh	2009-01-02 16:55:45.000000000 +0000
@@ -1,6 +1,6 @@
 #! /bin/ksh
 
-# '@(#)tzselect.ksh	8.1'
+VERSION='@(#)tzselect.ksh	8.1'
 
 # Ask the user about the time zone, and output the resulting TZ value to stdout.
 # Interact with the user via stderr and stdin.
@@ -45,6 +45,21 @@
 	exit 1
 }
 
+if [ "$1" = "--help" ]; then
+    cat <<EOF
+Usage: tzselect
+Select a time zone interactively.
+
+Report bugs to tz at elsie.nci.nih.gov.
+EOF
+    exit 0
+elif [ "$1" = "--version" ]; then
+    cat <<EOF
+tzselect $VERSION
+EOF
+    exit 0
+fi
+
 # Make sure the tables are readable.
 TZ_COUNTRY_TABLE=$TZDIR/iso3166.tab
 TZ_ZONE_TABLE=$TZDIR/zone.tab
diff -ru tzcode.orig/zdump.c tzcode/zdump.c
--- tzcode.orig/zdump.c	2008-09-10 02:33:24.000000000 +0000
+++ tzcode/zdump.c	2009-01-02 16:56:59.000000000 +0000
@@ -230,6 +230,17 @@
 	warned = TRUE;
 }
 
+static void
+usage(const char *progname, FILE *stream, int status)
+{
+	(void) fprintf(stream,
+_("%s: usage is %s [ --version ] [ --help ] [ -v ] [ -c [loyear,]hiyear ] zonename ...\n\
+\n\
+Report bugs to tz at elsie.nci.nih.gov.\n"),
+		       progname, progname);
+	exit(status);
+}
+
 int
 main(argc, argv)
 int	argc;
@@ -266,6 +277,8 @@
 		if (strcmp(argv[i], "--version") == 0) {
 			(void) printf("%s\n", elsieid);
 			exit(EXIT_SUCCESS);
+		} else if (strcmp(argv[i], "--help") == 0) {
+			usage(progname, stdout, EXIT_SUCCESS);
 		}
 	vflag = 0;
 	cutarg = NULL;
@@ -275,10 +288,7 @@
 		else	cutarg = optarg;
 	if ((c != EOF && c != -1) ||
 		(optind == argc - 1 && strcmp(argv[optind], "=") == 0)) {
-			(void) fprintf(stderr,
-_("%s: usage is %s [ --version ] [ -v ] [ -c [loyear,]hiyear ] zonename ...\n"),
-				progname, progname);
-			exit(EXIT_FAILURE);
+			usage(progname, stderr, EXIT_FAILURE);
 	}
 	if (vflag) {
 		if (cutarg != NULL) {
diff -ru tzcode.orig/zic.c tzcode/zic.c
--- tzcode.orig/zic.c	2008-09-10 02:33:18.000000000 +0000
+++ tzcode/zic.c	2009-01-02 16:57:40.000000000 +0000
@@ -156,7 +156,7 @@
 			const struct zone * zp, int ntzones);
 static void	setboundaries(void);
 static zic_t	tadd(zic_t t1, long t2);
-static void	usage(void);
+static void	usage(FILE *stream, int status);
 static void	writezone(const char * name, const char * string);
 static int	yearistype(int year, const char * type);
 
@@ -454,13 +454,15 @@
 }
 
 static void
-usage(void)
+usage(FILE *stream, int status)
 {
-	(void) fprintf(stderr, _("%s: usage is %s \
-[ --version ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n\
-\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n"),
-		progname, progname);
-	exit(EXIT_FAILURE);
+	(void) fprintf(stream, _("%s: usage is %s \
+[ --version ] [ --help ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n\
+\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n\
+\n\
+Report bugs to tz at elsie.nci.nih.gov.\n"),
+		       progname, progname);
+	exit(status);
 }
 
 static const char *	psxrules;
@@ -498,11 +500,13 @@
 		if (strcmp(argv[i], "--version") == 0) {
 			(void) printf("%s\n", elsieid);
 			exit(EXIT_SUCCESS);
+		} else if (strcmp(argv[i], "--help") == 0) {
+			usage(stdout, EXIT_SUCCESS);
 		}
 	while ((c = getopt(argc, argv, "d:l:p:L:vsy:")) != EOF && c != -1)
 		switch (c) {
 			default:
-				usage();
+				usage(stderr, EXIT_FAILURE);
 			case 'd':
 				if (directory == NULL)
 					directory = optarg;
@@ -561,7 +565,7 @@
 				break;
 		}
 	if (optind == argc - 1 && strcmp(argv[optind], "=") == 0)
-		usage();	/* usage message by request */
+		usage(stderr, EXIT_FAILURE);	/* usage message by request */
 	if (directory == NULL)
 		directory = TZDIR;
 	if (yitcommand == NULL)

-- 
Joseph S. Myers
jsm at polyomino.org.uk



More information about the tz mailing list