add config checks on startup for better error handling
authorDaniel Walter <d.walter@0x90.at>
Thu, 10 Mar 2016 11:11:46 +0000 (12:11 +0100)
committerDaniel Walter <d.walter@0x90.at>
Thu, 10 Mar 2016 11:11:46 +0000 (12:11 +0100)
slstatus.c

index 658bc7958f6fcdfc619e05c81926dbe768f784b0..369c6ff89ec2f7f60e662648472afda696633dd0 100644 (file)
@@ -2,10 +2,13 @@
 
 /* global libraries */
 #include <alsa/asoundlib.h>
+#include <fcntl.h>
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
 #include <time.h>
 #include <unistd.h>
 #include <X11/Xlib.h>
@@ -15,6 +18,7 @@
 
 /* functions */
 void setstatus(char *str);
+int config_check();
 char *smprintf(char *fmt, ...);
 char *get_battery();
 char *get_cpu_temperature();
@@ -49,6 +53,22 @@ smprintf(char *fmt, ...)
     return ret;
 }
 
+#define CHECK_FILE(X,Y) do { \
+    if (stat(X,&Y) < 0) return -1; \
+    if (!S_ISREG(Y.st_mode)) return -1; \
+} while (0);
+
+/* check configured paths */
+int
+config_check()
+{
+    struct stat fs;
+    CHECK_FILE(batterynowfile, fs);
+    CHECK_FILE(batteryfullfile, fs);
+    CHECK_FILE(tempfile, fs);
+    return 0;
+}
+
 /* battery percentage */
 char *
 get_battery()
@@ -314,6 +334,11 @@ main()
     char *volume = NULL;
     char *wifi_signal = NULL;
 
+    /* check config for sanity */
+    if (config_check() < 0) {
+        fprintf(stderr, "Config error, please check paths and recompile\n");
+        exit(1);
+    }
     /* open display */
     if (!(dpy = XOpenDisplay(0x0))) {
         fprintf(stderr, "Cannot open display!\n");