Commit 1aa83b22 authored by Andreas Schwab's avatar Andreas Schwab
Browse files

(Fcall_process): Don't hold references to string data

across garbage collection.  Move initialisation of new_argv down
to avoid compiler bug.
parent e542c7fd
2008-09-07 Andreas Schwab <schwab@suse.de>
* callproc.c (Fcall_process): Don't hold references to string data
across garbage collection. Move initialisation of new_argv down
to avoid compiler bug.
2008-09-07 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
 
* process.c (Fsystem_process_attributes): Doc fix.
......
......@@ -226,8 +226,7 @@ usage: (call-process PROGRAM &optional INFILE BUFFER DISPLAY &rest ARGS) */)
int bufsize = CALLPROC_BUFFER_SIZE_MIN;
int count = SPECPDL_INDEX ();
register const unsigned char **new_argv
= (const unsigned char **) alloca ((max (2, nargs - 2)) * sizeof (char *));
register const unsigned char **new_argv;
struct buffer *old = current_buffer;
/* File to use for stderr in the child.
t means use same as standard output. */
......@@ -414,7 +413,8 @@ usage: (call-process PROGRAM &optional INFILE BUFFER DISPLAY &rest ARGS) */)
&& SREF (path, 1) == ':')
path = Fsubstring (path, make_number (2), Qnil);
new_argv[0] = SDATA (path);
new_argv = (const unsigned char **)
alloca (max (2, nargs - 2) * sizeof (char *));
if (nargs > 4)
{
register int i;
......@@ -428,13 +428,15 @@ usage: (call-process PROGRAM &optional INFILE BUFFER DISPLAY &rest ARGS) */)
if (CODING_REQUIRE_ENCODING (&argument_coding))
/* We must encode this argument. */
args[i] = encode_coding_string (&argument_coding, args[i], 1);
new_argv[i - 3] = SDATA (args[i]);
}
UNGCPRO;
new_argv[nargs - 3] = 0;
for (i = 4; i < nargs; i++)
new_argv[i - 3] = SDATA (args[i]);
new_argv[i - 3] = 0;
}
else
new_argv[1] = 0;
new_argv[0] = SDATA (path);
#ifdef MSDOS /* MW, July 1993 */
if ((outf = egetenv ("TMPDIR")))
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment