|
|
@@ -110,17 +110,8 @@ static int addtype(long gmtoff, const char * abbr, int isdst,
|
|
|
static void leapadd(zic_t t, int positive, int rolling, int count);
|
|
|
static void adjleap(void);
|
|
|
static void associate(void);
|
|
|
-static int ciequal(const char * ap, const char * bp);
|
|
|
-static void convert(long val, char * buf);
|
|
|
-static void convert64(zic_t val, char * buf);
|
|
|
static void dolink(const char * fromfield, const char * tofield);
|
|
|
-static void doabbr(char * abbr, const char * format,
|
|
|
- const char * letters, int isdst, int doquotes);
|
|
|
-static void eat(const char * name, int num);
|
|
|
-static void eats(const char * name, int num,
|
|
|
- const char * rname, int rnum);
|
|
|
static long eitol(int i);
|
|
|
-static void error(const char * message);
|
|
|
static char ** getfields(char * buf);
|
|
|
static long gethms(const char * string, const char * errstrng,
|
|
|
int signable);
|
|
|
@@ -131,32 +122,18 @@ static void inrule(char ** fields, int nfields);
|
|
|
static int inzcont(char ** fields, int nfields);
|
|
|
static int inzone(char ** fields, int nfields);
|
|
|
static int inzsub(char ** fields, int nfields, int iscont);
|
|
|
-static int is32(zic_t x);
|
|
|
-static int itsabbr(const char * abbr, const char * word);
|
|
|
static int itsdir(const char * name);
|
|
|
static int lowerit(int c);
|
|
|
-static char * memcheck(char * tocheck);
|
|
|
static int mkdirs(char * filename);
|
|
|
static void newabbr(const char * abbr);
|
|
|
static long oadd(long t1, long t2);
|
|
|
static void outzone(const struct zone * zp, int ntzones);
|
|
|
-static void puttzcode(long code, FILE * fp);
|
|
|
-static void puttzcode64(zic_t code, FILE * fp);
|
|
|
-static int rcomp(const void * leftp, const void * rightp);
|
|
|
static zic_t rpytime(const struct rule * rp, int wantedy);
|
|
|
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 int stringoffset(char * result, long offset);
|
|
|
-static int stringrule(char * result, const struct rule * rp,
|
|
|
- long dstoff, long gmtoff);
|
|
|
-static void stringzone(char * result,
|
|
|
- const struct zone * zp, int ntzones);
|
|
|
-static void setboundaries(void);
|
|
|
static zic_t tadd(zic_t t1, long t2);
|
|
|
-static void usage(FILE *stream, int status);
|
|
|
-static void writezone(const char * name, const char * string);
|
|
|
static int yearistype(int year, const char * type);
|
|
|
|
|
|
static int charcnt;
|
|
|
@@ -169,9 +146,7 @@ static int leapmaxyear;
|
|
|
static int linenum;
|
|
|
static int max_abbrvar_len;
|
|
|
static int max_format_len;
|
|
|
-static zic_t max_time;
|
|
|
static int max_year;
|
|
|
-static zic_t min_time;
|
|
|
static int min_year;
|
|
|
static int noise;
|
|
|
static const char * rfilename;
|
|
|
@@ -377,9 +352,8 @@ static char roll[TZ_MAX_LEAPS];
|
|
|
** Memory allocation.
|
|
|
*/
|
|
|
|
|
|
-static char *
|
|
|
-memcheck(ptr)
|
|
|
-char * const ptr;
|
|
|
+static ATTRIBUTE_PURE void *
|
|
|
+memcheck(void *const ptr)
|
|
|
{
|
|
|
if (ptr == NULL) {
|
|
|
const char *e = strerror(errno);
|
|
|
@@ -391,8 +365,8 @@ char * const ptr;
|
|
|
return ptr;
|
|
|
}
|
|
|
|
|
|
-#define emalloc(size) memcheck(imalloc(size))
|
|
|
-#define erealloc(ptr, size) memcheck(irealloc((ptr), (size)))
|
|
|
+#define emalloc(size) memcheck(malloc(size))
|
|
|
+#define erealloc(ptr, size) memcheck(realloc(ptr, size))
|
|
|
#define ecpyalloc(ptr) memcheck(icpyalloc(ptr))
|
|
|
#define ecatalloc(oldp, newp) memcheck(icatalloc((oldp), (newp)))
|
|
|
|
|
|
@@ -401,11 +375,8 @@ char * const ptr;
|
|
|
*/
|
|
|
|
|
|
static void
|
|
|
-eats(name, num, rname, rnum)
|
|
|
-const char * const name;
|
|
|
-const int num;
|
|
|
-const char * const rname;
|
|
|
-const int rnum;
|
|
|
+eats(const char *const name, const int num, const char *const rname,
|
|
|
+ const int rnum)
|
|
|
{
|
|
|
filename = name;
|
|
|
linenum = num;
|
|
|
@@ -414,16 +385,13 @@ const int rnum;
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-eat(name, num)
|
|
|
-const char * const name;
|
|
|
-const int num;
|
|
|
+eat(const char *const name, const int num)
|
|
|
{
|
|
|
- eats(name, num, (char *) NULL, -1);
|
|
|
+ eats(name, num, NULL, -1);
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-error(string)
|
|
|
-const char * const string;
|
|
|
+error(const char *const string)
|
|
|
{
|
|
|
/*
|
|
|
** Match the format of "cc" to allow sh users to
|
|
|
@@ -440,15 +408,14 @@ const char * const string;
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-warning(string)
|
|
|
-const char * const string;
|
|
|
+warning(const char *const string)
|
|
|
{
|
|
|
char * cp;
|
|
|
|
|
|
cp = ecpyalloc(_("warning: "));
|
|
|
cp = ecatalloc(cp, string);
|
|
|
error(cp);
|
|
|
- ifree(cp);
|
|
|
+ free(cp);
|
|
|
--errors;
|
|
|
}
|
|
|
|
|
|
@@ -471,9 +438,7 @@ static const char * leapsec;
|
|
|
static const char * yitcommand;
|
|
|
|
|
|
int
|
|
|
-main(argc, argv)
|
|
|
-int argc;
|
|
|
-char * argv[];
|
|
|
+main(int argc, char **argv)
|
|
|
{
|
|
|
register int i;
|
|
|
register int j;
|
|
|
@@ -570,8 +535,6 @@ _("%s: More than one -L option specified\n"),
|
|
|
if (yitcommand == NULL)
|
|
|
yitcommand = "yearistype";
|
|
|
|
|
|
- setboundaries();
|
|
|
-
|
|
|
if (optind < argc && leapsec != NULL) {
|
|
|
infile(leapsec);
|
|
|
adjleap();
|
|
|
@@ -614,9 +577,7 @@ _("%s: More than one -L option specified\n"),
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-dolink(fromfield, tofield)
|
|
|
-const char * const fromfield;
|
|
|
-const char * const tofield;
|
|
|
+dolink(const char *const fromfield, const char *const tofield)
|
|
|
{
|
|
|
register char * fromname;
|
|
|
register char * toname;
|
|
|
@@ -666,7 +627,7 @@ const char * const tofield;
|
|
|
toname);
|
|
|
if (result == 0)
|
|
|
warning(_("hard link failed, symbolic link used"));
|
|
|
- ifree(symlinkcontents);
|
|
|
+ free(symlinkcontents);
|
|
|
}
|
|
|
#endif /* HAVE_SYMLINK */
|
|
|
if (result != 0) {
|
|
|
@@ -678,26 +639,17 @@ warning(_("hard link failed, symbolic link used"));
|
|
|
exit(EXIT_FAILURE);
|
|
|
}
|
|
|
}
|
|
|
- ifree(fromname);
|
|
|
- ifree(toname);
|
|
|
+ free(fromname);
|
|
|
+ free(toname);
|
|
|
}
|
|
|
|
|
|
#define TIME_T_BITS_IN_FILE 64
|
|
|
|
|
|
-static void
|
|
|
-setboundaries(void)
|
|
|
-{
|
|
|
- register int i;
|
|
|
-
|
|
|
- min_time = -1;
|
|
|
- for (i = 0; i < TIME_T_BITS_IN_FILE - 1; ++i)
|
|
|
- min_time *= 2;
|
|
|
- max_time = -(min_time + 1);
|
|
|
-}
|
|
|
+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(name)
|
|
|
-const char * const name;
|
|
|
+itsdir(const char *const name)
|
|
|
{
|
|
|
register char * myname;
|
|
|
register int accres;
|
|
|
@@ -705,7 +657,7 @@ const char * const name;
|
|
|
myname = ecpyalloc(name);
|
|
|
myname = ecatalloc(myname, "/.");
|
|
|
accres = access(myname, F_OK);
|
|
|
- ifree(myname);
|
|
|
+ free(myname);
|
|
|
return accres == 0;
|
|
|
}
|
|
|
|
|
|
@@ -718,9 +670,7 @@ const char * const name;
|
|
|
*/
|
|
|
|
|
|
static int
|
|
|
-rcomp(cp1, cp2)
|
|
|
-const void * cp1;
|
|
|
-const void * cp2;
|
|
|
+rcomp(const void *cp1, const void *cp2)
|
|
|
{
|
|
|
return strcmp(((const struct rule *) cp1)->r_name,
|
|
|
((const struct rule *) cp2)->r_name);
|
|
|
@@ -735,8 +685,7 @@ associate(void)
|
|
|
register int i, j;
|
|
|
|
|
|
if (nrules != 0) {
|
|
|
- (void) qsort((void *) rules, (size_t) nrules,
|
|
|
- (size_t) sizeof *rules, rcomp);
|
|
|
+ (void) qsort(rules, nrules, sizeof *rules, rcomp);
|
|
|
for (i = 0; i < nrules - 1; ++i) {
|
|
|
if (strcmp(rules[i].r_name,
|
|
|
rules[i + 1].r_name) != 0)
|
|
|
@@ -803,8 +752,7 @@ associate(void)
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-infile(name)
|
|
|
-const char * name;
|
|
|
+infile(const char *name)
|
|
|
{
|
|
|
register FILE * fp;
|
|
|
register char ** fields;
|
|
|
@@ -828,7 +776,7 @@ const char * name;
|
|
|
wantcont = FALSE;
|
|
|
for (num = 1; ; ++num) {
|
|
|
eat(name, num);
|
|
|
- if (fgets(buf, (int) sizeof buf, fp) != buf)
|
|
|
+ if (fgets(buf, sizeof buf, fp) != buf)
|
|
|
break;
|
|
|
cp = strchr(buf, '\n');
|
|
|
if (cp == NULL) {
|
|
|
@@ -880,7 +828,7 @@ _("%s: panic: Invalid l_value %d\n"),
|
|
|
exit(EXIT_FAILURE);
|
|
|
}
|
|
|
}
|
|
|
- ifree((char *) fields);
|
|
|
+ free(fields);
|
|
|
}
|
|
|
if (ferror(fp)) {
|
|
|
(void) fprintf(stderr, _("%s: Error reading %s\n"),
|
|
|
@@ -907,10 +855,7 @@ _("%s: panic: Invalid l_value %d\n"),
|
|
|
*/
|
|
|
|
|
|
static long
|
|
|
-gethms(string, errstring, signable)
|
|
|
-const char * string;
|
|
|
-const char * const errstring;
|
|
|
-const int signable;
|
|
|
+gethms(const char *string, const char *const errstring, const int signable)
|
|
|
{
|
|
|
long hh;
|
|
|
int mm, ss, sign;
|
|
|
@@ -952,9 +897,7 @@ warning(_("values over 24 hours not handled by pre-2007 versions of zic"));
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-inrule(fields, nfields)
|
|
|
-register char ** const fields;
|
|
|
-const int nfields;
|
|
|
+inrule(register char **const fields, const int nfields)
|
|
|
{
|
|
|
static struct rule r;
|
|
|
|
|
|
@@ -975,15 +918,12 @@ const int nfields;
|
|
|
r.r_abbrvar = ecpyalloc(fields[RF_ABBRVAR]);
|
|
|
if (max_abbrvar_len < strlen(r.r_abbrvar))
|
|
|
max_abbrvar_len = strlen(r.r_abbrvar);
|
|
|
- rules = (struct rule *) (void *) erealloc((char *) rules,
|
|
|
- (int) ((nrules + 1) * sizeof *rules));
|
|
|
+ rules = erealloc(rules, (nrules + 1) * sizeof *rules);
|
|
|
rules[nrules++] = r;
|
|
|
}
|
|
|
|
|
|
static int
|
|
|
-inzone(fields, nfields)
|
|
|
-register char ** const fields;
|
|
|
-const int nfields;
|
|
|
+inzone(register char **const fields, const int nfields)
|
|
|
{
|
|
|
register int i;
|
|
|
static char * buf;
|
|
|
@@ -993,7 +933,7 @@ const int nfields;
|
|
|
return FALSE;
|
|
|
}
|
|
|
if (strcmp(fields[ZF_NAME], TZDEFAULT) == 0 && lcltime != NULL) {
|
|
|
- buf = erealloc(buf, (int) (132 + strlen(TZDEFAULT)));
|
|
|
+ buf = erealloc(buf, 132 + strlen(TZDEFAULT));
|
|
|
(void) sprintf(buf,
|
|
|
_("\"Zone %s\" line and -l option are mutually exclusive"),
|
|
|
TZDEFAULT);
|
|
|
@@ -1001,7 +941,7 @@ _("\"Zone %s\" line and -l option are mutually exclusive"),
|
|
|
return FALSE;
|
|
|
}
|
|
|
if (strcmp(fields[ZF_NAME], TZDEFRULES) == 0 && psxrules != NULL) {
|
|
|
- buf = erealloc(buf, (int) (132 + strlen(TZDEFRULES)));
|
|
|
+ buf = erealloc(buf, 132 + strlen(TZDEFRULES));
|
|
|
(void) sprintf(buf,
|
|
|
_("\"Zone %s\" line and -p option are mutually exclusive"),
|
|
|
TZDEFRULES);
|
|
|
@@ -1011,9 +951,9 @@ _("\"Zone %s\" line and -p option are mutually exclusive"),
|
|
|
for (i = 0; i < nzones; ++i)
|
|
|
if (zones[i].z_name != NULL &&
|
|
|
strcmp(zones[i].z_name, fields[ZF_NAME]) == 0) {
|
|
|
- buf = erealloc(buf, (int) (132 +
|
|
|
- strlen(fields[ZF_NAME]) +
|
|
|
- strlen(zones[i].z_filename)));
|
|
|
+ buf = erealloc(buf,
|
|
|
+ (132 + strlen(fields[ZF_NAME])
|
|
|
+ + strlen(zones[i].z_filename)));
|
|
|
(void) sprintf(buf,
|
|
|
_("duplicate zone name %s (file \"%s\", line %d)"),
|
|
|
fields[ZF_NAME],
|
|
|
@@ -1026,9 +966,7 @@ _("duplicate zone name %s (file \"%s\", line %d)"),
|
|
|
}
|
|
|
|
|
|
static int
|
|
|
-inzcont(fields, nfields)
|
|
|
-register char ** const fields;
|
|
|
-const int nfields;
|
|
|
+inzcont(register char **const fields, const int nfields)
|
|
|
{
|
|
|
if (nfields < ZONEC_MINFIELDS || nfields > ZONEC_MAXFIELDS) {
|
|
|
error(_("wrong number of fields on Zone continuation line"));
|
|
|
@@ -1038,10 +976,7 @@ const int nfields;
|
|
|
}
|
|
|
|
|
|
static int
|
|
|
-inzsub(fields, nfields, iscont)
|
|
|
-register char ** const fields;
|
|
|
-const int nfields;
|
|
|
-const int iscont;
|
|
|
+inzsub(register char **const fields, const int nfields, const int iscont)
|
|
|
{
|
|
|
register char * cp;
|
|
|
static struct zone z;
|
|
|
@@ -1108,8 +1043,7 @@ const int iscont;
|
|
|
return FALSE;
|
|
|
}
|
|
|
}
|
|
|
- zones = (struct zone *) (void *) erealloc((char *) zones,
|
|
|
- (int) ((nzones + 1) * sizeof *zones));
|
|
|
+ zones = erealloc(zones, (nzones + 1) * sizeof *zones);
|
|
|
zones[nzones++] = z;
|
|
|
/*
|
|
|
** If there was an UNTIL field on this line,
|
|
|
@@ -1119,9 +1053,7 @@ const int iscont;
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-inleap(fields, nfields)
|
|
|
-register char ** const fields;
|
|
|
-const int nfields;
|
|
|
+inleap(register char ** const fields, const int nfields)
|
|
|
{
|
|
|
register const char * cp;
|
|
|
register const struct lookup * lp;
|
|
|
@@ -1223,9 +1155,7 @@ const int nfields;
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-inlink(fields, nfields)
|
|
|
-register char ** const fields;
|
|
|
-const int nfields;
|
|
|
+inlink(register char **const fields, const int nfields)
|
|
|
{
|
|
|
struct link l;
|
|
|
|
|
|
@@ -1245,20 +1175,18 @@ const int nfields;
|
|
|
l.l_linenum = linenum;
|
|
|
l.l_from = ecpyalloc(fields[LF_FROM]);
|
|
|
l.l_to = ecpyalloc(fields[LF_TO]);
|
|
|
- links = (struct link *) (void *) erealloc((char *) links,
|
|
|
- (int) ((nlinks + 1) * sizeof *links));
|
|
|
+ links = erealloc(links, (nlinks + 1) * sizeof *links);
|
|
|
links[nlinks++] = l;
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-rulesub(rp, loyearp, hiyearp, typep, monthp, dayp, timep)
|
|
|
-register struct rule * const rp;
|
|
|
-const char * const loyearp;
|
|
|
-const char * const hiyearp;
|
|
|
-const char * const typep;
|
|
|
-const char * const monthp;
|
|
|
-const char * const dayp;
|
|
|
-const char * const timep;
|
|
|
+rulesub(register struct rule *const rp,
|
|
|
+ const char *const loyearp,
|
|
|
+ const char *const hiyearp,
|
|
|
+ const char *const typep,
|
|
|
+ const char *const monthp,
|
|
|
+ const char *const dayp,
|
|
|
+ const char *const timep)
|
|
|
{
|
|
|
register const struct lookup * lp;
|
|
|
register const char * cp;
|
|
|
@@ -1296,7 +1224,7 @@ const char * const timep;
|
|
|
}
|
|
|
}
|
|
|
rp->r_tod = gethms(dp, _("invalid time of day"), FALSE);
|
|
|
- ifree(dp);
|
|
|
+ free(dp);
|
|
|
/*
|
|
|
** Year work.
|
|
|
*/
|
|
|
@@ -1380,12 +1308,12 @@ const char * const timep;
|
|
|
*ep++ = 0;
|
|
|
if (*ep++ != '=') {
|
|
|
error(_("invalid day of month"));
|
|
|
- ifree(dp);
|
|
|
+ free(dp);
|
|
|
return;
|
|
|
}
|
|
|
if ((lp = byword(dp, wday_names)) == NULL) {
|
|
|
error(_("invalid weekday name"));
|
|
|
- ifree(dp);
|
|
|
+ free(dp);
|
|
|
return;
|
|
|
}
|
|
|
rp->r_wday = lp->l_value;
|
|
|
@@ -1394,63 +1322,55 @@ const char * const timep;
|
|
|
rp->r_dayofmonth <= 0 ||
|
|
|
(rp->r_dayofmonth > len_months[1][rp->r_month])) {
|
|
|
error(_("invalid day of month"));
|
|
|
- ifree(dp);
|
|
|
+ free(dp);
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
- ifree(dp);
|
|
|
+ free(dp);
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-convert(val, buf)
|
|
|
-const long val;
|
|
|
-char * const buf;
|
|
|
+convert(const long val, char *const buf)
|
|
|
{
|
|
|
register int i;
|
|
|
register int shift;
|
|
|
+ unsigned char *const b = (unsigned char *) buf;
|
|
|
|
|
|
for (i = 0, shift = 24; i < 4; ++i, shift -= 8)
|
|
|
- buf[i] = val >> shift;
|
|
|
+ b[i] = val >> shift;
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-convert64(val, buf)
|
|
|
-const zic_t val;
|
|
|
-char * const buf;
|
|
|
+convert64(const zic_t val, char *const buf)
|
|
|
{
|
|
|
register int i;
|
|
|
register int shift;
|
|
|
+ unsigned char *const b = (unsigned char *) buf;
|
|
|
|
|
|
for (i = 0, shift = 56; i < 8; ++i, shift -= 8)
|
|
|
- buf[i] = val >> shift;
|
|
|
+ b[i] = val >> shift;
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-puttzcode(val, fp)
|
|
|
-const long val;
|
|
|
-FILE * const fp;
|
|
|
+puttzcode(const long val, FILE *const fp)
|
|
|
{
|
|
|
char buf[4];
|
|
|
|
|
|
convert(val, buf);
|
|
|
- (void) fwrite((void *) buf, (size_t) sizeof buf, (size_t) 1, fp);
|
|
|
+ (void) fwrite(buf, sizeof buf, 1, fp);
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-puttzcode64(val, fp)
|
|
|
-const zic_t val;
|
|
|
-FILE * const fp;
|
|
|
+puttzcode64(const zic_t val, FILE *const fp)
|
|
|
{
|
|
|
char buf[8];
|
|
|
|
|
|
convert64(val, buf);
|
|
|
- (void) fwrite((void *) buf, (size_t) sizeof buf, (size_t) 1, fp);
|
|
|
+ (void) fwrite(buf, sizeof buf, 1, fp);
|
|
|
}
|
|
|
|
|
|
static int
|
|
|
-atcomp(avp, bvp)
|
|
|
-const void * avp;
|
|
|
-const void * bvp;
|
|
|
+atcomp(const void *avp, const void *bvp)
|
|
|
{
|
|
|
const zic_t a = ((const struct attype *) avp)->at;
|
|
|
const zic_t b = ((const struct attype *) bvp)->at;
|
|
|
@@ -1459,16 +1379,13 @@ const void * bvp;
|
|
|
}
|
|
|
|
|
|
static int
|
|
|
-is32(x)
|
|
|
-const zic_t x;
|
|
|
+is32(const zic_t x)
|
|
|
{
|
|
|
return INT32_MIN <= x && x <= INT32_MAX;
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-writezone(name, string)
|
|
|
-const char * const name;
|
|
|
-const char * const string;
|
|
|
+writezone(const char *const name, const char *const string)
|
|
|
{
|
|
|
register FILE * fp;
|
|
|
register int i, j;
|
|
|
@@ -1485,8 +1402,7 @@ const char * const string;
|
|
|
** Sort.
|
|
|
*/
|
|
|
if (timecnt > 1)
|
|
|
- (void) qsort((void *) attypes, (size_t) timecnt,
|
|
|
- (size_t) sizeof *attypes, atcomp);
|
|
|
+ (void) qsort(attypes, timecnt, sizeof *attypes, atcomp);
|
|
|
/*
|
|
|
** Optimize.
|
|
|
*/
|
|
|
@@ -1554,7 +1470,7 @@ const char * const string;
|
|
|
++leapi32;
|
|
|
}
|
|
|
fullname = erealloc(fullname,
|
|
|
- (int) (strlen(directory) + 1 + strlen(name) + 1));
|
|
|
+ strlen(directory) + 1 + strlen(name) + 1);
|
|
|
(void) sprintf(fullname, "%s/%s", directory, name);
|
|
|
/*
|
|
|
** Remove old file, if any, to snap links.
|
|
|
@@ -1691,8 +1607,7 @@ const char * const string;
|
|
|
}
|
|
|
indmap[abbrinds[i]] = j;
|
|
|
}
|
|
|
-#define DO(field) (void) fwrite((void *) tzh.field, \
|
|
|
- (size_t) sizeof tzh.field, (size_t) 1, fp)
|
|
|
+#define DO(field) ((void) fwrite(tzh.field, sizeof tzh.field, 1, fp))
|
|
|
tzh = tzh0;
|
|
|
(void) strncpy(tzh.tzh_magic, TZ_MAGIC, sizeof tzh.tzh_magic);
|
|
|
tzh.tzh_version[0] = ZIC_VERSION;
|
|
|
@@ -1720,10 +1635,7 @@ const char * const string;
|
|
|
unsigned char uc;
|
|
|
|
|
|
uc = typemap[types[i]];
|
|
|
- (void) fwrite((void *) &uc,
|
|
|
- (size_t) sizeof uc,
|
|
|
- (size_t) 1,
|
|
|
- fp);
|
|
|
+ (void) fwrite(&uc, sizeof uc, 1, fp);
|
|
|
}
|
|
|
for (i = 0; i < typecnt; ++i)
|
|
|
if (writetype[i]) {
|
|
|
@@ -1732,9 +1644,8 @@ const char * const string;
|
|
|
(void) putc((unsigned char) indmap[abbrinds[i]], fp);
|
|
|
}
|
|
|
if (thischarcnt != 0)
|
|
|
- (void) fwrite((void *) thischars,
|
|
|
- (size_t) sizeof thischars[0],
|
|
|
- (size_t) thischarcnt, fp);
|
|
|
+ (void) fwrite(thischars, sizeof thischars[0],
|
|
|
+ thischarcnt, fp);
|
|
|
for (i = thisleapi; i < thisleaplim; ++i) {
|
|
|
register zic_t todo;
|
|
|
|
|
|
@@ -1756,7 +1667,7 @@ const char * const string;
|
|
|
todo = tadd(trans[i], -gmtoffs[j]);
|
|
|
} else todo = trans[i];
|
|
|
if (pass == 1)
|
|
|
- puttzcode((long) todo, fp);
|
|
|
+ puttzcode(todo, fp);
|
|
|
else puttzcode64(todo, fp);
|
|
|
puttzcode(corr[i], fp);
|
|
|
}
|
|
|
@@ -1776,12 +1687,8 @@ const char * const string;
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-doabbr(abbr, format, letters, isdst, doquotes)
|
|
|
-char * const abbr;
|
|
|
-const char * const format;
|
|
|
-const char * const letters;
|
|
|
-const int isdst;
|
|
|
-const int doquotes;
|
|
|
+doabbr(char *const abbr, const char *const format, const char *const letters,
|
|
|
+ const int isdst, const int doquotes)
|
|
|
{
|
|
|
register char * cp;
|
|
|
register char * slashp;
|
|
|
@@ -1796,8 +1703,7 @@ const int doquotes;
|
|
|
(void) strcpy(abbr, slashp + 1);
|
|
|
} else {
|
|
|
if (slashp > format)
|
|
|
- (void) strncpy(abbr, format,
|
|
|
- (unsigned) (slashp - format));
|
|
|
+ (void) strncpy(abbr, format, slashp - format);
|
|
|
abbr[slashp - format] = '\0';
|
|
|
}
|
|
|
if (!doquotes)
|
|
|
@@ -1817,8 +1723,7 @@ const int doquotes;
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-updateminmax(x)
|
|
|
-const int x;
|
|
|
+updateminmax(const int x)
|
|
|
{
|
|
|
if (min_year > x)
|
|
|
min_year = x;
|
|
|
@@ -1827,9 +1732,7 @@ const int x;
|
|
|
}
|
|
|
|
|
|
static int
|
|
|
-stringoffset(result, offset)
|
|
|
-char * result;
|
|
|
-long offset;
|
|
|
+stringoffset(char *result, long offset)
|
|
|
{
|
|
|
register int hours;
|
|
|
register int minutes;
|
|
|
@@ -1859,11 +1762,8 @@ long offset;
|
|
|
}
|
|
|
|
|
|
static int
|
|
|
-stringrule(result, rp, dstoff, gmtoff)
|
|
|
-char * result;
|
|
|
-const struct rule * const rp;
|
|
|
-const long dstoff;
|
|
|
-const long gmtoff;
|
|
|
+stringrule(char *result, const struct rule *const rp, const long dstoff,
|
|
|
+ const long gmtoff)
|
|
|
{
|
|
|
register long tod;
|
|
|
|
|
|
@@ -1914,10 +1814,7 @@ const long gmtoff;
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-stringzone(result, zpfirst, zonecount)
|
|
|
-char * result;
|
|
|
-const struct zone * const zpfirst;
|
|
|
-const int zonecount;
|
|
|
+stringzone(char *result, const struct zone *const zpfirst, const int zonecount)
|
|
|
{
|
|
|
register const struct zone * zp;
|
|
|
register struct rule * rp;
|
|
|
@@ -1997,9 +1894,7 @@ const int zonecount;
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-outzone(zpfirst, zonecount)
|
|
|
-const struct zone * const zpfirst;
|
|
|
-const int zonecount;
|
|
|
+outzone(const struct zone * const zpfirst, const int zonecount)
|
|
|
{
|
|
|
register const struct zone * zp;
|
|
|
register struct rule * rp;
|
|
|
@@ -2070,7 +1965,7 @@ wp = ecpyalloc(_("no POSIX environment variable for zone"));
|
|
|
wp = ecatalloc(wp, " ");
|
|
|
wp = ecatalloc(wp, zpfirst->z_name);
|
|
|
warning(wp);
|
|
|
- ifree(wp);
|
|
|
+ free(wp);
|
|
|
}
|
|
|
if (envvar[0] == '\0') {
|
|
|
if (min_year >= INT_MIN + YEARSPERREPEAT)
|
|
|
@@ -2115,7 +2010,7 @@ wp = ecpyalloc(_("no POSIX environment variable for zone"));
|
|
|
if (zp->z_nrules == 0) {
|
|
|
stdoff = zp->z_stdoff;
|
|
|
doabbr(startbuf, zp->z_format,
|
|
|
- (char *) NULL, stdoff != 0, FALSE);
|
|
|
+ NULL, stdoff != 0, FALSE);
|
|
|
type = addtype(oadd(zp->z_gmtoff, stdoff),
|
|
|
startbuf, stdoff != 0, startttisstd,
|
|
|
startttisgmt);
|
|
|
@@ -2254,15 +2149,13 @@ error(_("can't determine time zone abbreviation to use just after until time"));
|
|
|
}
|
|
|
}
|
|
|
writezone(zpfirst->z_name, envvar);
|
|
|
- ifree(startbuf);
|
|
|
- ifree(ab);
|
|
|
- ifree(envvar);
|
|
|
+ free(startbuf);
|
|
|
+ free(ab);
|
|
|
+ free(envvar);
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-addtt(starttime, type)
|
|
|
-const zic_t starttime;
|
|
|
-int type;
|
|
|
+addtt(const zic_t starttime, int type)
|
|
|
{
|
|
|
if (starttime <= min_time ||
|
|
|
(timecnt == 1 && attypes[0].at < min_time)) {
|
|
|
@@ -2288,12 +2181,8 @@ int type;
|
|
|
}
|
|
|
|
|
|
static int
|
|
|
-addtype(gmtoff, abbr, isdst, ttisstd, ttisgmt)
|
|
|
-const long gmtoff;
|
|
|
-const char * const abbr;
|
|
|
-const int isdst;
|
|
|
-const int ttisstd;
|
|
|
-const int ttisgmt;
|
|
|
+addtype(const long gmtoff, const char *const abbr, const int isdst,
|
|
|
+ const int ttisstd, const int ttisgmt)
|
|
|
{
|
|
|
register int i, j;
|
|
|
|
|
|
@@ -2348,11 +2237,7 @@ const int ttisgmt;
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-leapadd(t, positive, rolling, count)
|
|
|
-const zic_t t;
|
|
|
-const int positive;
|
|
|
-const int rolling;
|
|
|
-int count;
|
|
|
+leapadd(const zic_t t, const int positive, const int rolling, int count)
|
|
|
{
|
|
|
register int i, j;
|
|
|
|
|
|
@@ -2397,16 +2282,14 @@ adjleap(void)
|
|
|
}
|
|
|
|
|
|
static int
|
|
|
-yearistype(year, type)
|
|
|
-const int year;
|
|
|
-const char * const type;
|
|
|
+yearistype(const int year, const char *const type)
|
|
|
{
|
|
|
static char * buf;
|
|
|
int result;
|
|
|
|
|
|
if (type == NULL || *type == '\0')
|
|
|
return TRUE;
|
|
|
- buf = erealloc(buf, (int) (132 + strlen(yitcommand) + strlen(type)));
|
|
|
+ buf = erealloc(buf, 132 + strlen(yitcommand) + strlen(type));
|
|
|
(void) sprintf(buf, "%s %d %s", yitcommand, year, type);
|
|
|
result = system(buf);
|
|
|
if (WIFEXITED(result)) switch (WEXITSTATUS(result)) {
|
|
|
@@ -2423,17 +2306,15 @@ const char * const type;
|
|
|
}
|
|
|
|
|
|
static int
|
|
|
-lowerit(a)
|
|
|
-int a;
|
|
|
+lowerit(int a)
|
|
|
{
|
|
|
a = (unsigned char) a;
|
|
|
return (isascii(a) && isupper(a)) ? tolower(a) : a;
|
|
|
}
|
|
|
|
|
|
-static int
|
|
|
-ciequal(ap, bp) /* case-insensitive equality */
|
|
|
-register const char * ap;
|
|
|
-register const char * bp;
|
|
|
+/* case-insensitive equality */
|
|
|
+static ATTRIBUTE_PURE int
|
|
|
+ciequal(register const char *ap, register const char *bp)
|
|
|
{
|
|
|
while (lowerit(*ap) == lowerit(*bp++))
|
|
|
if (*ap++ == '\0')
|
|
|
@@ -2441,10 +2322,8 @@ register const char * bp;
|
|
|
return FALSE;
|
|
|
}
|
|
|
|
|
|
-static int
|
|
|
-itsabbr(abbr, word)
|
|
|
-register const char * abbr;
|
|
|
-register const char * word;
|
|
|
+static ATTRIBUTE_PURE int
|
|
|
+itsabbr(register const char *abbr, register const char *word)
|
|
|
{
|
|
|
if (lowerit(*abbr) != lowerit(*word))
|
|
|
return FALSE;
|
|
|
@@ -2457,10 +2336,9 @@ register const char * word;
|
|
|
return TRUE;
|
|
|
}
|
|
|
|
|
|
-static const struct lookup *
|
|
|
-byword(word, table)
|
|
|
-register const char * const word;
|
|
|
-register const struct lookup * const table;
|
|
|
+static ATTRIBUTE_PURE const struct lookup *
|
|
|
+byword(register const char *const word,
|
|
|
+ register const struct lookup *const table)
|
|
|
{
|
|
|
register const struct lookup * foundlp;
|
|
|
register const struct lookup * lp;
|
|
|
@@ -2487,8 +2365,7 @@ register const struct lookup * const table;
|
|
|
}
|
|
|
|
|
|
static char **
|
|
|
-getfields(cp)
|
|
|
-register char * cp;
|
|
|
+getfields(register char *cp)
|
|
|
{
|
|
|
register char * dp;
|
|
|
register char ** array;
|
|
|
@@ -2496,8 +2373,7 @@ register char * cp;
|
|
|
|
|
|
if (cp == NULL)
|
|
|
return NULL;
|
|
|
- array = (char **) (void *)
|
|
|
- emalloc((int) ((strlen(cp) + 1) * sizeof *array));
|
|
|
+ array = emalloc((strlen(cp) + 1) * sizeof *array);
|
|
|
nsubs = 0;
|
|
|
for ( ; ; ) {
|
|
|
while (isascii((unsigned char) *cp) &&
|
|
|
@@ -2528,38 +2404,28 @@ register char * cp;
|
|
|
return array;
|
|
|
}
|
|
|
|
|
|
-static long
|
|
|
-oadd(t1, t2)
|
|
|
-const long t1;
|
|
|
-const long t2;
|
|
|
+static ATTRIBUTE_PURE long
|
|
|
+oadd(const long t1, const long t2)
|
|
|
{
|
|
|
- register long t;
|
|
|
-
|
|
|
- t = t1 + t2;
|
|
|
- if ((t2 > 0 && t <= t1) || (t2 < 0 && t >= t1)) {
|
|
|
+ if (t1 < 0 ? t2 < LONG_MIN - t1 : LONG_MAX - t1 < t2) {
|
|
|
error(_("time overflow"));
|
|
|
exit(EXIT_FAILURE);
|
|
|
}
|
|
|
- return t;
|
|
|
+ return t1 + t2;
|
|
|
}
|
|
|
|
|
|
-static zic_t
|
|
|
-tadd(t1, t2)
|
|
|
-const zic_t t1;
|
|
|
-const long t2;
|
|
|
+static ATTRIBUTE_PURE zic_t
|
|
|
+tadd(const zic_t t1, const long t2)
|
|
|
{
|
|
|
- register zic_t t;
|
|
|
-
|
|
|
if (t1 == max_time && t2 > 0)
|
|
|
return max_time;
|
|
|
if (t1 == min_time && t2 < 0)
|
|
|
return min_time;
|
|
|
- t = t1 + t2;
|
|
|
- if ((t2 > 0 && t <= t1) || (t2 < 0 && t >= t1)) {
|
|
|
+ if (t1 < 0 ? t2 < min_time - t1 : max_time - t1 < t2) {
|
|
|
error(_("time overflow"));
|
|
|
exit(EXIT_FAILURE);
|
|
|
}
|
|
|
- return t;
|
|
|
+ return t1 + t2;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
@@ -2568,9 +2434,7 @@ const long t2;
|
|
|
*/
|
|
|
|
|
|
static zic_t
|
|
|
-rpytime(rp, wantedy)
|
|
|
-register const struct rule * const rp;
|
|
|
-register const int wantedy;
|
|
|
+rpytime(register const struct rule *const rp, register const int wantedy)
|
|
|
{
|
|
|
register int y, m, i;
|
|
|
register long dayoff; /* with a nod to Margaret O. */
|
|
|
@@ -2626,12 +2490,12 @@ register const int wantedy;
|
|
|
}
|
|
|
while (wday != eitol(rp->r_wday))
|
|
|
if (rp->r_dycode == DC_DOWGEQ) {
|
|
|
- dayoff = oadd(dayoff, (long) 1);
|
|
|
+ dayoff = oadd(dayoff, 1);
|
|
|
if (++wday >= LDAYSPERWEEK)
|
|
|
wday = 0;
|
|
|
++i;
|
|
|
} else {
|
|
|
- dayoff = oadd(dayoff, (long) -1);
|
|
|
+ dayoff = oadd(dayoff, -1);
|
|
|
if (--wday < 0)
|
|
|
wday = LDAYSPERWEEK - 1;
|
|
|
--i;
|
|
|
@@ -2651,31 +2515,30 @@ will not work with pre-2004 versions of zic"));
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-newabbr(string)
|
|
|
-const char * const string;
|
|
|
+newabbr(const char *const string)
|
|
|
{
|
|
|
register int i;
|
|
|
|
|
|
if (strcmp(string, GRANDPARENTED) != 0) {
|
|
|
register const char * cp;
|
|
|
- register char * wp;
|
|
|
+ const char * mp;
|
|
|
|
|
|
/*
|
|
|
** Want one to ZIC_MAX_ABBR_LEN_WO_WARN alphabetics
|
|
|
** optionally followed by a + or - and a number from 1 to 14.
|
|
|
*/
|
|
|
cp = string;
|
|
|
- wp = NULL;
|
|
|
+ mp = NULL;
|
|
|
while (isascii((unsigned char) *cp) &&
|
|
|
isalpha((unsigned char) *cp))
|
|
|
++cp;
|
|
|
if (cp - string == 0)
|
|
|
-wp = _("time zone abbreviation lacks alphabetic at start");
|
|
|
+mp = _("time zone abbreviation lacks alphabetic at start");
|
|
|
if (noise && cp - string > 3)
|
|
|
-wp = _("time zone abbreviation has more than 3 alphabetics");
|
|
|
+mp = _("time zone abbreviation has more than 3 alphabetics");
|
|
|
if (cp - string > ZIC_MAX_ABBR_LEN_WO_WARN)
|
|
|
-wp = _("time zone abbreviation has too many alphabetics");
|
|
|
- if (wp == NULL && (*cp == '+' || *cp == '-')) {
|
|
|
+mp = _("time zone abbreviation has too many alphabetics");
|
|
|
+ if (mp == NULL && (*cp == '+' || *cp == '-')) {
|
|
|
++cp;
|
|
|
if (isascii((unsigned char) *cp) &&
|
|
|
isdigit((unsigned char) *cp))
|
|
|
@@ -2684,14 +2547,14 @@ wp = _("time zone abbreviation has too many alphabetics");
|
|
|
++cp;
|
|
|
}
|
|
|
if (*cp != '\0')
|
|
|
-wp = _("time zone abbreviation differs from POSIX standard");
|
|
|
- if (wp != NULL) {
|
|
|
- wp = ecpyalloc(wp);
|
|
|
+mp = _("time zone abbreviation differs from POSIX standard");
|
|
|
+ if (mp != NULL) {
|
|
|
+ char *wp = ecpyalloc(mp);
|
|
|
wp = ecatalloc(wp, " (");
|
|
|
wp = ecatalloc(wp, string);
|
|
|
wp = ecatalloc(wp, ")");
|
|
|
warning(wp);
|
|
|
- ifree(wp);
|
|
|
+ free(wp);
|
|
|
}
|
|
|
}
|
|
|
i = strlen(string) + 1;
|
|
|
@@ -2704,8 +2567,7 @@ wp = _("time zone abbreviation differs from POSIX standard");
|
|
|
}
|
|
|
|
|
|
static int
|
|
|
-mkdirs(argname)
|
|
|
-char * argname;
|
|
|
+mkdirs(char *argname)
|
|
|
{
|
|
|
register char * name;
|
|
|
register char * cp;
|
|
|
@@ -2739,20 +2601,19 @@ char * argname;
|
|
|
(void) fprintf(stderr,
|
|
|
_("%s: Can't create directory %s: %s\n"),
|
|
|
progname, name, e);
|
|
|
- ifree(name);
|
|
|
+ free(name);
|
|
|
return -1;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
*cp = '/';
|
|
|
}
|
|
|
- ifree(name);
|
|
|
+ free(name);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static long
|
|
|
-eitol(i)
|
|
|
-const int i;
|
|
|
+static ATTRIBUTE_PURE long
|
|
|
+eitol(const int i)
|
|
|
{
|
|
|
long l;
|
|
|
|