>> + if (rv == APR_SUCCESS) {
>> + return newSViv((int)length);
>> + }
>> +
>> + return &PL_sv_undef;
>> +}
>
>
> won't it be better to die if it fails and stick rv into [EMAIL PROTECTED] e.g. if you
> try to read a bucket which has no data? Just thinking aloud here, we
> have many places where don't quite handle error codes, but I tend to at
> least stick XXX in them and hopefully figure it out when we get first
> failures.
yeah, I wasn't quite sure what to do here. I didn't like the idea of
length() returning an $rv and populating a $length argument, since it seemed
more useful to simply have it return the length. but I'm deviating from the
API here, so I dunno.
as for sticking the rv in $@, I don't see that being useful, since it's just
an APR_ status code.
> In the test script you end up allocating memory for 300k instead of
> 200k, just to throw 100k of it right away. a big waste.
hmm, the length passed ends up being allocated? I was just trying to
simulate a user that used a big number since the size was unknown (and who
didn't know about length())
>
> I don't think flatten is effective, as it has to go through all the
> bucket twice - once because you need to figure out its length, second
> time to slurp data.
I was getting that feeling as I implemented it - the dependency on the
length made it seem less than optimal for a "slurp" mode.
>
> pflatten doesn't require that. It does all the work for you. You really
> want to use flatten only when you want to flatten only not more than X
> bytes, I think.
yeah, that's how it's used, I noticed.
>
> with pflatten you do:
>
> char *buffer;
> apr_size_t bufsiz = HUGE_STRING_LEN;
> rc = apr_brigade_pflatten(bb, &buffer, &bufsiz, pool);
>
> buffer is probably PVX(sv_buf), after you forced it into PV.
> and after that set the pv's length slot to bufsize.
> and then just stash that buffer into a new SV or pass.
yup, pretty much like the way I did it before (which was stolen from
APR::Socket:recv)
> More effecient
> and simpler for the end user (though requires the dreaded pool object)
yeah, that's the problem - requiring a pool is turning this all into less of
a shortcut. but just because it takes more effort doesn't mean we shouldn't
open them both up anyway.
so, I'll do them both and whip up a patch for the Apache::Request docs that
use pflatten() instead.
--Geoff
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]