blob: 4a078727d45fd0d7230c2e9c3d6b9cb3c1309b26 [file] [log] [blame] [raw]
char *
ndk_conf_set_encoding_slot (ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{
char *p = conf;
ndk_encoding_t *ep;
ngx_str_t *value;
size_t len;
iconv_t ic;
ep = (ndk_encoding_t *) (p + cmd->offset);
if (ep->from && ep->to)
return "is duplicate";
value = cf->args->elts;
if (ep->from) {
ep->to = (char *) value[1].data;
len = strlen (ep->from);
} else if (ep->to) {
ep->from = (char *) value[1].data;
len = strlen (ep->to);
} else {
return "has no base encoding";
}
if (len == value[1].len && !strncasecmp (ep->to, ep->from, len)) {
ngx_log_error (NGX_LOG_WARN, cf->log, 0,
"\"%V\" '%V' encoding is ignored (no conversion)", &value[0], &value[1]);
return NGX_CONF_OK;
}
ic = iconv_open (ep->to, ep->from);
if (ic == (iconv_t)-1)
return "has an invalid encoding";
if (iconv_close (ic)) {
ngx_log_error (NGX_LOG_EMERG, cf->log, errno, "iconv_close()");
return NGX_CONF_ERROR;
}
return NGX_CONF_OK;
}