blob: b3fefdf7575d5145535f3ffeba88ae8e3e415809 [file] [log] [blame]
/*
* Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that
* can be found in the LICENSE file.
*/
#include <linux/magic.h>
#include <sys/statfs.h>
#include <sys/types.h>
#include <stdio.h>
#include <style.h>
#include <eprintf.h>
#define num_elements(_a) (sizeof(_a) / sizeof(_a[0]))
typedef struct Fstype_s {
long type;
char *name;
} Fstype_s;
#define FSTYPE(x) { x, # x }
Fstype_s Fstype[] = {
FSTYPE(ADFS_SUPER_MAGIC),
FSTYPE(AFFS_SUPER_MAGIC),
FSTYPE(AFS_SUPER_MAGIC),
FSTYPE(AUTOFS_SUPER_MAGIC),
FSTYPE(CODA_SUPER_MAGIC),
FSTYPE(CRAMFS_MAGIC),
FSTYPE(CRAMFS_MAGIC_WEND),
FSTYPE(DEBUGFS_MAGIC),
FSTYPE(SYSFS_MAGIC),
FSTYPE(SECURITYFS_MAGIC),
FSTYPE(SELINUX_MAGIC),
FSTYPE(RAMFS_MAGIC),
FSTYPE(TMPFS_MAGIC),
FSTYPE(HUGETLBFS_MAGIC),
FSTYPE(SQUASHFS_MAGIC),
FSTYPE(EFS_SUPER_MAGIC),
FSTYPE(EXT2_SUPER_MAGIC),
FSTYPE(EXT3_SUPER_MAGIC),
FSTYPE(XENFS_SUPER_MAGIC),
FSTYPE(EXT4_SUPER_MAGIC),
FSTYPE(BTRFS_SUPER_MAGIC),
FSTYPE(HPFS_SUPER_MAGIC),
FSTYPE(ISOFS_SUPER_MAGIC),
FSTYPE(JFFS2_SUPER_MAGIC),
FSTYPE(ANON_INODE_FS_MAGIC),
FSTYPE(MINIX_SUPER_MAGIC),
FSTYPE(MINIX_SUPER_MAGIC2),
FSTYPE(MINIX2_SUPER_MAGIC),
FSTYPE(MINIX2_SUPER_MAGIC2),
FSTYPE(MINIX3_SUPER_MAGIC),
FSTYPE(MSDOS_SUPER_MAGIC),
FSTYPE(NCP_SUPER_MAGIC),
FSTYPE(NFS_SUPER_MAGIC),
FSTYPE(OPENPROM_SUPER_MAGIC),
FSTYPE(PROC_SUPER_MAGIC),
FSTYPE(QNX4_SUPER_MAGIC),
FSTYPE(REISERFS_SUPER_MAGIC),
FSTYPE(SMB_SUPER_MAGIC),
FSTYPE(USBDEVICE_SUPER_MAGIC),
FSTYPE(CGROUP_SUPER_MAGIC),
FSTYPE(FUTEXFS_SUPER_MAGIC),
/*FSTYPE(INOTIFYFS_SUPER_MAGIC), not defined in earlier headers */
FSTYPE(STACK_END_MAGIC),
FSTYPE(DEVPTS_SUPER_MAGIC),
FSTYPE(SOCKFS_MAGIC)};
static char *lookup_fstype(long fstype)
{
int i;
for (i = 0; i < num_elements(Fstype); i++) {
if (fstype == Fstype[i].type) return Fstype[i].name;
}
return "<fs type unknown>";
}
int dostatfs (const char *path)
{
struct statfs fs;
int rc;
rc = statfs(path, &fs);
if (rc) {
warn("statfs failed %s:", path);
return rc;
}
printf("statfs for %s:\n"
"\ttype of file system: %14llx %s\n"
"\tblock size : %'14lld\n"
"\ttotal data blocks : %'14lld\n"
"\tfree blocks : %'14lld\n"
"\tinuse (total-free) : %'14lld\n"
"\tavailable blocks : %'14lld\n"
"\ttotal inodes : %'14lld\n"
"\tfree inodes : %'14lld\n"
"\tinuse (total-free) : %'14lld\n"
"\tfile system id : 0x%.8x 0x%.8x\n"
"\tmax file name len : %'14lld\n",
path,
(s64)fs.f_type, lookup_fstype(fs.f_type),
(s64)fs.f_bsize,
(s64)fs.f_blocks,
(s64)fs.f_bfree,
(s64)fs.f_blocks - (s64)fs.f_bfree,
(s64)fs.f_bavail,
(s64)fs.f_files,
(s64)fs.f_ffree,
(s64)fs.f_files - (s64)fs.f_ffree,
fs.f_fsid.__val[0], fs.f_fsid.__val[1],
(s64)fs.f_namelen);
return 0;
}