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;