xref: /openbsd-src/gnu/usr.bin/perl/t/porting/filenames.t (revision 91f110e064cd7c194e59e019b83bb7496c1c84d4)
1898184e3Ssthen#!./perl -w
2898184e3Ssthen
3898184e3Ssthen=head1 filenames.t
4898184e3Ssthen
5898184e3SsthenTest the well-formed-ness of filenames names in the MANIFEST file. Current
6898184e3Ssthentests being done:
7898184e3Ssthen
8898184e3Ssthen=over 4
9898184e3Ssthen
10898184e3Ssthen=item * no more than 39 characters before the dot, and 39 after
11898184e3Ssthen
12898184e3Ssthen=item * no filenames starting with -
13898184e3Ssthen
14898184e3Ssthen=item * don't use any of these names (regardless of case) before the dot: CON,
15898184e3SsthenPRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1,
16898184e3SsthenLPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9
17898184e3Ssthen
18898184e3Ssthen=item * no spaces, ( or & in filenames
19898184e3Ssthen
20898184e3Ssthen=back
21898184e3Ssthen
22898184e3Ssthen=cut
23898184e3Ssthen
24898184e3SsthenBEGIN {
25898184e3Ssthen    chdir 't';
26898184e3Ssthen    @INC = '../lib';
27898184e3Ssthen}
28898184e3Ssthen
29898184e3Ssthenuse strict;
30898184e3Ssthenuse File::Basename;
31898184e3Ssthenrequire './test.pl';
32898184e3Ssthen
33898184e3Ssthen
34*91f110e0Safresh1my $manifest = '../MANIFEST';
35898184e3Ssthen
36898184e3Ssthenopen my $m, '<', $manifest or die "Can't open '$manifest': $!";
37898184e3Ssthenmy @files;
38898184e3Ssthenwhile (<$m>) {
39898184e3Ssthen    chomp;
40898184e3Ssthen    my($path) = split /\t+/;
41898184e3Ssthen    push @files, $path;
42898184e3Ssthen
43898184e3Ssthen}
44898184e3Ssthenclose $m or die $!;
45898184e3Ssthen
46898184e3Ssthenplan(scalar @files);
47898184e3Ssthen
48*91f110e0Safresh1PATHNAME: for my $pathname (@files) {
49*91f110e0Safresh1    my @path_components = split('/',$pathname);
50*91f110e0Safresh1    my $filename = pop @path_components;
51898184e3Ssthen    for my $component (@path_components) {
52898184e3Ssthen        if ($component =~ /\./) {
53*91f110e0Safresh1            fail("$pathname has directory components containing '.'");
54*91f110e0Safresh1            next PATHNAME;
55898184e3Ssthen        }
56898184e3Ssthen        if (length $component > 32) {
57*91f110e0Safresh1            fail("$pathname has a name over 32 characters (VOS requirement)");
58*91f110e0Safresh1            next PATHNAME;
59898184e3Ssthen        }
60898184e3Ssthen    }
61898184e3Ssthen
62898184e3Ssthen
63898184e3Ssthen    if ($filename =~ /^\-/) {
64*91f110e0Safresh1        fail("$pathname starts with -");
65*91f110e0Safresh1            next PATHNAME;
66898184e3Ssthen    }
67898184e3Ssthen
68898184e3Ssthen    my($before, $after) = split /\./, $filename;
69898184e3Ssthen    if (length $before > 39) {
70*91f110e0Safresh1        fail("$pathname has more than 39 characters before the dot");
71*91f110e0Safresh1    } elsif ($after && length $after > 39) {
72*91f110e0Safresh1        fail("$pathname has more than 39 characters after the dot");
73*91f110e0Safresh1    } elsif ($filename =~ /^(?:CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])\./i) {
74*91f110e0Safresh1        fail("$pathname has a reserved name");
75*91f110e0Safresh1    } elsif ($filename =~ /\s|\(|\&/) {
76*91f110e0Safresh1        fail("$pathname has a reserved character");
77*91f110e0Safresh1    } else {
78*91f110e0Safresh1        pass("$pathname ok");
79898184e3Ssthen    }
80898184e3Ssthen}
81898184e3Ssthen
82898184e3Ssthen# EOF
83