Annotation of embedaddon/php/ext/pcntl/php_signal.c, revision 1.1.1.5
1.1 misho 1: /*
2: +----------------------------------------------------------------------+
3: | PHP Version 5 |
4: +----------------------------------------------------------------------+
1.1.1.5 ! misho 5: | Copyright (c) 1997-2014 The PHP Group |
1.1 misho 6: +----------------------------------------------------------------------+
7: | This source file is subject to version 3.01 of the PHP license, |
8: | that is bundled with this package in the file LICENSE, and is |
9: | available through the world-wide-web at the following url: |
10: | http://www.php.net/license/3_01.txt |
11: | If you did not receive a copy of the PHP license and are unable to |
12: | obtain it through the world-wide-web, please send a note to |
13: | license@php.net so we can mail you a copy immediately. |
14: +----------------------------------------------------------------------+
15: | Author: Jason Greene <jason@inetgurus.net> |
16: +----------------------------------------------------------------------+
17: */
18:
1.1.1.2 misho 19: /* $Id$ */
1.1 misho 20:
1.1.1.2 misho 21: #include "TSRM.h"
1.1 misho 22: #include "php_signal.h"
1.1.1.2 misho 23: #include "Zend/zend.h"
24: #include "Zend/zend_signal.h"
1.1 misho 25:
1.1.1.4 misho 26: /* php_signal using sigaction is derived from Advanced Programing
1.1 misho 27: * in the Unix Environment by W. Richard Stevens p 298. */
28: Sigfunc *php_signal4(int signo, Sigfunc *func, int restart, int mask_all)
29: {
30: struct sigaction act,oact;
1.1.1.2 misho 31: #ifdef ZEND_SIGNALS
32: TSRMLS_FETCH();
33: #endif
1.1 misho 34: act.sa_handler = func;
1.1.1.2 misho 35:
1.1 misho 36: if (mask_all) {
37: sigfillset(&act.sa_mask);
38: } else {
39: sigemptyset(&act.sa_mask);
40: }
41: act.sa_flags = 0;
42: if (signo == SIGALRM || (! restart)) {
43: #ifdef SA_INTERRUPT
44: act.sa_flags |= SA_INTERRUPT; /* SunOS */
45: #endif
46: } else {
47: #ifdef SA_RESTART
48: act.sa_flags |= SA_RESTART; /* SVR4, 4.3+BSD */
49: #endif
50: }
1.1.1.2 misho 51: #ifdef ZEND_SIGNALS
52: if (zend_sigaction(signo, &act, &oact TSRMLS_CC) < 0)
53: #else
1.1 misho 54: if (sigaction(signo, &act, &oact) < 0)
1.1.1.2 misho 55: #endif
56: {
1.1 misho 57: return SIG_ERR;
1.1.1.2 misho 58: }
59:
1.1 misho 60: return oact.sa_handler;
61: }
62:
63: Sigfunc *php_signal(int signo, Sigfunc *func, int restart)
64: {
65: return php_signal4(signo, func, restart, 0);
66: }
67:
68: /*
69: * Local variables:
70: * tab-width: 4
71: * c-basic-offset: 4
72: * End:
73: * vim600: noet sw=4 ts=4 fdm=marker
74: * vim<600: noet sw=4 ts=4
75: */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>