Return-Path: Delivered-To: apmail-httpd-apreq-cvs-archive@www.apache.org Received: (qmail 88908 invoked from network); 16 May 2005 04:42:07 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 16 May 2005 04:42:07 -0000 Received: (qmail 40145 invoked by uid 500); 16 May 2005 04:46:59 -0000 Delivered-To: apmail-httpd-apreq-cvs-archive@httpd.apache.org Received: (qmail 40135 invoked by uid 500); 16 May 2005 04:46:59 -0000 Mailing-List: contact apreq-cvs-help@httpd.apache.org; run by ezmlm Precedence: bulk Reply-To: apreq-dev@httpd.apache.org List-Post: List-Help: List-Unsubscribe: List-Id: Delivered-To: mailing list apreq-cvs@httpd.apache.org Received: (qmail 40119 invoked by uid 99); 16 May 2005 04:46:59 -0000 X-ASF-Spam-Status: No, hits=-9.6 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME,UPPERCASE_25_50 X-Spam-Check-By: apache.org Received: from minotaur.apache.org (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.28) with SMTP; Sun, 15 May 2005 21:46:58 -0700 Received: (qmail 88900 invoked by uid 65534); 16 May 2005 04:42:04 -0000 Message-ID: <20050516044204.88899.qmail@minotaur.apache.org> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Subject: svn commit: r170303 - in /httpd/apreq/trunk/glue/perl/xsbuilder: APR/Request/APR__Request.h APR/Request/Param/APR__Request__Param.h APR/Request/Request.xs apreq_xs_postperl.h Date: Mon, 16 May 2005 04:42:03 -0000 To: apreq-cvs@httpd.apache.org From: joes@apache.org X-Mailer: svnmailer-1.0.0-dev X-Virus-Checked: Checked X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: joes Date: Sun May 15 21:42:01 2005 New Revision: 170303 URL: http://svn.apache.org/viewcvs?rev=3D170303&view=3Drev Log: Dump silly APREQ_XS_THROW_ERROR macro, and upgrade apreq_xs_croak. Modified: httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/APR__Request.h httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/Param/APR__Request__P= aram.h httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/Request.xs httpd/apreq/trunk/glue/perl/xsbuilder/apreq_xs_postperl.h Modified: httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/APR__Request.h URL: http://svn.apache.org/viewcvs/httpd/apreq/trunk/glue/perl/xsbuilder/AP= R/Request/APR__Request.h?rev=3D170303&r1=3D170302&r2=3D170303&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/APR__Request.h (origi= nal) +++ httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/APR__Request.h Sun Ma= y 15 21:42:01 2005 @@ -4,15 +4,14 @@ { dXSARGS; apreq_handle_t *req; - SV *sv, *obj; + SV *obj; IV iv; =20 if (items =3D=3D 0 || items > 2 || !SvROK(ST(0)) || !sv_derived_from(ST(0), "APR::Request")) Perl_croak(aTHX_ "Usage: APR::Request::jar($req [,$name])"); =20 - sv =3D ST(0); - obj =3D apreq_xs_sv2object(aTHX_ sv, HANDLE_CLASS, 'r'); + obj =3D apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, 'r'); iv =3D SvIVX(obj); req =3D INT2PTR(apreq_handle_t *, iv); =20 @@ -28,8 +27,10 @@ apr_status_t s; =20 s =3D apreq_jar(req, &t); - if (apreq_module_status_is_error(s)) - APREQ_XS_THROW_ERROR(r, s, "APR::Request::jar", ERROR_CLAS= S); + if (apreq_module_status_is_error(s)=20 + && !sv_derived_from(ST(0), ERROR_CLASS)) + apreq_xs_croak(aTHX_ newHV(), obj, s, + "APR::Request::jar", ERROR_CLASS); =20 XSRETURN_UNDEF; } @@ -41,8 +42,10 @@ =20 s =3D apreq_jar(req, &t); =20 - if (apreq_module_status_is_error(s)) - APREQ_XS_THROW_ERROR(r, s, "APR::Request::jar", ERROR_CLASS); + if (apreq_module_status_is_error(s) + && !sv_derived_from(ST(0), ERROR_CLASS)) + apreq_xs_croak(aTHX_ newHV(), obj, s, + "APR::Request::jar", ERROR_CLASS); =20 if (t =3D=3D NULL) XSRETURN_EMPTY; @@ -80,15 +83,14 @@ { dXSARGS; apreq_handle_t *req; - SV *sv, *obj; + SV *obj; IV iv; =20 if (items =3D=3D 0 || items > 2 || !SvROK(ST(0)) || !sv_derived_from(ST(0), HANDLE_CLASS)) Perl_croak(aTHX_ "Usage: APR::Request::args($req [,$name])"); =20 - sv =3D ST(0); - obj =3D apreq_xs_sv2object(aTHX_ sv, HANDLE_CLASS, 'r'); + obj =3D apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, 'r'); iv =3D SvIVX(obj); req =3D INT2PTR(apreq_handle_t *, iv); =20 @@ -106,8 +108,10 @@ apr_status_t s; s =3D apreq_args(req, &t); =20 - if (apreq_module_status_is_error(s)) - APREQ_XS_THROW_ERROR(r, s, "APR::Request::args", ERROR_CLA= SS); + if (apreq_module_status_is_error(s) && + !sv_derived_from(ST(0), ERROR_CLASS)) + apreq_xs_croak(aTHX_ newHV(), obj, s, + "APR::Request::args", ERROR_CLASS); =20 XSRETURN_UNDEF; } @@ -119,8 +123,10 @@ =20 s =3D apreq_args(req, &t); =20 - if (apreq_module_status_is_error(s)) - APREQ_XS_THROW_ERROR(r, s, "APR::Request::args", ERROR_CLASS); + if (apreq_module_status_is_error(s) && + !sv_derived_from(ST(0), ERROR_CLASS)) + apreq_xs_croak(aTHX_ newHV(), obj, s, + "APR::Request::args", ERROR_CLASS); =20 if (t =3D=3D NULL) XSRETURN_EMPTY; @@ -157,15 +163,14 @@ { dXSARGS; apreq_handle_t *req; - SV *sv, *obj; + SV *obj; IV iv; =20 if (items =3D=3D 0 || items > 2 || !SvROK(ST(0)) || !sv_derived_from(ST(0),HANDLE_CLASS)) Perl_croak(aTHX_ "Usage: APR::Request::body($req [,$name])"); =20 - sv =3D ST(0); - obj =3D apreq_xs_sv2object(aTHX_ sv, HANDLE_CLASS, 'r'); + obj =3D apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, 'r'); iv =3D SvIVX(obj); req =3D INT2PTR(apreq_handle_t *, iv); =20 @@ -183,8 +188,10 @@ apr_status_t s; s =3D apreq_body(req, &t); =20 - if (apreq_module_status_is_error(s)) - APREQ_XS_THROW_ERROR(r, s, "APR::Request::body", ERROR_CLA= SS); + if (apreq_module_status_is_error(s) && + !sv_derived_from(ST(0), ERROR_CLASS)) + apreq_xs_croak(aTHX_ newHV(), obj, s, + "APR::Request::body", ERROR_CLASS); =20 XSRETURN_UNDEF; } @@ -196,8 +203,10 @@ =20 s =3D apreq_body(req, &t); =20 - if (apreq_module_status_is_error(s)) - APREQ_XS_THROW_ERROR(r, s, "APR::Request::body", ERROR_CLASS); + if (apreq_module_status_is_error(s) && + !sv_derived_from(ST(0), ERROR_CLASS)) + apreq_xs_croak(aTHX_ newHV(), obj, s, + "APR::Request::body", ERROR_CLASS); =20 if (t =3D=3D NULL) XSRETURN_EMPTY; @@ -235,15 +244,14 @@ { dXSARGS; apreq_handle_t *req; - SV *sv, *obj; + SV *obj; IV iv; =20 if (items =3D=3D 0 || items > 2 || !SvROK(ST(0)) || !sv_derived_from(ST(0), "APR::Request")) Perl_croak(aTHX_ "Usage: APR::Request::param($req [,$name])"); =20 - sv =3D ST(0); - obj =3D apreq_xs_sv2object(aTHX_ sv, HANDLE_CLASS, 'r'); + obj =3D apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, 'r'); iv =3D SvIVX(obj); req =3D INT2PTR(apreq_handle_t *, iv); =20 Modified: httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/Param/APR__Requ= est__Param.h URL: http://svn.apache.org/viewcvs/httpd/apreq/trunk/glue/perl/xsbuilder/AP= R/Request/Param/APR__Request__Param.h?rev=3D170303&r1=3D170302&r2=3D170303&= view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/Param/APR__Request__P= aram.h (original) +++ httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/Param/APR__Request__P= aram.h Sun May 15 21:42:01 2005 @@ -279,7 +279,7 @@ e =3D APR_BRIGADE_FIRST(bb); s =3D apr_bucket_read(e, &data, &dlen, APR_BLOCK_READ); if (s !=3D APR_SUCCESS) - apreq_xs_croak(aTHX_ newHV(), s,=20 + apreq_xs_croak(aTHX_ newHV(), Nullsv, s,=20 "APR::Request::Brigade::READ",=20 "APR::Error"); want =3D dlen; @@ -292,7 +292,7 @@ case APR_INCOMPLETE: s =3D apr_brigade_length(bb, 1, &len); if (s !=3D APR_SUCCESS) - apreq_xs_croak(aTHX_ newHV(), s,=20 + apreq_xs_croak(aTHX_ newHV(), Nullsv, s,=20 "APR::Request::Brigade::READ", "APR::Error"); want =3D len; @@ -301,7 +301,7 @@ break; =20 default: - apreq_xs_croak(aTHX_ newHV(), s,=20 + apreq_xs_croak(aTHX_ newHV(), Nullsv, s,=20 "APR::Request::Brigade::READ", "APR::Error"); } @@ -318,8 +318,9 @@ apr_size_t dlen; s =3D apr_bucket_read(e, &data, &dlen, APR_BLOCK_READ); if (s !=3D APR_SUCCESS) - apreq_xs_croak(aTHX_ newHV(), s,=20 - "APR::Request::Brigade::READ", "APR::Error"); + apreq_xs_croak(aTHX_ newHV(), Nullsv, s,=20 + "APR::Request::Brigade::READ", + "APR::Error"); memcpy(buf, data, dlen); buf +=3D dlen; apr_bucket_delete(e); @@ -369,7 +370,7 @@ e =3D APR_BRIGADE_FIRST(bb); s =3D apr_bucket_read(e, &data, &dlen, APR_BLOCK_READ); if (s !=3D APR_SUCCESS) - apreq_xs_croak(aTHX_ newHV(), s,=20 + apreq_xs_croak(aTHX_ newHV(), Nullsv, s,=20 "APR::Request::Brigade::READLINE", "APR::Error"); =20 Modified: httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/Request.xs URL: http://svn.apache.org/viewcvs/httpd/apreq/trunk/glue/perl/xsbuilder/AP= R/Request/Request.xs?rev=3D170303&r1=3D170302&r2=3D170303&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/Request.xs (original) +++ httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/Request.xs Sun May 15= 21:42:01 2005 @@ -43,10 +43,13 @@ apr_uint64_t bytes; s =3D apreq_read_limit_get(req, &bytes); =20 if (s !=3D APR_SUCCESS) { - SV *sv =3D ST(0), *obj =3D ST(0); - APREQ_XS_THROW_ERROR(r, s,=20 - "APR::Request::read_limit", "APR::Request::Error"); - RETVAL =3D &PL_sv_undef; + if (!sv_derived_from(ST(0), ERROR_CLASS)) { + SV *obj =3D apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, = 'r'); + apreq_xs_croak(aTHX_ newHV(), obj, s, + "APR::Request::read_limit", ERROR_CLASS); + } + else + RETVAL =3D &PL_sv_undef; } else { RETVAL =3D newSVuv(bytes); @@ -55,12 +58,13 @@ else { apr_status_t s =3D apreq_read_limit_set(req, SvUV(val)); if (s !=3D APR_SUCCESS) { - if (GIMME_V =3D=3D G_VOID) { - SV *sv =3D ST(0), *obj =3D ST(0); - APREQ_XS_THROW_ERROR(r, s,=20 - "APR::Request::read_limit", "APR::Request::Error"); + if (GIMME_V =3D=3D G_VOID && !sv_derived_from(ST(0), ERROR_CLA= SS)) { + SV *obj =3D apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, = 'r'); + apreq_xs_croak(aTHX_ newHV(), obj, s, + "APR::Request::read_limit", ERROR_CLASS); } - RETVAL =3D &PL_sv_no; + else + RETVAL =3D &PL_sv_no; } else { RETVAL =3D &PL_sv_yes; @@ -82,10 +86,13 @@ apr_size_t bytes; s =3D apreq_brigade_limit_get(req, &bytes); =20 if (s !=3D APR_SUCCESS) { - SV *sv =3D ST(0), *obj =3D ST(0); - APREQ_XS_THROW_ERROR(r, s,=20 - "APR::Request::brigade_limit", "APR::Request::Error"); - RETVAL =3D &PL_sv_undef; + if (!sv_derived_from(ST(0), ERROR_CLASS)) { + SV *obj =3D apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, = 'r'); + apreq_xs_croak(aTHX_ newHV(), obj, s, + "APR::Request::brigade_limit", ERROR_CLASS); + } + else + RETVAL =3D &PL_sv_undef; } else { RETVAL =3D newSVuv(bytes); @@ -94,12 +101,13 @@ else { apr_status_t s =3D apreq_brigade_limit_set(req, SvUV(val)); if (s !=3D APR_SUCCESS) { - if (GIMME_V =3D=3D G_VOID) { - SV *sv =3D ST(0), *obj =3D ST(0); - APREQ_XS_THROW_ERROR(r, s,=20 - "APR::Request::brigade_limit", "APR::Request::Error"); + if (GIMME_V =3D=3D G_VOID && !sv_derived_from(ST(0), ERROR_CLA= SS)) { + SV *obj =3D apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, = 'r'); + apreq_xs_croak(aTHX_ newHV(), obj, s, + "APR::Request::brigade_limit", ERROR_CLASS); } - RETVAL =3D &PL_sv_no; + else + RETVAL =3D &PL_sv_no; } else { RETVAL =3D &PL_sv_yes; @@ -122,10 +130,13 @@ const char *path; s =3D apreq_temp_dir_get(req, &path); =20 if (s !=3D APR_SUCCESS) { - SV *sv =3D ST(0), *obj =3D ST(0); - APREQ_XS_THROW_ERROR(r, s,=20 - "APR::Request::temp_dir", "APR::Request::Error"); - RETVAL =3D &PL_sv_undef; + if (!sv_derived_from(ST(0), ERROR_CLASS)) { + SV *obj =3D apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, = 'r'); + apreq_xs_croak(aTHX_ newHV(), obj, s, + "APR::Request::temp_dir", ERROR_CLASS); + } + else + RETVAL =3D &PL_sv_undef; } else { RETVAL =3D (path =3D=3D NULL) ? &PL_sv_undef : newSVpv(path, 0= ); @@ -134,12 +145,13 @@ else { apr_status_t s =3D apreq_temp_dir_set(req, SvPV_nolen(val)); if (s !=3D APR_SUCCESS) { - if (GIMME_V =3D=3D G_VOID) { - SV *sv =3D ST(0), *obj =3D ST(0); - APREQ_XS_THROW_ERROR(r, s,=20 - "APR::Request::temp_dir", "APR::Request::Error"); + if (GIMME_V =3D=3D G_VOID && !sv_derived_from(ST(0), ERROR_CLA= SS)) { + SV *obj =3D apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, = 'r'); + apreq_xs_croak(aTHX_ newHV(), obj, s, + "APR::Request::temp_dir", ERROR_CLASS); } - RETVAL =3D &PL_sv_no; + else + RETVAL =3D &PL_sv_no; } else { RETVAL =3D &PL_sv_yes; Modified: httpd/apreq/trunk/glue/perl/xsbuilder/apreq_xs_postperl.h URL: http://svn.apache.org/viewcvs/httpd/apreq/trunk/glue/perl/xsbuilder/ap= req_xs_postperl.h?rev=3D170303&r1=3D170302&r2=3D170303&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- httpd/apreq/trunk/glue/perl/xsbuilder/apreq_xs_postperl.h (original) +++ httpd/apreq/trunk/glue/perl/xsbuilder/apreq_xs_postperl.h Sun May 15 21= :42:01 2005 @@ -236,28 +236,28 @@ } =20 static APR_INLINE -void apreq_xs_croak(pTHX_ HV *data, apr_status_t rc, const char *func,=20 - const char *class) +void apreq_xs_croak(pTHX_ HV *data, SV *obj, apr_status_t rc, + const char *func, const char *class) { - HV *stash =3D gv_stashpvn(class, strlen(class), FALSE); + HV *stash; =20 - sv_setsv(ERRSV, sv_2mortal(sv_bless(newRV_noinc((SV*)data), stash))); + stash =3D gv_stashpv(ERROR_CLASS, FALSE); + if (stash =3D=3D NULL) { + SV *pkg_name =3D sv_2mortal(newSVpv(class, 0)); + Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, pkg_name, Nullsv); + stash =3D gv_stashpv(class, TRUE); + } + + if (obj !=3D Nullsv) + sv_setsv(*hv_fetch(data, "_r", 2, 1), sv_2mortal(newRV_inc(obj))= ); sv_setiv(*hv_fetch(data, "rc", 2, 1), rc); sv_setpv(*hv_fetch(data, "file", 4, 1), CopFILE(PL_curcop)); sv_setiv(*hv_fetch(data, "line", 4, 1), CopLINE(PL_curcop)); sv_setpv(*hv_fetch(data, "func", 4, 1), func); + + sv_setsv(ERRSV, sv_2mortal(sv_bless(newRV_noinc((SV*)data), stash))); Perl_croak(aTHX_ Nullch); } - -#define APREQ_XS_THROW_ERROR(attr, status, func, errpkg) do { \ - if (!sv_derived_from(sv, errpkg)) { \ - HV *hv =3D newHV(); \ - SV *rv =3D newRV_inc(obj); \ - sv_setsv(*hv_fetch(hv, "_" #attr, 2, 1), sv_2mortal(rv)); \ - apreq_xs_croak(aTHX_ hv, status, func, errpkg); \ - } \ -} while (0) - =20 static APR_INLINE const char *apreq_xs_helper_class(pTHX_ SV **SP, SV *sv, const char *metho= d)