143003dfeSmillert#!./perl 243003dfeSmillert 343003dfeSmillert# Test that various IO functions don't try to treat PVBMs as 443003dfeSmillert# filehandles. Most of these will segfault perl if they fail. 543003dfeSmillert 643003dfeSmillertBEGIN { 743003dfeSmillert chdir 't' if -d 't'; 843003dfeSmillert require "./test.pl"; 9*5759b3d2Safresh1 set_up_inc(qw(. ../lib)); 1043003dfeSmillert} 1143003dfeSmillert 1243003dfeSmillertBEGIN { $| = 1 } 1343003dfeSmillert 1443003dfeSmillertplan(28); 1543003dfeSmillert 1643003dfeSmillertsub PVBM () { 'foo' } 1743003dfeSmillert{ my $dummy = index 'foo', PVBM } 1843003dfeSmillert 1943003dfeSmillert{ 2043003dfeSmillert my $which; 2143003dfeSmillert { 2243003dfeSmillert package Tie; 2343003dfeSmillert 2443003dfeSmillert sub TIEHANDLE { $which = 'TIEHANDLE' } 2543003dfeSmillert sub TIESCALAR { $which = 'TIESCALAR' } 2643003dfeSmillert } 2743003dfeSmillert my $pvbm = PVBM; 2843003dfeSmillert 2943003dfeSmillert tie $pvbm, 'Tie'; 3043003dfeSmillert is ($which, 'TIESCALAR', 'PVBM gets TIESCALAR'); 3143003dfeSmillert} 3243003dfeSmillert 3343003dfeSmillert{ 3443003dfeSmillert my $pvbm = PVBM; 3543003dfeSmillert ok (scalar eval { untie $pvbm; 1 }, 'untie(PVBM) doesn\'t segfault'); 3643003dfeSmillert ok (scalar eval { tied $pvbm; 1 }, 'tied(PVBM) doesn\'t segfault'); 3743003dfeSmillert} 3843003dfeSmillert 3943003dfeSmillert{ 4043003dfeSmillert my $pvbm = PVBM; 4143003dfeSmillert 4243003dfeSmillert ok (scalar eval { pipe $pvbm, PIPE; }, 'pipe(PVBM, ) succeeds'); 4343003dfeSmillert close foo; 4443003dfeSmillert close PIPE; 4543003dfeSmillert ok (scalar eval { pipe PIPE, $pvbm; }, 'pipe(, PVBM) succeeds'); 4643003dfeSmillert close foo; 4743003dfeSmillert close PIPE; 4843003dfeSmillert ok (!eval { pipe \$pvbm, PIPE; }, 'pipe(PVBM ref, ) fails'); 4943003dfeSmillert ok (!eval { pipe PIPE, \$pvbm; }, 'pipe(, PVBM ref) fails'); 5043003dfeSmillert 5143003dfeSmillert ok (!eval { truncate $pvbm, 0 }, 'truncate(PVBM) fails'); 5243003dfeSmillert ok (!eval { truncate \$pvbm, 0}, 'truncate(PVBM ref) fails'); 5343003dfeSmillert 5443003dfeSmillert ok (!eval { stat $pvbm }, 'stat(PVBM) fails'); 5543003dfeSmillert ok (!eval { stat \$pvbm }, 'stat(PVBM ref) fails'); 5643003dfeSmillert 5743003dfeSmillert ok (!eval { lstat $pvbm }, 'lstat(PVBM) fails'); 5843003dfeSmillert ok (!eval { lstat \$pvbm }, 'lstat(PVBM ref) fails'); 5943003dfeSmillert 6043003dfeSmillert ok (!eval { chdir $pvbm }, 'chdir(PVBM) fails'); 6143003dfeSmillert ok (!eval { chdir \$pvbm }, 'chdir(pvbm ref) fails'); 6243003dfeSmillert 6343003dfeSmillert ok (!eval { close $pvbm }, 'close(PVBM) fails'); 6443003dfeSmillert ok (!eval { close $pvbm }, 'close(PVBM ref) fails'); 6543003dfeSmillert 6643003dfeSmillert ok (!eval { chmod 0600, $pvbm }, 'chmod(PVBM) fails'); 6743003dfeSmillert ok (!eval { chmod 0600, \$pvbm }, 'chmod(PVBM ref) fails'); 6843003dfeSmillert 6943003dfeSmillert SKIP: { 7043003dfeSmillert skip('chown() not implemented on Win32', 2) if $^O eq 'MSWin32'; 7143003dfeSmillert ok (!eval { chown 0, 0, $pvbm }, 'chown(PVBM) fails'); 7243003dfeSmillert ok (!eval { chown 0, 0, \$pvbm }, 'chown(PVBM ref) fails'); 7343003dfeSmillert } 7443003dfeSmillert 7543003dfeSmillert ok (!eval { utime 0, 0, $pvbm }, 'utime(PVBM) fails'); 7643003dfeSmillert ok (!eval { utime 0, 0, \$pvbm }, 'utime(PVBM ref) fails'); 7743003dfeSmillert 7843003dfeSmillert ok (!eval { <$pvbm> }, '<PVBM> fails'); 7943003dfeSmillert ok (!eval { readline $pvbm }, 'readline(PVBM) fails'); 8043003dfeSmillert ok (!eval { readline \$pvbm }, 'readline(PVBM ref) fails'); 8143003dfeSmillert 8243003dfeSmillert ok (!eval { open $pvbm, '<', 'none.such' }, 'open(PVBM) fails'); 8343003dfeSmillert ok (!eval { open \$pvbm, '<', 'none.such', }, 'open(PVBM ref) fails'); 8443003dfeSmillert} 85