]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
mount: replace control chars in mountpoint name
authorKarel Zak <kzak@redhat.com>
Mon, 6 Aug 2012 10:45:08 +0000 (12:45 +0200)
committerKarel Zak <kzak@redhat.com>
Mon, 6 Aug 2012 10:49:41 +0000 (12:49 +0200)
For compatibility with coreutils and to avoid complex solutions in
mount output mount replaces control characters with '?'.

Note that the listing mode in mount(8) is in maintenance mode --
findmnt(8) provides more robust and better solutions.

Signed-off-by: Karel Zak <kzak@redhat.com>
sys-utils/mount.8
sys-utils/mount.c

index 6c222d032dec2b130b98fe2b12b145206d7635c3..fc4622d2b49f6f212f4345c0c17bb927581ad810 100644 (file)
@@ -115,13 +115,13 @@ options to avoid ambivalent interpretation of the given argument. For example
 
 .B The listing and help.
 .RS
-Three forms of invocation do not actually mount anything:
-.TP
-.B "mount \-h"
-prints a help message
-.TP
-.B "mount \-V"
-prints a version string
+The listing mode is maintained for backward compatibility only.
+
+For more robust and definable output use
+.BR findmnt (8),
+\fBespecially in your scripts\fP. Note that control characters in the
+mountpoint name are replaced with '?'.
+
 .TP
 .BR "mount " [ -l "] [" "-t \fItype\fP" ]
 lists all mounted filesystems (of type
index 3b9f2c4b6c8f8b1ec22bd0e1c1b690353bf39238..2d1d2cd413e53cab7c84fec0f193e171559f0a29 100644 (file)
@@ -30,6 +30,7 @@
 #include <sys/stat.h>
 #include <stdarg.h>
 #include <libmount.h>
+#include <ctype.h>
 
 #include "nls.h"
 #include "c.h"
@@ -130,6 +131,22 @@ static void encrypt_pass_release(struct libmnt_context *cxt
        munlockall();
 }
 
+/*
+ * Replace control chars with '?' to be compatible with coreutils. For more
+ * robust solution use findmnt(1) where we use \x?? hex encoding.
+ */
+static void safe_fputs(const char *data)
+{
+       const char *p;
+
+       for (p = data; p && *p; p++) {
+               if (iscntrl((unsigned char) *p))
+                       fputc('?', stdout);
+               else
+                       fputc(*p, stdout);
+       }
+}
+
 static void print_all(struct libmnt_context *cxt, char *pattern, int show_label)
 {
        struct libmnt_table *tb;
@@ -157,7 +174,9 @@ static void print_all(struct libmnt_context *cxt, char *pattern, int show_label)
 
                if (!mnt_fs_is_pseudofs(fs))
                        xsrc = mnt_pretty_path(src, cache);
-               printf ("%s on %s", xsrc ? xsrc : src, mnt_fs_get_target(fs));
+               printf ("%s on ", xsrc ? xsrc : src);
+               safe_fputs(mnt_fs_get_target(fs));
+
                if (type)
                        printf (" type %s", type);
                if (optstr)