stas 2004/06/04 02:34:46
Modified: lib/Apache compat.pm Log: rewrite content() not to use the deprecated and limping should_client_block and friends Revision Changes Path 1.107 +28 -9 modperl-2.0/lib/Apache/compat.pm Index: compat.pm =================================================================== RCS file: /home/cvs/modperl-2.0/lib/Apache/compat.pm,v retrieving revision 1.106 retrieving revision 1.107 diff -u -u -r1.106 -r1.107 --- compat.pm 22 May 2004 21:47:32 -0000 1.106 +++ compat.pm 4 Jun 2004 09:34:46 -0000 1.107 @@ -51,6 +51,8 @@ use APR::Pool (); use APR::URI (); use APR::Util (); +use APR::Brigade (); +use APR::Bucket (); use mod_perl (); use Symbol (); @@ -471,23 +473,40 @@ return $r->parse_args($args); } +use Apache::Const -compile => qw(MODE_READBYTES); +use APR::Const -compile => qw(SUCCESS BLOCK_READ); + use constant IOBUFSIZE => 8192; sub content { my $r = shift; - $r->setup_client_block; - - return undef unless $r->should_client_block; + my $ba = $r->connection->bucket_alloc; + my $bb = APR::Brigade->new($r->pool, $ba); my $data = ''; - my $buf; - while (my $read_len = $r->get_client_block($buf, IOBUFSIZE)) { - if ($read_len == -1) { - die "some error while reading with get_client_block"; + my $seen_eos = 0; + my $count = 0; + do { + $r->input_filters->get_brigade($bb, + Apache::MODE_READBYTES, APR::BLOCK_READ, IOBUFSIZE); + + while (!$bb->is_empty) { + my $b = $bb->first; + + $b->remove; + + if ($b->is_eos) { + $seen_eos++; + last; + } + + my $buf = $b->read; + $data .= $buf if length $buf; } - $data .= $buf; - } + } while (!$seen_eos); + + $bb->destroy; return $data unless wantarray; return $r->parse_args($data);