From 3595933d221f0ba836917debc0776b8723972ec9 Mon Sep 17 00:00:00 2001 From: Alexander Kanavin Date: Tue, 11 Aug 2015 17:40:50 +0300 Subject: [PATCH 1/3] Patch with fixes provided by Debian. This patch is taken from ftp://ftp.debian.org/debian/pool/main/a/apmd/apmd_3.2.2-15.debian.tar.xz Upstream-Status: Inappropriate [upstream is dead] Signed-off-by: Alexander Kanavin --- Makefile | 2 +- apm.c | 3 ++- apm.h | 9 +++++++++ apmd.c | 15 ++++++++------- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index bf346d9..92fc0fd 100644 --- a/Makefile +++ b/Makefile @@ -43,7 +43,7 @@ DESTDIR= CC=gcc CFLAGS=-O -g -XTRACFLAGS=-Wall -pipe -I. -I/usr/src/linux/include \ +XTRACFLAGS=-Wall -pipe -I. -I/usr/src/linux/include -I/usr/X11R6/include \ -I/usr/src/linux-2.2/include -I /usr/src/linux-2.0/include \ -DVERSION=\"$(VERSION)\" \ -DDEFAULT_PROXY_NAME=\"$(PROXY_DIR)/apmd_proxy\" diff --git a/apm.c b/apm.c index b21c057..0359b1c 100644 --- a/apm.c +++ b/apm.c @@ -219,12 +219,13 @@ int main(int argc, char **argv) } } - +#if 0 if (!(i.apm_flags & APM_32_BIT_SUPPORT)) { fprintf(stderr, "32-bit APM interface not supported\n"); exit(1); } +#endif if (verbose && (i.apm_flags & 0x10)) printf("APM BIOS Power Management is currently disabled\n"); diff --git a/apm.h b/apm.h index fb24dfd..824cc06 100644 --- a/apm.h +++ b/apm.h @@ -20,6 +20,13 @@ * $Id: apm.h,v 1.7 1999/07/05 22:31:11 apenwarr Exp $ * */ +#ifndef _APM_H +#define _APM_H 1 + +#ifndef __KERNEL_STRICT_NAMES +#define __KERNEL_STRICT_NAMES +#endif + #include #include @@ -93,3 +100,5 @@ extern int apm_reject(int fd); #else #define apm_reject(fd) (-EINVAL) #endif + +#endif diff --git a/apmd.c b/apmd.c index 49ed3a1..560f536 100644 --- a/apmd.c +++ b/apmd.c @@ -343,7 +343,7 @@ static int call_proxy(apm_event_t event) /* parent */ int status, retval; ssize_t len; - time_t time_limit; + time_t countdown; if (pid < 0) { /* Couldn't fork */ @@ -356,8 +356,9 @@ static int call_proxy(apm_event_t event) /* Capture the child's output, if any, but only until it terminates */ close(fds[1]); fcntl(fds[0], F_SETFL, O_RDONLY|O_NONBLOCK); - time_limit = time(0) + proxy_timeout; + countdown = proxy_timeout; do { + countdown -= 1; while ((len = read(fds[0], line, sizeof(line)-1)) > 0) { line[len] = 0; APMD_SYSLOG(LOG_INFO, "+ %s", line); @@ -372,16 +373,16 @@ static int call_proxy(apm_event_t event) goto proxy_done; } - sleep(1); + while (sleep(1) > 0) ; } while ( - (time(0) < time_limit) + (countdown >= 0) || (proxy_timeout < 0) ); APMD_SYSLOG(LOG_NOTICE, "Proxy has been running more than %d seconds; killing it", proxy_timeout); kill(pid, SIGTERM); - time_limit = time(0) + 5; + countdown = 5; do { retval = waitpid(pid, &status, WNOHANG); if (retval == pid) @@ -392,9 +393,9 @@ static int call_proxy(apm_event_t event) goto proxy_done; } - sleep(1); + while (sleep(1) > 0) ; - } while (time(0) < time_limit); + } while (countdown >= 0); kill(pid, SIGKILL); status = __W_EXITCODE(0, SIGKILL); -- 2.1.4