From: Dmitry Volyntsev Date: Fri, 30 Mar 2018 12:46:38 +0000 (+0300) Subject: Added hex encoding for byte strings. X-Git-Tag: 0.2.0~10 X-Git-Url: http://www.kaiwu.me/postgresql/commit/?a=commitdiff_plain;h=5ce4e0549311565c4fddfa04293c74b6316ee4cc;p=njs.git Added hex encoding for byte strings. --- diff --git a/njs/njs_string.c b/njs/njs_string.c index af6d7d75..972cfab8 100644 --- a/njs/njs_string.c +++ b/njs/njs_string.c @@ -244,6 +244,37 @@ njs_string_alloc(njs_vm_t *vm, njs_value_t *value, uint32_t size, } +nxt_noinline njs_ret_t +njs_string_hex(njs_vm_t *vm, njs_value_t *value, const nxt_str_t *src) +{ + u_char *p, c; + size_t len; + nxt_uint_t i; + const u_char *start; + + static const u_char hex[16] = "0123456789abcdef"; + + len = src->length; + start = src->start; + + p = njs_string_alloc(vm, value, len * 2, len * 2); + + if (nxt_fast_path(p != NULL)) { + for (i = 0; i < len; i++) { + c = start[i]; + *p++ = hex[c >> 4]; + *p++ = hex[c & 0x0f]; + } + + return NXT_OK; + } + + njs_memory_error(vm); + + return NXT_ERROR; +} + + void njs_string_copy(njs_value_t *dst, njs_value_t *src) { diff --git a/njs/njs_string.h b/njs/njs_string.h index 361b4504..0735d331 100644 --- a/njs/njs_string.h +++ b/njs/njs_string.h @@ -122,6 +122,8 @@ njs_string_length(njs_utf8_t utf8, u_char *start, size_t size) 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, + const nxt_str_t *src); void njs_string_copy(njs_value_t *dst, njs_value_t *src); njs_ret_t njs_string_validate(njs_vm_t *vm, njs_string_prop_t *string, njs_value_t *value);