changeset 8132:f96536c291d8 v7.4.1360

commit https://github.com/vim/vim/commit/0ba75a9714884895b2ac09733158c47544a8dfb9 Author: Bram Moolenaar <Bram@vim.org> Date: Fri Feb 19 23:21:26 2016 +0100 patch 7.4.1360 Problem: Can't remove a callback with ch_setoptions(). Solution: When passing zero or an empty string remove the callback.
author Christian Brabandt <cb@256bit.org>
date Fri, 19 Feb 2016 23:30:04 +0100
parents b5632cf2e77a
children ea8dc9e33ecd
files src/channel.c src/proto/channel.pro src/testdir/test_channel.vim src/version.c
diffstat 4 files changed, 11 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/src/channel.c
+++ b/src/channel.c
@@ -749,16 +749,6 @@ channel_set_job(channel_T *channel, job_
 }
 
 /*
- * Set the callback for channel "channel".
- */
-    void
-channel_set_callback(channel_T *channel, char_u *callback)
-{
-    vim_free(channel->ch_callback);
-    channel->ch_callback = vim_strsave(callback);
-}
-
-/*
  * Set various properties from an "options" argument.
  */
     void
@@ -769,9 +759,14 @@ channel_set_options(channel_T *channel, 
     if (options->jo_set & JO_TIMEOUT)
 	channel->ch_timeout = options->jo_timeout;
 
-    if ((options->jo_set & JO_CALLBACK)
-	    && options->jo_callback != NULL && *options->jo_callback != NUL)
-	channel_set_callback(channel, options->jo_callback);
+    if (options->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);
+	else
+	    channel->ch_callback = NULL;
+    }
 }
 
 /*
--- a/src/proto/channel.pro
+++ b/src/proto/channel.pro
@@ -10,7 +10,6 @@ void channel_gui_register_all(void);
 channel_T *channel_open(char *hostname, int port_in, int waittime, void (*close_cb)(void));
 void channel_set_pipes(channel_T *channel, sock_T in, sock_T out, sock_T err);
 void channel_set_job(channel_T *channel, job_T *job);
-void channel_set_callback(channel_T *channel, char_u *callback);
 void channel_set_options(channel_T *channel, jobopt_T *options);
 void channel_set_req_callback(channel_T *channel, char_u *callback, int id);
 char_u *channel_get(channel_T *channel);
--- a/src/testdir/test_channel.vim
+++ b/src/testdir/test_channel.vim
@@ -149,6 +149,7 @@ func s:communicate(port)
   call ch_setoptions(handle, {'timeout': 1111})
   call assert_fails("call ch_setoptions(handle, {'waittime': 111})", "E475")
   call assert_fails("call ch_setoptions(handle, {'mode': 'json'})", "E475")
+  call ch_setoptions(handle, {'callback': ''})
 
   " Send an eval request that works.
   call assert_equal('ok', ch_sendexpr(handle, 'eval-works'))
--- a/src/version.c
+++ b/src/version.c
@@ -748,6 +748,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1360,
+/**/
     1359,
 /**/
     1358,