size_t len = 0;
prepare_message(&len, 0);
- char *m = xmalloc(len + 4);
+ size_t tlen = len + 4;
+ char *m = xmalloc(tlen);
char *p = m;
prepare_length(0, &p, len);
prepare_message(0, &p);
- assert(p == m + len + 4);
+ assert(p == m + tlen);
- ssize_t sr = fwrite(p, len, 1, call_sock);
+ ssize_t sr = fwrite(m, tlen, 1, call_sock);
if (sr != 1) diee("write request (buffer)");
if (fflush(call_sock)) diee("write request");
$r = read(CALL, $len, 4) // protocol_read_fail("message length");
$r == 4 or _exit(0);
- $len = unpack "L", $len;
+ $len = unpack "N", $len;
my $data;
$r = read(CALL, $data, $len) // protocol_read_fail("message data ($len)");
$r == $len or _exit(0);
- @ARGV = split /\0/, $data;
+ @ARGV = split /\0/, $data, -1;
@ARGV >= 2 or die("message data has too few strings (".(scalar @ARGV).")");
length(pop(@ARGV)) and die("message data missing trailing nul");
%ENV = ();
}
open LISTEN, "+>&=$env_fds[0]" or croak "listen fd: $!";
open CALL, "+>&=$env_fds[1]" or croak "call fd: $!";
- open WATCHE, "<&=$env_fds[3]" or croak "watch stderr fd: $!";
+ open WATCHE, ">+&=$env_fds[3]" or croak "watch stderr fd: $!";
if (!$opts{no_openlog}) {
openlog("prefork-interp $0", 'ndelay,nofatal,pid',
sub prwhen ($) {
my ($when) = @_;
my @env = sort keys %ENV;
- print STDERR "$when - STDERR - @ARGV - $ENV{PREFORK_INTERP} - @env"
+ print STDERR "$when - STDERR - @ARGV - $ENV{PREFORK_INTERP} - @env\n"
and flush STDERR or die $!;
print STDOUT "$when - STDOUT\n"
and flush STDOUT or die $!;