svn commit: trunk/busybox/coreutils

vda at busybox.net vda at busybox.net
Tue Nov 11 22:25:35 UTC 2008


Author: vda
Date: 2008-11-11 14:25:34 -0800 (Tue, 11 Nov 2008)
New Revision: 24006

Log:
stat: make stat -f show filesystem "ID:" as coreutils does

print_statfs                                         358     370     +12



Modified:
   trunk/busybox/coreutils/stat.c


Changeset:
Modified: trunk/busybox/coreutils/stat.c
===================================================================
--- trunk/busybox/coreutils/stat.c	2008-11-11 21:32:39 UTC (rev 24005)
+++ trunk/busybox/coreutils/stat.c	2008-11-11 22:25:34 UTC (rev 24006)
@@ -139,6 +139,20 @@
 	printf(pformat, msg);
 }
 
+/* "man statfs" says that statfsbuf->f_fsid is a mess */
+/* coreutils treats it as an array of ints, most significant first */
+static unsigned long long get_f_fsid(const struct statfs *statfsbuf)
+{
+	const unsigned *p = (const void*) &statfsbuf->f_fsid;
+	unsigned sz = sizeof(statfsbuf->f_fsid) / sizeof(unsigned);
+	unsigned long long r = 0;
+
+	do
+		r = (r << (sizeof(unsigned)*8)) | *p++;
+	while (--sz > 0);
+	return r;
+}
+
 /* print statfs info */
 static void print_statfs(char *pformat, const char m,
 		const char *const filename, const void *data
@@ -148,11 +162,11 @@
 	if (m == 'n') {
 		printfs(pformat, filename);
 	} else if (m == 'i') {
-		strcat(pformat, "Lx");
-		printf(pformat, statfsbuf->f_fsid);
+		strcat(pformat, "llx");
+		printf(pformat, get_f_fsid(statfsbuf));
 	} else if (m == 'l') {
 		strcat(pformat, "lu");
-		printf(pformat, statfsbuf->f_namelen);
+		printf(pformat, (unsigned long) (statfsbuf->f_namelen));
 	} else if (m == 't') {
 		strcat(pformat, "lx");
 		printf(pformat, (unsigned long) (statfsbuf->f_type)); /* no equiv */
@@ -349,10 +363,11 @@
 #endif
 static bool do_statfs(const char *filename, const char *format)
 {
+	struct statfs statfsbuf;
+
 #if !ENABLE_FEATURE_STAT_FORMAT
 	const char *format;
 #endif
-	struct statfs statfsbuf;
 #if ENABLE_SELINUX
 	security_context_t scontext = NULL;
 
@@ -406,10 +421,10 @@
 	format = (option_mask32 & OPT_TERSE
 		? "%s %llx %lu "
 		: "  File: \"%s\"\n"
-		  "    ID: %-8Lx Namelen: %-7lu ");
+		  "    ID: %-8llx Namelen: %-7lu ");
 	printf(format,
 	       filename,
-	       statfsbuf.f_fsid,
+	       get_f_fsid(&statfsbuf),
 	       statfsbuf.f_namelen);
 
 	if (option_mask32 & OPT_TERSE)




More information about the busybox-cvs mailing list