file_size_info: move parser to own variable

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
Thomas Lamprecht
2019-09-09 15:36:14 +02:00
parent aa4594b1d1
commit 1dbbd5abd6

View File

@ -712,36 +712,36 @@ sub file_size_info {
return wantarray ? (0, 'subvol', 0, undef) : 1;
}
my $cmd = ['/usr/bin/qemu-img', 'info', $filename];
my $format;
my $parent;
my $size = 0;
my $used = 0;
eval {
run_command($cmd, timeout => $timeout, outfunc => sub {
my $line = shift;
if ($line =~ m/^file format:\s+(\S+)\s*$/) {
$format = $1;
} elsif ($line =~ m/^backing file:\s(\S+)\s/) {
$parent = $1;
} elsif ($line =~ m/^virtual size:\s\S+\s+\((\d+)\s+bytes\)$/) {
$size = int($1);
} elsif ($line =~ m/^disk size:\s+(\d+(.\d+)?)([KMGT])\s*$/) {
$used = $1;
my $u = $3;
my $parse_qemu_img_info = sub {
my $line = shift;
if ($line =~ m/^file format:\s+(\S+)\s*$/) {
$format = $1;
} elsif ($line =~ m/^backing file:\s(\S+)\s/) {
$parent = $1;
} elsif ($line =~ m/^virtual size:\s\S+\s+\((\d+)\s+bytes\)$/) {
$size = int($1);
} elsif ($line =~ m/^disk size:\s+(\d+(.\d+)?)([KMGT])\s*$/) {
$used = $1;
my $u = $3;
$used *= 1024 if $u eq 'K';
$used *= (1024*1024) if $u eq 'M';
$used *= (1024*1024*1024) if $u eq 'G';
$used *= (1024*1024*1024*1024) if $u eq 'T';
$used *= 1024 if $u eq 'K';
$used *= (1024*1024) if $u eq 'M';
$used *= (1024*1024*1024) if $u eq 'G';
$used *= (1024*1024*1024*1024) if $u eq 'T';
$used = int($used);
}
});
$used = int($used);
}
};
my $cmd = ['/usr/bin/qemu-img', 'info', $filename];
eval {
run_command($cmd, timeout => $timeout, outfunc => $parse_qemu_img_info );
};
warn $@ if $@;
return wantarray ? ($size, $format, $used, $parent) : $size;