While `vec' is useful for user-supplied buffers to avoid excess
memory traffic, but provides no benefit when we need to allocate
our own buffers as we do in nodatacow_fh, since Perl can't elide
memset(ptr, 0, len). So just use the idiomatic `"\0" x $LEN' here.
}
}
-sub nodatacow_fh {
- return if !defined($SYS_fstatfs);
- my $buf = '';
- vec($buf, 120 * 8 - 1, 1) = 0;
+sub nodatacow_fh ($) {
my ($fh) = @_;
- syscall($SYS_fstatfs, fileno($fh), $buf) == 0 or
+ my $buf = "\0" x 120;
+ syscall($SYS_fstatfs // return, fileno($fh), $buf) == 0 or
return warn("fstatfs: $!\n");
my $f_type = unpack('l!', $buf); # statfs.f_type is a signed word
return if $f_type != 0x9123683E; # BTRFS_SUPER_MAGIC