Instead of converting to bytes to bits and asking `vec' to
operate on single bits, we can just have `vec' work on 8 bits
at-a-time.
This also fixes an overallocation in pure Perl Linux recv_cmd4.
Adding an extra byte ourselves for "\0" isn't necessary: Perl
already does it internally everywhere when creating/resizing
scalars.
---
lib/PublicInbox/Syscall.pm | 6 +++---
t/cmd_ipc.t | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/lib/PublicInbox/Syscall.pm b/lib/PublicInbox/Syscall.pm
index 776fbe23..b76a9e8a 100644
--- a/lib/PublicInbox/Syscall.pm
+++ b/lib/PublicInbox/Syscall.pm
@@ -283,7 +283,7 @@ sub epoll_wait_mod4 {
# resize our static buffer if maxevents bigger than we've ever done
if ($maxevents > $epoll_wait_size) {
$epoll_wait_size = $maxevents;
- vec($epoll_wait_events, $maxevents * 12 * 8 - 1, 1) = 0;
+ vec($epoll_wait_events, $maxevents * 12 - 1, 8) = 0;
}
@$events = ();
my $ct = syscall($SYS_epoll_wait, $epfd, $epoll_wait_events,
@@ -304,7 +304,7 @@ sub epoll_wait_mod8 {
# resize our static buffer if maxevents bigger than we've ever done
if ($maxevents > $epoll_wait_size) {
$epoll_wait_size = $maxevents;
- vec($epoll_wait_events, $maxevents * 16 * 8 - 1, 1) = 0;
+ vec($epoll_wait_events, $maxevents * 16 - 1, 8) = 0;
}
@$events = ();
my $ct = syscall($SYS_epoll_wait, $epfd, $epoll_wait_events,
@@ -429,7 +429,7 @@ no warnings 'once';
*recv_cmd4 = sub ($$$) {
my ($sock, undef, $len) = @_;
- vec($_[1] //= '', ($len + 1) * 8, 1) = 0;
+ vec($_[1] //= '', $len - 1, 8) = 0;
my $cmsghdr = "\0" x msg_controllen; # 10 * sizeof(int)
my $iov = pack('P'.TMPL_size_t, $_[1], $len);
my $mh = pack('PL' . # msg_name, msg_namelen (socklen_t (U32))
diff --git a/t/cmd_ipc.t b/t/cmd_ipc.t
index 7313d13b..e5d22aab 100644
--- a/t/cmd_ipc.t
+++ b/t/cmd_ipc.t
@@ -97,7 +97,7 @@ my $do_test = sub { SKIP: {
my $nr = 2 * 1024 * 1024;
while (1) {
- vec(my $vec = '', $nr * 8 - 1, 1) = 1;
+ vec(my $vec = '', $nr - 1, 8) = 1;
my $n = $send->($s1, [], $vec, $flag);
if (defined($n)) {
$n == length($vec) or