On Sun, 28 Sep 2003, Ayhan Ulusoy wrote: > I am worried about this. > Does 'PERLIO_K_RAW' also make the following call "do nothing" ? : > binmode($apr_f, 'utf8');
That's a good point ... The binmode($apr_f) call (without a layer) seems to "do nothing", in the sense of not being needed as far as apr goes, but PERLIO_K_RAW is necessary in order to be able to put in a binmode($apr_f). However, with utf8 data the binmode($apr_f, ':utf8') call is necessary on the perl side. I added a test for this below - without the binmode($apr_f, ':utf8') calls, the utf8 test fails for me, but with these calls, they pass. ============================================================ Index: t/response/TestAPR/perlio.pm =================================================================== RCS file: /home/cvs/modperl-2.0/t/response/TestAPR/perlio.pm,v retrieving revision 1.25 diff -u -r1.25 perlio.pm --- t/response/TestAPR/perlio.pm 19 Sep 2003 19:54:37 -0000 1.25 +++ t/response/TestAPR/perlio.pm 28 Sep 2003 23:49:37 -0000 @@ -28,7 +28,7 @@ sub handler { my $r = shift; - my $tests = 11; + my $tests = 22; $tests += 3 unless LARGE_FILES_CONFLICT; $tests += 1 unless APR_WIN32_FILE_DUP_BUG; @@ -221,6 +221,96 @@ } + # test reading and writing text and binary files + { + my $data_dir = 'docs/user/handlers'; + local $/; + my ($rfh, $wfh, $pfh); + for my $file ('general.pod', 'filter_logic.png') { + my $in = catfile $vars->{top_dir}, $data_dir, $file; + my $out = catfile $dir, $file; + open $rfh, "<:APR", $in, $r->pool + or die "Cannot open $in for reading: $!"; + binmode($rfh); # not necessary + my $apr_content = <$rfh>; + close $rfh; + open $pfh, "<", $in + or die "Cannot open $in for reading: $!"; + binmode($pfh); + my $perl_content = <$pfh>; + close $pfh; + ok t_cmp(length $perl_content, + length $apr_content, + "testing data size of $file"); + + open $wfh, ">:APR", $out, $r->pool + or die "Cannot open $out for writing: $!"; + print $wfh $apr_content; + close $wfh; + ok t_cmp(-s $in, + -s $out, + "testing file size of $file"); + } + + my $dat = catfile $dir, "dat$$.dat"; + my $text; + open $wfh, ">:crlf", $dat + or die "Cannot open $dat for writing: $!"; + print $wfh 'a'.((('a' x 14).qq{\n}) x 2000); + close $wfh; + open $rfh, "<:APR", $dat, $r->pool + or die "Cannot open $dat for reading: $!"; + $text = <$rfh>; + close $rfh; + ok t_cmp(2000, + count_chars($text, "\015\012"), + 'testing for presence of \015\012'); + ok t_cmp(2000, + count_chars($text, "\n"), + 'testing for presence of \n'); + + open $wfh, ">:APR", $dat, $r->pool + or die "Cannot open $dat for writing: $!"; + binmode($wfh); # not necessary + print $wfh 'a'.((('a' x 14).qq{\r\n}) x 2000); + close $wfh; + open $rfh, "<:APR", $dat, $r->pool + or die "Cannot open $dat for reading: $!"; + $text = <$rfh>; + close $rfh; + ok t_cmp(2000, + count_chars($text, "\015\012"), + 'testing for presence of \015\012'); + ok t_cmp(2000, + count_chars($text, "\n"), + 'testing for presence of \n'); + open $rfh, "<:crlf", $dat + or die "Cannot open $dat for reading: $!"; + $text = <$rfh>; + close $rfh; + ok t_cmp(0, + count_chars($text, "\015\012"), + 'testing for presence of \015\012'); + ok t_cmp(2000, + count_chars($text, "\n"), + 'testing for presence of \n'); + + my $utf8 = "\x{042F} \x{0432}\x{0430}\x{0441} \x{043B}\x{044E}"; + open $wfh, ">:APR", $dat, $r->pool + or die "Cannot open $dat for writing: $!"; + binmode($wfh, ':utf8'); + print $wfh $utf8; + close $wfh; + open $rfh, "<:APR", $dat, $r->pool + or die "Cannot open $dat for reading: $!"; + binmode($rfh, ':utf8'); + $text = <$rfh>; + close $rfh; + ok t_cmp($utf8, + $text, + 'utf8 binmode test'); + + } # XXX: need tests # - for stdin/out/err as they are handled specially @@ -232,6 +322,13 @@ # cleanup: t_mkdir will remove the whole tree including the file Apache::OK; +} + +sub count_chars { + my($text, $chars) = @_; + my $seen = 0; + $seen++ while $text =~ /$chars/g; + return $seen; } 1; =============================================================== -- best regards, randy --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]