diff options
author | Igor Sysoev <igor@sysoev.ru> | 2008-08-11 19:28:15 +0400 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2008-08-11 19:28:15 +0400 |
commit | c2717759022bbc072d87a87e7208a8871389be2d (patch) | |
tree | 66ed2499accd6cd56a8c006d7c5d7949d5cf2a6a /src/core | |
parent | 2ff9a4b334b5849e9f792da0bed7e86a0b76cb1e (diff) |
ngx_next_time()
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/ngx_times.c | 39 | ||||
-rw-r--r-- | src/core/ngx_times.h | 3 |
2 files changed, 42 insertions, 0 deletions
diff --git a/src/core/ngx_times.c b/src/core/ngx_times.c index c1798b5bc..99b25813b 100644 --- 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 index 6e7ab638c..8363ca136 100644 --- 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_t t); 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; |