diff options
Diffstat (limited to '')
-rw-r--r-- | src/nxt_conf.c | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/src/nxt_conf.c b/src/nxt_conf.c index 1bd82f58..58eb2080 100644 --- a/src/nxt_conf.c +++ b/src/nxt_conf.c @@ -180,6 +180,33 @@ nxt_conf_set_string(nxt_conf_value_t *value, nxt_str_t *str) } +nxt_int_t +nxt_conf_set_string_dup(nxt_conf_value_t *value, nxt_mp_t *mp, nxt_str_t *str) +{ + nxt_str_t tmp, *ptr; + + if (str->length > NXT_CONF_MAX_SHORT_STRING) { + value->type = NXT_CONF_VALUE_STRING; + + ptr = nxt_str_dup(mp, &tmp, str); + if (nxt_slow_path(ptr == NULL)) { + return NXT_ERROR; + } + + value->u.string.length = tmp.length; + value->u.string.start = tmp.start; + + } else { + value->type = NXT_CONF_VALUE_SHORT_STRING; + value->u.str.length = str->length; + + nxt_memcpy(value->u.str.start, str->start, str->length); + } + + return NXT_OK; +} + + int64_t nxt_conf_get_integer(nxt_conf_value_t *value) { @@ -246,6 +273,20 @@ nxt_conf_set_member_string(nxt_conf_value_t *object, nxt_str_t *name, } +nxt_int_t +nxt_conf_set_member_string_dup(nxt_conf_value_t *object, nxt_mp_t *mp, + nxt_str_t *name, nxt_str_t *value, uint32_t index) +{ + nxt_conf_object_member_t *member; + + member = &object->u.object->members[index]; + + nxt_conf_set_string(&member->name, name); + + return nxt_conf_set_string_dup(&member->value, mp, value); +} + + void nxt_conf_set_member_integer(nxt_conf_value_t *object, nxt_str_t *name, int64_t value, uint32_t index) @@ -261,6 +302,64 @@ nxt_conf_set_member_integer(nxt_conf_value_t *object, nxt_str_t *name, } +void +nxt_conf_set_member_null(nxt_conf_value_t *object, nxt_str_t *name, + uint32_t index) +{ + nxt_conf_object_member_t *member; + + member = &object->u.object->members[index]; + + nxt_conf_set_string(&member->name, name); + + member->value.type = NXT_CONF_VALUE_NULL; +} + + +nxt_conf_value_t * +nxt_conf_create_array(nxt_mp_t *mp, nxt_uint_t count) +{ + size_t size; + nxt_conf_value_t *value; + + size = sizeof(nxt_conf_value_t) + + sizeof(nxt_conf_array_t) + + count * sizeof(nxt_conf_value_t); + + value = nxt_mp_get(mp, size); + if (nxt_slow_path(value == NULL)) { + return NULL; + } + + value->u.array = nxt_pointer_to(value, sizeof(nxt_conf_value_t)); + value->u.array->count = count; + + value->type = NXT_CONF_VALUE_ARRAY; + + return value; +} + + +void +nxt_conf_set_element(nxt_conf_value_t *array, nxt_uint_t index, + nxt_conf_value_t *value) +{ + array->u.array->elements[index] = *value; +} + + +nxt_int_t +nxt_conf_set_element_string_dup(nxt_conf_value_t *array, nxt_mp_t *mp, + nxt_uint_t index, nxt_str_t *value) +{ + nxt_conf_value_t *element; + + element = &array->u.array->elements[index]; + + return nxt_conf_set_string_dup(element, mp, value); +} + + nxt_uint_t nxt_conf_type(nxt_conf_value_t *value) { |