1From 3595933d221f0ba836917debc0776b8723972ec9 Mon Sep 17 00:00:00 2001 2From: Alexander Kanavin <alex.kanavin@gmail.com> 3Date: Tue, 11 Aug 2015 17:40:50 +0300 4Subject: [PATCH 1/3] Patch with fixes provided by Debian. 5 6This patch is taken from 7ftp://ftp.debian.org/debian/pool/main/a/apmd/apmd_3.2.2-15.debian.tar.xz 8 9Upstream-Status: Inappropriate [upstream is dead] 10Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.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 19diff --git a/Makefile b/Makefile 20index 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\" 32diff --git a/apm.c b/apm.c 33index 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"); 51diff --git a/apm.h b/apm.h 52index 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 75diff --git a/apmd.c b/apmd.c 76index 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-- 1322.1.4 133 134