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;
}
Example #3
0
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;
}
Example #4
0
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;
}