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
#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
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
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;
}
/* 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. */
{
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));