Mercurial > hg > nginx-quic
comparison src/core/ngx_string.c @ 5944:33c08d7e2915
Autoindex: implemented JSON output format.
author | Valentin Bartenev <vbart@nginx.com> |
---|---|
date | Fri, 12 Dec 2014 20:25:35 +0300 |
parents | d421be0d842a |
children | 78271500b8de |
comparison
equal
deleted
inserted
replaced
5943:631dee7bfd4e | 5944:33c08d7e2915 |
---|---|
1771 | 1771 |
1772 return (uintptr_t) dst; | 1772 return (uintptr_t) dst; |
1773 } | 1773 } |
1774 | 1774 |
1775 | 1775 |
1776 uintptr_t | |
1777 ngx_escape_json(u_char *dst, u_char *src, size_t size) | |
1778 { | |
1779 u_char ch; | |
1780 ngx_uint_t len; | |
1781 | |
1782 if (dst == NULL) { | |
1783 len = 0; | |
1784 | |
1785 while (size) { | |
1786 ch = *src++; | |
1787 | |
1788 if (ch == '\\' || ch == '"') { | |
1789 len++; | |
1790 | |
1791 } else if (ch <= 0x1f) { | |
1792 len += sizeof("\\u001F") - 2; | |
1793 } | |
1794 | |
1795 size--; | |
1796 } | |
1797 | |
1798 return (uintptr_t) len; | |
1799 } | |
1800 | |
1801 while (size) { | |
1802 ch = *src++; | |
1803 | |
1804 if (ch > 0x1f) { | |
1805 | |
1806 if (ch == '\\' || ch == '"') { | |
1807 *dst++ = '\\'; | |
1808 } | |
1809 | |
1810 *dst++ = ch; | |
1811 | |
1812 } else { | |
1813 *dst++ = '\\'; *dst++ = 'u'; *dst++ = '0'; *dst++ = '0'; | |
1814 *dst++ = '0' + (ch >> 4); | |
1815 | |
1816 ch &= 0xf; | |
1817 | |
1818 *dst++ = (ch < 10) ? ('0' + ch) : ('A' + ch - 10); | |
1819 } | |
1820 | |
1821 size--; | |
1822 } | |
1823 | |
1824 return (uintptr_t) dst; | |
1825 } | |
1826 | |
1827 | |
1776 void | 1828 void |
1777 ngx_str_rbtree_insert_value(ngx_rbtree_node_t *temp, | 1829 ngx_str_rbtree_insert_value(ngx_rbtree_node_t *temp, |
1778 ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel) | 1830 ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel) |
1779 { | 1831 { |
1780 ngx_str_node_t *n, *t; | 1832 ngx_str_node_t *n, *t; |