aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/portability.h5
-rw-r--r--toys/other/stat.c21
2 files changed, 9 insertions, 17 deletions
diff --git a/lib/portability.h b/lib/portability.h
index b3646473..54f97afd 100644
--- a/lib/portability.h
+++ b/lib/portability.h
@@ -215,6 +215,11 @@ int posix_fallocate(int, off_t, off_t);
// macOS keeps newlocale(3) in the non-POSIX <xlocale.h> rather than <locale.h>.
#include <xlocale.h>
+static inline long statfs_bsize(struct statfs *sf) { return sf->f_iosize; }
+static inline long statfs_frsize(struct statfs *sf) { return sf->f_bsize; }
+#else
+static inline long statfs_bsize(struct statfs *sf) { return sf->f_bsize; }
+static inline long statfs_frsize(struct statfs *sf) { return sf->f_frsize; }
#endif
diff --git a/toys/other/stat.c b/toys/other/stat.c
index 6d5fc018..98f27ed6 100644
--- a/toys/other/stat.c
+++ b/toys/other/stat.c
@@ -141,15 +141,8 @@ static void print_statfs(char type) {
else if (type == 'c') out('u', statfs->f_files);
else if (type == 'd') out('u', statfs->f_ffree);
else if (type == 'f') out('u', statfs->f_bfree);
- else if (type == 'l') {
-#ifdef __APPLE__
- // TODO: move this into portability.c somehow, or just use this everywhere?
- // (glibc and bionic will just re-do the statfs and return f_namelen.)
- out('d', pathconf(TT.file, _PC_NAME_MAX));
-#else
- out('d', statfs->f_namelen);
-#endif
- } else if (type == 't') out('x', statfs->f_type);
+ else if (type == 'l') out('d', pathconf(TT.file, _PC_NAME_MAX));
+ else if (type == 't') out('x', statfs->f_type);
else if (type == 'T') strout(fs_type_name(statfs));
else if (type == 'i') {
int *val = (int *) &statfs->f_fsid;
@@ -157,14 +150,8 @@ static void print_statfs(char type) {
sprintf(buf, "%08x%08x", val[0], val[1]);
strout(buf);
- }
-#ifdef __APPLE__
- else if (type == 's') out('d', statfs->f_iosize);
- else if (type == 'S') out('d', statfs->f_bsize);
-#else
- else if (type == 's') out('d', statfs->f_bsize);
- else if (type == 'S') out('d', statfs->f_frsize);
-#endif
+ } else if (type == 's') out('d', statfs_bsize(statfs));
+ else if (type == 'S') out('d', statfs_frsize(statfs));
else strout("?");
}