field = (ngx_str_t *) (p + data);
- return njs_string_create(vm, value, field->data, field->len, 0);
+ return njs_vm_value_string_set(vm, value, field->data, field->len);
}
continue;
}
- return njs_string_create(vm, value, h->key.data, h->key.len, 0);
+ return njs_vm_value_string_set(vm, value, h->key.data, h->key.len);
}
return NJS_DONE;
h = ngx_http_js_get_header(&r->headers_out.headers.part, v->start,
v->length);
if (h == NULL) {
- return njs_string_create(vm, value, NULL, 0, 0);
+ return njs_vm_value_string_set(vm, value, NULL, 0);
}
- return njs_string_create(vm, value, h->value.data, h->value.len, 0);
+ return njs_vm_value_string_set(vm, value, h->value.data, h->value.len);
}
next = 0;
for ( ;; ) {
- ret = njs_value_string_copy(vm, &s, njs_argument(args, n), &next);
+ ret = njs_vm_value_string_copy(vm, &s, njs_argument(args, n),
+ &next);
if (ret == NJS_DECLINED) {
break;
break;
}
- return njs_string_create(vm, value, v.data, v.len, 0);
+ return njs_vm_value_string_set(vm, value, v.data, v.len);
}
r = (ngx_http_request_t *) obj;
c = r->connection;
- return njs_string_create(vm, value, c->addr_text.data, c->addr_text.len, 0);
+ return njs_vm_value_string_set(vm, value, c->addr_text.data,
+ c->addr_text.len);
}
done:
- ret = njs_string_create(vm, request_body, body, len, 0);
+ ret = njs_vm_value_string_set(vm, request_body, body, len);
if (ret != NXT_OK) {
return NJS_ERROR;
h = ngx_http_js_get_header(&r->headers_in.headers.part, v->start,
v->length);
if (h == NULL) {
- return njs_string_create(vm, value, NULL, 0, 0);
+ return njs_vm_value_string_set(vm, value, NULL, 0);
}
- return njs_string_create(vm, value, h->value.data, h->value.len, 0);
+ return njs_vm_value_string_set(vm, value, h->value.data, h->value.len);
}
v = (nxt_str_t *) data;
if (ngx_http_arg(r, v->start, v->length, &arg) == NGX_OK) {
- return njs_string_create(vm, value, arg.data, arg.len, 0);
+ return njs_vm_value_string_set(vm, value, arg.data, arg.len);
}
- return njs_string_create(vm, value, NULL, 0, 0);
+ return njs_vm_value_string_set(vm, value, NULL, 0);
}
entry->len = 0;
}
- return njs_string_create(vm, value, start, len, 0);
+ return njs_vm_value_string_set(vm, value, start, len);
}
vv = ngx_http_get_variable(r, &name, key);
if (vv == NULL || vv->not_found) {
- return njs_string_create(vm, value, NULL, 0, 0);
+ return njs_vm_value_string_set(vm, value, NULL, 0);
}
- return njs_string_create(vm, value, vv->data, vv->len, 0);
+ return njs_vm_value_string_set(vm, value, vv->data, vv->len);
}
len = b ? b->last - b->pos : 0;
- p = njs_string_alloc(vm, value, len, 0);
+ p = njs_vm_value_string_alloc(vm, value, len);
if (p == NULL) {
return NJS_ERROR;
}
len = b ? b->last - b->pos : 0;
- p = njs_string_alloc(ctx->vm, buffer, len, 0);
+ p = njs_vm_value_string_alloc(ctx->vm, buffer, len);
if (p == NULL) {
return NJS_ERROR;
}
ctx = ngx_stream_get_module_ctx(s, ngx_stream_js_module);
- njs_string_create(ctx->vm, njs_value_arg(&last_key), last_str.start,
- last_str.length, 0);
+ njs_vm_value_string_set(ctx->vm, njs_value_arg(&last_key), last_str.start,
+ last_str.length);
c = s->connection;
s = (ngx_stream_session_t *) obj;
c = s->connection;
- return njs_string_create(vm, value, c->addr_text.data, c->addr_text.len, 0);
+ return njs_vm_value_string_set(vm, value, c->addr_text.data,
+ c->addr_text.len);
}
vv = ngx_stream_get_variable(s, &name, key);
if (vv == NULL || vv->not_found) {
- return njs_string_create(vm, value, NULL, 0, 0);
+ return njs_vm_value_string_set(vm, value, NULL, 0);
}
- return njs_string_create(vm, value, vv->data, vv->len, 0);
+ return njs_vm_value_string_set(vm, value, vv->data, vv->len);
}
#define njs_vm_error(vm, fmt, ...) \
- njs_value_error_set(vm, njs_vm_retval(vm), fmt, ##__VA_ARGS__)
+ njs_vm_value_error_set(vm, njs_vm_retval(vm), fmt, ##__VA_ARGS__)
typedef njs_ret_t (*njs_extern_get_t)(njs_vm_t *vm, njs_value_t *value,
NXT_EXPORT njs_value_t *njs_vm_retval(njs_vm_t *vm);
NXT_EXPORT void njs_vm_retval_set(njs_vm_t *vm, const njs_value_t *value);
-NXT_EXPORT u_char * njs_string_alloc(njs_vm_t *vm, njs_value_t *value,
- uint32_t size, uint32_t length);
-NXT_EXPORT njs_ret_t njs_string_create(njs_vm_t *vm, njs_value_t *value,
- const u_char *start, uint32_t size, uint32_t length);
-
-NXT_EXPORT nxt_int_t njs_value_string_copy(njs_vm_t *vm, nxt_str_t *retval,
+/*
+ * Sets a byte string value.
+ * start data is not copied and should not be freed.
+ */
+NXT_EXPORT njs_ret_t njs_vm_value_string_set(njs_vm_t *vm, njs_value_t *value,
+ const u_char *start, uint32_t size);
+NXT_EXPORT u_char *njs_vm_value_string_alloc(njs_vm_t *vm, njs_value_t *value,
+ uint32_t size);
+NXT_EXPORT nxt_int_t njs_vm_value_string_copy(njs_vm_t *vm, nxt_str_t *retval,
const njs_value_t *value, uintptr_t *next);
-
NXT_EXPORT njs_ret_t njs_vm_value_to_ext_string(njs_vm_t *vm, nxt_str_t *dst,
const njs_value_t *src, nxt_uint_t handle_exception);
NXT_EXPORT njs_ret_t njs_vm_retval_to_ext_string(njs_vm_t *vm, nxt_str_t *dst);
NXT_EXPORT njs_ret_t njs_vm_retval_dump(njs_vm_t *vm, nxt_str_t *dst,
nxt_uint_t indent);
+NXT_EXPORT void njs_vm_value_error_set(njs_vm_t *vm, njs_value_t *value,
+ const char *fmt, ...);
NXT_EXPORT void njs_vm_memory_error(njs_vm_t *vm);
NXT_EXPORT void njs_value_void_set(njs_value_t *value);
NXT_EXPORT void njs_value_boolean_set(njs_value_t *value, int yn);
NXT_EXPORT void njs_value_number_set(njs_value_t *value, double num);
NXT_EXPORT void njs_value_data_set(njs_value_t *value, void *data);
-NXT_EXPORT void njs_value_error_set(njs_vm_t *vm, njs_value_t *value,
- const char *fmt, ...);
NXT_EXPORT uint8_t njs_value_bool(const njs_value_t *value);
NXT_EXPORT double njs_value_number(const njs_value_t *value);
njs_ret_t
-njs_string_create(njs_vm_t *vm, njs_value_t *value, const u_char *start,
- uint32_t size, uint32_t length)
+njs_string_set(njs_vm_t *vm, njs_value_t *value, const u_char *start,
+ uint32_t size)
{
u_char *dst;
const u_char *src;
if (size <= NJS_STRING_SHORT) {
value->short_string.size = size;
- value->short_string.length = length;
+ value->short_string.length = 0;
dst = value->short_string.start;
src = start;
value->long_string.data = string;
string->start = (u_char *) start;
- string->length = length;
+ string->length = 0;
string->retain = 1;
}
}
+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,
+ uint32_t length);
njs_ret_t njs_string_new(njs_vm_t *vm, njs_value_t *value, const u_char *start,
uint32_t size, uint32_t length);
njs_ret_t njs_string_hex(njs_vm_t *vm, njs_value_t *value,
}
+nxt_noinline njs_ret_t
+njs_vm_value_string_set(njs_vm_t *vm, njs_value_t *value, const u_char *start,
+ uint32_t size)
+{
+ return njs_string_set(vm, value, start, size);
+}
+
+
+nxt_noinline u_char *
+njs_vm_value_string_alloc(njs_vm_t *vm, njs_value_t *value, uint32_t size)
+{
+ return njs_string_alloc(vm, value, size, 0);
+}
+
+
void
-njs_value_error_set(njs_vm_t *vm, njs_value_t *value, const char *fmt, ...)
+njs_vm_value_error_set(njs_vm_t *vm, njs_value_t *value, const char *fmt, ...)
{
va_list args;
u_char buf[NXT_MAX_ERROR_STR], *p;
nxt_int_t
-njs_value_string_copy(njs_vm_t *vm, nxt_str_t *retval, const njs_value_t *value,
- uintptr_t *next)
+njs_vm_value_string_copy(njs_vm_t *vm, nxt_str_t *retval,
+ const njs_value_t *value, uintptr_t *next)
{
uintptr_t n;
njs_array_t *array;
field = (nxt_str_t *) (p + data);
- return njs_string_create(vm, value, field->start, field->length, 0);
+ return njs_vm_value_string_set(vm, value, field->start, field->length);
}
p = nxt_sprintf(buf, buf + nxt_length(buf), "%uD", r->a);
- return njs_string_create(vm, value, buf, p - buf, 0);
+ return njs_vm_value_string_set(vm, value, buf, p - buf);
}
njs_unit_test_host_external(njs_vm_t *vm, njs_value_t *value, void *obj,
uintptr_t data)
{
- return njs_string_create(vm, value, (u_char *) "АБВГДЕЁЖЗИЙ", 22, 0);
+ return njs_vm_value_string_set(vm, value, (u_char *) "АБВГДЕЁЖЗИЙ", 22);
}
return NXT_ERROR;
}
- njs_string_create(vm, &name, key->start, key->length, 0);
- njs_string_create(vm, &val, value->start, value->length, 0);
+ njs_vm_value_string_set(vm, &name, key->start, key->length);
+ njs_vm_value_string_set(vm, &val, value->start, value->length);
prop = lvlhsh_unit_test_alloc(vm->mem_pool, &name, &val);
if (prop == NULL) {
size = 7 + h->length;
- p = njs_string_alloc(vm, value, size, 0);
+ p = njs_vm_value_string_alloc(vm, value, size);
if (p == NULL) {
return NJS_ERROR;
}
return NXT_DONE;
}
- return njs_string_create(vm, value, s, 2, 0);
+ return njs_vm_value_string_set(vm, value, s, 2);
}
ret = njs_vm_value_to_ext_string(vm, &s, njs_arg(args, nargs, 1), 0);
if (ret == NXT_OK && s.length == 3 && memcmp(s.start, "YES", 3) == 0) {
- return njs_string_create(vm, njs_vm_retval(vm), r->uri.start,
- r->uri.length, 0);
+ return njs_vm_value_string_set(vm, njs_vm_retval(vm), r->uri.start,
+ r->uri.length);
}
vm->retval = njs_value_void;