From: Alexander Borisov Date: Wed, 17 Apr 2019 14:13:39 +0000 (+0300) Subject: Added function to get length of the string. X-Git-Tag: 0.3.2~68 X-Git-Url: http://git.kaiwu.me/postgresql/log/contrib/postgres_fdw/static/gitweb.js?a=commitdiff_plain;h=5f371f7a5647994609d48c42ea41191a7f0ee82e;p=njs.git Added function to get length of the string. Renamed function njs_string_length() to njs_string_eval_length(). --- diff --git a/njs/njs_regexp.c b/njs/njs_regexp.c index 3a9c11c8..03d79a73 100644 --- a/njs/njs_regexp.c +++ b/njs/njs_regexp.c @@ -797,7 +797,7 @@ njs_regexp_exec_result(njs_vm_t *vm, njs_regexp_t *regexp, njs_utf8_t utf8, start = &string[captures[n]]; size = captures[n + 1] - captures[n]; - length = njs_string_length(utf8, start, size); + length = njs_string_calc_length(utf8, start, size); ret = njs_regexp_string_create(vm, &array->start[i], start, size, length); diff --git a/njs/njs_string.c b/njs/njs_string.c index 579d6afb..a4d844aa 100644 --- a/njs/njs_string.c +++ b/njs/njs_string.c @@ -2691,7 +2691,7 @@ njs_string_match_multiple(njs_vm_t *vm, njs_value_t *args, size = captures[1] - captures[0]; - length = njs_string_length(utf8, start, size); + length = njs_string_calc_length(utf8, start, size); ret = njs_string_new(vm, &array->start[array->length], start, size, length); @@ -2890,7 +2890,7 @@ njs_string_split_part_add(njs_vm_t *vm, njs_array_t *array, njs_utf8_t utf8, { ssize_t length; - length = njs_string_length(utf8, start, size); + length = njs_string_calc_length(utf8, start, size); return njs_array_string_add(vm, array, start, size, length); } @@ -3133,7 +3133,7 @@ njs_string_replace_regexp_function(njs_vm_t *vm, njs_value_t *args, size = captures[k + 1] - captures[k]; k += 2; - length = njs_string_length(r->utf8, start, size); + length = njs_string_calc_length(r->utf8, start, size); ret = njs_string_new(vm, &arguments[i], start, size, length); if (nxt_slow_path(ret != NXT_OK)) { @@ -3145,7 +3145,7 @@ njs_string_replace_regexp_function(njs_vm_t *vm, njs_value_t *args, njs_value_number_set(&arguments[n + 1], captures[0]); /* The whole string being examined. */ - length = njs_string_length(r->utf8, r->part[0].start, r->part[0].size); + length = njs_string_calc_length(r->utf8, r->part[0].start, r->part[0].size); ret = njs_string_new(vm, &arguments[n + 2], r->part[0].start, r->part[0].size, length); diff --git a/njs/njs_string.h b/njs/njs_string.h index d70a7dc0..734c274b 100644 --- a/njs/njs_string.h +++ b/njs/njs_string.h @@ -100,7 +100,7 @@ typedef enum { nxt_inline uint32_t -njs_string_length(njs_utf8_t utf8, const u_char *start, size_t size) +njs_string_calc_length(njs_utf8_t utf8, const u_char *start, size_t size) { ssize_t length; @@ -121,6 +121,24 @@ njs_string_length(njs_utf8_t utf8, const u_char *start, size_t size) } +nxt_inline uint32_t +njs_string_length(njs_value_t *string) +{ + uint32_t length, size; + + if (string->short_string.size != NJS_STRING_LONG) { + size = string->short_string.size; + length = string->short_string.length; + + } else { + size = string->long_string.size; + length = string->long_string.data->length; + } + + return (length == 0) ? size : length; +} + + njs_ret_t njs_string_set(njs_vm_t *vm, njs_value_t *value, const u_char *start, uint32_t size); u_char *njs_string_alloc(njs_vm_t *vm, njs_value_t *value, uint32_t size,