summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorKarel Zak2018-10-24 12:28:13 +0200
committerKarel Zak2018-12-03 11:23:33 +0100
commit6df5acf970852a94b254800dc69569bd1f4c9ae8 (patch)
tree18751217f934f0dd328edd69fe4da5b6bfb0428c /include
parentbuild-sys: make sure HAVE_TIMER_CREATE defined (diff)
downloadkernel-qcow2-util-linux-6df5acf970852a94b254800dc69569bd1f4c9ae8.tar.gz
kernel-qcow2-util-linux-6df5acf970852a94b254800dc69569bd1f4c9ae8.tar.xz
kernel-qcow2-util-linux-6df5acf970852a94b254800dc69569bd1f4c9ae8.zip
lib/timer: add fallback if timer_create() not available
* add struct ul_timer as API abstraction to hide differences between timer_create() and setitimer() * add setitimer() detection to ./configure.ac * add fallback code to use setitimer() if timer_create() not available (for example on OSX) Addresses: https://github.com/karelzak/util-linux/issues/584 Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'include')
-rw-r--r--include/timer.h15
1 files changed, 13 insertions, 2 deletions
diff --git a/include/timer.h b/include/timer.h
index aa9f9c018..70da1ba9e 100644
--- a/include/timer.h
+++ b/include/timer.h
@@ -4,8 +4,19 @@
#include <signal.h>
#include <sys/time.h>
-extern int setup_timer(timer_t * t_id, struct itimerval *timeout,
+#ifdef HAVE_TIMER_CREATE
+struct ul_timer {
+ timer_t t_id;
+};
+#else
+struct ul_timer {
+ struct itimerval old_timer;
+ struct sigaction old_sa;
+};
+#endif
+
+extern int setup_timer(struct ul_timer *timer, struct itimerval *timeout,
void (*timeout_handler)(int, siginfo_t *, void *));
-extern void cancel_timer(timer_t * t_id);
+extern void cancel_timer(struct ul_timer *timer);
#endif /* UTIL_LINUX_TIMER_H */