mirror of
git://git.suckless.org/ubase
synced 2024-12-24 07:32:33 +00:00
73 lines
1.3 KiB
C
73 lines
1.3 KiB
C
/* See LICENSE file for copyright and license details. */
|
|
#include <sys/statvfs.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include "grabmntinfo.h"
|
|
#include "util.h"
|
|
|
|
static void mnt_show(const char *fsname, const char *dir);
|
|
|
|
static void
|
|
usage(void)
|
|
{
|
|
eprintf("usage: %s [-a]\n", argv0);
|
|
}
|
|
|
|
int
|
|
main(int argc, char *argv[])
|
|
{
|
|
struct mntinfo *minfo = NULL;
|
|
int siz, i;
|
|
|
|
ARGBEGIN {
|
|
case 'a':
|
|
break;
|
|
case 's':
|
|
case 'h':
|
|
case 'i':
|
|
eprintf("not implemented\n");
|
|
default:
|
|
usage();
|
|
} ARGEND;
|
|
|
|
printf("Filesystem 512-blocks Used Avail Capacity Mounted on\n");
|
|
siz = grabmntinfo(&minfo);
|
|
if (!siz)
|
|
eprintf("grabmntinfo:");
|
|
|
|
for (i = 0; i < siz; i++) {
|
|
mnt_show(minfo[i].fsname, minfo[i].mntdir);
|
|
free(minfo[i].fsname);
|
|
free(minfo[i].mntdir);
|
|
}
|
|
free(minfo);
|
|
|
|
return EXIT_SUCCESS;
|
|
}
|
|
|
|
static void
|
|
mnt_show(const char *fsname, const char *dir)
|
|
{
|
|
struct statvfs s;
|
|
unsigned long long total, used, avail;
|
|
int capacity = 0;
|
|
int bs;
|
|
|
|
statvfs(dir, &s);
|
|
|
|
bs = s.f_frsize / 512;
|
|
total = s.f_blocks * bs;
|
|
avail = s.f_bfree * bs;
|
|
used = total - avail;
|
|
|
|
if (used + avail) {
|
|
capacity = (used * 100) / (used + avail);
|
|
if (used * 100 != capacity * (used + avail))
|
|
capacity++;
|
|
}
|
|
|
|
printf("%-12s %9llu %9llu %9llu %7d%% %s\n",
|
|
fsname, total, used, avail, capacity,
|
|
dir);
|
|
}
|