summaryrefslogtreecommitdiff
path: root/src/df.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/df.c')
-rw-r--r--src/df.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/src/df.c b/src/df.c
index 7e30d57f7..5dc3d2dd0 100644
--- a/src/df.c
+++ b/src/df.c
@@ -192,6 +192,23 @@ static struct option const long_options[] =
{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. */
@@ -315,6 +332,8 @@ get_header (void)
if (!cell)
xalloc_die ();
+ hide_problematic_chars (cell);
+
table[nrows-1][field] = cell;
widths[field] = MAX (widths[field], mbswidth (cell, 0));
@@ -661,7 +680,10 @@ get_dev (char const *disk, char const *mount_point,
}
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;
}
}