Module Name:    src
Committed By:   christos
Date:           Wed Mar  6 18:19:07 UTC 2013

Modified Files:
        src/lib/libc/time: zic.c

Log Message:
- change zic_t to intmax_t and friends suggested by apb
- change long to zic_t suggested by Paul Eggert
- remove unused constants


To generate a diff of this commit:
cvs rdiff -u -r1.37 -r1.38 src/lib/libc/time/zic.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libc/time/zic.c
diff -u src/lib/libc/time/zic.c:1.37 src/lib/libc/time/zic.c:1.38
--- src/lib/libc/time/zic.c:1.37	Mon Mar  4 16:18:51 2013
+++ src/lib/libc/time/zic.c	Wed Mar  6 13:19:07 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: zic.c,v 1.37 2013/03/04 21:18:51 joerg Exp $	*/
+/*	$NetBSD: zic.c,v 1.38 2013/03/06 18:19:07 christos Exp $	*/
 /*
 ** This file is in the public domain, so clarified as of
 ** 2006-07-17 by Arthur David Olson.
@@ -10,7 +10,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: zic.c,v 1.37 2013/03/04 21:18:51 joerg Exp $");
+__RCSID("$NetBSD: zic.c,v 1.38 2013/03/06 18:19:07 christos Exp $");
 #endif /* !defined lint */
 
 #include "version.h"
@@ -20,7 +20,11 @@ __RCSID("$NetBSD: zic.c,v 1.37 2013/03/0
 
 #define	ZIC_VERSION	'2'
 
-typedef int_fast64_t	zic_t;
+typedef intmax_t	zic_t;
+#define TIME_T_BITS_IN_FILE	64
+static const zic_t min_time = INTMAX_MIN;
+static const zic_t max_time = INTMAX_MAX;
+
 
 #ifndef ZIC_MAX_ABBR_LEN_WO_WARN
 #define ZIC_MAX_ABBR_LEN_WO_WARN	6
@@ -50,9 +54,6 @@ typedef int_fast64_t	zic_t;
 #define isascii(x) 1
 #endif
 
-#define OFFSET_STRLEN_MAXIMUM	(7 + INT_STRLEN_MAXIMUM(long))
-#define RULE_STRLEN_MAXIMUM	8	/* "Mdd.dd.d" */
-
 #define end(cp)	(strchr((cp), '\0'))
 
 struct rule {
@@ -72,12 +73,12 @@ struct rule {
 	int		r_dayofmonth;
 	int		r_wday;
 
-	long		r_tod;		/* time from midnight */
+	zic_t		r_tod;		/* time from midnight */
 	int		r_todisstd;	/* above is standard time if TRUE */
 					/* or wall clock time if FALSE */
 	int		r_todisgmt;	/* above is GMT if TRUE */
 					/* or local time if FALSE */
-	long		r_stdoff;	/* offset from standard time */
+	zic_t		r_stdoff;	/* offset from standard time */
 	const char *	r_abbrvar;	/* variable part of abbreviation */
 
 	int		r_todo;		/* a rule to do (used in outzone) */
@@ -97,11 +98,11 @@ struct zone {
 	int		z_linenum;
 
 	const char *	z_name;
-	long		z_gmtoff;
+	zic_t		z_gmtoff;
 	const char *	z_rule;
 	const char *	z_format;
 
-	long		z_stdoff;
+	zic_t		z_stdoff;
 
 	struct rule *	z_rules;
 	int		z_nrules;
@@ -117,15 +118,15 @@ extern char *	optarg;
 extern int	optind;
 
 static void	addtt(zic_t starttime, int type);
-static int	addtype(long gmtoff, const char * abbr, int isdst,
+static int	addtype(zic_t gmtoff, const char * abbr, int isdst,
 				int ttisstd, int ttisgmt);
 static void	leapadd(zic_t t, int positive, int rolling, int count);
 static void	adjleap(void);
 static void	associate(void);
 static void	dolink(const char * fromfield, const char * tofield);
-static long	eitol(int i);
+static zic_t	eitol(int i);
 static char **	getfields(char * buf);
-static long	gethms(const char * string, const char * errstrng,
+static zic_t	gethms(const char * string, const char * errstrng,
 			int signable);
 static void	infile(const char * filename);
 static void	inleap(char ** fields, int nfields);
@@ -139,7 +140,7 @@ static int	lowerit(int c);
 int		main(int, char **);
 static int	mkdirs(char * filename);
 static void	newabbr(const char * abbr);
-static long	oadd(long t1, long t2);
+static zic_t	oadd(zic_t t1, zic_t t2);
 static void	outzone(const struct zone * zp, int ntzones);
 static int	rcomp(const void * leftp, const void * rightp);
 static zic_t	rpytime(const struct rule * rp, int wantedy);
@@ -147,7 +148,7 @@ static void	rulesub(struct rule * rp,
 			const char * loyearp, const char * hiyearp,
 			const char * typep, const char * monthp,
 			const char * dayp, const char * timep);
-static zic_t	tadd(zic_t t1, long t2);
+static zic_t	tadd(zic_t t1, zic_t t2);
 static int	yearistype(int year, const char * type);
 static int	atcomp(const void *avp, const void *bvp);
 static void	updateminmax(int x);
@@ -354,14 +355,14 @@ static struct attype {
 	zic_t		at;
 	unsigned char	type;
 }			attypes[TZ_MAX_TIMES];
-static long		gmtoffs[TZ_MAX_TYPES];
+static zic_t		gmtoffs[TZ_MAX_TYPES];
 static char		isdsts[TZ_MAX_TYPES];
 static unsigned char	abbrinds[TZ_MAX_TYPES];
 static char		ttisstds[TZ_MAX_TYPES];
 static char		ttisgmts[TZ_MAX_TYPES];
 static char		chars[TZ_MAX_CHARS];
 static zic_t		trans[TZ_MAX_LEAPS];
-static long		corr[TZ_MAX_LEAPS];
+static zic_t		corr[TZ_MAX_LEAPS];
 static char		roll[TZ_MAX_LEAPS];
 
 /*
@@ -659,10 +660,6 @@ warning(_("hard link failed, symbolic li
 	free(toname);
 }
 
-#define TIME_T_BITS_IN_FILE	64
-static const zic_t min_time = (zic_t) -1 << (TIME_T_BITS_IN_FILE - 1);
-static const zic_t max_time = -1 - ((zic_t) -1 << (TIME_T_BITS_IN_FILE - 1));
-
 static int
 itsdir(const char *const name)
 {
@@ -795,7 +792,7 @@ infile(const char *name)
 			break;
 		cp = strchr(buf, '\n');
 		if (cp == NULL) {
-			error(_("line too long"));
+			error(_("line too zic_t"));
 			exit(EXIT_FAILURE);
 		}
 		*cp = '\0';
@@ -869,10 +866,11 @@ _("%s: panic: Invalid l_value %d\n"),
 ** Call error with errstring and return zero on errors.
 */
 
-static long
+static zic_t
 gethms(const char *string, const char *const errstring, const int signable)
 {
-	long	hh;
+	long 	lhh;
+	zic_t	hh;
 	int	mm, ss, sign;
 
 	if (string == NULL || *string == '\0')
@@ -883,15 +881,16 @@ gethms(const char *string, const char *c
 		sign = -1;
 		++string;
 	} else	sign = 1;
-	if (sscanf(string, scheck(string, "%ld"), &hh) == 1)
+	if (sscanf(string, scheck(string, "%ld"), &lhh) == 1)
 		mm = ss = 0;
-	else if (sscanf(string, scheck(string, "%ld:%d"), &hh, &mm) == 2)
+	else if (sscanf(string, scheck(string, "%ld:%d"), &lhh, &mm) == 2)
 		ss = 0;
 	else if (sscanf(string, scheck(string, "%ld:%d:%d"),
-		&hh, &mm, &ss) != 3) {
+		&lhh, &mm, &ss) != 3) {
 			error(errstring);
 			return 0;
 	}
+	hh = lhh;
 	if (hh < 0 ||
 		mm < 0 || mm >= MINSPERHOUR ||
 		ss < 0 || ss > SECSPERMIN) {
@@ -1074,7 +1073,7 @@ inleap(char **const fields, const int nf
 	const struct lookup *	lp;
 	int			i, j;
 	int				year, month, day;
-	long				dayoff, tod;
+	zic_t				dayoff, tod;
 	zic_t				t;
 
 	if (nfields != LEAP_FIELDS) {
@@ -1341,7 +1340,7 @@ rulesub(struct rule *const rp, const cha
 }
 
 static void
-convert(const long val, char *const buf)
+convert(const zic_t val, char *const buf)
 {
 	int	i;
 	int	shift;
@@ -1363,7 +1362,7 @@ convert64(const zic_t val, char *const b
 }
 
 static void
-puttzcode(const long val, FILE *const fp)
+puttzcode(const zic_t val, FILE *const fp)
 {
 	char	buf[4];
 
@@ -1680,7 +1679,7 @@ writezone(const char *const name, const 
 				todo = tadd(trans[i], -gmtoffs[j]);
 			} else	todo = trans[i];
 			if (pass == 1)
-				puttzcode((long) todo, fp);
+				puttzcode((zic_t) todo, fp);
 			else	puttzcode64(todo, fp);
 			puttzcode(corr[i], fp);
 		}
@@ -1745,7 +1744,7 @@ updateminmax(const int x)
 }
 
 static int
-stringoffset(char *result, long offset)
+stringoffset(char *result, zic_t offset)
 {
 	int	hours;
 	int	minutes;
@@ -1775,10 +1774,10 @@ stringoffset(char *result, long offset)
 }
 
 static int
-stringrule(char *result, const struct rule *const rp, const long dstoff,
-    const long gmtoff)
+stringrule(char *result, const struct rule *const rp, const zic_t dstoff,
+    const zic_t gmtoff)
 {
-	long	tod;
+	zic_t	tod;
 
 	result = end(result);
 	if (rp->r_dycode == DC_DOM) {
@@ -1918,10 +1917,10 @@ outzone(const struct zone *const zpfirst
 	int			i, j;
 	int			usestart, useuntil;
 	zic_t			starttime, untiltime;
-	long			gmtoff;
-	long			stdoff;
+	zic_t			gmtoff;
+	zic_t			stdoff;
 	int			year;
-	long			startoff;
+	zic_t			startoff;
 	int			startttisstd;
 	int			startttisgmt;
 	int			type;
@@ -2054,7 +2053,7 @@ outzone(const struct zone *const zpfirst
 			for ( ; ; ) {
 				int	k;
 				zic_t	jtime, ktime;
-				long	offset;
+				zic_t	offset;
 
 				INITIALIZE(ktime);
 				if (useuntil) {
@@ -2200,7 +2199,7 @@ addtt(const zic_t starttime, int type)
 }
 
 static int
-addtype(const long gmtoff, const char *const abbr, const int isdst,
+addtype(const zic_t gmtoff, const char *const abbr, const int isdst,
     const int ttisstd, const int ttisgmt)
 {
 	int	i, j;
@@ -2289,7 +2288,7 @@ static void
 adjleap(void)
 {
 	int	i;
-	long	last = 0;
+	zic_t	last = 0;
 
 	/*
 	** propagate leap seconds forward
@@ -2422,8 +2421,8 @@ getfields(char *cp)
 	return array;
 }
 
-static __pure long
-oadd(const long t1, const long t2)
+static __pure zic_t
+oadd(const zic_t t1, const zic_t t2)
 {
 	if (t1 < 0 ? t2 < LONG_MIN - t1 : LONG_MAX - t1 < t2) {
 		error(_("time overflow"));
@@ -2433,7 +2432,7 @@ oadd(const long t1, const long t2)
 }
 
 static zic_t
-tadd(const zic_t t1, const long t2)
+tadd(const zic_t t1, const zic_t t2)
 {
 	if (t1 == max_time && t2 > 0)
 		return max_time;
@@ -2455,7 +2454,7 @@ static zic_t
 rpytime(const struct rule *const rp, const int wantedy)
 {
 	int	y, m, i;
-	long	dayoff;			/* with a nod to Margaret O. */
+	zic_t	dayoff;			/* with a nod to Margaret O. */
 	zic_t	t;
 
 	if (wantedy == INT_MIN)
@@ -2492,9 +2491,9 @@ rpytime(const struct rule *const rp, con
 	--i;
 	dayoff = oadd(dayoff, eitol(i));
 	if (rp->r_dycode == DC_DOWGEQ || rp->r_dycode == DC_DOWLEQ) {
-		long	wday;
+		zic_t	wday;
 
-#define LDAYSPERWEEK	((long) DAYSPERWEEK)
+#define LDAYSPERWEEK	((zic_t) DAYSPERWEEK)
 		wday = eitol(EPOCH_WDAY);
 		/*
 		** Don't trust mod of negative numbers.
@@ -2508,12 +2507,12 @@ rpytime(const struct rule *const rp, con
 		}
 		while (wday != eitol(rp->r_wday))
 			if (rp->r_dycode == DC_DOWGEQ) {
-				dayoff = oadd(dayoff, (long) 1);
+				dayoff = oadd(dayoff, (zic_t) 1);
 				if (++wday >= LDAYSPERWEEK)
 					wday = 0;
 				++i;
 			} else {
-				dayoff = oadd(dayoff, (long) -1);
+				dayoff = oadd(dayoff, (zic_t) -1);
 				if (--wday < 0)
 					wday = LDAYSPERWEEK - 1;
 				--i;
@@ -2577,7 +2576,7 @@ mp = _("time zone abbreviation differs f
 	}
 	i = strlen(string) + 1;
 	if (charcnt + i > TZ_MAX_CHARS) {
-		error(_("too many, or too long, time zone abbreviations"));
+		error(_("too many, or too zic_t, time zone abbreviations"));
 		exit(EXIT_FAILURE);
 	}
 	(void)strncpy(&chars[charcnt], string, sizeof(chars) - charcnt - 1);
@@ -2630,10 +2629,10 @@ _("%s: Can't create directory %s: %s\n")
 	return 0;
 }
 
-static long
+static zic_t
 eitol(const int i)
 {
-	long	l;
+	zic_t	l;
 
 	l = i;
 	if ((i < 0 && l >= 0) || (i == 0 && l != 0) || (i > 0 && l <= 0)) {

Reply via email to