all repos — slstatus @ 2afea979877ae12226ab397355f3bf8c8e124e91

my build of slstatus (tools.suckless.org/slstatus/)

used ccat() from concat.h for string concatenation
Ali H. Fardan raiz@firemail.cc
Thu, 08 Sep 2016 04:31:49 +0300
commit

2afea979877ae12226ab397355f3bf8c8e124e91

parent

113979e5b8398a2c26736749480fe32b5c49a66b

2 files changed, 35 insertions(+), 25 deletions(-)

jump to
A concat.h

@@ -0,0 +1,19 @@

+/* + * Thanks to lloyd for contribution + */ + +extern char concat[8192]; + +extern void +ccat(const unsigned short int count, ...) +{ + va_list ap; + unsigned short int i; + concat[0] = '\0'; + + va_start(ap, count); + for(i = 0; i < count; i++) + strlcat(concat, va_arg(ap, char *), sizeof(concat)); + va_end(ap); + return; +}
M slstatus.cslstatus.c

@@ -26,6 +26,9 @@ #undef strlcpy

#include "strlcat.h" #include "strlcpy.h" +#include "concat.h" + +char concat[]; struct arg { char *(*func)();

@@ -91,24 +94,14 @@ static char *

battery_perc(const char *battery) { int now, full, perc; - char batterynowfile[64]; - char batteryfullfile[64]; FILE *fp; - strlcpy(batterynowfile, BATTERY_PATH, sizeof(batterynowfile)); - strlcat(batterynowfile, battery, sizeof(batterynowfile)); - strlcat(batterynowfile, "/", sizeof(batterynowfile)); - strlcat(batterynowfile, BATTERY_NOW, sizeof(batterynowfile)); + ccat(4, BATTERY_PATH, battery, "/", BATTERY_NOW); - strlcpy(batteryfullfile, BATTERY_PATH, sizeof(batteryfullfile)); - strlcat(batteryfullfile, battery, sizeof(batteryfullfile)); - strlcat(batteryfullfile, "/", sizeof(batteryfullfile)); - strlcat(batteryfullfile, BATTERY_FULL, sizeof(batteryfullfile)); - - fp = fopen(batterynowfile, "r"); - if (fp == NULL ) { + fp = fopen(concat, "r"); + if (fp == NULL) { fprintf(stderr, "Error opening battery file: %s: %s\n", - batterynowfile, + concat, strerror(errno)); return smprintf(UNKNOWN_STR); }

@@ -116,9 +109,12 @@

fscanf(fp, "%i", &now); fclose(fp); - fp = fopen(batteryfullfile, "r"); + ccat(4, BATTERY_PATH, battery, "/", BATTERY_FULL); + + fp = fopen(concat, "r"); if (fp == NULL) { - fprintf(stderr, "Error opening battery file: %s\n", + fprintf(stderr, "Error opening battery file: %s: %s\n", + concat, strerror(errno)); return smprintf(UNKNOWN_STR); }

@@ -520,16 +516,12 @@ {

int strength; char buf[255]; char *datastart; - char path[64]; char status[5]; - char needle[strlen(wificard)+2]; FILE *fp; - strlcpy(path, "/sys/class/net/", sizeof(path)); - strlcat(path, wificard, sizeof(path)); - strlcat(path, "/operstate", sizeof(path)); + ccat(3, "/sys/class/net", wificard, "/operstate"); - fp = fopen(path, "r"); + fp = fopen(concat, "r"); if(fp == NULL) { fprintf(stderr, "Error opening wifi operstate file: %s\n",

@@ -549,13 +541,12 @@ strerror(errno));

return smprintf(UNKNOWN_STR); } - strlcpy(needle, wificard, sizeof(needle)); - strlcat(needle, ":", sizeof(needle)); + ccat(2, wificard, ":"); fgets(buf, sizeof(buf), fp); fgets(buf, sizeof(buf), fp); fgets(buf, sizeof(buf), fp); - datastart = strstr(buf, needle); + datastart = strstr(buf, concat); if (datastart != NULL) { datastart = strstr(buf, ":"); sscanf(datastart + 1, " %*d %d %*d %*d %*d %*d %*d %*d %*d %*d", &strength);