You are viewing a plain text version of this content. The canonical link for it is here.
Posted to apreq-cvs@httpd.apache.org by jo...@apache.org on 2005/05/16 06:42:03 UTC
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
Author: joes
Date: Sun May 15 21:42:01 2005
New Revision: 170303
URL: http://svn.apache.org/viewcvs?rev=170303&view=rev
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__Param.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/APR/Request/APR__Request.h?rev=170303&r1=170302&r2=170303&view=diff
==============================================================================
--- httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/APR__Request.h (original)
+++ httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/APR__Request.h Sun May 15 21:42:01 2005
@@ -4,15 +4,14 @@
{
dXSARGS;
apreq_handle_t *req;
- SV *sv, *obj;
+ SV *obj;
IV iv;
if (items == 0 || items > 2 || !SvROK(ST(0))
|| !sv_derived_from(ST(0), "APR::Request"))
Perl_croak(aTHX_ "Usage: APR::Request::jar($req [,$name])");
- sv = ST(0);
- obj = apreq_xs_sv2object(aTHX_ sv, HANDLE_CLASS, 'r');
+ obj = apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, 'r');
iv = SvIVX(obj);
req = INT2PTR(apreq_handle_t *, iv);
@@ -28,8 +27,10 @@
apr_status_t s;
s = apreq_jar(req, &t);
- 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);
XSRETURN_UNDEF;
}
@@ -41,8 +42,10 @@
s = apreq_jar(req, &t);
- 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);
if (t == NULL)
XSRETURN_EMPTY;
@@ -80,15 +83,14 @@
{
dXSARGS;
apreq_handle_t *req;
- SV *sv, *obj;
+ SV *obj;
IV iv;
if (items == 0 || items > 2 || !SvROK(ST(0))
|| !sv_derived_from(ST(0), HANDLE_CLASS))
Perl_croak(aTHX_ "Usage: APR::Request::args($req [,$name])");
- sv = ST(0);
- obj = apreq_xs_sv2object(aTHX_ sv, HANDLE_CLASS, 'r');
+ obj = apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, 'r');
iv = SvIVX(obj);
req = INT2PTR(apreq_handle_t *, iv);
@@ -106,8 +108,10 @@
apr_status_t s;
s = apreq_args(req, &t);
- 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);
XSRETURN_UNDEF;
}
@@ -119,8 +123,10 @@
s = apreq_args(req, &t);
- 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);
if (t == NULL)
XSRETURN_EMPTY;
@@ -157,15 +163,14 @@
{
dXSARGS;
apreq_handle_t *req;
- SV *sv, *obj;
+ SV *obj;
IV iv;
if (items == 0 || items > 2 || !SvROK(ST(0))
|| !sv_derived_from(ST(0),HANDLE_CLASS))
Perl_croak(aTHX_ "Usage: APR::Request::body($req [,$name])");
- sv = ST(0);
- obj = apreq_xs_sv2object(aTHX_ sv, HANDLE_CLASS, 'r');
+ obj = apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, 'r');
iv = SvIVX(obj);
req = INT2PTR(apreq_handle_t *, iv);
@@ -183,8 +188,10 @@
apr_status_t s;
s = apreq_body(req, &t);
- 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);
XSRETURN_UNDEF;
}
@@ -196,8 +203,10 @@
s = apreq_body(req, &t);
- 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);
if (t == NULL)
XSRETURN_EMPTY;
@@ -235,15 +244,14 @@
{
dXSARGS;
apreq_handle_t *req;
- SV *sv, *obj;
+ SV *obj;
IV iv;
if (items == 0 || items > 2 || !SvROK(ST(0))
|| !sv_derived_from(ST(0), "APR::Request"))
Perl_croak(aTHX_ "Usage: APR::Request::param($req [,$name])");
- sv = ST(0);
- obj = apreq_xs_sv2object(aTHX_ sv, HANDLE_CLASS, 'r');
+ obj = apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, 'r');
iv = SvIVX(obj);
req = INT2PTR(apreq_handle_t *, iv);
Modified: httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/Param/APR__Request__Param.h
URL: http://svn.apache.org/viewcvs/httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/Param/APR__Request__Param.h?rev=170303&r1=170302&r2=170303&view=diff
==============================================================================
--- httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/Param/APR__Request__Param.h (original)
+++ httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/Param/APR__Request__Param.h Sun May 15 21:42:01 2005
@@ -279,7 +279,7 @@
e = APR_BRIGADE_FIRST(bb);
s = apr_bucket_read(e, &data, &dlen, APR_BLOCK_READ);
if (s != APR_SUCCESS)
- apreq_xs_croak(aTHX_ newHV(), s,
+ apreq_xs_croak(aTHX_ newHV(), Nullsv, s,
"APR::Request::Brigade::READ",
"APR::Error");
want = dlen;
@@ -292,7 +292,7 @@
case APR_INCOMPLETE:
s = apr_brigade_length(bb, 1, &len);
if (s != APR_SUCCESS)
- apreq_xs_croak(aTHX_ newHV(), s,
+ apreq_xs_croak(aTHX_ newHV(), Nullsv, s,
"APR::Request::Brigade::READ",
"APR::Error");
want = len;
@@ -301,7 +301,7 @@
break;
default:
- apreq_xs_croak(aTHX_ newHV(), s,
+ apreq_xs_croak(aTHX_ newHV(), Nullsv, s,
"APR::Request::Brigade::READ",
"APR::Error");
}
@@ -318,8 +318,9 @@
apr_size_t dlen;
s = apr_bucket_read(e, &data, &dlen, APR_BLOCK_READ);
if (s != APR_SUCCESS)
- apreq_xs_croak(aTHX_ newHV(), s,
- "APR::Request::Brigade::READ", "APR::Error");
+ apreq_xs_croak(aTHX_ newHV(), Nullsv, s,
+ "APR::Request::Brigade::READ",
+ "APR::Error");
memcpy(buf, data, dlen);
buf += dlen;
apr_bucket_delete(e);
@@ -369,7 +370,7 @@
e = APR_BRIGADE_FIRST(bb);
s = apr_bucket_read(e, &data, &dlen, APR_BLOCK_READ);
if (s != APR_SUCCESS)
- apreq_xs_croak(aTHX_ newHV(), s,
+ apreq_xs_croak(aTHX_ newHV(), Nullsv, s,
"APR::Request::Brigade::READLINE",
"APR::Error");
Modified: httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/Request.xs
URL: http://svn.apache.org/viewcvs/httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/Request.xs?rev=170303&r1=170302&r2=170303&view=diff
==============================================================================
--- 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 = apreq_read_limit_get(req, &bytes);
if (s != APR_SUCCESS) {
- SV *sv = ST(0), *obj = ST(0);
- APREQ_XS_THROW_ERROR(r, s,
- "APR::Request::read_limit", "APR::Request::Error");
- RETVAL = &PL_sv_undef;
+ if (!sv_derived_from(ST(0), ERROR_CLASS)) {
+ SV *obj = apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, 'r');
+ apreq_xs_croak(aTHX_ newHV(), obj, s,
+ "APR::Request::read_limit", ERROR_CLASS);
+ }
+ else
+ RETVAL = &PL_sv_undef;
}
else {
RETVAL = newSVuv(bytes);
@@ -55,12 +58,13 @@
else {
apr_status_t s = apreq_read_limit_set(req, SvUV(val));
if (s != APR_SUCCESS) {
- if (GIMME_V == G_VOID) {
- SV *sv = ST(0), *obj = ST(0);
- APREQ_XS_THROW_ERROR(r, s,
- "APR::Request::read_limit", "APR::Request::Error");
+ if (GIMME_V == G_VOID && !sv_derived_from(ST(0), ERROR_CLASS)) {
+ SV *obj = apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, 'r');
+ apreq_xs_croak(aTHX_ newHV(), obj, s,
+ "APR::Request::read_limit", ERROR_CLASS);
}
- RETVAL = &PL_sv_no;
+ else
+ RETVAL = &PL_sv_no;
}
else {
RETVAL = &PL_sv_yes;
@@ -82,10 +86,13 @@
apr_size_t bytes;
s = apreq_brigade_limit_get(req, &bytes);
if (s != APR_SUCCESS) {
- SV *sv = ST(0), *obj = ST(0);
- APREQ_XS_THROW_ERROR(r, s,
- "APR::Request::brigade_limit", "APR::Request::Error");
- RETVAL = &PL_sv_undef;
+ if (!sv_derived_from(ST(0), ERROR_CLASS)) {
+ SV *obj = apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, 'r');
+ apreq_xs_croak(aTHX_ newHV(), obj, s,
+ "APR::Request::brigade_limit", ERROR_CLASS);
+ }
+ else
+ RETVAL = &PL_sv_undef;
}
else {
RETVAL = newSVuv(bytes);
@@ -94,12 +101,13 @@
else {
apr_status_t s = apreq_brigade_limit_set(req, SvUV(val));
if (s != APR_SUCCESS) {
- if (GIMME_V == G_VOID) {
- SV *sv = ST(0), *obj = ST(0);
- APREQ_XS_THROW_ERROR(r, s,
- "APR::Request::brigade_limit", "APR::Request::Error");
+ if (GIMME_V == G_VOID && !sv_derived_from(ST(0), ERROR_CLASS)) {
+ SV *obj = apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, 'r');
+ apreq_xs_croak(aTHX_ newHV(), obj, s,
+ "APR::Request::brigade_limit", ERROR_CLASS);
}
- RETVAL = &PL_sv_no;
+ else
+ RETVAL = &PL_sv_no;
}
else {
RETVAL = &PL_sv_yes;
@@ -122,10 +130,13 @@
const char *path;
s = apreq_temp_dir_get(req, &path);
if (s != APR_SUCCESS) {
- SV *sv = ST(0), *obj = ST(0);
- APREQ_XS_THROW_ERROR(r, s,
- "APR::Request::temp_dir", "APR::Request::Error");
- RETVAL = &PL_sv_undef;
+ if (!sv_derived_from(ST(0), ERROR_CLASS)) {
+ SV *obj = apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, 'r');
+ apreq_xs_croak(aTHX_ newHV(), obj, s,
+ "APR::Request::temp_dir", ERROR_CLASS);
+ }
+ else
+ RETVAL = &PL_sv_undef;
}
else {
RETVAL = (path == NULL) ? &PL_sv_undef : newSVpv(path, 0);
@@ -134,12 +145,13 @@
else {
apr_status_t s = apreq_temp_dir_set(req, SvPV_nolen(val));
if (s != APR_SUCCESS) {
- if (GIMME_V == G_VOID) {
- SV *sv = ST(0), *obj = ST(0);
- APREQ_XS_THROW_ERROR(r, s,
- "APR::Request::temp_dir", "APR::Request::Error");
+ if (GIMME_V == G_VOID && !sv_derived_from(ST(0), ERROR_CLASS)) {
+ SV *obj = apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, 'r');
+ apreq_xs_croak(aTHX_ newHV(), obj, s,
+ "APR::Request::temp_dir", ERROR_CLASS);
}
- RETVAL = &PL_sv_no;
+ else
+ RETVAL = &PL_sv_no;
}
else {
RETVAL = &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/apreq_xs_postperl.h?rev=170303&r1=170302&r2=170303&view=diff
==============================================================================
--- 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 @@
}
static APR_INLINE
-void apreq_xs_croak(pTHX_ HV *data, apr_status_t rc, const char *func,
- const char *class)
+void apreq_xs_croak(pTHX_ HV *data, SV *obj, apr_status_t rc,
+ const char *func, const char *class)
{
- HV *stash = gv_stashpvn(class, strlen(class), FALSE);
+ HV *stash;
- sv_setsv(ERRSV, sv_2mortal(sv_bless(newRV_noinc((SV*)data), stash)));
+ stash = gv_stashpv(ERROR_CLASS, FALSE);
+ if (stash == NULL) {
+ SV *pkg_name = sv_2mortal(newSVpv(class, 0));
+ Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, pkg_name, Nullsv);
+ stash = gv_stashpv(class, TRUE);
+ }
+
+ if (obj != 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 = newHV(); \
- SV *rv = newRV_inc(obj); \
- sv_setsv(*hv_fetch(hv, "_" #attr, 2, 1), sv_2mortal(rv)); \
- apreq_xs_croak(aTHX_ hv, status, func, errpkg); \
- } \
-} while (0)
-
static APR_INLINE
const char *apreq_xs_helper_class(pTHX_ SV **SP, SV *sv, const char *method)