Xinqi Bao's Git

Fix some memory leaks
[slstatus.git] / slstatus.c
index d6f5e2d..1db9af8 100644 (file)
 #include <unistd.h>
 #include <X11/Xlib.h>
 
-/* global variables */
-static Display *dpy;
-
-/* statusbar configuration type and struct */
-typedef char *(*op_fun) (const char *);
-struct arg {
-    op_fun func;
-    const char *format;
-    const char *args;
-};
-
-/* functions */
-void setstatus(const char *);
-char *smprintf(const char *, ...);
-char *get_battery(const char *);
-char *get_cpu_temperature(const char *);
-char *get_cpu_usage(const char *);
-char *get_datetime(const char *);
-char *get_diskusage(const char *);
-char *get_ram_usage(const char *);
-char *get_volume(const char *);
-char *get_wifi_signal(const char *);
-
-/* include config header */
+/* local headers */
+#include "slstatus.h"
 #include "config.h"
 
 /* set statusbar */
@@ -201,7 +179,9 @@ get_datetime(const char *timeformat)
 
     setlocale(LC_TIME, "C");
     /* return time */
-    return smprintf("%s", buf);
+    char *ret = smprintf("%s", buf);
+    free(buf);
+    return ret;
 }
 
 /* disk usage percentage */
@@ -368,7 +348,7 @@ main()
     /* return status every interval */
     for (;;) {
         /* clear the string */
-        strcpy(status_string, "");
+        memset(status_string, 0, sizeof(status_string));
 
         /* generate status_string */
         for (size_t i = 0; i < sizeof(args) / sizeof(args[0]); ++i) {
@@ -376,6 +356,8 @@ main()
             char *res = argument.func(argument.args);
             char *element = smprintf(argument.format, res);
             strcat(status_string, element);
+            free(res);
+            free(element);
         }
 
         /* return the statusbar */