use Data::Dumper;
use Cwd qw(abs_path);
use Fcntl ':mode';
+use File::stat;
use JSON;
use PVE::Tools qw(extract_param run_command file_get_contents file_read_firstline dir_glob_regex dir_glob_foreach trim);
sub get_partnum {
my ($part_path) = @_;
- my ($mode, $rdev) = (stat($part_path))[2,6];
+ my $st = stat($part_path);
- next if !$mode || !S_ISBLK($mode) || !$rdev;
- my $major = PVE::Tools::dev_t_major($rdev);
- my $minor = PVE::Tools::dev_t_minor($rdev);
+ next if !$st->mode || !S_ISBLK($st->mode) || !$st->rdev;
+ my $major = PVE::Tools::dev_t_major($st->rdev);
+ my $minor = PVE::Tools::dev_t_minor($st->rdev);
my $partnum_path = "/sys/dev/block/$major:$minor/";
my $partnum;
use File::chdir;
use File::Path;
use File::Basename;
+use File::stat qw();
use Time::Local qw(timelocal);
use PVE::Tools qw(run_command);
sub file_size_info {
my ($filename, $timeout) = @_;
- my @fs = stat($filename);
- my $mode = $fs[2];
- my $ctime = $fs[10];
+ my $st = File::stat::stat($filename);
- if (S_ISDIR($mode)) {
- return wantarray ? (0, 'subvol', 0, undef, $ctime) : 1;
+ if (S_ISDIR($st->mode)) {
+ return wantarray ? (0, 'subvol', 0, undef, $st->ctime) : 1;
}
my $json = '';
my ($size, $format, $used, $parent) = $info->@{qw(virtual-size format actual-size backing-filename)};
- return wantarray ? ($size, $format, $used, $parent, $ctime) : $size;
+ return wantarray ? ($size, $format, $used, $parent, $st->ctime) : $size;
}
sub volume_size_info {
foreach my $fn (<$path/*>) {
- my ($dev,
- $ino,
- $mode,
- $nlink,
- $uid,
- $gid,
- $rdev,
- $size,
- $atime,
- $mtime,
- $ctime,
- $blksize,
- $blocks
- ) = stat($fn);
-
- next if S_ISDIR($mode);
+ my $st = File::stat::stat($fn);
+
+ next if S_ISDIR($st->mode);
my $info;
};
}
- $info->{size} = $size;
- $info->{ctime} //= $ctime;
+ $info->{size} = $st->size;
+ $info->{ctime} //= $st->ctime;
push @$res, $info;
}