1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-02 08:22:22 +00:00

(PTY_OPEN): Use sigaction, not sigsetmask.

This commit is contained in:
Richard M. Stallman 1993-07-23 04:16:38 +00:00
parent 785080c58c
commit 6e27eb5e02

View File

@ -48,17 +48,26 @@ char *_getpty();
#define PTY_ITERATION
/* Here is how to do it. */
/* It is necessary to prevent SIGCHLD signals within _getpty.
So we block them. */
#define PTY_OPEN \
{ \
int mask = sigblock (sigmask (SIGCHLD)); \
char *name = _getpty (&fd, O_RDWR | O_NDELAY, 0600, 0); \
sigsetmask(mask); \
if (name == 0) \
return -1; \
if (fd < 0) \
return -1; \
if (fstat (fd, &stb) < 0) \
return -1; \
strcpy (pty_name, name); \
So we block them. But since all of Emacs uses classic SYSV signal()
signals, there is no reliable way to do this (unlike BSD sighold or
POSIX sigaction). On Irix 5.* systems, the implementation of
sigaction is as close as you can get to a universal. */
#define PTY_OPEN \
{ \
struct sigaction ocstat, cstat; \
char * name; \
sigemptyset(&cstat.sa_mask); \
cstat.sa_handler = SIG_DFL; \
cstat.sa_flags = 0; \
sigaction(SIGCLD, &cstat, &ocstat); \
name = _getpty (&fd, O_RDWR | O_NDELAY, 0600, 0); \
sigaction(SIGCLD, &ocstat, (struct sigaction *)0); \
if (name == 0) \
return -1; \
if (fd < 0) \
return -1; \
if (fstat (fd, &stb) < 0) \
return -1; \
strcpy (pty_name, name); \
}