char * ndk_conf_set_regex_slot (ngx_conf_t *cf, ngx_command_t *cmd, void *conf) { char *p = conf; ngx_str_t *value; ngx_conf_post_t *post; ngx_regex_elt_t *re; ngx_regex_compile_t rc; u_char errstr[NGX_MAX_CONF_ERRSTR]; re = (ngx_regex_elt_t *) (p + cmd->offset); if (re->name) { return "is duplicate"; } value = cf->args->elts; value++; ndk_zerov (rc); rc.pool = cf->pool; rc.err.len = NGX_MAX_CONF_ERRSTR; rc.err.data = errstr; rc.pattern = *value; if (ngx_regex_compile(&rc) != NGX_OK) { ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "%V", &rc.err); return NGX_CONF_ERROR; } re->regex = rc.regex; re->name = value->data; if (cmd->post) { post = cmd->post; return post->post_handler (cf, post, re); } return NGX_CONF_OK; } char * ndk_conf_set_regex_caseless_slot (ngx_conf_t *cf, ngx_command_t *cmd, void *conf) { char *p = conf; ngx_str_t *value; ngx_conf_post_t *post; ngx_regex_elt_t *re; ngx_regex_compile_t rc; u_char errstr[NGX_MAX_CONF_ERRSTR]; re = (ngx_regex_elt_t *) (p + cmd->offset); if (re->name) { return "is duplicate"; } value = cf->args->elts; value++; ndk_zerov (rc); rc.pool = cf->pool; rc.err.len = NGX_MAX_CONF_ERRSTR; rc.err.data = errstr; rc.pattern = *value; rc.options = NGX_REGEX_CASELESS; if (ngx_regex_compile(&rc) != NGX_OK) { ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "%V", &rc.err); return NGX_CONF_ERROR; } re->regex = rc.regex; re->name = value->data; if (cmd->post) { post = cmd->post; return post->post_handler (cf, post, re); } return NGX_CONF_OK; } char * ndk_conf_set_regex_array_slot (ngx_conf_t *cf, ngx_command_t *cmd, void *conf) { char *p = conf; ngx_str_t *value; ngx_conf_post_t *post; ngx_array_t **a; ngx_regex_elt_t *re; ngx_regex_compile_t rc; ngx_uint_t i, n; u_char errstr[NGX_MAX_CONF_ERRSTR]; a = (ngx_array_t **) (p + cmd->offset); if (*a != NGX_CONF_UNSET_PTR) { n = cf->args->nelts > 4 ? cf->args->nelts : 4; *a = ngx_array_create (cf->pool, n, sizeof (ngx_regex_elt_t)); if (*a == NULL) { return NGX_CONF_ERROR; } } ndk_zerov (rc); rc.pool = cf->pool; rc.err.len = NGX_MAX_CONF_ERRSTR; rc.err.data = errstr; value = cf->args->elts; value++; for (i=0; iregex = rc.regex; re->name = value->data; } if (cmd->post) { post = cmd->post; return post->post_handler (cf, post, a); } return NGX_CONF_OK; } char * ndk_conf_set_regex_array_caseless_slot (ngx_conf_t *cf, ngx_command_t *cmd, void *conf) { char *p = conf; ngx_str_t *value; ngx_conf_post_t *post; ngx_array_t **a; ngx_regex_elt_t *re; ngx_regex_compile_t rc; ngx_uint_t i, n; u_char errstr[NGX_MAX_CONF_ERRSTR]; a = (ngx_array_t **) (p + cmd->offset); if (*a != NGX_CONF_UNSET_PTR) { n = cf->args->nelts > 4 ? cf->args->nelts : 4; *a = ngx_array_create (cf->pool, n, sizeof (ngx_regex_elt_t)); if (*a == NULL) { return NGX_CONF_ERROR; } } ndk_zerov (rc); rc.pool = cf->pool; rc.err.len = NGX_MAX_CONF_ERRSTR; rc.err.data = errstr; value = cf->args->elts; value++; for (i=0; iregex = rc.regex; re->name = value->data; } if (cmd->post) { post = cmd->post; return post->post_handler (cf, post, a); } return NGX_CONF_OK; }