+++ /dev/null
-#include <signal.h>\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-\r
-/*\r
- * Calling signal() is non-portable, as it varies in meaning\r
- * between platforms and depending on feature macros, and has\r
- * stupid semantics at least some of the time.\r
- *\r
- * This function provides the same interface as the libc function,\r
- * but provides consistent semantics. It assumes POSIX semantics\r
- * for sigaction() (so you might need to do some more work if you\r
- * port to something ancient like SunOS 4)\r
- */\r
-void (*putty_signal(int sig, void (*func)(int)))(int) {\r
- struct sigaction sa;\r
- struct sigaction old;\r
- \r
- sa.sa_handler = func;\r
- if(sigemptyset(&sa.sa_mask) < 0)\r
- return SIG_ERR;\r
- sa.sa_flags = SA_RESTART;\r
- if(sigaction(sig, &sa, &old) < 0)\r
- return SIG_ERR;\r
- return old.sa_handler;\r
-}\r
-\r
-void block_signal(int sig, int block_it)\r
-{\r
- sigset_t ss;\r
-\r
- sigemptyset(&ss);\r
- sigaddset(&ss, sig);\r
- if(sigprocmask(block_it ? SIG_BLOCK : SIG_UNBLOCK, &ss, 0) < 0) {\r
- perror("sigprocmask");\r
- exit(1);\r
- }\r
-}\r
-\r
-/*\r
-Local Variables:\r
-c-basic-offset:4\r
-comment-column:40\r
-End:\r
-*/\r