1760 | 1760 |
|
1761 | 1761 |
char *
|
1762 | 1762 |
ngx_http_merge_types(ngx_conf_t *cf, ngx_array_t *keys, ngx_hash_t *types_hash,
|
1763 | |
ngx_array_t *prev_keys, ngx_hash_t *prev_types_hash,
|
|
1763 |
ngx_array_t *prev_keys, ngx_hash_t *prev_types_hash,
|
1764 | 1764 |
ngx_str_t *default_types)
|
1765 | 1765 |
{
|
1766 | 1766 |
ngx_hash_init_t hash;
|
1767 | 1767 |
|
1768 | |
if (keys == NULL) {
|
1769 | |
|
1770 | |
if (prev_keys) {
|
1771 | |
*types_hash = *prev_types_hash;
|
1772 | |
return NGX_CONF_OK;
|
1773 | |
}
|
1774 | |
|
1775 | |
if (ngx_http_set_default_types(cf, &keys, default_types)
|
1776 | |
!= NGX_CONF_OK)
|
1777 | |
{
|
|
1768 |
if (keys) {
|
|
1769 |
|
|
1770 |
hash.hash = types_hash;
|
|
1771 |
hash.key = NULL;
|
|
1772 |
hash.max_size = 2048;
|
|
1773 |
hash.bucket_size = 64;
|
|
1774 |
hash.name = "test_types_hash";
|
|
1775 |
hash.pool = cf->pool;
|
|
1776 |
hash.temp_pool = NULL;
|
|
1777 |
|
|
1778 |
if (ngx_hash_init(&hash, keys->elts, keys->nelts) != NGX_OK) {
|
1778 | 1779 |
return NGX_CONF_ERROR;
|
1779 | 1780 |
}
|
1780 | |
}
|
1781 | |
|
1782 | |
hash.hash = types_hash;
|
1783 | |
hash.key = NULL;
|
1784 | |
hash.max_size = 2048;
|
1785 | |
hash.bucket_size = 64;
|
1786 | |
hash.name = "test_types_hash";
|
1787 | |
hash.pool = cf->pool;
|
1788 | |
hash.temp_pool = NULL;
|
1789 | |
|
1790 | |
if (ngx_hash_init(&hash, keys->elts, keys->nelts) != NGX_OK) {
|
1791 | |
return NGX_CONF_ERROR;
|
1792 | |
}
|
|
1781 |
|
|
1782 |
return NGX_CONF_OK;
|
|
1783 |
}
|
|
1784 |
|
|
1785 |
if (prev_types_hash->buckets == NULL) {
|
|
1786 |
|
|
1787 |
if (prev_keys == NULL) {
|
|
1788 |
|
|
1789 |
if (ngx_http_set_default_types(cf, &prev_keys, default_types)
|
|
1790 |
!= NGX_OK)
|
|
1791 |
{
|
|
1792 |
return NGX_CONF_ERROR;
|
|
1793 |
}
|
|
1794 |
}
|
|
1795 |
|
|
1796 |
hash.hash = prev_types_hash;
|
|
1797 |
hash.key = NULL;
|
|
1798 |
hash.max_size = 2048;
|
|
1799 |
hash.bucket_size = 64;
|
|
1800 |
hash.name = "test_types_hash";
|
|
1801 |
hash.pool = cf->pool;
|
|
1802 |
hash.temp_pool = NULL;
|
|
1803 |
|
|
1804 |
if (ngx_hash_init(&hash, prev_keys->elts, prev_keys->nelts) != NGX_OK) {
|
|
1805 |
return NGX_CONF_ERROR;
|
|
1806 |
}
|
|
1807 |
}
|
|
1808 |
|
|
1809 |
*types_hash = *prev_types_hash;
|
1793 | 1810 |
|
1794 | 1811 |
return NGX_CONF_OK;
|
1795 | 1812 |
|
1796 | 1813 |
}
|
1797 | 1814 |
|
1798 | 1815 |
|
1799 | |
char *
|
|
1816 |
ngx_int_t
|
1800 | 1817 |
ngx_http_set_default_types(ngx_conf_t *cf, ngx_array_t **types,
|
1801 | 1818 |
ngx_str_t *default_type)
|
1802 | 1819 |
{
|
|
1804 | 1821 |
|
1805 | 1822 |
*types = ngx_array_create(cf->temp_pool, 1, sizeof(ngx_hash_key_t));
|
1806 | 1823 |
if (*types == NULL) {
|
1807 | |
return NGX_CONF_ERROR;
|
|
1824 |
return NGX_ERROR;
|
1808 | 1825 |
}
|
1809 | 1826 |
|
1810 | 1827 |
while (default_type->len) {
|
1811 | 1828 |
|
1812 | 1829 |
type = ngx_array_push(*types);
|
1813 | 1830 |
if (type == NULL) {
|
1814 | |
return NGX_CONF_ERROR;
|
|
1831 |
return NGX_ERROR;
|
1815 | 1832 |
}
|
1816 | 1833 |
|
1817 | 1834 |
type->key = *default_type;
|
|
1822 | 1839 |
default_type++;
|
1823 | 1840 |
}
|
1824 | 1841 |
|
1825 | |
return NGX_CONF_OK;
|
1826 | |
}
|
|
1842 |
return NGX_OK;
|
|
1843 |
}
|