aboutsummaryrefslogtreecommitdiff
path: root/timezone/zic.c
diff options
context:
space:
mode:
Diffstat (limited to 'timezone/zic.c')
-rw-r--r--timezone/zic.c30
1 files changed, 16 insertions, 14 deletions
diff --git a/timezone/zic.c b/timezone/zic.c
index 26d0041..b164b36 100644
--- a/timezone/zic.c
+++ b/timezone/zic.c
@@ -1,8 +1,4 @@
-#ifndef lint
-#ifndef NOID
-static char elsieid[] = "@(#)zic.c 7.107";
-#endif /* !defined NOID */
-#endif /* !defined lint */
+static char elsieid[] = "@(#)zic.c 7.113";
#include "private.h"
#include "locale.h"
@@ -446,7 +442,7 @@ const char * const string;
static void
usage P((void))
{
- (void) fprintf(stderr, _("%s: usage is %s [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n"),
+ (void) fprintf(stderr, _("%s: usage is %s [ --version ] [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n"),
progname, progname);
(void) exit(EXIT_FAILURE);
}
@@ -479,6 +475,11 @@ char * argv[];
(void) textdomain(TZ_DOMAIN);
#endif /* HAVE_GETTEXT - 0 */
progname = argv[0];
+ for (i = 1; i < argc; ++i)
+ if (strcmp(argv[i], "--version") == 0) {
+ (void) printf("%s\n", elsieid);
+ (void) exit(EXIT_SUCCESS);
+ }
while ((c = getopt(argc, argv, "d:l:p:L:vsy:")) != EOF && c != -1)
switch (c) {
default:
@@ -1165,14 +1166,15 @@ const int nfields;
error(_("time before zero"));
return;
}
- t = (time_t) dayoff * SECSPERDAY;
- /*
- ** Cheap overflow check.
- */
- if (t / SECSPERDAY != dayoff) {
- error(_("time overflow"));
+ if (dayoff < min_time / SECSPERDAY) {
+ error(_("time too small"));
return;
}
+ if (dayoff > max_time / SECSPERDAY) {
+ error(_("time too large"));
+ return;
+ }
+ t = (time_t) dayoff * SECSPERDAY;
tod = gethms(fields[LP_TIME], _("invalid time of day"), FALSE);
cp = fields[LP_CORR];
{
@@ -1325,9 +1327,9 @@ const char * const timep;
return;
} else if (noise) {
if (rp->r_loyear < min_year_representable)
- warning(_("starting year too low to be represented"));
+ warning(_("ending year too low to be represented"));
else if (rp->r_loyear > max_year_representable)
- warning(_("starting year too high to be represented"));
+ warning(_("ending year too high to be represented"));
}
if (rp->r_loyear > rp->r_hiyear) {
error(_("starting year greater than ending year"));