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 <alex.kanavin@gmail.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
|