diff options
author | Alejandro Colomar <alx@kernel.org> | 2024-01-24 14:56:48 +0100 |
---|---|---|
committer | Alejandro Colomar <alx@kernel.org> | 2024-01-30 11:14:33 +0100 |
commit | 3830e1f6a26a7e7174e92266c1c0e181e25e2242 (patch) | |
tree | 4a88fc8f9913afcb2f8d39f14220b6acd7afdf20 | |
parent | 59e9a168e07475ce51d8b030847d2bdc2028686f (diff) |
Tstr: Unconditionally append a hidden NULstrz2
Allocating one more byte shouldn't be a significant problem of memory
use. On the other hand, this reduces a few branches, simplifying code.
Also, all callers can rely on these strings being terminated, without
having to rely on a flag that may be set very far away.
Cc: Andrew Clayton <a.clayton@nginx.com>
Cc: Zhidao Hong <z.hong@f5.com>
Cc: Andrei Zeliankou <zelenkov@nginx.com>
Cc: "Valentin V. Bartenev" <vbartenev@gmail.com>
Cc: Dan Callahan <d.callahan@f5.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
-rw-r--r-- | src/nxt_http_static.c | 5 | ||||
-rw-r--r-- | src/nxt_js.c | 18 | ||||
-rw-r--r-- | src/nxt_js.h | 2 | ||||
-rw-r--r-- | src/nxt_tstr.c | 22 | ||||
-rw-r--r-- | src/nxt_tstr.h | 1 | ||||
-rw-r--r-- | src/nxt_var.c | 8 |
6 files changed, 15 insertions, 41 deletions
diff --git a/src/nxt_http_static.c b/src/nxt_http_static.c index 50e3c6c7..b123547f 100644 --- a/src/nxt_http_static.c +++ b/src/nxt_http_static.c @@ -105,7 +105,7 @@ nxt_http_static_init(nxt_task_t *task, nxt_router_temp_conf_t *tmcf, cv = nxt_conf_get_array_element_or_itself(acf->share, i); nxt_conf_get_string(cv, &str); - tstr = nxt_tstr_compile(rtcf->tstr_state, &str, NXT_TSTR_STRZ); + tstr = nxt_tstr_compile(rtcf->tstr_state, &str, 0); if (nxt_slow_path(tstr == NULL)) { return NXT_ERROR; } @@ -131,8 +131,7 @@ nxt_http_static_init(nxt_task_t *task, nxt_router_temp_conf_t *tmcf, nxt_str_t chr, shr; nxt_bool_t is_const; - conf->chroot = nxt_tstr_compile(rtcf->tstr_state, &acf->chroot, - NXT_TSTR_STRZ); + conf->chroot = nxt_tstr_compile(rtcf->tstr_state, &acf->chroot, 0); if (nxt_slow_path(conf->chroot == NULL)) { return NXT_ERROR; } diff --git a/src/nxt_js.c b/src/nxt_js.c index 74663660..a945264b 100644 --- a/src/nxt_js.c +++ b/src/nxt_js.c @@ -232,7 +232,7 @@ nxt_js_add_module(nxt_js_conf_t *jcf, nxt_str_t *name, nxt_str_t *text) nxt_js_t * -nxt_js_add_tpl(nxt_js_conf_t *jcf, nxt_str_t *str, nxt_bool_t strz) +nxt_js_add_tpl(nxt_js_conf_t *jcf, nxt_str_t *str) { size_t size; u_char *p, *start; @@ -243,16 +243,9 @@ nxt_js_add_tpl(nxt_js_conf_t *jcf, nxt_str_t *str, nxt_bool_t strz) "args, headers, cookies) {" " return "); - /* - * Appending a terminating null character if strz is true. - */ static nxt_str_t strz_str = nxt_string(" + '\\x00'"); - size = func_str.length + str->length + 1; - - if (strz) { - size += strz_str.length; - } + size = func_str.length + str->length + 1 + strz_str.length; start = nxt_mp_nget(jcf->pool, size); if (nxt_slow_path(start == NULL)) { @@ -263,10 +256,7 @@ nxt_js_add_tpl(nxt_js_conf_t *jcf, nxt_str_t *str, nxt_bool_t strz) p = nxt_cpymem(p, func_str.start, func_str.length); p = nxt_cpymem(p, str->start, str->length); - - if (strz) { - p = nxt_cpymem(p, strz_str.start, strz_str.length); - } + p = nxt_cpymem(p, strz_str.start, strz_str.length); *p++ = '}'; @@ -474,7 +464,7 @@ nxt_js_call(nxt_task_t *task, nxt_js_conf_t *jcf, nxt_js_cache_t *cache, ret = njs_vm_value_string(vm, &res, njs_value_arg(&retval)); - str->length = res.length; + str->length = res.length - 1; str->start = res.start; return NXT_OK; diff --git a/src/nxt_js.h b/src/nxt_js.h index 48f036b8..653b72b6 100644 --- a/src/nxt_js.h +++ b/src/nxt_js.h @@ -28,7 +28,7 @@ void nxt_js_conf_release(nxt_js_conf_t *jcf); void nxt_js_set_proto(nxt_js_conf_t *jcf, njs_external_t *proto, nxt_uint_t n); nxt_int_t nxt_js_add_module(nxt_js_conf_t *jcf, nxt_str_t *name, nxt_str_t *text); -nxt_js_t *nxt_js_add_tpl(nxt_js_conf_t *jcf, nxt_str_t *str, nxt_bool_t strz); +nxt_js_t *nxt_js_add_tpl(nxt_js_conf_t *jcf, nxt_str_t *str); nxt_int_t nxt_js_compile(nxt_js_conf_t *jcf); nxt_int_t nxt_js_test(nxt_js_conf_t *jcf, nxt_str_t *str, u_char *error); nxt_int_t nxt_js_call(nxt_task_t *task, nxt_js_conf_t *jcf, diff --git a/src/nxt_tstr.c b/src/nxt_tstr.c index edf6860a..568b9589 100644 --- a/src/nxt_tstr.c +++ b/src/nxt_tstr.c @@ -86,27 +86,21 @@ nxt_tstr_compile(nxt_tstr_state_t *state, nxt_str_t *str, { u_char *p; nxt_tstr_t *tstr; - nxt_bool_t strz; - - strz = (flags & NXT_TSTR_STRZ) != 0; tstr = nxt_mp_get(state->pool, sizeof(nxt_tstr_t)); if (nxt_slow_path(tstr == NULL)) { return NULL; } - tstr->str.length = str->length + strz; + tstr->str.length = str->length; - tstr->str.start = nxt_mp_nget(state->pool, tstr->str.length); + tstr->str.start = nxt_mp_nget(state->pool, tstr->str.length + 1); if (nxt_slow_path(tstr->str.start == NULL)) { return NULL; } p = nxt_cpymem(tstr->str.start, str->start, str->length); - - if (strz) { - *p = '\0'; - } + *p = '\0'; tstr->flags = flags; @@ -120,7 +114,7 @@ nxt_tstr_compile(nxt_tstr_state_t *state, nxt_str_t *str, nxt_tstr_str(tstr, &tpl); - tstr->u.js = nxt_js_add_tpl(state->jcf, &tpl, strz); + tstr->u.js = nxt_js_add_tpl(state->jcf, &tpl); if (nxt_slow_path(tstr->u.js == NULL)) { return NULL; } @@ -213,10 +207,6 @@ void nxt_tstr_str(nxt_tstr_t *tstr, nxt_str_t *str) { *str = tstr->str; - - if (tstr->flags & NXT_TSTR_STRZ) { - str->length--; - } } @@ -283,10 +273,6 @@ nxt_tstr_query(nxt_task_t *task, nxt_tstr_query_t *query, nxt_tstr_t *tstr, #endif } - if (tstr->flags & NXT_TSTR_STRZ) { - val->length--; - } - #if (NXT_DEBUG) nxt_str_t str; diff --git a/src/nxt_tstr.h b/src/nxt_tstr.h index 3e842f81..d8f45417 100644 --- a/src/nxt_tstr.h +++ b/src/nxt_tstr.h @@ -32,7 +32,6 @@ typedef struct { typedef enum { - NXT_TSTR_STRZ = 1 << 0, NXT_TSTR_LOGGING = 1 << 1, } nxt_tstr_flags_t; diff --git a/src/nxt_var.c b/src/nxt_var.c index 729de788..fb70b5aa 100644 --- a/src/nxt_var.c +++ b/src/nxt_var.c @@ -322,7 +322,7 @@ nxt_var_compile(nxt_tstr_state_t *state, nxt_str_t *str) n = 0; p = str->start; - end = p + str->length; + end = p + str->length + 1; while (p < end) { p = nxt_var_next_part(p, end, &part); @@ -335,20 +335,20 @@ nxt_var_compile(nxt_tstr_state_t *state, nxt_str_t *str) } } - size = sizeof(nxt_var_t) + n * sizeof(nxt_var_sub_t) + str->length; + size = sizeof(nxt_var_t) + n * sizeof(nxt_var_sub_t) + str->length + 1; var = nxt_mp_get(state->pool, size); if (nxt_slow_path(var == NULL)) { return NULL; } - var->length = str->length; + var->length = str->length + 1; var->vars = n; subs = nxt_var_subs(var); src = nxt_var_raw_start(var); - nxt_memcpy(src, str->start, str->length); + nxt_memcpy(src, str->start, str->length + 1); n = 0; p = str->start; |