static ngx_int_t ngx_http_perl_run_requires(pTHX_ ngx_array_t *requires, ngx_log_t *log) { char **script; STRLEN len; ngx_str_t err; ngx_uint_t i; script = requires->elts; for (i = 0; i < requires->nelts; i++) { require_pv(script[i]); if (SvTRUE(ERRSV)) { err.data = (u_char *) SvPV(ERRSV, len); for (len--; err.data[len] == LF || err.data[len] == CR; len--) { /* void */ } err.len = len + 1; ngx_log_error(NGX_LOG_EMERG, log, 0, "require_pv(\"%s\") failed: \"%V\"", script[i], &err); return NGX_ERROR; } } return NGX_OK; }
static ngx_int_t ngx_http_perl_run_requires(pTHX_ ngx_array_t *requires, ngx_log_t *log) { u_char *err; STRLEN len; ngx_str_t *script; ngx_uint_t i; if (requires == NGX_CONF_UNSET_PTR) { return NGX_OK; } script = requires->elts; for (i = 0; i < requires->nelts; i++) { require_pv((char *) script[i].data); if (SvTRUE(ERRSV)) { err = (u_char *) SvPV(ERRSV, len); while (--len && (err[len] == CR || err[len] == LF)) { /* void */ } ngx_log_error(NGX_LOG_EMERG, log, 0, "require_pv(\"%s\") failed: \"%*s\"", script[i].data, len + 1, err); return NGX_ERROR; } } return NGX_OK; }
static int output_body(request_rec *r, SV *body) { dTHX; int rc, type; switch (type = SvTYPE(SvRV(body))) { case SVt_PVAV: rc = output_body_ary(r, (AV *) SvRV(body)); break; case SVt_PVGV: /* TODO: * It's possible to get fd by PerlIO_fileno(IoIFP(sv_2io(body))) * It's possible to get apr_file_t by apr_os_file_put * Is it possible to implement above portable? */ require_pv("IO/Handle.pm"); case SVt_PVMG: if (respond_to(body, "path")) { rc = output_body_path(r, body); if (rc != DECLINED) break; } rc = output_body_obj(r, body, type); break; default: server_error(r, "response body must be an array reference or object"); rc = HTTP_INTERNAL_SERVER_ERROR; break; } return rc; }
int modperl_require_file(pTHX_ const char *pv, int logfailure) { require_pv(pv); if (SvTRUE(ERRSV)) { if (logfailure) { (void)modperl_errsv(aTHX_ HTTP_INTERNAL_SERVER_ERROR, NULL, NULL); } return FALSE; } return TRUE; }