فهرست منبع

used ccat() from concat.h for string concatenation

Ali H. Fardan 9 سال پیش
والد
کامیت
2afea97987
2فایلهای تغییر یافته به همراه35 افزوده شده و 25 حذف شده
  1. 19 0
      concat.h
  2. 16 25
      slstatus.c

+ 19 - 0
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;
+}

+ 16 - 25
slstatus.c

@@ -26,6 +26,9 @@
 
 #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));
-
-	strlcpy(batteryfullfile, BATTERY_PATH, sizeof(batteryfullfile));
-	strlcat(batteryfullfile, battery, sizeof(batteryfullfile));
-	strlcat(batteryfullfile, "/", sizeof(batteryfullfile));
-	strlcat(batteryfullfile, BATTERY_FULL, sizeof(batteryfullfile));
+	ccat(4, BATTERY_PATH, battery, "/", BATTERY_NOW);
 
-	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 @@ battery_perc(const char *battery)
 	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 @@ wifi_perc(const char *wificard)
 	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 @@ wifi_perc(const char *wificard)
 		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);