* callproc.c (exec_failed) [DOS_NT]: Define a dummy.
All callers simplified. Add a comment about exec_failed, vfork, and alloca.
This commit is contained in:
parent
bee4071859
commit
d5e25ad17f
2 changed files with 18 additions and 10 deletions
|
@ -1,5 +1,9 @@
|
|||
2014-09-07 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* callproc.c (exec_failed) [DOS_NT]: Define a dummy.
|
||||
All callers simplified. Add a comment about exec_failed, vfork,
|
||||
and alloca.
|
||||
|
||||
Adjust drag-and-drop fix when window is above top (Bug#18303).
|
||||
* xselect.c (x_fill_property_data): Don't let sign bit of negative
|
||||
XCDR bleed into XCAR's encoded value. Improve checks for
|
||||
|
|
|
@ -1154,6 +1154,9 @@ add_env (char **env, char **new_env, char *string)
|
|||
#ifndef DOS_NT
|
||||
|
||||
/* 'exec' failed inside a child running NAME, with error number ERR.
|
||||
Possibly a vforked child needed to allocate a large vector on the
|
||||
stack; such a child cannot fall back on malloc because that might
|
||||
mess up the allocator's data structures in the parent.
|
||||
Report the error and exit the child. */
|
||||
|
||||
static _Noreturn void
|
||||
|
@ -1168,6 +1171,17 @@ exec_failed (char const *name, int err)
|
|||
emacs_perror (name);
|
||||
_exit (err == ENOENT ? EXIT_ENOENT : EXIT_CANNOT_INVOKE);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
/* Do nothing. There is no need to fail, as DOS_NT platforms do not
|
||||
fork and exec, and handle alloca exhaustion in a different way. */
|
||||
|
||||
static void
|
||||
exec_failed (char const *name, int err)
|
||||
{
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* This is the last thing run in a newly forked inferior
|
||||
|
@ -1213,13 +1227,8 @@ child_setup (int in, int out, int err, char **new_argv, bool set_pgrp,
|
|||
on that. */
|
||||
pwd_var = xmalloc (i + 5);
|
||||
#else
|
||||
/* WINDOWSNT doesn't define exec_failed, and doesn't need this
|
||||
test, since a directory name cannot be longer than 260
|
||||
characters, i.e. 260 * 4 = 1040 UTF-8 bytes. */
|
||||
#ifndef WINDOWSNT
|
||||
if (MAX_ALLOCA - 5 < i)
|
||||
exec_failed (new_argv[0], ENOMEM);
|
||||
#endif
|
||||
pwd_var = alloca (i + 5);
|
||||
#endif
|
||||
temp = pwd_var + 4;
|
||||
|
@ -1286,10 +1295,8 @@ child_setup (int in, int out, int err, char **new_argv, bool set_pgrp,
|
|||
}
|
||||
|
||||
/* new_length + 2 to include PWD and terminating 0. */
|
||||
#ifndef WINDOWSNT
|
||||
if (MAX_ALLOCA / sizeof *env - 2 < new_length)
|
||||
exec_failed (new_argv[0], ENOMEM);
|
||||
#endif
|
||||
env = new_env = alloca ((new_length + 2) * sizeof *env);
|
||||
/* If we have a PWD envvar, pass one down,
|
||||
but with corrected value. */
|
||||
|
@ -1300,11 +1307,8 @@ child_setup (int in, int out, int err, char **new_argv, bool set_pgrp,
|
|||
{
|
||||
char *vdata;
|
||||
|
||||
/* WINDOWSNT doesn't have $DISPLAY. */
|
||||
#ifndef WINDOWSNT
|
||||
if (MAX_ALLOCA - sizeof "DISPLAY=" < SBYTES (display))
|
||||
exec_failed (new_argv[0], ENOMEM);
|
||||
#endif
|
||||
vdata = alloca (sizeof "DISPLAY=" + SBYTES (display));
|
||||
strcpy (vdata, "DISPLAY=");
|
||||
strcat (vdata, SSDATA (display));
|
||||
|
|
Loading…
Add table
Reference in a new issue