disk.c (1016B) download
1/* See LICENSE file for copyright and license details. */
2#include <stdio.h>
3#include <sys/statvfs.h>
4
5#include "../slstatus.h"
6#include "../util.h"
7
8const char *
9disk_free(const char *path)
10{
11 struct statvfs fs;
12
13 if (statvfs(path, &fs) < 0) {
14 warn("statvfs '%s':", path);
15 return NULL;
16 }
17
18 return fmt_human(fs.f_frsize * fs.f_bavail, 1024);
19}
20
21const char *
22disk_perc(const char *path)
23{
24 struct statvfs fs;
25
26 if (statvfs(path, &fs) < 0) {
27 warn("statvfs '%s':", path);
28 return NULL;
29 }
30
31 return bprintf("%d", (int)(100 *
32 (1 - ((double)fs.f_bavail / (double)fs.f_blocks))));
33}
34
35const char *
36disk_total(const char *path)
37{
38 struct statvfs fs;
39
40 if (statvfs(path, &fs) < 0) {
41 warn("statvfs '%s':", path);
42 return NULL;
43 }
44
45 return fmt_human(fs.f_frsize * fs.f_blocks, 1024);
46}
47
48const char *
49disk_used(const char *path)
50{
51 struct statvfs fs;
52
53 if (statvfs(path, &fs) < 0) {
54 warn("statvfs '%s':", path);
55 return NULL;
56 }
57
58 return fmt_human(fs.f_frsize * (fs.f_blocks - fs.f_bfree), 1024);
59}