diff options
-rw-r--r-- | include/Makemodule.am | 1 | ||||
-rw-r--r-- | include/timer.h | 31 |
2 files changed, 32 insertions, 0 deletions
diff --git a/include/Makemodule.am b/include/Makemodule.am index 0c1656d2d..7ba4593e4 100644 --- a/include/Makemodule.am +++ b/include/Makemodule.am @@ -39,6 +39,7 @@ dist_noinst_HEADERS += \ include/strutils.h \ include/swapheader.h \ include/sysfs.h \ + include/timer.h \ include/tt.h \ include/ttyutils.h \ include/wholedisk.h \ diff --git a/include/timer.h b/include/timer.h new file mode 100644 index 000000000..b820453d4 --- /dev/null +++ b/include/timer.h @@ -0,0 +1,31 @@ +#ifndef UTIL_LINUX_TIMER_H +#define UTIL_LINUX_TIMER_H + +#include <signal.h> +#include <sys/time.h> + +static inline void setup_timer( + struct itimerval *timer, + struct itimerval *old_timer, + struct sigaction *old_sa, + void (*timeout_handler)(int)) +{ + struct sigaction sa; + + memset(&sa, 0, sizeof sa); + sa.sa_handler = timeout_handler; + sa.sa_flags = SA_RESETHAND; + sigaction(SIGALRM, &sa, old_sa); + + setitimer(ITIMER_REAL, timer, old_timer); +} + +static inline void cancel_timer( + struct itimerval *old_timer, + struct sigaction *old_sa) +{ + setitimer(ITIMER_REAL, old_timer, NULL); + sigaction(SIGALRM, old_sa, NULL); +} + +#endif |