41 #include <sys/cdefs.h>
44 #include <sys/param.h>
45 #include <sys/systm.h>
46 #include <sys/kernel.h>
48 #include <sys/clock.h>
49 #include <sys/limits.h>
50 #include <sys/sysctl.h>
51 #include <sys/timetc.h>
66 if (!error && req->newptr)
72 "Local offset from UTC in seconds");
75 SYSCTL_INT(_debug, OID_AUTO, clocktime, CTLFLAG_RW,
76 &
ct_debug, 0,
"Enable printing of clocktime debugging");
90 #define days_in_year(y) (leapyear(y) ? 366 : 365)
91 #define days_in_month(y, m) \
92 (month_days[(m) - 1] + (m == FEBRUARY ? leapyear(y) : 0))
94 #define day_of_week(days) (((days) + 4) % 7)
97 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
114 if ((year & 3) == 0) {
116 if ((year % 100) == 0) {
118 if ((year % 400) == 0)
128 printf(
"[%04d-%02d-%02d %02d:%02d:%02d]",
129 ct->year, ct->mon, ct->day,
130 ct->hour, ct->min, ct->sec);
148 if (ct->mon < 1 || ct->mon > 12 || ct->day < 1 ||
150 ct->hour > 23 || ct->min > 59 || ct->sec > 59 ||
151 (
sizeof(time_t) == 4 && year > 2037)) {
162 for (i = POSIX_BASE_YEAR; i < year; i++)
166 for (i = 1; i < ct->mon; i++)
168 days += (ct->day - 1);
171 secs = ((days * 24 + ct->hour) * 60 + ct->min) * 60 + ct->sec;
174 ts->tv_nsec = ct->nsec;
176 printf(
" = %ld.%09ld\n", (
long)ts->tv_sec, (
long)ts->tv_nsec);
188 days = secs / SECDAY;
189 rsec = secs % SECDAY;
194 for (year = POSIX_BASE_YEAR; days >=
days_in_year(year); year++)
207 ct->hour = rsec / 3600;
212 ct->nsec = ts->tv_nsec;
214 printf(
"ts_to_ct(%ld.%09ld) = ",
215 (
long)ts->tv_sec, (
long)ts->tv_nsec);
void clock_ts_to_ct(struct timespec *ts, struct clocktime *ct)
static void print_ct(struct clocktime *ct)
static const int month_days[12]
static int leapyear(int year)
#define days_in_month(y, m)
SYSCTL_INT(_debug, OID_AUTO, clocktime, CTLFLAG_RW,&ct_debug, 0,"Enable printing of clocktime debugging")
int sysctl_handle_int(SYSCTL_HANDLER_ARGS)
SYSCTL_PROC(_machdep, OID_AUTO, adjkerntz, CTLTYPE_INT|CTLFLAG_RW,&adjkerntz, 0, sysctl_machdep_adjkerntz,"I","Local offset from UTC in seconds")
int clock_ct_to_ts(struct clocktime *ct, struct timespec *ts)
int printf(const char *fmt,...)
static int wall_cmos_clock
#define day_of_week(days)
static int sysctl_machdep_adjkerntz(SYSCTL_HANDLER_ARGS)