Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0fd09463 authored by Elliott Hughes's avatar Elliott Hughes Committed by Gerrit Code Review
Browse files

Merge "Lose df to toybox."

parents f4e20453 cca60191
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -31,7 +31,6 @@ BSD_TOOLS := \
    dd \

OUR_TOOLS := \
    df \
    getevent \
    iftop \
    ioctl \

toolbox/df.c

deleted100644 → 0
+0 −85
Original line number Diff line number Diff line
#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 df_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);
}