summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Stapelberg <michael+x200@stapelberg.de>2008-10-04 19:16:41 +0200
committerMichael Stapelberg <michael+x200@stapelberg.de>2008-10-04 19:16:41 +0200
commite68449ee1db529d0ef7b88fb0fba15263445b574 (patch)
treed4df67b81897bbeb0f63662110f120c1287f27fa
parent79dfdafb212e9933f32630a3548f05a4a2d786d1 (diff)
Implement run_watches
-rw-r--r--config.h8
-rw-r--r--wmiistatus.c36
-rw-r--r--wmiistatus.h1
3 files changed, 35 insertions, 10 deletions
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 <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);