]> Dogcows Code - chaz/tint2/blobdiff - src/battery/battery.c
*fix* execute an external command by calling fork/execl and do not ignore SIGCHLD...
[chaz/tint2] / src / battery / battery.c
index 0e7e7f047cd6db764d45cdfe0167f15a30553ae9..4bbde3cb2763fb6e3a1b529435e50eae85acd367 100644 (file)
@@ -24,7 +24,7 @@
 #include <cairo-xlib.h>
 #include <pango/pangocairo.h>
 
-#if defined(__OpenBSD__)
+#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__)
 #include <machine/apmvar.h>
 #include <err.h>
 #include <sys/ioctl.h>
@@ -39,6 +39,7 @@
 #include "battery.h"
 #include "clock.h"
 #include "timer.h"
+#include "common.h"
 
 PangoFontDescription *bat1_font_desc;
 PangoFontDescription *bat2_font_desc;
@@ -58,7 +59,7 @@ char *path_energy_full;
 char *path_current_now;
 char *path_status;
 
-#if defined(__OpenBSD__)
+#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__)
 int apm_fd;
 #endif
 
@@ -102,7 +103,7 @@ void default_battery()
        path_energy_full = 0;
        path_current_now = 0;
        path_status = 0;
-#if defined(__OpenBSD__)
+#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__)
        apm_fd = -1;
 #endif
 }
@@ -117,7 +118,7 @@ void cleanup_battery()
        if (path_status) g_free(path_status);
        if (battery_low_cmd) g_free(battery_low_cmd);
 
-#if defined(__OpenBSD__)
+#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__)
        if ((apm_fd != -1) && (close(apm_fd) == -1))
                warn("cannot close /dev/apm");
 #endif
@@ -128,7 +129,7 @@ void init_battery()
 {
        if (!battery_enabled) return;
 
-#if defined(__OpenBSD__)
+#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__)
        apm_fd = open("/dev/apm", O_RDONLY);
        if (apm_fd < 0) {
                warn("init_battery: failed to open /dev/apm.");
@@ -257,7 +258,7 @@ void init_battery_panel(void *p)
 
 
 void update_battery() {
-#if !defined(__OpenBSD__)
+#if !defined(__OpenBSD__) && !defined(__FreeBSD__) && !defined(__NetBSD__)
        // unused on OpenBSD, silence compiler warnings
        FILE *fp;
        char tmp[25];
@@ -267,7 +268,7 @@ void update_battery() {
        int seconds = 0;
        int8_t new_percentage = 0;
 
-#if defined(__OpenBSD__)
+#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__)
        struct apm_power_info info;
        if (ioctl(apm_fd, APM_IOC_GETPOWER, &(info)) < 0)
                warn("power update: APM_IOC_GETPOWER");
@@ -352,8 +353,8 @@ void update_battery() {
                new_percentage = (energy_now*100)/energy_full;
 
        if(battery_low_status > new_percentage && battery_state.state == BATTERY_DISCHARGING && !battery_low_cmd_send) {
-                       system(battery_low_cmd);  // return value == -1, since we've set SIGCHLD to SIGIGN
-                       battery_low_cmd_send = 1;
+               tint_exec(battery_low_cmd);
+               battery_low_cmd_send = 1;
        }
        if(battery_low_status < new_percentage && battery_state.state == BATTERY_CHARGING && battery_low_cmd_send) {
                battery_low_cmd_send = 0;
This page took 0.022216 seconds and 4 git commands to generate.