used ccat() from concat.h for string concatenation

This commit is contained in:
Ali H. Fardan 2016-09-08 04:31:49 +03:00
parent 113979e5b8
commit 2afea97987
2 changed files with 35 additions and 25 deletions

19
concat.h Normal file
View file

@ -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;
}

View file

@ -26,6 +26,9 @@
#include "strlcat.h" #include "strlcat.h"
#include "strlcpy.h" #include "strlcpy.h"
#include "concat.h"
char concat[];
struct arg { struct arg {
char *(*func)(); char *(*func)();
@ -91,24 +94,14 @@ static char *
battery_perc(const char *battery) battery_perc(const char *battery)
{ {
int now, full, perc; int now, full, perc;
char batterynowfile[64];
char batteryfullfile[64];
FILE *fp; FILE *fp;
strlcpy(batterynowfile, BATTERY_PATH, sizeof(batterynowfile)); ccat(4, BATTERY_PATH, battery, "/", BATTERY_NOW);
strlcat(batterynowfile, battery, sizeof(batterynowfile));
strlcat(batterynowfile, "/", sizeof(batterynowfile));
strlcat(batterynowfile, BATTERY_NOW, sizeof(batterynowfile));
strlcpy(batteryfullfile, BATTERY_PATH, sizeof(batteryfullfile)); fp = fopen(concat, "r");
strlcat(batteryfullfile, battery, sizeof(batteryfullfile)); if (fp == NULL) {
strlcat(batteryfullfile, "/", sizeof(batteryfullfile));
strlcat(batteryfullfile, BATTERY_FULL, sizeof(batteryfullfile));
fp = fopen(batterynowfile, "r");
if (fp == NULL ) {
fprintf(stderr, "Error opening battery file: %s: %s\n", fprintf(stderr, "Error opening battery file: %s: %s\n",
batterynowfile, concat,
strerror(errno)); strerror(errno));
return smprintf(UNKNOWN_STR); return smprintf(UNKNOWN_STR);
} }
@ -116,9 +109,12 @@ battery_perc(const char *battery)
fscanf(fp, "%i", &now); fscanf(fp, "%i", &now);
fclose(fp); fclose(fp);
fp = fopen(batteryfullfile, "r"); ccat(4, BATTERY_PATH, battery, "/", BATTERY_FULL);
fp = fopen(concat, "r");
if (fp == NULL) { if (fp == NULL) {
fprintf(stderr, "Error opening battery file: %s\n", fprintf(stderr, "Error opening battery file: %s: %s\n",
concat,
strerror(errno)); strerror(errno));
return smprintf(UNKNOWN_STR); return smprintf(UNKNOWN_STR);
} }
@ -520,16 +516,12 @@ wifi_perc(const char *wificard)
int strength; int strength;
char buf[255]; char buf[255];
char *datastart; char *datastart;
char path[64];
char status[5]; char status[5];
char needle[strlen(wificard)+2];
FILE *fp; FILE *fp;
strlcpy(path, "/sys/class/net/", sizeof(path)); ccat(3, "/sys/class/net", wificard, "/operstate");
strlcat(path, wificard, sizeof(path));
strlcat(path, "/operstate", sizeof(path));
fp = fopen(path, "r"); fp = fopen(concat, "r");
if(fp == NULL) { if(fp == NULL) {
fprintf(stderr, "Error opening wifi operstate file: %s\n", fprintf(stderr, "Error opening wifi operstate file: %s\n",
@ -549,13 +541,12 @@ wifi_perc(const char *wificard)
return smprintf(UNKNOWN_STR); return smprintf(UNKNOWN_STR);
} }
strlcpy(needle, wificard, sizeof(needle)); ccat(2, wificard, ":");
strlcat(needle, ":", sizeof(needle));
fgets(buf, sizeof(buf), fp); fgets(buf, sizeof(buf), fp);
fgets(buf, sizeof(buf), fp); 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) { if (datastart != NULL) {
datastart = strstr(buf, ":"); datastart = strstr(buf, ":");
sscanf(datastart + 1, " %*d %d %*d %*d %*d %*d %*d %*d %*d %*d", &strength); sscanf(datastart + 1, " %*d %d %*d %*d %*d %*d %*d %*d %*d %*d", &strength);