blob: 90476bdc8f25f105cebc19bfefe6ba8ebc1a5438 [file] [log] [blame]
The Android Open Source Projectdd7bc332009-03-03 19:32:55 -08001#include <stdio.h>
2#include <stdlib.h>
3#include <string.h>
4#include <errno.h>
5#include <sys/statfs.h>
6
7static int ok = EXIT_SUCCESS;
8
9static void df(char *s, int always) {
10 struct statfs st;
11
12 if (statfs(s, &st) < 0) {
13 fprintf(stderr, "%s: %s\n", s, strerror(errno));
14 ok = EXIT_FAILURE;
15 } else {
16 if (st.f_blocks == 0 && !always)
17 return;
18
19 printf("%s: %lldK total, %lldK used, %lldK available (block size %d)\n",
20 s,
21 ((long long)st.f_blocks * (long long)st.f_bsize) / 1024,
22 ((long long)(st.f_blocks - (long long)st.f_bfree) * st.f_bsize) / 1024,
23 ((long long)st.f_bfree * (long long)st.f_bsize) / 1024,
24 (int) st.f_bsize);
25 }
26}
27
28int df_main(int argc, char *argv[]) {
29 if (argc == 1) {
30 char s[2000];
31 FILE *f = fopen("/proc/mounts", "r");
32
33 while (fgets(s, 2000, f)) {
34 char *c, *e = s;
35
36 for (c = s; *c; c++) {
37 if (*c == ' ') {
38 e = c + 1;
39 break;
40 }
41 }
42
43 for (c = e; *c; c++) {
44 if (*c == ' ') {
45 *c = '\0';
46 break;
47 }
48 }
49
50 df(e, 0);
51 }
52
53 fclose(f);
54 } else {
55 int i;
56
57 for (i = 1; i < argc; i++) {
58 df(argv[i], 1);
59 }
60 }
61
62 exit(ok);
63}