2011-03-18 Paul Eggert <eggert@cs.ucla.edu>
- * sysdep.c (sys_subshell): Use 'volatile' to avoid vfork clobbering.
- Before, this 'volatile' was incorrectly IF_LINTted out.
+ * callproc.c (Fcall_process): Use 'volatile' to avoid vfork clobbering.
+ * sysdep.c (sys_subshell): Likewise.
+ Previously, the sys_subshell 'volatile' was incorrectly IF_LINTted out.
* lisp.h (child_setup): Now NO_RETURN unless DOS_NT.
This should get cleaned up, so that child_setup has the
(int nargs, register Lisp_Object *args)
{
Lisp_Object infile, buffer, current_dir, path;
- int display_p;
+ volatile int display_p_volatile;
int fd[2];
int filefd;
register int pid;
int bufsize = CALLPROC_BUFFER_SIZE_MIN;
int count = SPECPDL_INDEX ();
+ const unsigned char **volatile new_argv_volatile;
register const unsigned char **new_argv;
/* File to use for stderr in the child.
t means use same as standard output. */
UNGCPRO;
}
- display_p = INTERACTIVE && nargs >= 4 && !NILP (args[3]);
+ display_p_volatile = INTERACTIVE && nargs >= 4 && !NILP (args[3]);
filefd = emacs_open (SSDATA (infile), O_RDONLY, 0);
if (filefd < 0)
&& SREF (path, 1) == ':')
path = Fsubstring (path, make_number (2), Qnil);
- new_argv = (const unsigned char **)
+ new_argv_volatile = new_argv = (const unsigned char **)
alloca (max (2, nargs - 2) * sizeof (char *));
if (nargs > 4)
{
pid = vfork ();
+ new_argv = new_argv_volatile;
+
if (pid == 0)
{
if (fd[0] >= 0)
int first = 1;
EMACS_INT total_read = 0;
int carryover = 0;
+ int display_p = display_p_volatile;
int display_on_the_fly = display_p;
struct coding_system saved_coding;