diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-02-15 23:09:04 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-02-15 23:09:04 +0100 |
commit | 12dcf024e90ab511f04a08b20fe7eedbe92096d2 (patch) | |
tree | 8402390d0e4b7ff5216ec6bd70643dc4046e87bc /src/os_unix.c | |
parent | b6a7737938e7e7b34f862f58aa5498e6f652e33d (diff) | |
download | vim-12dcf024e90ab511f04a08b20fe7eedbe92096d2.zip |
patch 7.4.1328
Problem: Can't compile with +job but without +channel. (John Marriott)
Solution: Add more #ifdefs.
Diffstat (limited to 'src/os_unix.c')
-rw-r--r-- | src/os_unix.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/os_unix.c b/src/os_unix.c index ec7d6c19d..ec43f8939 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -5043,7 +5043,9 @@ mch_start_job(char **argv, job_T *job) int fd_in[2]; /* for stdin */ int fd_out[2]; /* for stdout */ int fd_err[2]; /* for stderr */ +# ifdef FEAT_CHANNEL channel_T *channel = NULL; +#endif /* default is to fail */ job->jv_status = JOB_FAILED; @@ -5051,6 +5053,8 @@ mch_start_job(char **argv, job_T *job) fd_out[0] = -1; fd_err[0] = -1; + /* TODO: without the channel feature connect the child to /dev/null? */ +# ifdef FEAT_CHANNEL /* Open pipes for stdin, stdout, stderr. */ if ((pipe(fd_in) < 0) || (pipe(fd_out) < 0) ||(pipe(fd_err) < 0)) goto failed; @@ -5058,6 +5062,7 @@ mch_start_job(char **argv, job_T *job) channel = add_channel(); if (channel == NULL) goto failed; +# endif pid = fork(); /* maybe we should use vfork() */ if (pid == -1) @@ -5080,6 +5085,8 @@ mch_start_job(char **argv, job_T *job) set_child_environment(); + /* TODO: re-enable this when pipes connect without a channel */ +# ifdef FEAT_CHANNEL /* set up stdin for the child */ close(fd_in[1]); close(0); @@ -5097,6 +5104,7 @@ mch_start_job(char **argv, job_T *job) close(2); ignored = dup(fd_err[1]); close(fd_err[1]); +# endif /* See above for type of argv. */ execvp(argv[0], argv); @@ -5108,23 +5116,29 @@ mch_start_job(char **argv, job_T *job) /* parent */ job->jv_pid = pid; job->jv_status = JOB_STARTED; +# ifdef FEAT_CHANNEL job->jv_channel = channel; +# endif /* child stdin, stdout and stderr */ close(fd_in[0]); close(fd_out[1]); close(fd_err[1]); +# ifdef FEAT_CHANNEL channel_set_pipes(channel, fd_in[1], fd_out[0], fd_err[0]); channel_set_job(channel, job); -#ifdef FEAT_GUI +# ifdef FEAT_GUI channel_gui_register(channel); -#endif +# endif +# endif return; failed: +# ifdef FEAT_CHANNEL if (channel != NULL) channel_free(channel); +# endif if (fd_in[0] >= 0) { close(fd_in[0]); |