#include <sys/socket.h>
#include <sys/sysinfo.h>
#include <sys/types.h>
+#include <sys/utsname.h>
#include <time.h>
#include <unistd.h>
#include <X11/Xlib.h>
#include "extern/arg.h"
#include "extern/strlcat.h"
-#include "extern/strlcpy.h"
#include "extern/concat.h"
struct arg {
static char *vol_perc(const char *card);
static char *wifi_perc(const char *iface);
static char *wifi_essid(const char *iface);
+static char *kernel_release(void);
static void set_status(const char *str);
static void sighandler(const int signo);
static void usage(void);
static char *
run_command(const char *cmd)
{
+ char *nlptr;
FILE *fp;
- char buf[1024] = "n/a";
+ char buf[1024] = UNKNOWN_STR;
fp = popen(cmd, "r");
if (fp == NULL) {
warn("Failed to get command output for %s", cmd);
return smprintf(UNKNOWN_STR);
}
- fgets(buf, sizeof(buf)-1, fp);
+ fgets(buf, sizeof(buf), fp);
pclose(fp);
-
buf[strlen(buf)] = '\0';
- strtok(buf, "\n");
+
+ if ((nlptr = strstr(buf, "\n")) != NULL) {
+ nlptr[0] = '\0';
+ }
return smprintf("%s", buf);
}
return smprintf("%s", (char *)wreq.u.essid.pointer);
}
+static char *
+kernel_release(void)
+{
+ struct utsname udata;
+ if (uname(&udata) < 0)
+ return smprintf(UNKNOWN_STR);
+
+ return smprintf("%s", udata.release);
+}
+
static void
set_status(const char *str)
{
main(int argc, char *argv[])
{
unsigned short int i;
- char status_string[4096];
+ char status_string[2048];
char *res, *element;
struct arg argument;
struct sigaction act;
element = smprintf(UNKNOWN_STR);
warnx("Failed to format output");
}
- strlcat(status_string, element, sizeof(status_string));
+ if (strlcat(status_string, element, sizeof(status_string)) >= sizeof(status_string))
+ warnx("Output too long");
free(res);
free(element);
}