X-Git-Url: https://git.xinqibao.xyz/slstatus.git/blobdiff_plain/85a2b9b79d1f5422bee87ef9ca0cd33a02440c1c..e1ae7d3be6faa710b3a711ed317cfe45d90f28bc:/slstatus.c diff --git a/slstatus.c b/slstatus.c index fee56fc..823b8eb 100644 --- a/slstatus.c +++ b/slstatus.c @@ -24,8 +24,52 @@ #include #include -/* local headers */ -#include "slstatus.h" +#undef strlcat +#undef strlcpy + +#include "strlcat.h" +#include "strlcpy.h" + +/* statusbar configuration type and struct */ +typedef char *(*op_fun) (const char *); +struct arg { + op_fun func; + const char *format; + const char *args; +}; + +/* function declarations */ +void setstatus(const char *str); +char *smprintf(const char *fmt, ...); +char *battery_perc(const char *battery); +char *cpu_perc(const char *null); +char *datetime(const char *timeformat); +char *disk_free(const char *mountpoint); +char *disk_perc(const char *mountpoint); +char *disk_total(const char *mountpoint); +char *disk_used(const char *mountpoint); +char *entropy(const char *null); +char *gid(const char *null); +char *hostname(const char *null); +char *ip(const char *interface); +char *load_avg(const char *null); +char *ram_free(const char *null); +char *ram_perc(const char *null); +char *ram_used(const char *null); +char *ram_total(const char *null); +char *run_command(const char *command); +char *temp(const char *file); +char *uid(const char *null); +char *uptime(const char *null); +char *username(const char *null); +char *vol_perc(const char *soundcard); +char *wifi_perc(const char *wificard); +char *wifi_essid(const char *wificard); + +/* global variables */ +static Display *dpy; + +/* configuration header */ #include "config.h" /* set statusbar */ @@ -63,16 +107,16 @@ battery_perc(const char *battery) FILE *fp; /* generate battery nowfile path */ - strcat(batterynowfile, batterypath); - strcat(batterynowfile, battery); - strcat(batterynowfile, "/"); - strcat(batterynowfile, batterynow); + strlcat(batterynowfile, batterypath, sizeof(batterynowfile)); + strlcat(batterynowfile, battery, sizeof(batterynowfile)); + strlcat(batterynowfile, "/", sizeof(batterynowfile)); + strlcat(batterynowfile, batterynow, sizeof(batterynowfile)); /* generate battery fullfile path */ - strcat(batteryfullfile, batterypath); - strcat(batteryfullfile, battery); - strcat(batteryfullfile, "/"); - strcat(batteryfullfile, batteryfull); + strlcat(batteryfullfile, batterypath, sizeof(batteryfullfile)); + strlcat(batteryfullfile, battery, sizeof(batteryfullfile)); + strlcat(batteryfullfile, "/", sizeof(batteryfullfile)); + strlcat(batteryfullfile, batteryfull, sizeof(batteryfullfile)); /* open battery now file */ if (!(fp = fopen(batterynowfile, "r"))) { @@ -650,9 +694,9 @@ wifi_perc(const char *wificard) /* generate the path name */ memset(path, 0, sizeof path); - strcat(path, "/sys/class/net/"); - strcat(path, wificard); - strcat(path, "/operstate"); + strlcat(path, "/sys/class/net/", sizeof(path)); + strlcat(path, wificard, sizeof(path)); + strlcat(path, "/operstate", sizeof(path)); /* open wifi file */ if(!(fp = fopen(path, "r"))) { @@ -678,8 +722,8 @@ wifi_perc(const char *wificard) } /* extract the signal strength */ - strcpy(needle, wificard); - strcat(needle, ":"); + strlcpy(needle, wificard, sizeof(needle)); + strlcat(needle, ":", sizeof(needle)); fgets(buf, bufsize, fp); fgets(buf, bufsize, fp); fgets(buf, bufsize, fp); @@ -756,7 +800,7 @@ main(void) element = smprintf(unknowntext); fprintf(stderr, "Failed to format output.\n"); } - strcat(status_string, element); + strlcat(status_string, element, sizeof(status_string)); free(res); free(element); }