From: Dmitry Volyntsev Date: Sat, 4 Jun 2022 06:24:11 +0000 (-0700) Subject: Introduced njs_is_byte_or_ascii_string(). X-Git-Tag: 0.7.5~16 X-Git-Url: http://www.kaiwu.me/postgresql/commit/?a=commitdiff_plain;h=dc6072853d6e171e04ca5f64a60289566bce3546;p=njs.git Introduced njs_is_byte_or_ascii_string(). --- diff --git a/src/njs_regexp.c b/src/njs_regexp.c index f851045f..44b48297 100644 --- a/src/njs_regexp.c +++ b/src/njs_regexp.c @@ -1627,7 +1627,7 @@ njs_regexp_prototype_symbol_split(njs_vm_t *vm, njs_value_t *args, utf8 = NJS_STRING_BYTE; - if (s.length != 0 && s.length != s.size) { + if (!njs_is_byte_or_ascii_string(&s)) { utf8 = NJS_STRING_UTF8; } diff --git a/src/njs_string.c b/src/njs_string.c index d1ae09e7..c061fa99 100644 --- a/src/njs_string.c +++ b/src/njs_string.c @@ -926,7 +926,7 @@ njs_string_prototype_concat(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, size += string.size; length += string.length; - if (string.length == 0 && string.size != 0) { + if (njs_is_byte_string(&string)) { mask = 0; } } @@ -2642,8 +2642,7 @@ njs_string_prototype_to_lower_case(njs_vm_t *vm, njs_value_t *args, (void) njs_string_prop(&string, njs_argument(args, 0)); - if (string.length == 0 || string.length == string.size) { - /* Byte or ASCII string. */ + if (njs_is_byte_or_ascii_string(&string)) { p = njs_string_alloc(vm, &vm->retval, string.size, string.length); if (njs_slow_path(p == NULL)) { @@ -2714,8 +2713,7 @@ njs_string_prototype_to_upper_case(njs_vm_t *vm, njs_value_t *args, (void) njs_string_prop(&string, njs_argument(args, 0)); - if (string.length == 0 || string.length == string.size) { - /* Byte or ASCII string. */ + if (njs_is_byte_or_ascii_string(&string)) { p = njs_string_alloc(vm, &vm->retval, string.size, string.length); if (njs_slow_path(p == NULL)) { @@ -2787,8 +2785,7 @@ njs_string_prototype_trim(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, start = string.start; end = string.start + string.size; - if (string.length == 0 || string.length == string.size) { - /* Byte or ASCII string. */ + if (njs_is_byte_or_ascii_string(&string)) { if (mode & NJS_TRIM_START) { for ( ;; ) { @@ -4392,8 +4389,7 @@ njs_string_encode_uri(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, src = string.start; end = src + string.size; - if (string.length == 0 || string.length == string.size) { - /* Byte or ASCII string. */ + if (njs_is_byte_or_ascii_string(&string)) { while (src < end) { byte = *src++; @@ -4450,8 +4446,7 @@ njs_string_encode_uri(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, src = string.start; - if (string.length == 0 || string.length == string.size) { - /* Byte or ASCII string. */ + if (njs_is_byte_or_ascii_string(&string)) { (void) njs_string_encode(escape, string.size, src, dst); return NJS_OK; } diff --git a/src/njs_string.h b/src/njs_string.h index 5874790a..3dfe9269 100644 --- a/src/njs_string.h +++ b/src/njs_string.h @@ -105,6 +105,13 @@ njs_is_byte_string(njs_string_prop_t *string) } +njs_inline njs_bool_t +njs_is_byte_or_ascii_string(njs_string_prop_t *string) +{ + return (string->length == 0 || string->length == string->size); +} + + njs_inline uint32_t njs_string_calc_length(njs_utf8_t utf8, const u_char *start, size_t size) { diff --git a/src/njs_vmcode.c b/src/njs_vmcode.c index cc33d20b..0e318627 100644 --- a/src/njs_vmcode.c +++ b/src/njs_vmcode.c @@ -1606,16 +1606,13 @@ njs_string_concat(njs_vm_t *vm, njs_value_t *val1, njs_value_t *val2) (void) njs_string_prop(&string1, val1); (void) njs_string_prop(&string2, val2); + length = string1.length + string2.length; + /* * A result of concatenation of Byte and ASCII or UTF-8 strings * is a Byte string. */ - if ((string1.length != 0 || string1.size == 0) - && (string2.length != 0 || string2.size == 0)) - { - length = string1.length + string2.length; - - } else { + if (njs_is_byte_string(&string1) || njs_is_byte_string(&string2)) { length = 0; }