X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=tools%2Fvirt-df;h=9c9252156db1ca612436405cde147519de7f8905;hb=8736015a2c3eab15ca431ed777586a995c56c581;hp=4aa1063d8efeed67e1b98dbcff1449e62289cb68;hpb=252fe8ee2e93ae835565fe3adf30544100db2fa3;p=libguestfs.git diff --git a/tools/virt-df b/tools/virt-df index 4aa1063..9c92521 100755 --- a/tools/virt-df +++ b/tools/virt-df @@ -119,6 +119,8 @@ my $human; Print sizes in human-readable format. +You are not allowed to use I<-h> and I<--csv> at the same time. + =cut my $inodes; @@ -146,6 +148,9 @@ if ($version) { exit } +# RHBZ#600977 +die __"virt-df: cannot use -h and --csv options together\n" if $human && $csv; + # Open the guest handle. if (@ARGV == 0) { @@ -277,6 +282,7 @@ sub print_title printf "%-36s%10s %10s %10s %5s\n", $cols[1], $cols[2], $cols[3], $cols[4], $cols[5]; } else { + # Columns don't need special CSV quoting. print (join (",", @cols), "\n"); } } @@ -295,7 +301,11 @@ sub print_cols printf ("%10s %10s %10s %5s\n", $_[2], $_[3], $_[4], $percent); } else { - printf ("\"%s\",\"%s\",%d,%d,%d,%.1f%%\n", @_); + # Need to quote libvirt domain and filesystem. + my $dom = shift; + my $fs = shift; + print csv_quote($dom), ",", csv_quote($fs), ","; + printf ("%d,%d,%d,%.1f%%\n", @_); } } @@ -313,6 +323,31 @@ sub human_size } } +# Quote field for CSV without using an external module. +sub csv_quote +{ + local $_ = shift; + + my $needs_quoting = /[ ",\n\0]/; + return $_ unless $needs_quoting; + + my $i; + my $out = '"'; + for ($i = 0; $i < length; ++$i) { + my $c = substr $_, $i, 1; + if ($c eq '"') { + $out .= '""'; + } elsif ($c eq '\0') { + $out .= '"0'; + } else { + $out .= $c; + } + } + $out .= '"'; + + return $out; +} + =head1 NOTE ABOUT CSV FORMAT Comma-separated values (CSV) is a deceptive format. It I like