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

Reply via email to