Xinqi Bao's Git

add num_files() function for maildirs ;)
[slstatus.git] / slstatus.c
index af26fe7..5564771 100644 (file)
@@ -1,5 +1,6 @@
 /* See LICENSE file for copyright and license details. */
 
 /* See LICENSE file for copyright and license details. */
 
+#include <dirent.h>
 #include <err.h>
 #include <fcntl.h>
 #include <ifaddrs.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 *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);
 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]);
 }
 
        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)
 {
 static const char *
 ram_free(void)
 {