| From 3595933d221f0ba836917debc0776b8723972ec9 Mon Sep 17 00:00:00 2001 |
| From: Alexander Kanavin <alex.kanavin@gmail.com> |
| 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 <alexander.kanavin@linux.intel.com> |
| |
| --- |
| 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 <linux/apm_bios.h> |
| #include <sys/types.h> |
| |
| @@ -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 |
| |