aboutsummaryrefslogtreecommitdiff
path: root/src/df.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/df.c')
-rw-r--r--src/df.c61
1 files changed, 61 insertions, 0 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;
+}