]> granicus.if.org Git - strace/commitdiff
statfs: decode f_flags field of struct statfs
authorDmitry V. Levin <ldv@altlinux.org>
Sun, 24 Apr 2016 23:54:52 +0000 (23:54 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Mon, 25 Apr 2016 01:58:25 +0000 (01:58 +0000)
* xlat/statfs_flags.in: New file.
* statfs.c: Include "xlat/statfs_flags.h".
(printstatfs) [_STATFS_F_FLAGS]: Print statbuf.f_flags as flags.
(printstatfs64) [_STATFS_F_FLAGS]: Likewise.
(printcompat_statfs64): Likewise.
* tests/statfs.expected: Update.

statfs.c
tests/statfs.expected
xlat/statfs_flags.in [new file with mode: 0644]

index 882ee9c1b4e75d2b51db7f4c6032f4d9f5310330..706e0990af9e1e16f3a69dbc38933ea5c054c0e6 100644 (file)
--- a/statfs.c
+++ b/statfs.c
@@ -36,6 +36,7 @@
 # include <sys/vfs.h>
 #endif
 #include "xlat/fsmagic.h"
+#include "xlat/statfs_flags.h"
 
 static const char *
 sprintfstype(const unsigned int magic)
@@ -72,7 +73,8 @@ printstatfs(struct tcb *tcp, const long addr)
        tprintf(", f_frsize=%lu", (unsigned long)statbuf.f_frsize);
 #endif
 #ifdef _STATFS_F_FLAGS
-       tprintf(", f_flags=%lu", (unsigned long)statbuf.f_flags);
+       tprints(", f_flags=");
+       printflags(statfs_flags, statbuf.f_flags, "ST_???");
 #endif
        tprints("}");
 }
@@ -122,7 +124,8 @@ printstatfs64(struct tcb *tcp, long addr)
        tprintf(", f_frsize=%llu", (unsigned long long)statbuf.f_frsize);
 #endif
 #ifdef _STATFS_F_FLAGS
-       tprintf(", f_flags=%llu", (unsigned long long)statbuf.f_flags);
+       tprints(", f_flags=");
+       printflags(statfs_flags, statbuf.f_flags, "ST_???");
 #endif
        tprints("}");
 }
@@ -169,7 +172,9 @@ printcompat_statfs64(struct tcb *tcp, const long addr)
                statbuf.f_fsid.__val[0], statbuf.f_fsid.__val[1]);
        tprintf(", f_namelen=%lu", (unsigned long)statbuf.f_namelen);
        tprintf(", f_frsize=%lu", (unsigned long)statbuf.f_frsize);
-       tprintf(", f_flags=%lu}", (unsigned long)statbuf.f_frsize);
+       tprints(", f_flags=");
+       printflags(statfs_flags, statbuf.f_flags, "ST_???");
+       tprints("}");
 }
 
 static int
index f39013b82475c3db7999e4e314139d3a4fe86c86..9decc1ab24d205458e8c241794a28aa3316b271d 100644 (file)
@@ -1 +1 @@
-statfs(64)?\("/proc/self/status"(, [1-9][0-9]*)?, \{f_type=PROC_SUPER_MAGIC, f_bsize=[1-9][0-9]*, f_blocks=[0-9]+, f_bfree=[0-9]+, f_bavail=[0-9]+, f_files=[0-9]+, f_ffree=[0-9]+, f_fsid=\{[0-9]+, [0-9]+\}, f_namelen=[1-9][0-9]*(, f_frsize=[0-9]+)?(, f_flags=[0-9]+)?\}\) += 0
+statfs(64)?\("/proc/self/status"(, [1-9][0-9]*)?, \{f_type=PROC_SUPER_MAGIC, f_bsize=[1-9][0-9]*, f_blocks=[0-9]+, f_bfree=[0-9]+, f_bavail=[0-9]+, f_files=[0-9]+, f_ffree=[0-9]+, f_fsid=\{[0-9]+, [0-9]+\}, f_namelen=[1-9][0-9]*(, f_frsize=[0-9]+)?(, f_flags=(0|ST_[A-Z]+(\|ST_[A-Z]+)*))?\}\) += 0
diff --git a/xlat/statfs_flags.in b/xlat/statfs_flags.in
new file mode 100644 (file)
index 0000000..2b427c3
--- /dev/null
@@ -0,0 +1,10 @@
+ST_RDONLY      0x0001
+ST_NOSUID      0x0002
+ST_NODEV       0x0004
+ST_NOEXEC      0x0008
+ST_SYNCHRONOUS 0x0010
+ST_VALID       0x0020
+ST_MANDLOCK    0x0040
+ST_NOATIME     0x0400
+ST_NODIRATIME  0x0800
+ST_RELATIME    0x1000