diff src/channel.c @ 8165:973686665238 v7.4.1376

commit https://github.com/vim/vim/commit/b6b5252bcde68b296858bc090cb424493635dfec Author: Bram Moolenaar <Bram@vim.org> Date: Sat Feb 20 23:30:07 2016 +0100 patch 7.4.1376 Problem: ch_setoptions() cannot set all options. Solution: Support more options.
author Christian Brabandt <cb@256bit.org>
date Sat, 20 Feb 2016 23:45:04 +0100
parents d0958e22d9ff
children db5c79d93eee
line wrap: on
line diff
--- a/src/channel.c
+++ b/src/channel.c
@@ -737,27 +737,58 @@ channel_set_job(channel_T *channel, job_
 }
 
 /*
- * Set various properties from an "options" argument.
+ * Set various properties from an "opt" argument.
  */
     void
-channel_set_options(channel_T *channel, jobopt_T *options)
+channel_set_options(channel_T *channel, jobopt_T *opt)
 {
-    int part;
+    int    part;
+    char_u **cbp;
 
-    if (options->jo_set & JO_MODE)
+    if (opt->jo_set & JO_MODE)
 	for (part = PART_SOCK; part <= PART_IN; ++part)
-	    channel->ch_part[part].ch_mode = options->jo_mode;
-    if (options->jo_set & JO_TIMEOUT)
+	    channel->ch_part[part].ch_mode = opt->jo_mode;
+    if (opt->jo_set & JO_IN_MODE)
+	channel->ch_part[PART_IN].ch_mode = opt->jo_in_mode;
+    if (opt->jo_set & JO_OUT_MODE)
+	channel->ch_part[PART_OUT].ch_mode = opt->jo_out_mode;
+    if (opt->jo_set & JO_ERR_MODE)
+	channel->ch_part[PART_ERR].ch_mode = opt->jo_err_mode;
+
+    if (opt->jo_set & JO_TIMEOUT)
 	for (part = PART_SOCK; part <= PART_IN; ++part)
-	    channel->ch_part[part].ch_timeout = options->jo_timeout;
+	    channel->ch_part[part].ch_timeout = opt->jo_timeout;
+    if (opt->jo_set & JO_OUT_TIMEOUT)
+	channel->ch_part[PART_OUT].ch_timeout = opt->jo_out_timeout;
+    if (opt->jo_set & JO_ERR_TIMEOUT)
+	channel->ch_part[PART_ERR].ch_timeout = opt->jo_err_timeout;
 
-    if (options->jo_set & JO_CALLBACK)
+    if (opt->jo_set & JO_CALLBACK)
     {
-	vim_free(channel->ch_callback);
-	if (options->jo_callback != NULL && *options->jo_callback != NUL)
-	    channel->ch_callback = vim_strsave(options->jo_callback);
+	cbp = &channel->ch_callback;
+	vim_free(*cbp);
+	if (opt->jo_callback != NULL && *opt->jo_callback != NUL)
+	    *cbp = vim_strsave(opt->jo_callback);
 	else
-	    channel->ch_callback = NULL;
+	    *cbp = NULL;
+    }
+    if (opt->jo_set & JO_OUT_CALLBACK)
+    {
+	cbp = &channel->ch_part[PART_OUT].ch_callback;
+	vim_free(*cbp);
+	if (opt->jo_out_cb != NULL && *opt->jo_out_cb != NUL)
+	    *cbp = vim_strsave(opt->jo_out_cb);
+	else
+	    *cbp = NULL;
+    }
+    if (opt->jo_set & JO_ERR_CALLBACK)
+    {
+	cbp = &channel->ch_part[PART_ERR].ch_callback;
+	vim_free(*cbp);
+	if (opt->jo_err_cb != NULL && *opt->jo_err_cb != NUL)
+	    *cbp = vim_strsave(opt->jo_err_cb);
+	else
+	    *cbp = NULL;
     }
 }