[PATCH 2 of 3] SSI: Refactor ngx_http_ssi_date_gmt_local_variable
Matwey V. Kornilov
matwey.kornilov at gmail.com
Fri Mar 10 09:10:33 UTC 2017
# HG changeset patch
# User Matwey V. Kornilov <matwey.kornilov at gmail.com>
# Date 1486576729 -10800
# Wed Feb 08 20:58:49 2017 +0300
# Branch fsize
# Node ID 35527b6bd4d84e41e030972b770e75ef583cf0f5
# Parent a682e88cdcddb04905814cdfacde3df9ebc2b48b
SSI: Refactor ngx_http_ssi_date_gmt_local_variable
Introduce new function ngx_http_ssi_format_time.
The function will be reused in the following commit.
diff -r a682e88cdcdd -r 35527b6bd4d8 src/http/modules/ngx_http_ssi_filter_module.c
--- a/src/http/modules/ngx_http_ssi_filter_module.c Fri Mar 10 12:02:53 2017 +0300
+++ b/src/http/modules/ngx_http_ssi_filter_module.c Wed Feb 08 20:58:49 2017 +0300
@@ -110,6 +110,8 @@
static ngx_int_t ngx_http_ssi_endblock(ngx_http_request_t *r,
ngx_http_ssi_ctx_t *ctx, ngx_str_t **params);
+static ngx_int_t ngx_http_ssi_format_time(ngx_http_request_t *r, ngx_str_t *v,
+ time_t time, ngx_str_t *timefmt, uintptr_t gmt);
static ngx_int_t ngx_http_ssi_date_gmt_local_variable(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t gmt);
@@ -2874,25 +2876,12 @@
static ngx_int_t
-ngx_http_ssi_date_gmt_local_variable(ngx_http_request_t *r,
- ngx_http_variable_value_t *v, uintptr_t gmt)
+ngx_http_ssi_format_time(ngx_http_request_t *r, ngx_str_t *v, time_t time,
+ ngx_str_t *timefmt, uintptr_t gmt)
{
- time_t now;
- ngx_http_ssi_ctx_t *ctx;
- ngx_str_t *timefmt;
struct tm tm;
char buf[NGX_HTTP_SSI_DATE_LEN];
- v->valid = 1;
- v->no_cacheable = 0;
- v->not_found = 0;
-
- now = ngx_time();
-
- ctx = ngx_http_get_module_ctx(r, ngx_http_ssi_filter_module);
-
- timefmt = ctx ? &ctx->timefmt : &ngx_http_ssi_timefmt;
-
if (timefmt->len == sizeof("%s") - 1
&& timefmt->data[0] == '%' && timefmt->data[1] == 's')
{
@@ -2901,15 +2890,15 @@
return NGX_ERROR;
}
- v->len = ngx_sprintf(v->data, "%T", now) - v->data;
+ v->len = ngx_sprintf(v->data, "%T", time) - v->data;
return NGX_OK;
}
if (gmt) {
- ngx_libc_gmtime(now, &tm);
+ ngx_libc_gmtime(time, &tm);
} else {
- ngx_libc_localtime(now, &tm);
+ ngx_libc_localtime(time, &tm);
}
v->len = strftime(buf, NGX_HTTP_SSI_DATE_LEN,
@@ -2930,6 +2919,36 @@
static ngx_int_t
+ngx_http_ssi_date_gmt_local_variable(ngx_http_request_t *r,
+ ngx_http_variable_value_t *v, uintptr_t gmt)
+{
+ time_t now;
+ ngx_http_ssi_ctx_t *ctx;
+ ngx_str_t *timefmt;
+ ngx_str_t timestr;
+
+ v->valid = 1;
+ v->no_cacheable = 0;
+ v->not_found = 0;
+
+ now = ngx_time();
+
+ ctx = ngx_http_get_module_ctx(r, ngx_http_ssi_filter_module);
+
+ timefmt = ctx ? &ctx->timefmt : &ngx_http_ssi_timefmt;
+
+ if (ngx_http_ssi_format_time(r, ×tr, now, timefmt, gmt) != NGX_OK) {
+ return NGX_ERROR;
+ }
+
+ v->data = timestr.data;
+ v->len = timestr.len;
+
+ return NGX_OK;
+}
+
+
+static ngx_int_t
ngx_http_ssi_preconfiguration(ngx_conf_t *cf)
{
ngx_int_t rc;
More information about the nginx-devel
mailing list