add num_files() function for maildirs ;)
authoraaron marcher <me@drkhsh.at>
Sun, 6 Aug 2017 13:02:16 +0000 (15:02 +0200)
committeraaron marcher <me@drkhsh.at>
Sun, 6 Aug 2017 13:02:16 +0000 (15:02 +0200)
README.md
config.def.h
slstatus.c

index e6318e59b0992263b7ee8a392f00187e46a19a8d..408477e87e897fc11fa2c6ca24e0eb4afeb9592b 100644 (file)
--- a/README.md
+++ b/README.md
@@ -21,6 +21,7 @@ The following information is included:
 - Kernel version
 - Keyboard indicators
 - Load averages
+- Number of files in a directory (hint: Maildir)
 - Memory status (free memory, percentage, total memory and used memory)
 - Swap status (free swap, percentage, total swap and used swap)
 - Temperature
index a961dbc39ab61ce5734edf19084bf876bc14690e..ed339edbfdba9c163e5c9e1a2827cdbf900ecbf2 100644 (file)
@@ -27,6 +27,7 @@
 - kernel_release (uname -r) [argument: NULL]
 - keyboard_indicators (caps/num lock indicators) [agrument: NULL]
 - load_avg (load average) [argument: NULL]
+- num_files (number of files in a directory - hint: maildir) [argument: path]
 - ram_free (free ram in GB) [argument: NULL]
 - ram_perc (ram usage in percent) [argument: NULL]
 - ram_total (total ram in GB) [argument: NULL]
index af26fe7019ee28d5f389351ceab71942ceb01580..556477172c02a414768e46ac2613d6cdac014388 100644 (file)
@@ -1,5 +1,6 @@
 /* See LICENSE file for copyright and license details. */
 
+#include <dirent.h>
 #include <err.h>
 #include <fcntl.h>
 #include <ifaddrs.h>
@@ -51,6 +52,7 @@ static const char *ip(const char *iface);
 static const char *kernel_release(void);
 static const char *keyboard_indicators(void);
 static const char *load_avg(void);
+static const char *num_files(const char *dir);
 static const char *ram_free(void);
 static const char *ram_perc(void);
 static const char *ram_used(void);
@@ -402,6 +404,29 @@ load_avg(void)
        return bprintf("%.2f %.2f %.2f", avgs[0], avgs[1], avgs[2]);
 }
 
+static const char *
+num_files(const char *dir)
+{
+       struct dirent *dp;
+       DIR *fd;
+       int num = 0;
+
+       if ((fd = opendir(dir)) == NULL) {
+               warn("Failed to get number of files in directory %s", dir);
+               return UNKNOWN_STR;
+       }
+
+       while ((dp = readdir(fd)) != NULL) {
+               if (!strcmp(dp->d_name, ".") || !strcmp(dp->d_name, ".."))
+                       continue; /* skip self and parent */
+               num++;
+       }
+
+       closedir(fd);
+
+       return bprintf("%d", num);
+}
+
 static const char *
 ram_free(void)
 {