changeset 9434:8f904a323b3f v7.4.1998

commit https://github.com/vim/vim/commit/bf2cc5f36d5ffd5de445e6970602000c7869b65a Author: Bram Moolenaar <Bram@vim.org> Date: Thu Jul 7 20:45:06 2016 +0200 patch 7.4.1998 Problem: When writing buffer lines to a job there is no NL to NUL conversion. Solution: Make it work symmetrical with writing lines from a job into a buffer.
author Christian Brabandt <cb@256bit.org>
date Thu, 07 Jul 2016 21:00:06 +0200
parents 42a5ae2e19e8
children eb1692f10ce6
files src/channel.c src/netbeans.c src/proto/channel.pro src/version.c
diffstat 4 files changed, 15 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/channel.c
+++ b/src/channel.c
@@ -1313,14 +1313,20 @@ write_buf_line(buf_T *buf, linenr_T lnum
     char_u  *line = ml_get_buf(buf, lnum, FALSE);
     int	    len = (int)STRLEN(line);
     char_u  *p;
+    int	    i;
 
     /* Need to make a copy to be able to append a NL. */
     if ((p = alloc(len + 2)) == NULL)
 	return;
     memcpy((char *)p, (char *)line, len);
+
+    for (i = 0; i < len; ++i)
+	if (p[i] == NL)
+	    p[i] = NUL;
+
     p[len] = NL;
     p[len + 1] = NUL;
-    channel_send(channel, PART_IN, p, "write_buf_line()");
+    channel_send(channel, PART_IN, p, len + 1, "write_buf_line()");
     vim_free(p);
 }
 
@@ -2185,7 +2191,7 @@ channel_exe_cmd(channel_T *channel, int 
 		{
 		    channel_send(channel,
 				 part == PART_SOCK ? PART_SOCK : PART_IN,
-				 json, (char *)cmd);
+				 json, (int)STRLEN(json), (char *)cmd);
 		    vim_free(json);
 		}
 	    }
@@ -3380,9 +3386,8 @@ channel_handle_events(void)
  * Return FAIL or OK.
  */
     int
-channel_send(channel_T *channel, int part, char_u *buf, char *fun)
+channel_send(channel_T *channel, int part, char_u *buf, int len, char *fun)
 {
-    int		len = (int)STRLEN(buf);
     int		res;
     sock_T	fd;
 
@@ -3470,7 +3475,7 @@ send_common(
 				       opt->jo_callback, opt->jo_partial, id);
     }
 
-    if (channel_send(channel, part_send, text, fun) == OK
+    if (channel_send(channel, part_send, text, (int)STRLEN(text), fun) == OK
 						  && opt->jo_callback == NULL)
 	return channel;
     return NULL;
--- a/src/netbeans.c
+++ b/src/netbeans.c
@@ -765,7 +765,8 @@ netbeans_end(void)
 nb_send(char *buf, char *fun)
 {
     if (nb_channel != NULL)
-	channel_send(nb_channel, PART_SOCK, (char_u *)buf, fun);
+	channel_send(nb_channel, PART_SOCK, (char_u *)buf,
+						       (int)STRLEN(buf), fun);
 }
 
 /*
--- a/src/proto/channel.pro
+++ b/src/proto/channel.pro
@@ -34,7 +34,7 @@ int channel_read_json_block(channel_T *c
 void common_channel_read(typval_T *argvars, typval_T *rettv, int raw);
 channel_T *channel_fd2channel(sock_T fd, int *partp);
 void channel_handle_events(void);
-int channel_send(channel_T *channel, int part, char_u *buf, char *fun);
+int channel_send(channel_T *channel, int part, char_u *buf, int len, char *fun);
 channel_T *send_common(typval_T *argvars, char_u *text, int id, int eval, jobopt_T *opt, char *fun, int *part_read);
 void ch_expr_common(typval_T *argvars, typval_T *rettv, int eval);
 void ch_raw_common(typval_T *argvars, typval_T *rettv, int eval);
--- a/src/version.c
+++ b/src/version.c
@@ -759,6 +759,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1998,
+/**/
     1997,
 /**/
     1996,