Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 1 | From 3595933d221f0ba836917debc0776b8723972ec9 Mon Sep 17 00:00:00 2001 |
| 2 | From: Alexander Kanavin <alex.kanavin@gmail.com> |
| 3 | Date: Tue, 11 Aug 2015 17:40:50 +0300 |
| 4 | Subject: [PATCH 1/3] Patch with fixes provided by Debian. |
| 5 | |
| 6 | This patch is taken from |
| 7 | ftp://ftp.debian.org/debian/pool/main/a/apmd/apmd_3.2.2-15.debian.tar.xz |
| 8 | |
| 9 | Upstream-Status: Inappropriate [upstream is dead] |
| 10 | Signed-off-by: Alexander Kanavin <alexander.kanavin@linux.intel.com> |
| 11 | |
| 12 | --- |
| 13 | Makefile | 2 +- |
| 14 | apm.c | 3 ++- |
| 15 | apm.h | 9 +++++++++ |
| 16 | apmd.c | 15 ++++++++------- |
| 17 | 4 files changed, 20 insertions(+), 9 deletions(-) |
| 18 | |
| 19 | diff --git a/Makefile b/Makefile |
| 20 | index bf346d9..92fc0fd 100644 |
| 21 | --- a/Makefile |
| 22 | +++ b/Makefile |
| 23 | @@ -43,7 +43,7 @@ DESTDIR= |
| 24 | |
| 25 | CC=gcc |
| 26 | CFLAGS=-O -g |
| 27 | -XTRACFLAGS=-Wall -pipe -I. -I/usr/src/linux/include \ |
| 28 | +XTRACFLAGS=-Wall -pipe -I. -I/usr/src/linux/include -I/usr/X11R6/include \ |
| 29 | -I/usr/src/linux-2.2/include -I /usr/src/linux-2.0/include \ |
| 30 | -DVERSION=\"$(VERSION)\" \ |
| 31 | -DDEFAULT_PROXY_NAME=\"$(PROXY_DIR)/apmd_proxy\" |
| 32 | diff --git a/apm.c b/apm.c |
| 33 | index b21c057..0359b1c 100644 |
| 34 | --- a/apm.c |
| 35 | +++ b/apm.c |
| 36 | @@ -219,12 +219,13 @@ int main(int argc, char **argv) |
| 37 | } |
| 38 | } |
| 39 | |
| 40 | - |
| 41 | +#if 0 |
| 42 | if (!(i.apm_flags & APM_32_BIT_SUPPORT)) |
| 43 | { |
| 44 | fprintf(stderr, "32-bit APM interface not supported\n"); |
| 45 | exit(1); |
| 46 | } |
| 47 | +#endif |
| 48 | |
| 49 | if (verbose && (i.apm_flags & 0x10)) |
| 50 | printf("APM BIOS Power Management is currently disabled\n"); |
| 51 | diff --git a/apm.h b/apm.h |
| 52 | index fb24dfd..824cc06 100644 |
| 53 | --- a/apm.h |
| 54 | +++ b/apm.h |
| 55 | @@ -20,6 +20,13 @@ |
| 56 | * $Id: apm.h,v 1.7 1999/07/05 22:31:11 apenwarr Exp $ |
| 57 | * |
| 58 | */ |
| 59 | +#ifndef _APM_H |
| 60 | +#define _APM_H 1 |
| 61 | + |
| 62 | +#ifndef __KERNEL_STRICT_NAMES |
| 63 | +#define __KERNEL_STRICT_NAMES |
| 64 | +#endif |
| 65 | + |
| 66 | #include <linux/apm_bios.h> |
| 67 | #include <sys/types.h> |
| 68 | |
| 69 | @@ -93,3 +100,5 @@ extern int apm_reject(int fd); |
| 70 | #else |
| 71 | #define apm_reject(fd) (-EINVAL) |
| 72 | #endif |
| 73 | + |
| 74 | +#endif |
| 75 | diff --git a/apmd.c b/apmd.c |
| 76 | index 49ed3a1..560f536 100644 |
| 77 | --- a/apmd.c |
| 78 | +++ b/apmd.c |
| 79 | @@ -343,7 +343,7 @@ static int call_proxy(apm_event_t event) |
| 80 | /* parent */ |
| 81 | int status, retval; |
| 82 | ssize_t len; |
| 83 | - time_t time_limit; |
| 84 | + time_t countdown; |
| 85 | |
| 86 | if (pid < 0) { |
| 87 | /* Couldn't fork */ |
| 88 | @@ -356,8 +356,9 @@ static int call_proxy(apm_event_t event) |
| 89 | /* Capture the child's output, if any, but only until it terminates */ |
| 90 | close(fds[1]); |
| 91 | fcntl(fds[0], F_SETFL, O_RDONLY|O_NONBLOCK); |
| 92 | - time_limit = time(0) + proxy_timeout; |
| 93 | + countdown = proxy_timeout; |
| 94 | do { |
| 95 | + countdown -= 1; |
| 96 | while ((len = read(fds[0], line, sizeof(line)-1)) > 0) { |
| 97 | line[len] = 0; |
| 98 | APMD_SYSLOG(LOG_INFO, "+ %s", line); |
| 99 | @@ -372,16 +373,16 @@ static int call_proxy(apm_event_t event) |
| 100 | goto proxy_done; |
| 101 | } |
| 102 | |
| 103 | - sleep(1); |
| 104 | + while (sleep(1) > 0) ; |
| 105 | } while ( |
| 106 | - (time(0) < time_limit) |
| 107 | + (countdown >= 0) |
| 108 | || (proxy_timeout < 0) |
| 109 | ); |
| 110 | |
| 111 | APMD_SYSLOG(LOG_NOTICE, "Proxy has been running more than %d seconds; killing it", proxy_timeout); |
| 112 | |
| 113 | kill(pid, SIGTERM); |
| 114 | - time_limit = time(0) + 5; |
| 115 | + countdown = 5; |
| 116 | do { |
| 117 | retval = waitpid(pid, &status, WNOHANG); |
| 118 | if (retval == pid) |
| 119 | @@ -392,9 +393,9 @@ static int call_proxy(apm_event_t event) |
| 120 | goto proxy_done; |
| 121 | } |
| 122 | |
| 123 | - sleep(1); |
| 124 | + while (sleep(1) > 0) ; |
| 125 | |
| 126 | - } while (time(0) < time_limit); |
| 127 | + } while (countdown >= 0); |
| 128 | |
| 129 | kill(pid, SIGKILL); |
| 130 | status = __W_EXITCODE(0, SIGKILL); |
| 131 | -- |
| 132 | 2.1.4 |
| 133 | |