date: invalid date '\260'
[This bug was present in "the beginning".]
+ df no longer outputs control characters present in the mount point name.
+ Such characters are replaced with '?', so for example, scripts consuming
+ lines output by df, can work reliably.
+ [This bug was present in "the beginning".]
+
head --lines=-N (-n-N) now resets the read pointer of a seekable input file.
This means that "head -n-3" no longer consumes all of its input, and lines
not output by head may be processed by other programs. For example, this
{NULL, 0, NULL, 0}
};
+/* Replace problematic chars with '?'.
+ Since only control characters are currently considered,
+ this should work in all encodings. */
+
+static char*
+hide_problematic_chars (char *cell)
+{
+ char *p = cell;
+ while (*p)
+ {
+ if (iscntrl (to_uchar (*p)))
+ *p = '?';
+ p++;
+ }
+ return cell;
+}
+
/* Dynamically allocate a row of pointers in TABLE, which
can then be accessed with standard 2D array notation. */
if (!cell)
xalloc_die ();
+ hide_problematic_chars (cell);
+
table[nrows-1][field] = cell;
widths[field] = MAX (widths[field], mbswidth (cell, 0));
}
if (cell)
- widths[field] = MAX (widths[field], mbswidth (cell, 0));
+ {
+ hide_problematic_chars (cell);
+ widths[field] = MAX (widths[field], mbswidth (cell, 0));
+ }
table[nrows-1][field] = cell;
}
}
cp/capability \
cp/sparse-fiemap \
dd/skip-seek-past-dev \
+ df/problematic-chars \
install/install-C-root \
ls/capability \
ls/nameless-uid \
--- /dev/null
+#!/bin/sh
+# Ensure that df outputs one line per entry
+
+# Copyright (C) 2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../src
+print_ver_ df
+require_root_
+
+mnt='mount
+point'
+
+cwd=$(pwd)
+cleanup_() { cd /; umount "$cwd/$mnt"; }
+
+skip=0
+# Create a file system, then mount it.
+dd if=/dev/zero of=blob bs=8192 count=200 > /dev/null 2>&1 \
+ || skip=1
+mkdir "$mnt" || skip=1
+mkfs -t ext2 -F blob \
+ || skip_ "failed to create ext2 file system"
+
+mount -oloop blob "$mnt" || skip=1
+
+test $skip = 1 \
+ && skip_ "insufficient mount/ext2 support"
+
+test $(df "$mnt" | wc -l) = 2 || fail=1
+
+Exit $fail