+static char *
+wifi_essid(const char *wificard)
+{
+ char id[IW_ESSID_MAX_SIZE+1];
+ int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
+ struct iwreq wreq;
+
+ memset(&wreq, 0, sizeof(struct iwreq));
+ wreq.u.essid.length = IW_ESSID_MAX_SIZE+1;
+ sprintf(wreq.ifr_name, wificard);
+ if(sockfd == -1) {
+ warn("Cannot open socket for interface: %s", wificard);
+ return smprintf(UNKNOWN_STR);
+ }
+ wreq.u.essid.pointer = id;
+ if (ioctl(sockfd,SIOCGIWESSID, &wreq) == -1) {
+ warn("Get ESSID ioctl failed for interface %s", wificard);
+ return smprintf(UNKNOWN_STR);
+ }
+
+ close(sockfd);
+
+ if (strcmp((char *)wreq.u.essid.pointer, "") == 0)
+ return smprintf(UNKNOWN_STR);
+ else
+ return smprintf("%s", (char *)wreq.u.essid.pointer);
+}
+
+int
+main(void)
+{
+ size_t i;
+ char status_string[4096];
+ char *res, *element;
+ struct arg argument;
+
+ dpy = XOpenDisplay(NULL);
+
+ for (;;) {
+ status_string[0] = '\0';
+ for (i = 0; i < sizeof(args) / sizeof(args[0]); ++i) {
+ argument = args[i];
+ if (argument.args == NULL)
+ res = argument.func();
+ else
+ res = argument.func(argument.args);
+ element = smprintf(argument.format, res);
+ if (element == NULL) {
+ element = smprintf(UNKNOWN_STR);
+ warnx("Failed to format output.");
+ }
+ strlcat(status_string, element, sizeof(status_string));
+ free(res);
+ free(element);
+ }
+ XStoreName(dpy, DefaultRootWindow(dpy), status_string);
+ XSync(dpy, False);
+ /*
+ * subtract delay time spend in function
+ * calls from the actual global delay time
+ */
+ sleep(UPDATE_INTERVAL - delay);
+ delay = 0;
+ }
+
+ XCloseDisplay(dpy);
+
+ return 0;