]> git.sur5r.net Git - i3/i3status/blobdiff - src/print_disk_info.c
Bugfix: output auto detect: properly detect ambiguous situations (Thanks mist)
[i3/i3status] / src / print_disk_info.c
index 7235325b926f24aad988014a6f9cdddbfd840a52..f49fe669c9c609ddb181ac7ac32e9bc6b8213c38 100644 (file)
@@ -6,11 +6,12 @@
 #include <stdint.h>
 #include <sys/statvfs.h>
 #include <sys/types.h>
-#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || (__OpenBSD__) || defined(__DragonFly__)
 #include <sys/param.h>
 #include <sys/mount.h>
 #endif
 #include <yajl/yajl_gen.h>
+#include <yajl/yajl_version.h>
 
 #include "i3status.h"
 
@@ -48,7 +49,7 @@ void print_disk_info(yajl_gen json_gen, char *buffer, const char *path, const ch
 
         INSTANCE(path);
 
-#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) || defined(__DragonFly__)
         struct statfs buf;
 
         if (statfs(path, &buf) == -1)
@@ -85,6 +86,26 @@ void print_disk_info(yajl_gen json_gen, char *buffer, const char *path, const ch
                         outwalk += print_bytes_human(outwalk, (uint64_t)buf.f_bsize * (uint64_t)buf.f_bavail);
                         walk += strlen("avail");
                 }
+
+                if (BEGINS_WITH(walk+1, "percentage_free")) {
+                        outwalk += sprintf(outwalk, "%.01f%%", 100.0 * (double)buf.f_bfree / (double)buf.f_blocks);
+                        walk += strlen("percentage_free");
+                }
+
+                if (BEGINS_WITH(walk+1, "percentage_used_of_avail")) {
+                        outwalk += sprintf(outwalk, "%.01f%%", 100.0 * (double)(buf.f_blocks - buf.f_bavail) / (double)buf.f_blocks);
+                        walk += strlen("percentage_used_of_avail");
+                }
+
+                if (BEGINS_WITH(walk+1, "percentage_used")) {
+                        outwalk += sprintf(outwalk, "%.01f%%", 100.0 * (double)(buf.f_blocks - buf.f_bfree) / (double)buf.f_blocks);
+                        walk += strlen("percentage_used");
+                }
+
+                if (BEGINS_WITH(walk+1, "percentage_avail")) {
+                        outwalk += sprintf(outwalk, "%.01f%%", 100.0 * (double)buf.f_bavail / (double)buf.f_blocks);
+                        walk += strlen("percentage_avail");
+                }
         }
 
         *outwalk = '\0';