From 1ca8a440323d04164efab68ed8f507f1c6ae84d9 Mon Sep 17 00:00:00 2001
From: Rob Landley <rob@landley.net>
Date: Sat, 10 Oct 2015 01:13:35 -0500
Subject: "stat -c %T" support (filesystem type names) based on patch from
 Hyejin Kim.

---
 toys/other/stat.c | 21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/toys/other/stat.c b/toys/other/stat.c
index d6db44dd..d43a8393 100644
--- a/toys/other/stat.c
+++ b/toys/other/stat.c
@@ -29,7 +29,7 @@ config STAT
     %a  Available blocks    |%b  Total blocks       |%c  Total inodes
     %d  Free inodes         |%f  Free blocks        |%i  File system ID
     %l  Max filename length |%n  File name          |%s  Fragment size
-    %S  Best transfer size  |%t  File system type
+    %S  Best transfer size  |%t  Filesystem type    |%T  Filesystem type name
 */
 
 #define FOR_stat
@@ -113,7 +113,24 @@ static void print_statfs(char type) {
   else if (type == 'f') xprintf("%llu", statfs->f_bfree);
   else if (type == 'l') xprintf("%ld", statfs->f_namelen);
   else if (type == 't') xprintf("%lx", statfs->f_type);
-  else if (type == 'i')
+  else if (type == 'T') {
+    char *s = "unknown";
+    struct {unsigned num; char *name;} nn[] = {
+      {0xADFF, "affs"}, {0x5346544e, "ntfs"}, {0x1Cd1, "devpts"},
+      {0x137D, "ext"}, {0xEF51, "ext2"}, {0xEF53, "ext3"},
+      {0x1BADFACE, "bfs"}, {0x9123683E, "btrfs"}, {0x28cd3d45, "cramfs"},
+      {0x3153464a, "jfs"}, {0x7275, "romfs"}, {0x01021994, "tmpfs"},
+      {0x3434, "nilfs"}, {0x6969, "nfs"}, {0x9fa0, "proc"},
+      {0x534F434B, "sockfs"}, {0x62656572, "sysfs"}, {0x517B, "smb"},
+      {0x4d44, "msdos"}, {0x4006, "fat"}, {0x43415d53, "smackfs"},
+      {0x73717368, "squashfs"}
+    };
+    int i;
+
+    for (i=0; i<ARRAY_LEN(nn); i++)
+      if (nn[i].num == statfs->f_type) s = nn[i].name;
+    xprintf(s);
+  } else if (type == 'i')
     xprintf("%08x%08x", statfs->f_fsid.__val[0], statfs->f_fsid.__val[1]);
   else if (type == 's') xprintf("%d", statfs->f_frsize);
   else if (type == 'S') xprintf("%d", statfs->f_bsize);
-- 
cgit v1.2.3