]> git.eshelyaron.com Git - emacs.git/commitdiff
Unbreak the MinGW build broken by recent changes in callproc.c
authorEli Zaretskii <eliz@gnu.org>
Thu, 24 Dec 2020 15:58:51 +0000 (17:58 +0200)
committerEli Zaretskii <eliz@gnu.org>
Thu, 24 Dec 2020 15:58:51 +0000 (17:58 +0200)
* src/w32.h (set_process_dir):
* src/w32proc.c (set_process_dir): Change the argument to 'const
char *'.
* src/lisp.h (make_environment_block):
* src/callproc.c (make_environment_block): Now returns 'char **'.
(exec_failed) [DOS_NT]: Remove unused function.
* src/callproc.c (child_setup): NEW_ARGV and ENV are now 'char **'.
Making them 'const' breaks the MinGW build and is not needed for
other platforms.
* src/callproc.c (emacs_spawn): ARGV and ENVP arguments are now
'char *', for the same reason.
* src/process.c (create_process): Adapt to above changes.

src/callproc.c
src/lisp.h
src/process.c
src/w32.h
src/w32proc.c

index 8603382f0c3c3130b329668a3682b852abde959f..e9502d2c4e80150ef31a5ba925e434b63072b3e7 100644 (file)
@@ -107,8 +107,8 @@ static Lisp_Object call_process (ptrdiff_t, Lisp_Object *, int, ptrdiff_t);
 # define CHILD_SETUP_TYPE _Noreturn void
 #endif
 
-static CHILD_SETUP_TYPE child_setup (int, int, int, char *const *,
-                                     char *const *, const char *);
+static CHILD_SETUP_TYPE child_setup (int, int, int, char **, char **,
+                                    const char *);
 \f
 /* Return the current buffer's working directory, or the home
    directory if it's unreachable, as a string suitable for a system call.
@@ -549,7 +549,7 @@ call_process (ptrdiff_t nargs, Lisp_Object *args, int filefd,
       callproc_fd[CALLPROC_STDERR] = fd_error;
     }
 
-  char *const *env = make_environment_block (current_dir);
+  char **env = make_environment_block (current_dir);
 
 #ifdef MSDOS /* MW, July 1993 */
   status = child_setup (filefd, fd_output, fd_error, new_argv, env,
@@ -1132,16 +1132,6 @@ exec_failed (char const *name, int err)
   _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
@@ -1160,8 +1150,8 @@ exec_failed (char const *name, int err)
    On MS-DOS, either return an exit status or signal an error.  */
 
 static CHILD_SETUP_TYPE
-child_setup (int in, int out, int err, char *const *new_argv,
-             char *const *env, const char *current_dir)
+child_setup (int in, int out, int err, char **new_argv, char **env,
+            const char *current_dir)
 {
 #ifdef WINDOWSNT
   int cpid;
@@ -1235,9 +1225,8 @@ child_setup (int in, int out, int err, char *const *new_argv,
    NULL, don't perform any terminal setup.  */
 
 int
-emacs_spawn (pid_t *newpid, int stdin, int stdout, int stderr,
-             char *const *argv, char *const *envp, const char *cwd,
-             const char *pty)
+emacs_spawn (pid_t *newpid, int std_in, int std_out, int std_err,
+             char **argv, char **envp, const char *cwd, const char *pty)
 {
   sigset_t oldset;
   int pid;
@@ -1251,9 +1240,9 @@ emacs_spawn (pid_t *newpid, int stdin, int stdout, int stderr,
   const char *volatile cwd_volatile = cwd;
   const char *volatile pty_volatile = pty;
   char *const *volatile argv_volatile = argv;
-  int volatile stdin_volatile = stdin;
-  int volatile stdout_volatile = stdout;
-  int volatile stderr_volatile = stderr;
+  int volatile stdin_volatile = std_in;
+  int volatile stdout_volatile = std_out;
+  int volatile stderr_volatile = std_err;
   char *const *volatile envp_volatile = envp;
 
 #ifdef DARWIN_OS
@@ -1272,9 +1261,9 @@ emacs_spawn (pid_t *newpid, int stdin, int stdout, int stderr,
   cwd = cwd_volatile;
   pty = pty_volatile;
   argv = argv_volatile;
-  stdin = stdin_volatile;
-  stdout = stdout_volatile;
-  stderr = stderr_volatile;
+  std_in = stdin_volatile;
+  std_out = stdout_volatile;
+  std_err = stderr_volatile;
   envp = envp_volatile;
 
   if (pid == 0)
@@ -1286,30 +1275,30 @@ emacs_spawn (pid_t *newpid, int stdin, int stdout, int stderr,
       dissociate_controlling_tty ();
 
       /* Make the pty's terminal the controlling terminal.  */
-      if (pty_flag && stdin >= 0)
+      if (pty_flag && std_in >= 0)
        {
 #ifdef TIOCSCTTY
          /* We ignore the return value
             because faith@cs.unc.edu says that is necessary on Linux.  */
-         ioctl (stdin, TIOCSCTTY, 0);
+         ioctl (std_in, TIOCSCTTY, 0);
 #endif
        }
 #if defined (LDISC1)
-      if (pty_flag && stdin >= 0)
+      if (pty_flag && std_in >= 0)
        {
          struct termios t;
-         tcgetattr (stdin, &t);
+         tcgetattr (std_in, &t);
          t.c_lflag = LDISC1;
-         if (tcsetattr (stdin, TCSANOW, &t) < 0)
+         if (tcsetattr (std_in, TCSANOW, &t) < 0)
            emacs_perror ("create_process/tcsetattr LDISC1");
        }
 #else
 #if defined (NTTYDISC) && defined (TIOCSETD)
-      if (pty_flag && stdin >= 0)
+      if (pty_flag && std_in >= 0)
        {
          /* Use new line discipline.  */
          int ldisc = NTTYDISC;
-         ioctl (stdin, TIOCSETD, &ldisc);
+         ioctl (std_in, TIOCSETD, &ldisc);
        }
 #endif
 #endif
@@ -1327,11 +1316,11 @@ emacs_spawn (pid_t *newpid, int stdin, int stdout, int stderr,
 
          /* I wonder if emacs_close (emacs_open (pty, ...))
             would work?  */
-         if (stdin >= 0)
-           emacs_close (stdin);
-         stdout = stdin = emacs_open (pty, O_RDWR, 0);
+         if (std_in >= 0)
+           emacs_close (std_in);
+         std_out = std_in = emacs_open (pty, O_RDWR, 0);
 
-         if (stdin < 0)
+         if (std_in < 0)
            {
              emacs_perror (pty);
              _exit (EXIT_CANCELED);
@@ -1373,14 +1362,14 @@ emacs_spawn (pid_t *newpid, int stdin, int stdout, int stderr,
       unblock_child_signal (&oldset);
 
       if (pty_flag)
-       child_setup_tty (stdout);
+       child_setup_tty (std_out);
 
-      if (stderr < 0)
-       stderr = stdout;
+      if (std_err < 0)
+       std_err = std_out;
 #ifdef WINDOWSNT
-      pid = child_setup (stdin, stdout, stderr, argv, envp, cwd);
+      pid = child_setup (std_in, std_out, std_err, argv, envp, cwd);
 #else  /* not WINDOWSNT */
-      child_setup (stdin, stdout, stderr, argv, envp, cwd);
+      child_setup (std_in, std_out, std_err, argv, envp, cwd);
 #endif /* not WINDOWSNT */
     }
 
@@ -1531,7 +1520,7 @@ egetenv_internal (const char *var, ptrdiff_t len)
    objects.  Don't call any Lisp code or the garbage collector while
    the block is active.  */
 
-char *const *
+char **
 make_environment_block (Lisp_Object current_dir)
 {
   char **env;
index c7188b171f84534cd8dcc1dd2f12683c0178cb68..501bcd14a6fec10d885ad8535fd524aea4178f55 100644 (file)
@@ -4498,9 +4498,9 @@ extern void setup_process_coding_systems (Lisp_Object);
 # define CHILD_SETUP_ERROR_DESC "Doing vfork"
 #endif
 
-extern int emacs_spawn (pid_t *, int, int, int, char *const *,
-                        char *const *, const char *, const char *);
-extern char *const *make_environment_block (Lisp_Object);
+extern int emacs_spawn (pid_t *, int, int, int, char **, char **, const char *,
+                       const char *);
+extern char **make_environment_block (Lisp_Object);
 extern void init_callproc_1 (void);
 extern void init_callproc (void);
 extern void set_initial_environment (void);
index f3de9251b7a80e5b6d8e3d95b94eebc0ee2c9e25..98b575fc864ce3909a59c1a9fa9f3d0b12aa5f96 100644 (file)
@@ -2127,7 +2127,7 @@ create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir)
 
   /* This may signal an error.  */
   setup_process_coding_systems (process);
-  char *const *env = make_environment_block (current_dir);
+  char **env = make_environment_block (current_dir);
 
   pty_flag = p->pty_flag;
   eassert (pty_flag == ! NILP (lisp_pty_name));
index 1afb8ad0873fa5bf83e774addc93a3abadb1b8ad..e23ea6a675d58a8f0bd46103fc0b56a01c339005 100644 (file)
--- a/src/w32.h
+++ b/src/w32.h
@@ -216,7 +216,7 @@ extern int sys_rename_replace (char const *, char const *, BOOL);
 extern int pipe2 (int *, int);
 extern void register_aux_fd (int);
 
-extern void set_process_dir (char *);
+extern void set_process_dir (const char *);
 extern int sys_spawnve (int, char *, char **, char **);
 extern void register_child (pid_t, int);
 
index 0cf8201306559f49a7682984e0a346a5163f12fb..66cdf7de4615d9d179098aff3235488761e2a66d 100644 (file)
@@ -3019,9 +3019,9 @@ reset_standard_handles (int in, int out, int err, HANDLE handles[3])
 }
 
 void
-set_process_dir (char * dir)
+set_process_dir (const char * dir)
 {
-  process_dir = dir;
+  process_dir = (char *) dir;
 }
 
 /* To avoid problems with winsock implementations that work over dial-up