The following patch *should* work. Suggestions welcome.

Best


*** Apache.pm.orig      Fri Oct 13 18:43:39 2000
--- Apache.pm   Fri Oct 13 18:43:35 2000
***************
*** 158,169 ****
  }
  *printf = \&PRINTF;
  
- sub WRITE {
-     my($r, $buff, $length, $offset) = @_;
-     my $send = substr($buff, $offset, $length);
-     $r->print($send);
- }
- 
  sub send_cgi_header {
      my($r, $headers) = @_;
      my $dlm = "\015?\012"; #a bit borrowed from LWP::UserAgent
--- 158,163 ----


*** Apache.xs.orig      Fri Oct 13 18:43:56 2000
--- Apache.xs   Fri Oct 13 18:43:52 2000
***************
*** 1034,1039 ****
--- 1034,1091 ----
        sv_setsv(ST(1), &sv_undef);
      }
  
+ 
+ int
+ write(r, ...)
+     Apache    r
+ 
+     ALIAS:
+     Apache::WRITE = 1
+ 
+     PREINIT:
+        STRLEN len;
+        char * buffer;
+        int sent = 0;
+ 
+     CODE:
+     ix = ix; /* avoid -Wall warning */
+ 
+     if(!mod_perl_sent_header(r, 0)) {
+       croak("HTTP headers missing. Please send HTTP headers first!");
+       XSRETURN_IV(0);
+     }
+     RETVAL = 0;
+     if (r->connection->aborted)
+         XSRETURN_UNDEF;
+ 
+     if(items > 2 ){
+         len = (int)SvIV(ST(2));
+         buffer = SvPV(ST(1), na);
+         if(items == 4)
+             buffer += (int)SvIV(ST(3));
+     }
+     else{
+         buffer = SvPV(ST(1), len);
+     }
+     while(len > 0){
+         sent = rwrite(buffer,
+                       len < HUGE_STRING_LEN ? len : HUGE_STRING_LEN,
+                       r);
+         if(sent < 0){
+             rwrite_neg_trace(r);
+           break;
+         }
+         buffer += sent;
+         len -= sent;
+         RETVAL += sent;
+     }
+ 
+     OUTPUT:
+        RETVAL
+ 
+ 
+ 
+ 
  int
  print(r, ...)
      Apache    r



*** http-get.t.org      Fri Oct 13 18:44:05 2000
--- http-get.t  Fri Oct 13 18:44:07 2000
***************
*** 7,15 ****
  my(@test_scripts) = qw(test perl-status);
  %get_only = map { $_,1 } qw(perl-status);
  
  if($] > 5.003) {
!     $num_tests += 3;
      push @test_scripts, qw(io/perlio.pl);
  }
  
  print "1..$num_tests\n";
--- 7,18 ----
  my(@test_scripts) = qw(test perl-status);
  %get_only = map { $_,1 } qw(perl-status);
  
+ my(@sys_tests) = qw(syswrite_noheader syswrite_1 syswrite_2 syswrite_3);
+ 
  if($] > 5.003) {
!     $num_tests += 7;
      push @test_scripts, qw(io/perlio.pl);
+     
  }
  
  print "1..$num_tests\n";
***************
*** 42,48 ****
      next if $get_only{$s};
  
      test ++$i, ($str =~ /^REQUEST_METHOD=GET$/m); 
!     test ++$i, ($str =~ /^QUERY_STRING=query$/m); 
  }
  
  my $mp_version;
--- 45,72 ----
      next if $get_only{$s};
  
      test ++$i, ($str =~ /^REQUEST_METHOD=GET$/m); 
!     test ++$i, ($str =~ /^QUERY_STRING=query$/m);
! 
!     if($s eq 'io/perlio.pl'){
!       foreach my $h (@sys_tests){
!           $url = new URI::URL("http://$netloc$script?$h");
! 
!           $request = new HTTP::Request('GET', $url);
! 
!           print "GET $url\n\n";
! 
!           $response = $ua->request($request, undef, undef);
! 
!           $str = $response->as_string;
!           print "$str\n";
!           if($h eq 'syswrite_noheader'){
!               test ++$i, $str =~ /(Internal Server Error)/;
!           }else{
!               die "$1\n" if $str =~ /(Internal Server Error)/;
!               test ++$i, ($response->is_success);
!           }
!       }
!     }
  }
  
  my $mp_version;



*** perlio.pl.orig      Fri Oct 13 18:44:23 2000
--- perlio.pl   Fri Oct 13 18:44:20 2000
***************
*** 113,115 ****
--- 113,164 ----
  
  }
  
+ sub test_syswrite_1{
+     test_syswrite();
+ }
+ sub test_syswrite_2{
+     test_syswrite(160);
+ }
+ 
+ sub test_syswrite_3{
+     test_syswrite(80, 2000);
+ }
+ sub test_syswrite{
+     my $len = shift;
+     my $offset = shift;
+     my $msg = "";
+ 
+ #    my $m = "ENTERING test_syswrite ";
+ #    $m .= "LEN = $len " if $len;
+ #    $m .= "OFF = $offset" if $offset;
+ #    print STDERR $m, "\n";
+ 
+     print "Status: 200 Bottles of beer on the wall\n",
+     "X-Perl-Version: $]\n";
+     print "X-Perl-Script: perlio.pl\n";
+     print "X-Message: hello\n";
+     print "Content-type: text/plain\n\n";
+ 
+     for ('A'..'Z') {
+       $msg .= $_ x 80;
+     }
+     my $bytes_sent = 
+       defined($offset) ? syswrite STDOUT, $msg, $len, $offset :  
+        defined($len) ? syswrite STDOUT, $msg, $len : syswrite STDOUT, $msg;
+ 
+     my $real_b = $r->bytes_sent;
+     print "REAL Bytes sent = $real_b\n";
+     die "Syswrite error. Bytes wrote=$bytes_sent. Real bytes sent = $real_b\n"
+       unless $bytes_sent == $real_b;
+ }    
+ 
+ sub test_syswrite_noheader{
+     print STDERR "********* This is not a real error. Ignore. *********\n";
+     my $msg = "1234WRITEmethod";
+     syswrite STDOUT, $msg, 5, 4;
+ }
+ 
+ 
+ 
+ 
+ 



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to