summaryrefslogtreecommitdiff
path: root/src/os_unix.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-02-15 23:09:04 +0100
committerBram Moolenaar <Bram@vim.org>2016-02-15 23:09:04 +0100
commit12dcf024e90ab511f04a08b20fe7eedbe92096d2 (patch)
tree8402390d0e4b7ff5216ec6bd70643dc4046e87bc /src/os_unix.c
parentb6a7737938e7e7b34f862f58aa5498e6f652e33d (diff)
downloadvim-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.c18
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]);