Annotation of embedaddon/nginx/src/os/unix/ngx_time.c, revision 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>