# HG changeset patch # User Igor Sysoev # Date 1218468495 0 # Node ID 429269167fabbc07ff57dbc453d8c9c501754c2a # Parent 904eab9dedb6816a3c6e44bbe6caea928ea844a8 ngx_next_time() diff --git a/src/core/ngx_times.c b/src/core/ngx_times.c --- a/src/core/ngx_times.c +++ b/src/core/ngx_times.c @@ -291,3 +291,42 @@ ngx_gmtime(time_t t, ngx_tm_t *tp) 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 --- a/src/core/ngx_times.h +++ b/src/core/ngx_times.h @@ -25,6 +25,9 @@ u_char *ngx_http_time(u_char *buf, time_ 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;