summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config.def.h6
-rw-r--r--slstatus.c50
-rw-r--r--slstatus.h3
3 files changed, 58 insertions, 1 deletions
diff --git a/config.def.h b/config.def.h
index 351d7ed..0fa4825 100644
--- a/config.def.h
+++ b/config.def.h
@@ -15,11 +15,17 @@ static unsigned int update_interval = 1;
- battery_perc (battery percentage) [argument: battery name]
- cpu_perc (cpu usage in percent) [argument: NULL]
- datetime (date and time) [argument: format]
+- disk_free (disk usage in percent) [argument: mountpoint]
- disk_perc (disk usage in percent) [argument: mountpoint]
+- disk_total (disk usage in percent) [argument: mountpoint]
+- disk_used (disk usage in percent) [argument: mountpoint]
- entropy (available entropy) [argument: NULL]
- hostname [argument: NULL]
- ip (ip address) [argument: interface]
+- ram_free (ram usage in percent) [argument: NULL]
- ram_perc (ram usage in percent) [argument: NULL]
+- ram_total (ram usage in percent) [argument: NULL]
+- ram_used (ram usage in percent) [argument: NULL]
- temp (temperature in degrees) [argument: temperature file]
- vol_perc (alsa volume and mute status in percent) [argument: soundcard]
- wifi_perc (wifi signal in percent) [argument: wifi card interface name] */
diff --git a/slstatus.c b/slstatus.c
index b20f824..7af71e0 100644
--- a/slstatus.c
+++ b/slstatus.c
@@ -166,6 +166,22 @@ datetime(const char *timeformat)
return ret;
}
+/* disk free */
+char *
+disk_free(const char *mountpoint)
+{
+ struct statvfs fs;
+
+ /* try to open mountpoint */
+ if (statvfs(mountpoint, &fs) < 0) {
+ fprintf(stderr, "Could not get filesystem info.\n");
+ return smprintf("n/a");
+ }
+
+ /* return free */
+ return smprintf("%f", (float)fs.f_bsize * (float)fs.f_bfree / 1024 / 1024 / 1024);
+}
+
/* disk usage percentage */
char *
disk_perc(const char *mountpoint)
@@ -180,12 +196,44 @@ disk_perc(const char *mountpoint)
}
/* calculate percent */
- perc = 100 * (1.0f - ((float)fs.f_bavail / (float)fs.f_blocks));
+ perc = 100 * (1.0f - ((float)fs.f_bfree / (float)fs.f_blocks));
/* return perc */
return smprintf("%d%%", perc);
}
+/* disk total */
+char *
+disk_total(const char *mountpoint)
+{
+ struct statvfs fs;
+
+ /* try to open mountpoint */
+ if (statvfs(mountpoint, &fs) < 0) {
+ fprintf(stderr, "Could not get filesystem info.\n");
+ return smprintf("n/a");
+ }
+
+ /* return total */
+ return smprintf("%f", (float)fs.f_bsize * (float)fs.f_blocks / 1024 / 1024 / 1024);
+}
+
+/* disk used */
+char *
+disk_used(const char *mountpoint)
+{
+ struct statvfs fs;
+
+ /* try to open mountpoint */
+ if (statvfs(mountpoint, &fs) < 0) {
+ fprintf(stderr, "Could not get filesystem info.\n");
+ return smprintf("n/a");
+ }
+
+ /* return used */
+ return smprintf("%f", (float)fs.f_bsize * ((float)fs.f_blocks - (float)fs.f_bfree) / 1024 / 1024 / 1024);
+}
+
/* entropy available */
char *
entropy(const char *null)
diff --git a/slstatus.h b/slstatus.h
index a4c7b14..7d764ab 100644
--- a/slstatus.h
+++ b/slstatus.h
@@ -17,7 +17,10 @@ char *smprintf(const char *, ...);
char *battery_perc(const char *);
char *cpu_perc(const char *);
char *datetime(const char *);
+char *disk_free(const char *);
char *disk_perc(const char *);
+char *disk_total(const char *);
+char *disk_used(const char *);
char *entropy(const char*);
char *hostname(const char *);
char *ip(const char *);