Subject: | GNU df is broken. Allow the use of local non-gnu df if it exists. |
Mogstored uses the -P flag to df due to GNU df's broken behavior with
splitting line output and requiring -P to do the right thing.
For those of us not using GNU df, it'd be nice to have mogstored just
work with our local df.
Here's the patch to make this work:
--- DiskUsage.pm.gnu Mon Sep 14 22:32:53 2009
+++ DiskUsage.pm Mon Sep 14 22:37:26 2009
@@ -36,7 +36,13 @@
my $err = sub { warn "$_[0]\n"; };
my $path = $ENV{MOG_DOCROOT};
$path =~ s!/$!!;
+ my $gnu_df;
+ # gnu df is broken as it splits output onto multiple lines by default
+ if($^O eq 'Linux') {
+ $gnu_df = '-P';
+ }
+
# find all devices below us
my @devnum;
if (opendir(D, $path)) {
@@ -47,7 +53,7 @@
}
foreach my $devnum (@devnum) {
- my $rval = `df -P -l -k $path/$devnum`;
+ my $rval = `df $gnu_df -l -k $path/$devnum`;
my $uperK = ($rval =~ /512-blocks/i) ? 2 : 1; # units per kB
foreach my $l (split /\r?\n/, $rval) {
next unless $l =~
/^(.+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(.+)\s+(.+)$/;
That patch does assume Linux is the only place to find GNU df, to be
really sure, the fix would be something more like the following
(although it does end up making 2 system calls instead of one each time)
--- DiskUsage.pm.gnu Mon Sep 14 22:32:53 2009
+++ DiskUsage.pm Mon Sep 14 22:49:26 2009
@@ -36,7 +36,14 @@
my $err = sub { warn "$_[0]\n"; };
my $path = $ENV{MOG_DOCROOT};
$path =~ s!/$!!;
+ my $gnu_df;
+ # gnu df is broken as it splits output onto multiple lines by default
+ `df -P / 2>/dev/null >/dev/null`;
+ if($? eq 0) {
+ $gnu_df = '-P';
+ }
+
# find all devices below us
my @devnum;
if (opendir(D, $path)) {
@@ -47,7 +54,7 @@
}
foreach my $devnum (@devnum) {
- my $rval = `df -P -l -k $path/$devnum`;
+ my $rval = `df $gnu_df -l -k $path/$devnum`;
my $uperK = ($rval =~ /512-blocks/i) ? 2 : 1; # units per kB
foreach my $l (split /\r?\n/, $rval) {
next unless $l =~
/^(.+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(.+)\s+(.+)$/;
--
Save our economy, demand finishing metric conversion from your federal
and state representatives.