diff options
| author | Victor Mignot <victor@vmignot.fr> | 2026-03-13 14:58:29 +0100 |
|---|---|---|
| committer | Victor Mignot <victor@vmignot.fr> | 2026-03-13 14:58:29 +0100 |
| commit | e59f8574dc849c800f347e9c55064b933d0931cc (patch) | |
| tree | 07fced0e4fdc8418293d36e5a458d1fc8b54c53e | |
| parent | 340ca1a5bdf9a03819872f7370891b6bf5529441 (diff) | |
| download | futiles-main.tar.gz | |
| -rw-r--r-- | src/df.c | 61 | ||||
| -rw-r--r-- | src/main.c | 4 |
2 files changed, 64 insertions, 1 deletions
diff --git a/src/df.c b/src/df.c new file mode 100644 index 0000000..9f9e275 --- /dev/null +++ b/src/df.c @@ -0,0 +1,61 @@ +#include <getopt.h> +#include <stdbool.h> +#include <stdio.h> +#include <stdlib.h> + +#define DF_USAGE "Usage: df [-k] [-P] [file...]" +#define FS_NAME_LEN 256 +#define HEADER_FMT "Filesystem %u-blocks Used Available Capacity Mounted on\n" + +struct fs_results { + const char *name; + unsigned int total; + unsigned int used; + const char *root; +}; + +static void display_results(struct fs_results results[], size_t results_nb, bool display_in_kb) { + unsigned int block_size = display_in_kb ? 1024 : 512; + printf(HEADER_FMT, block_size); + + for (size_t i = 0; i < results_nb; i++) { + struct fs_results cur = results[i]; + unsigned int available = cur.total - cur.used; + unsigned int capacity = (cur.used / (float) cur.total) * 100; + printf("%s %d %d %d %d%% %s\n", cur.name, cur.total, cur.used, available, capacity, cur.root); + } + +} + +int df_main(int argc, char *argv[]) { + bool display_in_kb = false; + int ret = 0; + + while ((ret = getopt(argc, argv, "kP")) != -1) { + switch (ret) { + case 'k': + display_in_kb = true; + break; + + case 'P': + break; + + default: + fputs(DF_USAGE, stderr); + return EXIT_FAILURE; + } + } + + struct fs_results results[] = { + { + .name = "test", + .total = 872986112, + .used = 95206402, + .root = "/dev/test", + } + }; + + display_results(results, 1, false); + + return 0; +} @@ -9,6 +9,7 @@ extern util_main true_main; extern util_main false_main; extern util_main basename_main; extern util_main cat_main; +extern util_main df_main; typedef struct futiles_util futiles_util_t; struct futiles_util { @@ -22,7 +23,8 @@ const futiles_util_t utils[] = { { .name = "true", .main = true_main }, { .name = "false", .main = false_main }, { .name = "basename", .main = basename_main }, - { .name = "cat", .main = cat_main } + { .name = "cat", .main = cat_main }, + { .name = "df", .main = df_main } }; #define UTILS_NB (sizeof(utils) / sizeof(futiles_util_t)) |
