Blame
Date:
Mon Aug 29 20:53:44 2022 UTC
Message:
state the license on each file
01
2022-08-25
op
#!/usr/bin/env perl
02
2022-08-29
op
#
03
2022-08-29
op
# pe was written by Omar Polo <op@openbsd.org> and is placed in the
04
2022-08-29
op
# public domain. The author hereby disclaims copyright to this source
05
2022-08-29
op
# code.
06
2022-08-25
op
07
2022-08-25
op
use open ":std", ":encoding(UTF-8)";
08
2022-08-25
op
use strict;
09
2022-08-25
op
use warnings;
10
2022-08-25
op
use v5.32;
11
2022-08-25
op
use IO::Poll qw(POLLOUT);
12
2022-08-25
op
13
2022-08-25
op
use OpenBSD::Pledge;
14
2022-08-25
op
use OpenBSD::Unveil;
15
2022-08-25
op
16
2022-08-25
op
my $jobs = $ENV{'MAKE_JOBS'} // 1;
17
2022-08-25
op
18
2022-08-25
op
my $poll = IO::Poll->new();
19
2022-08-25
op
for (1..$jobs) {
20
2022-08-25
op
open(my $kid, '|-', './mexp') or die "can't exec ./mexp: $!";
21
2022-08-25
op
$poll->mask($kid => POLLOUT);
22
2022-08-25
op
}
23
2022-08-25
op
24
2022-08-25
op
sub process {
25
2022-08-25
op
die "poll: $!" if $poll->poll() == -1;
26
2022-08-25
op
my @handles = $poll->handles(POLLOUT) or die "no procs ready?";
27
2022-08-25
op
my $handle = $handles[int(rand(@handles))];
28
2022-08-26
op
print $handle $_ foreach @_;
29
2022-08-25
op
}
30
2022-08-25
op
31
2022-08-25
op
unveil("./mexp", "rx") or die "unveil mexp: $!";
32
2022-08-25
op
pledge("stdio proc exec") or die "pledge: $!";
33
2022-08-25
op
34
2022-08-25
op
my @thread;
35
2022-08-25
op
while (<>) {
36
2022-08-25
op
print; # continue the pipeline
37
2022-08-25
op
38
2022-08-26
op
my $new_thread = m/^-/;
39
2022-08-26
op
if ($new_thread && @thread) {
40
2022-08-25
op
process @thread;
41
2022-08-25
op
@thread = ();
42
2022-08-25
op
}
43
2022-08-25
op
44
2022-08-25
op
push @thread, $_;
45
2022-08-25
op
}
46
2022-08-25
op
47
2022-08-25
op
process @thread if @thread;
Omar Polo