diff options
| author | Michael Stapelberg | 2008-10-04 19:16:41 +0200 | 
|---|---|---|
| committer | Michael Stapelberg | 2008-10-04 19:16:41 +0200 | 
| commit | e68449ee1db529d0ef7b88fb0fba15263445b574 (patch) | |
| tree | d4df67b81897bbeb0f63662110f120c1287f27fa | |
| parent | Get IP address for WLAN interface aswell (diff) | |
Implement run_watches
| -rw-r--r-- | config.h | 8 | ||||
| -rw-r--r-- | wmiistatus.c | 36 | ||||
| -rw-r--r-- | wmiistatus.h | 1 | 
3 files changed, 35 insertions, 10 deletions
| @@ -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 <sys/socket.h>  #include <netinet/in.h>  #include <arpa/inet.h> -#include "wmiistatus.h" +#include <glob.h> +#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/<pid> 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); | 
