ngx_next_time()
diff --git a/src/core/ngx_times.c b/src/core/ngx_times.c index c1798b5..99b2581 100644 --- a/src/core/ngx_times.c +++ b/src/core/ngx_times.c
@@ -291,3 +291,42 @@ tp->ngx_tm_year = (ngx_tm_year_t) year; tp->ngx_tm_wday = (ngx_tm_wday_t) wday; } + + +time_t +ngx_next_time(time_t when) +{ + time_t now, next; + struct tm tm; + + now = ngx_time(); + + ngx_libc_localtime(now, &tm); + + tm.tm_hour = (int) (when / 3600); + when %= 3600; + tm.tm_min = (int) (when / 60); + tm.tm_sec = (int) (when % 60); + + next = mktime(&tm); + + if (next == -1) { + return -1; + } + + if (next - now > 0) { + return next; + } + + tm.tm_mday++; + + /* mktime() should normalize a date (Jan 32, etc) */ + + next = mktime(&tm); + + if (next != -1) { + return next; + } + + return -1; +}
diff --git a/src/core/ngx_times.h b/src/core/ngx_times.h index 6e7ab63..8363ca1 100644 --- a/src/core/ngx_times.h +++ b/src/core/ngx_times.h
@@ -25,6 +25,9 @@ u_char *ngx_http_cookie_time(u_char *buf, time_t t); void ngx_gmtime(time_t t, ngx_tm_t *tp); +time_t ngx_next_time(time_t when); +#define ngx_next_time_n "mktime()" + extern volatile ngx_time_t *ngx_cached_time;