[Git][NTPsec/ntpsec][master] 2 commits: Remove local copy of timegm and gmtime.
Hal Murray
gitlab at mg.gitlab.com
Fri Jan 15 04:25:22 UTC 2016
Hal Murray pushed to branch master at NTPsec / ntpsec
Commits:
9ad68de8 by Hal Murray at 2016-01-14T19:49:45-08:00
Remove local copy of timegm and gmtime.
- - - - -
5549b6a2 by Hal Murray at 2016-01-14T20:23:42-08:00
Disconnect keyword-gen from libntp. (helps cross compile)
- - - - -
6 changed files:
- include/ntp_machine.h
- − libntp/mktime.c
- libntp/wscript
- ntpd/keyword-gen.c
- ntpd/wscript
- pylib/configure.py
Changes:
=====================================
include/ntp_machine.h
=====================================
--- a/include/ntp_machine.h
+++ b/include/ntp_machine.h
@@ -65,9 +65,5 @@ int ntp_set_tod (struct timespec *tvs);
# define HAVE_NO_NICE
#endif
-#ifndef HAVE_TIMEGM
-extern time_t timegm (struct tm *);
-#endif
-
#endif /* GUARD_NTP_MACHINE_H */
=====================================
libntp/mktime.c deleted
=====================================
--- a/libntp/mktime.c
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
- * Copyright (c) 1987, 1989 Regents of the University of California.
- * Copyright 2015 by the NTPsec project contributors
- * SPDX-License-Identifier: BSD-4-clause
- */
-
-/*
- * This implementation of mktime is lifted straight from the NetBSD (BSD 4.4)
- * version. I modified it slightly to divorce it from the internals of the
- * ctime library. Thus this version can't use details of the internal
- * timezone state file to figure out strange unnormalized struct tm values,
- * as might result from someone doing date math on the tm struct then passing
- * it to mktime.
- *
- * It just does as well as it can at normalizing the tm input, then does a
- * binary search of the time space using the system's localtime_r() function.
- *
- * The original binary search was defective in that it didn't consider the
- * setting of tm_isdst when comparing tm values, causing the search to be
- * flubbed for times near the dst/standard time changeover. The original
- * code seems to make up for this by grubbing through the timezone info
- * whenever the binary search barfed. Since I don't have that luxury in
- * portable code, I have to take care of tm_isdst in the comparison routine.
- * This requires knowing how many minutes offset dst is from standard time.
- *
- * So, if you live somewhere in the world where dst is not 60 minutes offset,
- * and your vendor doesn't supply mktime(), you'll have to edit this variable
- * by hand. Sorry about that.
- */
-
-#include <config.h>
-#include "ntp_machine.h"
-
-#if !defined(HAVE_TIMEGM)
-
-#if SIZEOF_TIME_T >= 8
-#error libntp supplied mktime()/timegm() do not support 64-bit time_t
-#endif
-
-#ifndef DSTMINUTES
-#define DSTMINUTES 60
-#endif
-
-/* some constants from tzfile.h */
-#define SECSPERMIN 60
-#define MINSPERHOUR 60
-#define HOURSPERDAY 24
-#define DAYSPERWEEK 7
-#define DAYSPERNYEAR 365
-#define DAYSPERLYEAR 366
-#define SECSPERHOUR (SECSPERMIN * MINSPERHOUR)
-#define SECSPERDAY ((long) SECSPERHOUR * HOURSPERDAY)
-#define MONSPERYEAR 12
-#define TM_YEAR_BASE 1900
-#define isleap(y) ((((y) % 4) == 0 && ((y) % 100) != 0) || ((y) % 400) == 0)
-
-static int mon_lengths[2][MONSPERYEAR] = {
- { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
- { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
-};
-
-static int year_lengths[2] = {
- DAYSPERNYEAR, DAYSPERLYEAR
-};
-
-/*
-** Adapted from code provided by Robert Elz, who writes:
-** The "best" way to do mktime I think is based on an idea of Bob
-** Kridle's (so its said...) from a long time ago. (mtxinu!kridle now).
-** It does a binary search of the time_t space. Since time_t's are
-** just 32 bits, its a max of 32 iterations (even at 64 bits it
-** would still be very reasonable).
-*/
-
-#define WRONG (-1)
-
-static void
-normalize(
- int * tensptr,
- int * unitsptr,
- int base
- )
-{
- if (*unitsptr >= base) {
- *tensptr += *unitsptr / base;
- *unitsptr %= base;
- } else if (*unitsptr < 0) {
- --*tensptr;
- *unitsptr += base;
- if (*unitsptr < 0) {
- *tensptr -= 1 + (-*unitsptr) / base;
- *unitsptr = base - (-*unitsptr) % base;
- }
- }
-}
-
-static struct tm *
-mkdst(
- struct tm * tmp
- )
-{
- /* jds */
- static struct tm tmbuf;
-
- tmbuf = *tmp;
- tmbuf.tm_isdst = 1;
- tmbuf.tm_min += DSTMINUTES;
- normalize(&tmbuf.tm_hour, &tmbuf.tm_min, MINSPERHOUR);
- return &tmbuf;
-}
-
-static int
-tmcomp(
- register struct tm * atmp,
- register struct tm * btmp
- )
-{
- register int result;
-
- /* compare down to the same day */
-
- if ((result = (atmp->tm_year - btmp->tm_year)) == 0 &&
- (result = (atmp->tm_mon - btmp->tm_mon)) == 0)
- result = (atmp->tm_mday - btmp->tm_mday);
-
- if(result != 0)
- return result;
-
- /* get rid of one-sided dst bias */
-
- if(atmp->tm_isdst == 1 && !btmp->tm_isdst)
- btmp = mkdst(btmp);
- else if(btmp->tm_isdst == 1 && !atmp->tm_isdst)
- atmp = mkdst(atmp);
-
- /* compare the rest of the way */
-
- if ((result = (atmp->tm_hour - btmp->tm_hour)) == 0 &&
- (result = (atmp->tm_min - btmp->tm_min)) == 0)
- result = atmp->tm_sec - btmp->tm_sec;
- return result;
-}
-
-
-static time_t
-time2(
- struct tm * tmp,
- bool * okayp,
- int usezn
- )
-{
- register int dir;
- register int bits;
- register int i;
- register int saved_seconds;
- time_t t;
- struct tm yourtm, mytm;
-
- *okayp = false;
- yourtm = *tmp;
- if (yourtm.tm_sec >= SECSPERMIN + 2 || yourtm.tm_sec < 0)
- normalize(&yourtm.tm_min, &yourtm.tm_sec, SECSPERMIN);
- normalize(&yourtm.tm_hour, &yourtm.tm_min, MINSPERHOUR);
- normalize(&yourtm.tm_mday, &yourtm.tm_hour, HOURSPERDAY);
- normalize(&yourtm.tm_year, &yourtm.tm_mon, MONSPERYEAR);
- while (yourtm.tm_mday <= 0) {
- --yourtm.tm_year;
- yourtm.tm_mday +=
- year_lengths[isleap(yourtm.tm_year + TM_YEAR_BASE)];
- }
- for ( ; ; ) {
- i = mon_lengths[isleap(yourtm.tm_year +
- TM_YEAR_BASE)][yourtm.tm_mon];
- if (yourtm.tm_mday <= i)
- break;
- yourtm.tm_mday -= i;
- if (++yourtm.tm_mon >= MONSPERYEAR) {
- yourtm.tm_mon = 0;
- ++yourtm.tm_year;
- }
- }
- saved_seconds = yourtm.tm_sec;
- yourtm.tm_sec = 0;
- /*
- ** Calculate the number of magnitude bits in a time_t
- ** (this works regardless of whether time_t is
- ** signed or unsigned, though lint complains if unsigned).
- */
- for (bits = 0, t = 1; t > 0; ++bits, t <<= 1)
- ;
- /*
- ** If time_t is signed, then 0 is the median value,
- ** if time_t is unsigned, then 1 << bits is median.
- */
- t = (t < 0) ? 0 : ((time_t) 1 << bits);
- for ( ; ; ) {
- struct tm tmbuf;
- if (usezn)
- mytm = *localtime_r(&t, &tmbuf);
- else
- mytm = *gmtime_r(&t, &tmbuf);
- dir = tmcomp(&mytm, &yourtm);
- if (dir != 0) {
- if (bits-- < 0)
- return WRONG;
- if (bits < 0)
- --t;
- else if (dir > 0)
- t -= (time_t) 1 << bits;
- else t += (time_t) 1 << bits;
- continue;
- }
- if (yourtm.tm_isdst < 0 || mytm.tm_isdst == yourtm.tm_isdst)
- break;
-
- return WRONG;
- }
- t += saved_seconds;
- if (usezn)
- *tmp = *localtime_r(&t, &tmbuf);
- else
- *tmp = *gmtime_r(&t, &tmbuf);
- *okayp = true;
- return t;
-}
-#else
-int mktime_bs;
-#endif /* !HAVE_TIMEGM */
-
-#ifdef __UNUSED__
-static time_t
-time1(
- struct tm * tmp
- )
-{
- register time_t t;
- bool okay;
-
- if (tmp->tm_isdst > 1)
- tmp->tm_isdst = 1;
- t = time2(tmp, &okay, 1);
- if (okay || tmp->tm_isdst < 0)
- return t;
-
- return WRONG;
-}
-
-time_t
-mktime(
- struct tm * tmp
- )
-{
- return time1(tmp);
-}
-#endif /* __UNUSED__ */
-
-#ifndef HAVE_TIMEGM
-time_t
-timegm(
- struct tm * tmp
- )
-{
- register time_t t;
- int okay;
-
- tmp->tm_isdst = 0;
- t = time2(tmp, &okay, 0);
- if (okay || tmp->tm_isdst < 0)
- return t;
-
- return WRONG;
-}
-#endif /* !HAVE_TIMEGM */
=====================================
libntp/wscript
=====================================
--- a/libntp/wscript
+++ b/libntp/wscript
@@ -23,7 +23,6 @@ def build(ctx):
"iosignal.c",
"lib_strbuf.c",
"machines.c",
- "mktime.c",
"modetoa.c",
"mstolfp.c",
"msyslog.c",
=====================================
ntpd/keyword-gen.c
=====================================
--- a/ntpd/keyword-gen.c
+++ b/ntpd/keyword-gen.c
@@ -9,9 +9,6 @@
#include <stdlib.h>
#include <time.h>
-#include <ntp_stdlib.h>
-#include <ntp_config.h>
-#include <lib_strbuf.h>
#include "ntp_scanner.h"
#include "ntp_parser.tab.h"
@@ -272,8 +269,6 @@ int main(int argc, char **argv)
fprintf(stderr, "Usage:\n%s t_header.h\n", argv[0]);
exit(1);
}
- debug = true;
- init_lib();
populate_symb(argv[1]);
@@ -710,7 +705,7 @@ populate_symb(
&& 'T' == name[0] && '_' == name[1] && token >= 0
&& token < (int)COUNTOF(symb)) {
- symb[token] = estrdup(name);
+ symb[token] = strdup(name);
if (strlen(name) > MAX_TOK_LEN) {
fprintf(stderr,
"MAX_TOK_LEN %d too small for '%s'\n"
@@ -728,13 +723,14 @@ symbname(
u_short token
)
{
+#define BUFLENGTH 20
char *name;
if (token < COUNTOF(symb) && symb[token] != NULL) {
name = symb[token];
} else {
- LIB_GETBUF(name);
- snprintf(name, LIB_BUFLENGTH, "%d", token);
+ name = malloc(BUFLENGTH);
+ snprintf(name, BUFLENGTH, "%d", token);
}
return name;
=====================================
ntpd/wscript
=====================================
--- a/ntpd/wscript
+++ b/ntpd/wscript
@@ -27,8 +27,8 @@ def build(ctx):
target = "keyword-gen",
features = "c cprogram bld_include src_include libisc_include",
# src_include libisc_include",
- source = keyword_gen_source,
- use = "ntp isc RT THR PTHREAD",
+ source = keyword_gen_source,
+# use = "ntp isc RT THR PTHREAD",
includes = [
"%s/ntpd/" % bldnode
],
=====================================
pylib/configure.py
=====================================
--- a/pylib/configure.py
+++ b/pylib/configure.py
@@ -253,7 +253,6 @@ def cmd_configure(ctx):
('strlcpy', ["string.h"]),
('strlcat', ["string.h"]),
#HGM ('sysconf', ["unistd.h"]),
- ('timegm', ["time.h"]),
('timer_create', ["time.h"]),
('updwtmpx', ["utmpx.h"]), # glibc
)
View it on GitLab: https://gitlab.com/NTPsec/ntpsec/compare/d5bee3937a51991441b6a18ce31724e1b269ba77...5549b6a2c90ae5992b9956be18be1201d8f9bb7f
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ntpsec.org/pipermail/vc/attachments/20160115/0755db70/attachment.html>
More information about the vc
mailing list