used a different implementation of smprintf() imported from dwmstatus
authorAli H. Fardan <raiz@firemail.cc>
Sun, 28 Aug 2016 16:27:01 +0000 (19:27 +0300)
committerAli H. Fardan <raiz@firemail.cc>
Sun, 28 Aug 2016 16:27:01 +0000 (19:27 +0300)
slstatus.c

index 08866d2c823ea0f71218aa2839f108220da7072e..bc48365b2aeb0c2b540d157665a2e16b304af433 100644 (file)
@@ -79,17 +79,23 @@ static char *
 smprintf(const char *fmt, ...)
 {
        va_list ap;
-       char tmp[120];
-       char *ret = NULL;
+       char *ret;
+       int len;
 
        va_start(ap, fmt);
-       vsnprintf(tmp, sizeof(tmp)-1, fmt, ap);
-       tmp[strlen(tmp)+1] = '\0';
+       len = vsnprintf(NULL, 0, fmt, ap);
+       va_end(ap);
 
-       if (asprintf(&ret, "%s", tmp) < 0)
-               return NULL;
+       ret = malloc(++len);
+       if (ret == NULL) {
+               perror("malloc");
+               exit(1);
+       }
 
+       va_start(ap, fmt);
+       vsnprintf(ret, len, fmt, ap);
        va_end(ap);
+
        return ret;
 }