Skip to content

Commit

Permalink
add gmt_mktime to support new asn1 code
Browse files Browse the repository at this point in the history
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@3952 dc483132-0cff-0310-8789-dd5450dbe970
  • Loading branch information
eichin committed Jul 6, 1994
1 parent dd52cc1 commit 659528e
Show file tree
Hide file tree
Showing 4 changed files with 87 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/lib/krb5/os/ChangeLog
@@ -1,3 +1,9 @@
Wed Jul 6 13:26:59 1994 Mark Eichin (eichin@cygnus.com)

* gmt_mktime.c (gmt_mktime): New file, new function. Similar to
POSIX mktime, but always works in GMT.
configure.in, Makefile.in: build gmt_mktime.

Wed Jun 22 15:49:30 1994 Theodore Y. Ts'o (tytso at tsx-11)

* locate_kdc.c (krb5_locate_kdc): Fixed default port numbers so
Expand Down
2 changes: 2 additions & 0 deletions src/lib/krb5/os/Makefile.in
Expand Up @@ -13,6 +13,7 @@ OBJS= \
get_krbhst.o \
gen_port.o \
gen_rname.o \
gmt_mktime.o \
hst_realm.o \
krbfileio.o \
ktdefname.o \
Expand Down Expand Up @@ -44,6 +45,7 @@ SRCS= \
$(srcdir)/get_krbhst.c \
$(srcdir)/gen_port.c \
$(srcdir)/gen_rname.c \
$(srcdir)/gmt_mktime.c \
$(srcdir)/hst_realm.c \
$(srcdir)/krbfileio.c \
$(srcdir)/ktdefname.c \
Expand Down
5 changes: 5 additions & 0 deletions src/lib/krb5/os/configure.in
@@ -1,4 +1,9 @@
AC_INIT(configure.in)
dnl time checks are for timeofday.c (which gets them from osconf.h)
dnl and gmt_mktime.c (which only gets them from here...)
AC_TIME_WITH_SYS_TIME
AC_HEADER_CHECK(sys/time.h,AC_DEFINE(USE_SYS_TIME_H))
AC_HEADER_EGREP(time_t, sys/types.h, AC_DEFINE(POSIX_TYPES))
WITH_CCOPTS
AC_SET_BUILDTOP
CONFIG_RULES
Expand Down
74 changes: 74 additions & 0 deletions src/lib/krb5/os/gmt_mktime.c
@@ -0,0 +1,74 @@
/* This code placed in the public domain by Mark W. Eichin */

#include <stdio.h>

#include <sys/types.h>
#include <time.h>
#ifdef USE_SYS_TIME_H
#include <sys/time.h>
#endif

/* take a struct tm, return seconds from GMT epoch */
/* like mktime, this ignores tm_wday and tm_yday. */
/* unlike mktime, this does not set them... it only passes a return value. */

static days_in_month[12] = {
0, /* jan 31 */
31, /* feb 28 */
59, /* mar 31 */
90, /* apr 30 */
120, /* may 31 */
151, /* jun 30 */
181, /* jul 31 */
212, /* aug 31 */
243, /* sep 30 */
273, /* oct 31 */
304, /* nov 30 */
334 /* dec 31 */
};

#define hasleapday(year) (year%400?(year%100?(year%4?0:1):0):1)

time_t gmt_mktime(t)
struct tm* t;
{
time_t accum;

#define assert_time(cnd) if(!(cnd)) return -1

assert_time(t->tm_year>=70);
assert_time(t->tm_year<=138);
assert_time(t->tm_mon>=0);
assert_time(t->tm_mon<=11);
assert_time(t->tm_mday>=0);
assert_time(t->tm_mday<=31);
assert_time(t->tm_hour>=0);
assert_time(t->tm_hour<=23);
assert_time(t->tm_min>=0);
assert_time(t->tm_min<=59);
assert_time(t->tm_sec>=0);
assert_time(t->tm_sec<=62);

#undef assert_time


accum = t->tm_year - 70;
accum *= 365; /* 365 days/normal year */

/* add in leap day for all previous years */
accum += (t->tm_year - 68) / 4;
/* add in leap day for this year */
if(t->tm_mon >= 2) /* march or later */
if(hasleapday(t->tm_year)) accum += 1;

accum += days_in_month[t->tm_mon];
accum += t->tm_mday-1; /* days of month are the only 1-based field */
accum *= 24; /* 24 hour/day */
accum += t->tm_hour;
accum *= 60; /* 60 minute/hour */
accum += t->tm_min;
accum *= 60; /* 60 seconds/minute */
accum += t->tm_sec;

return accum;
}

0 comments on commit 659528e

Please sign in to comment.