changeset 2162:429269167fab

ngx_next_time()
author Igor Sysoev <igor@sysoev.ru>
date Mon, 11 Aug 2008 15:28:15 +0000
parents 904eab9dedb6
children 3e8a4d057b77
files src/core/ngx_times.c src/core/ngx_times.h
diffstat 2 files changed, 42 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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;
+}
--- 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;