diff options
author | Waldemar Brodkorb <wbx@uclibc-ng.org> | 2018-02-25 13:53:05 +0000 |
---|---|---|
committer | Waldemar Brodkorb <wbx@uclibc-ng.org> | 2018-02-25 13:53:11 +0000 |
commit | 9d7518c2cb43f1fb1eb54495899945523fd5dc99 (patch) | |
tree | 57fcfe56162934f5f78b3b22920623546c8d126c /package/toolbox/src/src/df.c | |
parent | 30f5a076475d08daa882fa2e636a19200877aa33 (diff) |
toolbox: add OpenADK toolbox for very small systems, thx Thorsten Glaser
Diffstat (limited to 'package/toolbox/src/src/df.c')
-rw-r--r-- | package/toolbox/src/src/df.c | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/package/toolbox/src/src/df.c b/package/toolbox/src/src/df.c new file mode 100644 index 000000000..8cff0c8c2 --- /dev/null +++ b/package/toolbox/src/src/df.c @@ -0,0 +1,85 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <errno.h> +#include <sys/statfs.h> + +static int ok = EXIT_SUCCESS; + +static void printsize(long long n) +{ + char unit = 'K'; + long long t; + + n *= 10; + + if (n > 1024*1024*10) { + n /= 1024; + unit = 'M'; + } + + if (n > 1024*1024*10) { + n /= 1024; + unit = 'G'; + } + + t = (n + 512) / 1024; + printf("%4lld.%1lld%c", t/10, t%10, unit); +} + +static void df(char *s, int always) { + struct statfs st; + + if (statfs(s, &st) < 0) { + fprintf(stderr, "%s: %s\n", s, strerror(errno)); + ok = EXIT_FAILURE; + } else { + if (st.f_blocks == 0 && !always) + return; + printf("%-20s ", s); + printsize((long long)st.f_blocks * (long long)st.f_bsize); + printf(" "); + printsize((long long)(st.f_blocks - (long long)st.f_bfree) * st.f_bsize); + printf(" "); + printsize((long long)st.f_bfree * (long long)st.f_bsize); + printf(" %d\n", (int) st.f_bsize); + } +} + +int main(int argc, char *argv[]) { + printf("Filesystem Size Used Free Blksize\n"); + if (argc == 1) { + char s[2000]; + FILE *f = fopen("/proc/mounts", "r"); + + while (fgets(s, 2000, f)) { + char *c, *e = s; + + for (c = s; *c; c++) { + if (*c == ' ') { + e = c + 1; + break; + } + } + + for (c = e; *c; c++) { + if (*c == ' ') { + *c = '\0'; + break; + } + } + + df(e, 0); + } + + fclose(f); + } else { + int i; + + for (i = 1; i < argc; i++) { + df(argv[i], 1); + } + } + + exit(ok); +} |