]> git.kaiwu.me - njs.git/commitdiff
Added hex encoding for byte strings.
authorDmitry Volyntsev <xeioex@nginx.com>
Fri, 30 Mar 2018 12:46:38 +0000 (15:46 +0300)
committerDmitry Volyntsev <xeioex@nginx.com>
Fri, 30 Mar 2018 12:46:38 +0000 (15:46 +0300)
njs/njs_string.c
njs/njs_string.h

index af6d7d75cfc396e17c2d6ba68e0d361dcb4009f5..972cfab8d47390d10d45486e99073b6a92b3c67a 100644 (file)
@@ -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)
 {
index 361b4504ee138832fcb34dc12fd6bf79d4dad822..0735d331bf54db0ae189d5f03fa937fd87b139b1 100644 (file)
@@ -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);