From: Michael Stapelberg Date: Sat, 4 Oct 2008 17:16:41 +0000 (+0200) Subject: Implement run_watches X-Git-Tag: 1.0~56 X-Git-Url: https://git.sur5r.net/?p=i3%2Fi3status;a=commitdiff_plain;h=e68449ee1db529d0ef7b88fb0fba15263445b574 Implement run_watches --- diff --git a/config.h b/config.h index b8d30aa..3f55af8 100644 --- a/config.h +++ b/config.h @@ -1,9 +1,5 @@ const char *wlan_interface = "wlan0"; const char *eth_interface = "eth0"; - const char *wmii_path = "/mnt/wmii/rbar/status"; - -// TODO: run-watches, z.B. -// "/var/run/dhcp*.pid" --> checkt ob's das file gibt, ob der prozess läuft und zeigt dann yes/no an -// "/var/run/vpnc*.pid" - +const char *run_watches[] = {"DHCP", "/var/run/dhclient*.pid", + "VPN", "/var/run/vpnc*.pid"}; diff --git a/wmiistatus.c b/wmiistatus.c index 269f681..f516849 100644 --- a/wmiistatus.c +++ b/wmiistatus.c @@ -46,8 +46,9 @@ #include #include #include -#include "wmiistatus.h" +#include +#include "wmiistatus.h" #include "config.h" static void write_to_statusbar(const char *message) { @@ -232,15 +233,43 @@ static char *get_eth_info() { return part; } +/* + * Checks if the PID in path is still valid by checking if /proc/ exists + * + */ +bool process_runs(const char *path) { + char pidbuf[512], + procbuf[512]; + static glob_t globbuf; + struct stat statbuf; + + if (glob(path, GLOB_NOCHECK | GLOB_TILDE, NULL, &globbuf) < 0) + die("glob() failed"); + const char *real_path = (globbuf.gl_pathc > 0 ? globbuf.gl_pathv[0] : path); + int fd = open(real_path, O_RDONLY); + globfree(&globbuf); + if (fd < 0) + return false; + read(fd, pidbuf, sizeof(pidbuf)); + close(fd); + sprintf(procbuf, "/proc/%s", pidbuf); + return (stat(procbuf, &statbuf) >= 0); +} int main(void) { char part[512], *end; + unsigned int i; while (1) { memset(output, '\0', sizeof(output)); first_push = true; + for (i = 0; i < sizeof(run_watches) / sizeof(char*); i += 2) { + sprintf(part, "%s: %s", run_watches[i], (process_runs(run_watches[i+1]) ? "yes" : "no")); + push_part(part, strlen(part)); + } + char *wireless_info = get_wireless_info(); push_part(wireless_info, strlen(wireless_info)); @@ -250,9 +279,10 @@ int main(void) { char *battery_info = get_battery_info(); push_part(battery_info, strlen(battery_info)); - /* Get load */ int load_avg = open("/proc/loadavg", O_RDONLY); + if (load_avg == -1) + die("Could not open /proc/loadavg"); read(load_avg, part, sizeof(part)); close(load_avg); end = skip_character(part, ' ', 3); @@ -264,8 +294,6 @@ int main(void) { strftime(part, sizeof(part), "%d.%m.%Y %H:%M:%S", current_tm); push_part(part, strlen(part)); - printf("output = %s\n", output); - int fd = open("/mnt/wmii/rbar/status", O_RDWR); write(fd, output, strlen(output)); close(fd); diff --git a/wmiistatus.h b/wmiistatus.h index de876ad..13ec2c7 100644 --- a/wmiistatus.h +++ b/wmiistatus.h @@ -13,3 +13,4 @@ static char *get_battery_info(void); static char *get_wireless_info(void); static char *get_ip_address(const char *interface); static char *get_eth_info(void); +bool process_runs(const char *path);