diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/general.c | 1 | ||||
-rw-r--r-- | src/print_path_exists.c | 35 |
2 files changed, 36 insertions, 0 deletions
diff --git a/src/general.c b/src/general.c index 7ec80a8..c5b33b4 100644 --- a/src/general.c +++ b/src/general.c @@ -6,6 +6,7 @@ #include <stdlib.h> #include <unistd.h> #include <sys/fcntl.h> +#include <sys/stat.h> #include "i3status.h" diff --git a/src/print_path_exists.c b/src/print_path_exists.c new file mode 100644 index 0000000..c5225a1 --- /dev/null +++ b/src/print_path_exists.c @@ -0,0 +1,35 @@ +#include <stdio.h> +#include <string.h> +#include <yajl/yajl_gen.h> +#include <yajl/yajl_version.h> +#include <sys/stat.h> +#include "i3status.h" + +void print_path_exists(yajl_gen json_gen, char *buffer, const char *title, const char *path, const char *format) { + const char *walk; + char *outwalk = buffer; + struct stat st; + const bool exists = (stat(path, &st) == 0); + + INSTANCE(path); + + START_COLOR((exists ? "color_good" : "color_bad")); + + for (walk = format; *walk != '\0'; walk++) { + if (*walk != '%') { + *(outwalk++) = *walk; + continue; + } + + if (strncmp(walk+1, "title", strlen("title")) == 0) { + outwalk += sprintf(outwalk, "%s", title); + walk += strlen("title"); + } else if (strncmp(walk+1, "status", strlen("status")) == 0) { + outwalk += sprintf(outwalk, "%s", (exists ? "yes" : "no")); + walk += strlen("status"); + } + } + + END_COLOR; + OUTPUT_FULL_TEXT(buffer); +} |