X-Git-Url: https://git.proxmox.com/?p=pve-common.git;a=blobdiff_plain;f=src%2FPVE%2FTools.pm;h=550da09a609ddcf39f7999cc384bb312515192ed;hp=9b5614f148e7db4bdc1b5a3650c605d8a1d4b7dd;hb=6cf6b40469e5cbd63c04f075ce1399f3a1ad3574;hpb=3858602867a258fed090cafeb882b30ce3e62263 diff --git a/src/PVE/Tools.pm b/src/PVE/Tools.pm index 9b5614f..550da09 100644 --- a/src/PVE/Tools.pm +++ b/src/PVE/Tools.pm @@ -85,6 +85,8 @@ use constant {CLONE_NEWNS => 0x00020000, use constant {O_PATH => 0x00200000, O_TMPFILE => 0x00410000}; # This includes O_DIRECTORY +use constant {AT_EMPTY_PATH => 0x1000}; + sub run_with_timeout { my ($timeout, $code, @param) = @_; @@ -1556,6 +1558,11 @@ sub mkdirat($$$) { return syscall(PVE::Syscall::mkdirat, $dirfd, $name, $mode) == 0; } +sub fchownat($$$$$) { + my ($dirfd, $pathname, $owner, $group, $flags) = @_; + return syscall(PVE::Syscall::fchownat, $dirfd, $pathname, $owner, $group, $flags) == 0; +} + my $salt_starter = time(); sub encrypt_pw { @@ -1654,6 +1661,10 @@ sub dev_t_minor($) { sub array_intersect { my ($arrays) = @_; + if (!ref($arrays->[0])) { + $arrays = [ grep { ref($_) eq 'ARRAY' } @_ ]; + } + return [] if scalar(@$arrays) == 0; return $arrays->[0] if scalar(@$arrays) == 1; @@ -1677,6 +1688,7 @@ sub array_intersect { foreach my $element (keys %count) { push @$return_arr, $element if $count{$element} > 1; } + last if scalar(@$return_arr) == 0; # empty intersection, early exit } return $return_arr;