16
16
#include "modperl_bucket.h"
18
static apr_bucket *mpxs_APR__Bucket_new(pTHX_ SV *classname, SV *sv,
25
return modperl_bucket_sv_create(aTHX_ sv, offset, len);
28
/* this is just so C::Scan will pickup the prototype */
29
static MP_INLINE apr_status_t modperl_bucket_read(apr_bucket *bucket,
32
apr_read_type_e block)
34
return apr_bucket_read(bucket, str, len, block);
37
static MP_INLINE apr_status_t mpxs_modperl_bucket_read(pTHX_
40
apr_read_type_e block)
18
#define mpxs_APR__Bucket_delete apr_bucket_delete
19
#define mpxs_APR__Bucket_destroy apr_bucket_destroy
21
static apr_bucket *mpxs_APR__Bucket_new(pTHX_ SV *classname, apr_bucket_alloc_t *list,
22
SV *sv, apr_off_t offset, apr_size_t len)
29
(void)SvUPGRADE(sv, SVt_PV);
32
(void)SvPV(sv, full_len);
35
if (len > full_len - offset) {
36
Perl_croak(aTHX_ "APR::Bucket::new: the length argument can't be"
37
" bigger than the total buffer length minus offset");
41
len = full_len - offset;
44
return modperl_bucket_sv_create(aTHX_ list, sv, offset, len);
48
apr_size_t mpxs_APR__Bucket_read(pTHX_
51
apr_read_type_e block)
46
rc = modperl_bucket_read(bucket, &str, &len, block);
48
if ((rc != APR_SUCCESS) && (rc != APR_EOF)) {
52
sv_setpvn(buffer, str, len);
55
apr_status_t rc = apr_bucket_read(bucket, &str, &len, block);
57
if (!(rc == APR_SUCCESS || rc == APR_EOF)) {
58
modperl_croak(aTHX_ rc, "APR::Bucket::read");
62
sv_setpvn(buffer, str, len);
65
sv_setpvn(buffer, "", 0);
68
/* must run any set magic */
57
76
static MP_INLINE int mpxs_APR__Bucket_is_eos(apr_bucket *bucket)
81
100
APR_BUCKET_REMOVE(bucket);
104
apr_status_t mpxs_APR__Bucket_setaside(pTHX_ SV *b_sv, SV *p_sv)
106
apr_pool_t *p = mp_xs_sv2_APR__Pool(p_sv);
107
apr_bucket *b = mp_xs_sv2_APR__Bucket(b_sv);
108
apr_status_t rc = apr_bucket_setaside(b, p);
110
/* if users don't bother to check the success, do it on their
112
if (GIMME_V == G_VOID && rc != APR_SUCCESS) {
113
modperl_croak(aTHX_ rc, "APR::Bucket::setaside");
116
/* No need to call mpxs_add_pool_magic(b_sv, p_sv); since
117
* pool_bucket_cleanup is called by apr_bucket_pool_make (called
118
* by modperl_bucket_sv_setaside) if the pool goes out of scope,
119
* copying the data to the heap.