Sha256: 391e6c45b34b546297d5208ff324cca47494c687dc36c571c710a0e219c25f58

Contents?: true

Size: 1.47 KB

Versions: 35

Compression:

Stored size: 1.47 KB

Contents

/*
 * Copyright (C) Igor Sysoev
 * Copyright (C) Nginx, Inc.
 */


#include <ngx_config.h>
#include <ngx_core.h>


/*
 * FreeBSD does not test /etc/localtime change, however, we can workaround it
 * by calling tzset() with TZ and then without TZ to update timezone.
 * The trick should work since FreeBSD 2.1.0.
 *
 * Linux does not test /etc/localtime change in localtime(),
 * but may stat("/etc/localtime") several times in every strftime(),
 * therefore we use it to update timezone.
 *
 * Solaris does not test /etc/TIMEZONE change too and no workaround available.
 */

void
ngx_timezone_update(void)
{
#if (NGX_FREEBSD)

    if (getenv("TZ")) {
        return;
    }

    putenv("TZ=UTC");

    tzset();

    unsetenv("TZ");

    tzset();

#elif (NGX_LINUX)
    time_t      s;
    struct tm  *t;
    char        buf[4];

    s = time(0);

    t = localtime(&s);

    strftime(buf, 4, "%H", t);

#endif
}


void
ngx_localtime(time_t s, ngx_tm_t *tm)
{
#if (NGX_HAVE_LOCALTIME_R)
    (void) localtime_r(&s, tm);

#else
    ngx_tm_t  *t;

    t = localtime(&s);
    *tm = *t;

#endif

    tm->ngx_tm_mon++;
    tm->ngx_tm_year += 1900;
}


void
ngx_libc_localtime(time_t s, struct tm *tm)
{
#if (NGX_HAVE_LOCALTIME_R)
    (void) localtime_r(&s, tm);

#else
    struct tm  *t;

    t = localtime(&s);
    *tm = *t;

#endif
}


void
ngx_libc_gmtime(time_t s, struct tm *tm)
{
#if (NGX_HAVE_LOCALTIME_R)
    (void) gmtime_r(&s, tm);

#else
    struct tm  *t;

    t = gmtime(&s);
    *tm = *t;

#endif
}

Version data entries

35 entries across 35 versions & 1 rubygems

Version Path
nginxtra-1.10.1.13 vendor/nginx/src/os/unix/ngx_time.c
nginxtra-1.10.1.12 vendor/nginx/src/os/unix/ngx_time.c
nginxtra-1.8.1.12 vendor/nginx/src/os/unix/ngx_time.c
nginxtra-1.8.0.11 vendor/nginx/src/os/unix/ngx_time.c
nginxtra-1.8.0.10 vendor/nginx/src/os/unix/ngx_time.c
nginxtra-1.8.0.9 vendor/nginx/src/os/unix/ngx_time.c
nginxtra-1.6.3.9 vendor/nginx/src/os/unix/ngx_time.c
nginxtra-1.6.2.9 vendor/nginx/src/os/unix/ngx_time.c
nginxtra-1.6.1.9 vendor/nginx/src/os/unix/ngx_time.c
nginxtra-1.6.0.9 vendor/nginx/src/os/unix/ngx_time.c
nginxtra-1.4.7.9 vendor/nginx/src/os/unix/ngx_time.c
nginxtra-1.4.6.9 vendor/nginx/src/os/unix/ngx_time.c
nginxtra-1.4.5.9 vendor/nginx/src/os/unix/ngx_time.c
nginxtra-1.4.4.9 vendor/nginx/src/os/unix/ngx_time.c
nginxtra-1.4.3.9 vendor/nginx/src/os/unix/ngx_time.c
nginxtra-1.4.2.9 vendor/nginx/src/os/unix/ngx_time.c
nginxtra-1.4.1.9 vendor/nginx/src/os/unix/ngx_time.c
nginxtra-1.4.0.9 vendor/nginx/src/os/unix/ngx_time.c
nginxtra-1.4.0.8 vendor/nginx/src/os/unix/ngx_time.c
nginxtra-1.2.8.8 vendor/nginx/src/os/unix/ngx_time.c