Module Name: src Committed By: christos Date: Thu May 6 21:50:16 UTC 2010
Modified Files: src/external/bsd/cron/dist: cron.c Log Message: - change times to time_t - use the correct time in job_add - bring back CRON_TZ To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/external/bsd/cron/dist/cron.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/bsd/cron/dist/cron.c diff -u src/external/bsd/cron/dist/cron.c:1.2 src/external/bsd/cron/dist/cron.c:1.3 --- src/external/bsd/cron/dist/cron.c:1.2 Thu May 6 14:53:17 2010 +++ src/external/bsd/cron/dist/cron.c Thu May 6 17:50:16 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: cron.c,v 1.2 2010/05/06 18:53:17 christos Exp $ */ +/* $NetBSD: cron.c,v 1.3 2010/05/06 21:50:16 christos Exp $ */ /* Copyright 1988,1990,1993,1994 by Paul Vixie * All rights reserved @@ -25,7 +25,7 @@ #if 0 static char rcsid[] = "Id: cron.c,v 1.12 2004/01/23 18:56:42 vixie Exp"; #else -__RCSID("$NetBSD: cron.c,v 1.2 2010/05/06 18:53:17 christos Exp $"); +__RCSID("$NetBSD: cron.c,v 1.3 2010/05/06 21:50:16 christos Exp $"); #endif #endif @@ -37,7 +37,7 @@ static void usage(void), run_reboot_jobs(cron_db *), - find_jobs(int, cron_db *, int, int), + find_jobs(time_t, cron_db *, int, int), set_time(int), cron_sleep(int), sigchld_handler(int), @@ -47,7 +47,7 @@ parse_args(int c, char *v[]); static volatile sig_atomic_t got_sighup, got_sigchld; -static int timeRunning, virtualTime, clockTime; +static time_t timeRunning, virtualTime, clockTime; static long GMToff; static void @@ -205,7 +205,7 @@ find_jobs(virtualTime, &database, FALSE, TRUE); set_time(FALSE); - } while (virtualTime< timeRunning && + } while (virtualTime < timeRunning && clockTime == timeRunning); break; @@ -265,20 +265,32 @@ } static void -find_jobs(int vtime, cron_db *db, int doWild, int doNonWild) { +find_jobs(time_t vtime, cron_db *db, int doWild, int doNonWild) { time_t virtualSecond = vtime * SECONDS_PER_MINUTE; struct tm *tm = gmtime(&virtualSecond); int minute, hour, dom, month, dow; user *u; entry *e; + char *orig_tz, *job_tz; - /* make 0-based values out of these so we can use them as indicies - */ - minute = tm->tm_min -FIRST_MINUTE; - hour = tm->tm_hour -FIRST_HOUR; - dom = tm->tm_mday -FIRST_DOM; - month = tm->tm_mon +1 /* 0..11 -> 1..12 */ -FIRST_MONTH; - dow = tm->tm_wday -FIRST_DOW; +#define maketime(tz1, tz2) do { \ + char *t = tz1; \ + if (t != NULL && *t != '\0') \ + setenv("TZ", t, 1); \ + else if ((tz2) != NULL) \ + setenv("TZ", (tz2), 1); \ + else \ + unsetenv("TZ"); \ + tm = localtime(&virtualSecond); \ + minute = tm->tm_min -FIRST_MINUTE; \ + hour = tm->tm_hour -FIRST_HOUR; \ + dom = tm->tm_mday -FIRST_DOM; \ + month = tm->tm_mon + 1 /* 0..11 -> 1..12 */ -FIRST_MONTH; \ + dow = tm->tm_wday -FIRST_DOW; \ + } while (/*CONSTCOND*/0) + + orig_tz = getenv("TZ"); + maketime(NULL, orig_tz); Debug(DSCH, ("[%ld] tick(%d,%d,%d,%d,%d) %s %s\n", (long)getpid(), minute, hour, dom, month, dow, @@ -295,6 +307,8 @@ Debug(DSCH|DEXT, ("user [%s:%ld:%ld:...] cmd=\"%s\"\n", e->pwd->pw_name, (long)e->pwd->pw_uid, (long)e->pwd->pw_gid, e->cmd)); + job_tz = env_get("CRON_TZ", e->envp); + maketime(job_tz, orig_tz); if (bit_test(e->minute, minute) && bit_test(e->hour, hour) && bit_test(e->month, month) && @@ -306,7 +320,7 @@ if ((doNonWild && !(e->flags & (MIN_STAR|HR_STAR))) || (doWild && (e->flags & (MIN_STAR|HR_STAR)))) - job_add(e, u, virtualSecond); + job_add(e, u, StartTime); } } } @@ -332,7 +346,7 @@ Debug(DSCH, ("[%ld] GMToff=%ld\n", (long)getpid(), (long)GMToff)); } - clockTime = (int)((StartTime + GMToff) / (time_t)SECONDS_PER_MINUTE); + clockTime = (StartTime + GMToff) / (time_t)SECONDS_PER_MINUTE; } /*