xref: /openbsd/gnu/usr.bin/perl/t/io/pvbm.t (revision 5759b3d2)
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