Annotation of embedaddon/nginx/src/os/unix/ngx_time.c, revision 1.1.1.1

1.1       misho       1: 
                      2: /*
                      3:  * Copyright (C) Igor Sysoev
                      4:  * Copyright (C) Nginx, Inc.
                      5:  */
                      6: 
                      7: 
                      8: #include <ngx_config.h>
                      9: #include <ngx_core.h>
                     10: 
                     11: 
                     12: /*
                     13:  * FreeBSD does not test /etc/localtime change, however, we can workaround it
                     14:  * by calling tzset() with TZ and then without TZ to update timezone.
                     15:  * The trick should work since FreeBSD 2.1.0.
                     16:  *
                     17:  * Linux does not test /etc/localtime change in localtime(),
                     18:  * but may stat("/etc/localtime") several times in every strftime(),
                     19:  * therefore we use it to update timezone.
                     20:  *
                     21:  * Solaris does not test /etc/TIMEZONE change too and no workaround available.
                     22:  */
                     23: 
                     24: void
                     25: ngx_timezone_update(void)
                     26: {
                     27: #if (NGX_FREEBSD)
                     28: 
                     29:     if (getenv("TZ")) {
                     30:         return;
                     31:     }
                     32: 
                     33:     putenv("TZ=UTC");
                     34: 
                     35:     tzset();
                     36: 
                     37:     unsetenv("TZ");
                     38: 
                     39:     tzset();
                     40: 
                     41: #elif (NGX_LINUX)
                     42:     time_t      s;
                     43:     struct tm  *t;
                     44:     char        buf[4];
                     45: 
                     46:     s = time(0);
                     47: 
                     48:     t = localtime(&s);
                     49: 
                     50:     strftime(buf, 4, "%H", t);
                     51: 
                     52: #endif
                     53: }
                     54: 
                     55: 
                     56: void
                     57: ngx_localtime(time_t s, ngx_tm_t *tm)
                     58: {
                     59: #if (NGX_HAVE_LOCALTIME_R)
                     60:     (void) localtime_r(&s, tm);
                     61: 
                     62: #else
                     63:     ngx_tm_t  *t;
                     64: 
                     65:     t = localtime(&s);
                     66:     *tm = *t;
                     67: 
                     68: #endif
                     69: 
                     70:     tm->ngx_tm_mon++;
                     71:     tm->ngx_tm_year += 1900;
                     72: }
                     73: 
                     74: 
                     75: void
                     76: ngx_libc_localtime(time_t s, struct tm *tm)
                     77: {
                     78: #if (NGX_HAVE_LOCALTIME_R)
                     79:     (void) localtime_r(&s, tm);
                     80: 
                     81: #else
                     82:     struct tm  *t;
                     83: 
                     84:     t = localtime(&s);
                     85:     *tm = *t;
                     86: 
                     87: #endif
                     88: }
                     89: 
                     90: 
                     91: void
                     92: ngx_libc_gmtime(time_t s, struct tm *tm)
                     93: {
                     94: #if (NGX_HAVE_LOCALTIME_R)
                     95:     (void) gmtime_r(&s, tm);
                     96: 
                     97: #else
                     98:     struct tm  *t;
                     99: 
                    100:     t = gmtime(&s);
                    101:     *tm = *t;
                    102: 
                    103: #endif
                    104: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>