Mercurial > emacs
diff src/sysdep.c @ 109853:fe07c47cf7a7
merge and fixes
author | Joakim <joakim@localhost.localdomain> |
---|---|
date | Thu, 13 May 2010 15:13:52 +0200 |
parents | 9aa39b975b8a |
children | 481f67c74989 |
line wrap: on
line diff
--- a/src/sysdep.c Wed May 12 14:32:06 2010 +0200 +++ b/src/sysdep.c Thu May 13 15:13:52 2010 +0200 @@ -73,7 +73,7 @@ #include <errno.h> #ifdef HAVE_SETPGID -#if !defined (USG) || defined (BSD_PGRPS) +#if !defined (USG) #undef setpgrp #define setpgrp setpgid #endif @@ -419,7 +419,10 @@ else sigpause (SIGEMPTYMASK); #else /* not BSD_SYSTEM, and not HPUX version >= 6 */ -#ifdef POSIX_SIGNALS /* would this work for GNU/Linux as well? */ +#ifdef WINDOWSNT + wait (0); + break; +#else /* not WINDOWSNT */ sigblock (sigmask (SIGCHLD)); errno = 0; if (kill (pid, 0) == -1 && errno == ESRCH) @@ -429,29 +432,7 @@ } sigsuspend (&empty_mask); -#else /* not POSIX_SIGNALS */ -#ifdef HAVE_SYSV_SIGPAUSE - sighold (SIGCHLD); - if (0 > kill (pid, 0)) - { - sigrelse (SIGCHLD); - break; - } - sigpause (SIGCHLD); -#else /* not HAVE_SYSV_SIGPAUSE */ -#ifdef WINDOWSNT - wait (0); - break; -#else /* not WINDOWSNT */ - if (0 > kill (pid, 0)) - break; - /* Using sleep instead of pause avoids timing error. - If the inferior dies just before the sleep, - we lose just one second. */ - sleep (1); #endif /* not WINDOWSNT */ -#endif /* not HAVE_SYSV_SIGPAUSE */ -#endif /* not POSIX_SIGNALS */ #endif /* not BSD_SYSTEM, and not HPUX version >= 6 */ #else /* not subprocesses */ break; @@ -546,11 +527,6 @@ #endif /* not SIGNALS_VIA_CHARACTERS */ #ifdef AIX -/* AIX enhanced edit loses NULs, so disable it */ -#ifndef IBMR2AIX - s.main.c_line = 0; - s.main.c_iflag &= ~ASCEDIT; -#endif /* Also, PTY overloads NUL and BREAK. don't ignore break, but don't signal either, so it looks like NUL. */ s.main.c_iflag &= ~IGNBRK; @@ -883,65 +859,7 @@ #endif /* FASYNC */ #endif /* F_SETFL */ #endif /* SIGIO */ - -/* Saving and restoring the process group of Emacs's terminal. */ - -#ifdef BSD_PGRPS - -/* The process group of which Emacs was a member when it initially - started. - - If Emacs was in its own process group (i.e. inherited_pgroup == - getpid ()), then we know we're running under a shell with job - control (Emacs would never be run as part of a pipeline). - Everything is fine. - - If Emacs was not in its own process group, then we know we're - running under a shell (or a caller) that doesn't know how to - separate itself from Emacs (like sh). Emacs must be in its own - process group in order to receive SIGIO correctly. In this - situation, we put ourselves in our own pgroup, forcibly set the - tty's pgroup to our pgroup, and make sure to restore and reinstate - the tty's pgroup just like any other terminal setting. If - inherited_group was not the tty's pgroup, then we'll get a - SIGTTmumble when we try to change the tty's pgroup, and a CONT if - it goes foreground in the future, which is what should happen. - - This variable is initialized in emacs.c. */ -int inherited_pgroup; - -/* Split off the foreground process group to Emacs alone. When we are - in the foreground, but not started in our own process group, - redirect the tty device handle FD to point to our own process - group. We need to be in our own process group to receive SIGIO - properly. */ -static void -narrow_foreground_group (int fd) -{ - int me = getpid (); - - setpgrp (0, inherited_pgroup); -#if 0 - /* XXX inherited_pgroup should not be zero here, but GTK seems to - mess this up. */ - if (! inherited_pgroup) - abort (); /* Should not happen. */ -#endif - if (inherited_pgroup != me) - EMACS_SET_TTY_PGRP (fd, &me); /* XXX This only works on the controlling tty. */ - setpgrp (0, me); -} - -/* Set the tty to our original foreground group. */ -static void -widen_foreground_group (int fd) -{ - if (inherited_pgroup != getpid ()) - EMACS_SET_TTY_PGRP (fd, &inherited_pgroup); - setpgrp (0, inherited_pgroup); -} - -#endif /* BSD_PGRPS */ + /* Getting and setting emacs_tty structures. */ @@ -1126,15 +1044,6 @@ if (!tty_out->output) return; /* The tty is suspended. */ -#ifdef BSD_PGRPS -#if 0 - /* read_socket_hook is not global anymore. I think doing this - unconditionally will not cause any problems. */ - if (! read_socket_hook && EQ (Vinitial_window_system, Qnil)) -#endif - narrow_foreground_group (fileno (tty_out->input)); -#endif - if (! tty_out->old_tty) tty_out->old_tty = (struct emacs_tty *) xmalloc (sizeof (struct emacs_tty)); @@ -1258,16 +1167,10 @@ #endif /* mips or HAVE_TCATTR */ #ifdef AIX -#ifndef IBMR2AIX - /* AIX enhanced edit loses NULs, so disable it. */ - tty.main.c_line = 0; - tty.main.c_iflag &= ~ASCEDIT; -#else tty.main.c_cc[VSTRT] = CDISABLE; tty.main.c_cc[VSTOP] = CDISABLE; tty.main.c_cc[VSUSP] = CDISABLE; tty.main.c_cc[VDSUSP] = CDISABLE; -#endif /* IBMR2AIX */ if (tty_out->flow_control) { #ifdef VSTART @@ -1590,9 +1493,6 @@ dos_ttcooked (); #endif -#ifdef BSD_PGRPS - widen_foreground_group (fileno (tty_out->input)); -#endif } #ifdef HAVE_PTYS @@ -2101,10 +2001,10 @@ /* POSIX signals support - DJB */ /* Anyone with POSIX signals should have ANSI C declarations */ -#ifdef POSIX_SIGNALS - sigset_t empty_mask, full_mask; +#ifndef WINDOWSNT + signal_handler_t sys_signal (int signal_number, signal_handler_t action) { @@ -2133,6 +2033,8 @@ return (old_action.sa_handler); } +#endif /* WINDOWSNT */ + #ifndef __GNUC__ /* If we're compiling with GCC, we don't need this function, since it can be written as a macro. */ @@ -2175,7 +2077,6 @@ return (old_mask); } -#endif /* POSIX_SIGNALS */ #if !defined HAVE_STRSIGNAL && !HAVE_DECL_SYS_SIGLIST static char *my_sys_siglist[NSIG]; @@ -2188,10 +2089,8 @@ void init_signals () { -#ifdef POSIX_SIGNALS sigemptyset (&empty_mask); sigfillset (&full_mask); -#endif #if !defined HAVE_STRSIGNAL && !HAVE_DECL_SYS_SIGLIST if (! initialized) @@ -2709,13 +2608,6 @@ int rtnval; rtnval = emacs_close (dirp->dd_fd); - - /* Some systems (like Solaris) allocate the buffer and the DIR all - in one block. Why in the world are we freeing this ourselves - anyway? */ -#if ! defined (SOLARIS2) - xfree ((char *) dirp->dd_buf); /* directory block defined in <dirent.h> */ -#endif xfree ((char *) dirp); return rtnval;