Lines Matching refs:channel

64 static void channel_read(channel_T *channel, ch_part_T part, char *func);
65 static ch_mode_T channel_get_mode(channel_T *channel, ch_part_T part);
66 static int channel_get_timeout(channel_T *channel, ch_part_T part);
67 static ch_part_T channel_part_send(channel_T *channel);
68 static ch_part_T channel_part_read(channel_T *channel);
311 channel_T *channel = ALLOC_CLEAR_ONE(channel_T); in add_channel() local
313 if (channel == NULL) in add_channel()
316 channel->ch_id = next_ch_id++; in add_channel()
317 ch_log(channel, "Created channel"); in add_channel()
321 channel->ch_part[part].ch_fd = INVALID_FD; in add_channel()
323 channel->ch_part[part].ch_inputHandler = (XtInputId)NULL; in add_channel()
326 channel->ch_part[part].ch_inputHandler = 0; in add_channel()
328 channel->ch_part[part].ch_timeout = 2000; in add_channel()
333 first_channel->ch_prev = channel; in add_channel()
334 channel->ch_next = first_channel; in add_channel()
336 first_channel = channel; in add_channel()
338 channel->ch_refcount = 1; in add_channel()
339 return channel; in add_channel()
354 channel_still_useful(channel_T *channel) in channel_still_useful() argument
361 if (channel->ch_job_killed && channel->ch_job == NULL) in channel_still_useful()
365 if (channel->ch_close_cb.cb_name != NULL) in channel_still_useful()
369 if (channel->ch_part[PART_IN].ch_bufref.br_buf != NULL) in channel_still_useful()
374 has_sock_msg = channel->ch_part[PART_SOCK].ch_fd != INVALID_FD in channel_still_useful()
375 || channel->ch_part[PART_SOCK].ch_head.rq_next != NULL in channel_still_useful()
376 || channel->ch_part[PART_SOCK].ch_json_head.jq_next != NULL; in channel_still_useful()
377 has_out_msg = channel->ch_part[PART_OUT].ch_fd != INVALID_FD in channel_still_useful()
378 || channel->ch_part[PART_OUT].ch_head.rq_next != NULL in channel_still_useful()
379 || channel->ch_part[PART_OUT].ch_json_head.jq_next != NULL; in channel_still_useful()
380 has_err_msg = channel->ch_part[PART_ERR].ch_fd != INVALID_FD in channel_still_useful()
381 || channel->ch_part[PART_ERR].ch_head.rq_next != NULL in channel_still_useful()
382 || channel->ch_part[PART_ERR].ch_json_head.jq_next != NULL; in channel_still_useful()
383 return (channel->ch_callback.cb_name != NULL && (has_sock_msg in channel_still_useful()
385 || ((channel->ch_part[PART_OUT].ch_callback.cb_name != NULL in channel_still_useful()
386 || channel->ch_part[PART_OUT].ch_bufref.br_buf != NULL) in channel_still_useful()
388 || ((channel->ch_part[PART_ERR].ch_callback.cb_name != NULL in channel_still_useful()
389 || channel->ch_part[PART_ERR].ch_bufref.br_buf != NULL) in channel_still_useful()
397 channel_can_close(channel_T *channel) in channel_can_close() argument
399 return channel->ch_to_be_closed == 0; in channel_can_close()
407 channel_free_contents(channel_T *channel) in channel_free_contents() argument
409 channel_close(channel, TRUE); in channel_free_contents()
410 channel_clear(channel); in channel_free_contents()
411 ch_log(channel, "Freeing channel"); in channel_free_contents()
418 channel_free_channel(channel_T *channel) in channel_free_channel() argument
420 if (channel->ch_next != NULL) in channel_free_channel()
421 channel->ch_next->ch_prev = channel->ch_prev; in channel_free_channel()
422 if (channel->ch_prev == NULL) in channel_free_channel()
423 first_channel = channel->ch_next; in channel_free_channel()
425 channel->ch_prev->ch_next = channel->ch_next; in channel_free_channel()
426 vim_free(channel); in channel_free_channel()
430 channel_free(channel_T *channel) in channel_free() argument
435 channel->ch_to_be_freed = TRUE; in channel_free()
438 channel_free_contents(channel); in channel_free()
439 channel_free_channel(channel); in channel_free()
451 channel_may_free(channel_T *channel) in channel_may_free() argument
453 if (!channel_still_useful(channel)) in channel_may_free()
455 channel_free(channel); in channel_may_free()
467 channel_unref(channel_T *channel) in channel_unref() argument
469 if (channel != NULL && --channel->ch_refcount <= 0) in channel_unref()
470 return channel_may_free(channel); in channel_unref()
524 channel_T *channel; in channel_fd2channel() local
528 FOR_ALL_CHANNELS(channel) in channel_fd2channel()
531 if (channel->ch_part[part].ch_fd == fd) in channel_fd2channel()
534 return channel; in channel_fd2channel()
543 channel_T *channel; in channel_read_fd() local
546 channel = channel_fd2channel(fd, &part); in channel_read_fd()
547 if (channel == NULL) in channel_read_fd()
550 channel_read(channel, part, "channel_read_fd"); in channel_read_fd()
590 channel_gui_register_one(channel_T *channel, ch_part_T part UNUSED) in channel_gui_register_one() argument
596 if (channel->ch_keep_open) in channel_gui_register_one()
602 if (channel->ch_part[part].ch_inputHandler == (XtInputId)NULL) in channel_gui_register_one()
604 ch_log(channel, "Registering part %s with fd %d", in channel_gui_register_one()
605 part_names[part], channel->ch_part[part].ch_fd); in channel_gui_register_one()
607 channel->ch_part[part].ch_inputHandler = XtAppAddInput( in channel_gui_register_one()
609 channel->ch_part[part].ch_fd, in channel_gui_register_one()
612 (XtPointer)(long)channel->ch_part[part].ch_fd); in channel_gui_register_one()
618 if (channel->ch_part[part].ch_inputHandler == 0) in channel_gui_register_one()
620 ch_log(channel, "Registering part %s with fd %d", in channel_gui_register_one()
621 part_names[part], channel->ch_part[part].ch_fd); in channel_gui_register_one()
624 (gint)channel->ch_part[part].ch_fd); in channel_gui_register_one()
626 channel->ch_part[part].ch_inputHandler = g_io_add_watch( in channel_gui_register_one()
630 GINT_TO_POINTER(channel->ch_part[part].ch_fd)); in channel_gui_register_one()
634 channel->ch_part[part].ch_inputHandler = gdk_input_add( in channel_gui_register_one()
635 (gint)channel->ch_part[part].ch_fd, in channel_gui_register_one()
639 (gpointer)(long)channel->ch_part[part].ch_fd); in channel_gui_register_one()
647 channel_gui_register(channel_T *channel) in channel_gui_register() argument
649 if (channel->CH_SOCK_FD != INVALID_FD) in channel_gui_register()
650 channel_gui_register_one(channel, PART_SOCK); in channel_gui_register()
651 if (channel->CH_OUT_FD != INVALID_FD in channel_gui_register()
652 && channel->CH_OUT_FD != channel->CH_SOCK_FD) in channel_gui_register()
653 channel_gui_register_one(channel, PART_OUT); in channel_gui_register()
654 if (channel->CH_ERR_FD != INVALID_FD in channel_gui_register()
655 && channel->CH_ERR_FD != channel->CH_SOCK_FD in channel_gui_register()
656 && channel->CH_ERR_FD != channel->CH_OUT_FD) in channel_gui_register()
657 channel_gui_register_one(channel, PART_ERR); in channel_gui_register()
667 channel_T *channel; in channel_gui_register_all() local
669 FOR_ALL_CHANNELS(channel) in channel_gui_register_all()
670 channel_gui_register(channel); in channel_gui_register_all()
674 channel_gui_unregister_one(channel_T *channel UNUSED, ch_part_T part UNUSED) in channel_gui_unregister_one()
677 if (channel->ch_part[part].ch_inputHandler != (XtInputId)NULL) in channel_gui_unregister_one()
679 ch_log(channel, "Unregistering part %s", part_names[part]); in channel_gui_unregister_one()
680 XtRemoveInput(channel->ch_part[part].ch_inputHandler); in channel_gui_unregister_one()
681 channel->ch_part[part].ch_inputHandler = (XtInputId)NULL; in channel_gui_unregister_one()
685 if (channel->ch_part[part].ch_inputHandler != 0) in channel_gui_unregister_one()
687 ch_log(channel, "Unregistering part %s", part_names[part]); in channel_gui_unregister_one()
689 g_source_remove(channel->ch_part[part].ch_inputHandler); in channel_gui_unregister_one()
691 gdk_input_remove(channel->ch_part[part].ch_inputHandler); in channel_gui_unregister_one()
693 channel->ch_part[part].ch_inputHandler = 0; in channel_gui_unregister_one()
700 channel_gui_unregister(channel_T *channel) in channel_gui_unregister() argument
705 channel_gui_unregister_one(channel, part); in channel_gui_unregister()
718 channel_T *channel, in channel_connect() argument
739 ch_error(channel, "in socket() in channel_connect()."); in channel_connect()
756 ch_error(channel, in channel_connect()
764 ch_log(channel, "Connecting..."); in channel_connect()
779 ch_error(channel, in channel_connect()
787 ch_error(channel, "channel_connect: Connection refused"); in channel_connect()
818 ch_log(channel, in channel_connect()
825 ch_error(channel, in channel_connect()
863 ch_error(channel, in channel_connect()
872 ch_error(channel, "channel_connect: Connection refused"); in channel_connect()
915 ch_error(channel, "Connection timed out"); in channel_connect()
948 channel_T *channel = NULL; in channel_open() local
963 channel = add_channel(); in channel_open()
964 if (channel == NULL) in channel_open()
984 ch_error(channel, "in getaddrinfo() in channel_open()"); in channel_open()
987 channel_free(channel); in channel_open()
1024 ch_log(channel, "Resolved %s to %s", hostname, dst); in channel_open()
1028 ch_log(channel, "Trying to connect to %s port %d", dst, port); in channel_open()
1036 sd = channel_connect(channel, addr->ai_addr, (int)addr->ai_addrlen, in channel_open()
1049 ch_error(channel, "in gethostbyname() in channel_open()"); in channel_open()
1051 channel_free(channel); in channel_open()
1063 ch_log(channel, "Trying to connect to %s port %d", hostname, port); in channel_open()
1071 sd = channel_connect(channel, (struct sockaddr *)&server, sizeof(server), in channel_open()
1077 channel_free(channel); in channel_open()
1081 ch_log(channel, "Connection made"); in channel_open()
1083 channel->CH_SOCK_FD = (sock_T)sd; in channel_open()
1084 channel->ch_nb_close_cb = nb_close_cb; in channel_open()
1085 channel->ch_hostname = (char *)vim_strsave((char_u *)hostname); in channel_open()
1086 channel->ch_port = port; in channel_open()
1087 channel->ch_to_be_closed |= (1U << PART_SOCK); in channel_open()
1090 channel_gui_register_one(channel, PART_SOCK); in channel_open()
1093 return channel; in channel_open()
1165 channel_set_options(channel_T *channel, jobopt_T *opt) in channel_set_options() argument
1171 channel->ch_part[part].ch_mode = opt->jo_mode; in channel_set_options()
1173 channel->ch_part[PART_IN].ch_mode = opt->jo_in_mode; in channel_set_options()
1175 channel->ch_part[PART_OUT].ch_mode = opt->jo_out_mode; in channel_set_options()
1177 channel->ch_part[PART_ERR].ch_mode = opt->jo_err_mode; in channel_set_options()
1178 channel->ch_nonblock = opt->jo_noblock; in channel_set_options()
1182 channel->ch_part[part].ch_timeout = opt->jo_timeout; in channel_set_options()
1184 channel->ch_part[PART_OUT].ch_timeout = opt->jo_out_timeout; in channel_set_options()
1186 channel->ch_part[PART_ERR].ch_timeout = opt->jo_err_timeout; in channel_set_options()
1188 channel->ch_part[PART_IN].ch_block_write = 1; in channel_set_options()
1191 free_set_callback(&channel->ch_callback, &opt->jo_callback); in channel_set_options()
1193 free_set_callback(&channel->ch_part[PART_OUT].ch_callback, in channel_set_options()
1196 free_set_callback(&channel->ch_part[PART_ERR].ch_callback, in channel_set_options()
1199 free_set_callback(&channel->ch_close_cb, &opt->jo_close_cb); in channel_set_options()
1200 channel->ch_drop_never = opt->jo_drop_never; in channel_set_options()
1208 channel->ch_part[PART_OUT].ch_mode = MODE_NL; in channel_set_options()
1226 channel->ch_part[PART_OUT].ch_nomodifiable = in channel_set_options()
1229 if (!buf->b_p_ma && !channel->ch_part[PART_OUT].ch_nomodifiable) in channel_set_options()
1235 ch_log(channel, "writing out to buffer '%s'", in channel_set_options()
1237 set_bufref(&channel->ch_part[PART_OUT].ch_bufref, buf); in channel_set_options()
1253 channel->ch_part[PART_ERR].ch_mode = MODE_NL; in channel_set_options()
1255 buf = channel->ch_part[PART_OUT].ch_bufref.br_buf; in channel_set_options()
1273 channel->ch_part[PART_ERR].ch_nomodifiable = in channel_set_options()
1275 if (!buf->b_p_ma && !channel->ch_part[PART_ERR].ch_nomodifiable) in channel_set_options()
1281 ch_log(channel, "writing err to buffer '%s'", in channel_set_options()
1283 set_bufref(&channel->ch_part[PART_ERR].ch_bufref, buf); in channel_set_options()
1291 channel->ch_part[PART_OUT].ch_io = opt->jo_io[PART_OUT]; in channel_set_options()
1292 channel->ch_part[PART_ERR].ch_io = opt->jo_io[PART_ERR]; in channel_set_options()
1293 channel->ch_part[PART_IN].ch_io = opt->jo_io[PART_IN]; in channel_set_options()
1308 channel_T *channel = NULL; in channel_open_func() local
1372 channel = channel_open((char *)address, port, opt.jo_waittime, NULL); in channel_open_func()
1373 if (channel != NULL) in channel_open_func()
1376 channel_set_options(channel, &opt); in channel_open_func()
1380 return channel; in channel_open_func()
1384 ch_close_part(channel_T *channel, ch_part_T part) in ch_close_part() argument
1386 sock_T *fd = &channel->ch_part[part].ch_fd; in ch_close_part()
1396 if ((part == PART_IN || channel->CH_IN_FD != *fd) in ch_close_part()
1397 && (part == PART_OUT || channel->CH_OUT_FD != *fd) in ch_close_part()
1398 && (part == PART_ERR || channel->CH_ERR_FD != *fd)) in ch_close_part()
1401 if (channel->ch_named_pipe) in ch_close_part()
1410 channel->ch_to_be_closed &= ~(1U << part); in ch_close_part()
1415 channel_set_pipes(channel_T *channel, sock_T in, sock_T out, sock_T err) in channel_set_pipes() argument
1419 ch_close_part(channel, PART_IN); in channel_set_pipes()
1420 channel->CH_IN_FD = in; in channel_set_pipes()
1425 channel->ch_to_be_closed |= (1U << PART_IN); in channel_set_pipes()
1431 channel_gui_unregister_one(channel, PART_OUT); in channel_set_pipes()
1433 ch_close_part(channel, PART_OUT); in channel_set_pipes()
1434 channel->CH_OUT_FD = out; in channel_set_pipes()
1435 channel->ch_to_be_closed |= (1U << PART_OUT); in channel_set_pipes()
1437 channel_gui_register_one(channel, PART_OUT); in channel_set_pipes()
1443 channel_gui_unregister_one(channel, PART_ERR); in channel_set_pipes()
1445 ch_close_part(channel, PART_ERR); in channel_set_pipes()
1446 channel->CH_ERR_FD = err; in channel_set_pipes()
1447 channel->ch_to_be_closed |= (1U << PART_ERR); in channel_set_pipes()
1449 channel_gui_register_one(channel, PART_ERR); in channel_set_pipes()
1459 channel_set_job(channel_T *channel, job_T *job, jobopt_T *options) in channel_set_job() argument
1461 channel->ch_job = job; in channel_set_job()
1463 channel_set_options(channel, options); in channel_set_job()
1467 chanpart_T *in_part = &channel->ch_part[PART_IN]; in channel_set_job()
1470 ch_log(channel, "reading from buffer '%s'", in channel_set_job()
1500 channel_T *channel, in channel_set_req_callback() argument
1505 cbq_T *head = &channel->ch_part[part].ch_cb_head; in channel_set_req_callback()
1523 write_buf_line(buf_T *buf, linenr_T lnum, channel_T *channel) in write_buf_line() argument
1535 if (channel->ch_write_text_mode) in write_buf_line()
1546 channel_send(channel, PART_IN, p, len + 1, "write_buf_line"); in write_buf_line()
1555 can_write_buf_line(channel_T *channel) in can_write_buf_line() argument
1557 chanpart_T *in_part = &channel->ch_part[PART_IN]; in can_write_buf_line()
1591 ch_log(channel, "FAKED Input not ready for writing"); in can_write_buf_line()
1593 ch_log(channel, "Input not ready for writing"); in can_write_buf_line()
1605 ch_log(channel, "Input not ready for writing"); in can_write_buf_line()
1610 ch_log(channel, "FAKED Input not ready for writing"); in can_write_buf_line()
1623 channel_write_in(channel_T *channel) in channel_write_in() argument
1625 chanpart_T *in_part = &channel->ch_part[PART_IN]; in channel_write_in()
1635 ch_log(channel, "input buffer has been wiped out"); in channel_write_in()
1643 if (!can_write_buf_line(channel)) in channel_write_in()
1645 write_buf_line(buf, lnum, channel); in channel_write_in()
1650 ch_log(channel, "written line %d to channel", (int)lnum - 1); in channel_write_in()
1652 ch_log(channel, "written %d lines to channel", written); in channel_write_in()
1659 if (channel->ch_job != NULL) in channel_write_in()
1660 term_send_eof(channel); in channel_write_in()
1665 ch_log(channel, "Finished writing all lines to channel"); in channel_write_in()
1668 ch_close_part(channel, PART_IN); in channel_write_in()
1671 ch_log(channel, "Still %ld more lines to write", in channel_write_in()
1681 channel_T *channel; in channel_buffer_free() local
1684 FOR_ALL_CHANNELS(channel) in channel_buffer_free()
1687 chanpart_T *ch_part = &channel->ch_part[part]; in channel_buffer_free()
1691 ch_log(channel, "%s buffer has been wiped out", in channel_buffer_free()
1702 channel_write_input(channel_T *channel) in channel_write_input() argument
1704 chanpart_T *in_part = &channel->ch_part[PART_IN]; in channel_write_input()
1707 channel_send(channel, PART_IN, (char_u *)"", 0, "channel_write_input"); in channel_write_input()
1713 channel_write_in(channel); in channel_write_input()
1723 channel_T *channel; in channel_write_any_lines() local
1725 FOR_ALL_CHANNELS(channel) in channel_write_any_lines()
1726 channel_write_input(channel); in channel_write_any_lines()
1735 channel_T *channel; in channel_write_new_lines() local
1740 FOR_ALL_CHANNELS(channel) in channel_write_new_lines()
1742 chanpart_T *in_part = &channel->ch_part[PART_IN]; in channel_write_new_lines()
1754 if (!can_write_buf_line(channel)) in channel_write_new_lines()
1756 write_buf_line(buf, lnum, channel); in channel_write_new_lines()
1761 ch_log(channel, "written line %d to channel", (int)lnum - 1); in channel_write_new_lines()
1763 ch_log(channel, "written %d lines to channel", written); in channel_write_new_lines()
1765 ch_log(channel, "Still %ld more lines to write", in channel_write_new_lines()
1780 invoke_callback(channel_T *channel, callback_T *callback, typval_T *argv) in invoke_callback() argument
1788 argv[0].vval.v_channel = channel; in invoke_callback()
1800 channel_peek(channel_T *channel, ch_part_T part) in channel_peek() argument
1802 readq_T *head = &channel->ch_part[part].ch_head; in channel_peek()
1830 channel_get(channel_T *channel, ch_part_T part, int *outlen) in channel_get() argument
1832 readq_T *head = &channel->ch_part[part].ch_head; in channel_get()
1856 channel_get_all(channel_T *channel, ch_part_T part, int *outlen) in channel_get_all() argument
1858 readq_T *head = &channel->ch_part[part].ch_head; in channel_get_all()
1881 p = channel_get(channel, part, NULL); in channel_get_all()
1928 channel_consume(channel_T *channel, ch_part_T part, int len) in channel_consume() argument
1930 readq_T *head = &channel->ch_part[part].ch_head; in channel_consume()
1945 channel_collapse(channel_T *channel, ch_part_T part, int want_nl) in channel_collapse() argument
1947 readq_T *head = &channel->ch_part[part].ch_head; in channel_collapse()
2006 channel_save(channel_T *channel, ch_part_T part, char_u *buf, int len, in channel_save() argument
2010 readq_T *head = &channel->ch_part[part].ch_head; in channel_save()
2026 if (channel->ch_part[part].ch_mode == MODE_NL) in channel_save()
2068 ch_log_lead(lead, channel, part); in channel_save()
2083 channel_T *channel = (channel_T *)reader->js_cookie; in channel_fill() local
2085 char_u *next = channel_get(channel, part, NULL); in channel_fill()
2121 channel_parse_json(channel_T *channel, ch_part_T part) in channel_parse_json() argument
2126 chanpart_T *chanpart = &channel->ch_part[part]; in channel_parse_json()
2131 if (channel_peek(channel, part) == NULL) in channel_parse_json()
2134 reader.js_buf = channel_get(channel, part, NULL); in channel_parse_json()
2137 reader.js_cookie = channel; in channel_parse_json()
2155 ch_error(channel, "Did not receive a list, discarding"); in channel_parse_json()
2157 ch_error(channel, "Expected list with two items, got %d", in channel_parse_json()
2200 ch_log(channel, in channel_parse_json()
2236 ch_log(channel, "timed out"); in channel_parse_json()
2241 ch_log(channel, "still waiting on incomplete message"); in channel_parse_json()
2248 ch_error(channel, "Decoding failed - discarding input"); in channel_parse_json()
2255 channel_save(channel, part, reader.js_buf + reader.js_used, in channel_parse_json()
2368 channel_T *channel, in channel_get_json() argument
2374 jsonq_T *head = &channel->ch_part[part].ch_json_head; in channel_get_json()
2390 &channel->ch_part[part], tv->vval.v_number))))) in channel_get_json()
2394 ch_log(channel, "Getting JSON message %ld", in channel_get_json()
2409 channel_push_json(channel_T *channel, ch_part_T part, typval_T *rettv) in channel_push_json() argument
2411 jsonq_T *head = &channel->ch_part[part].ch_json_head; in channel_push_json()
2471 channel_exe_cmd(channel_T *channel, ch_part_T part, typval_T *argv) in channel_exe_cmd() argument
2475 int options = channel->ch_part[part].ch_mode == MODE_JS ? JSON_JS : 0; in channel_exe_cmd()
2479 ch_error(channel, "received command with non-string argument"); in channel_exe_cmd()
2494 ch_log(channel, "Executing ex command '%s'", (char *)arg); in channel_exe_cmd()
2502 ch_log(channel, "Ex command error: '%s'", in channel_exe_cmd()
2509 ch_log(channel, "Executing normal command '%s'", (char *)arg); in channel_exe_cmd()
2520 ch_log(channel, "redraw"); in channel_exe_cmd()
2536 ch_error(channel, "last argument for expr/call must be a number"); in channel_exe_cmd()
2542 ch_error(channel, "third argument for call must be a list"); in channel_exe_cmd()
2558 ch_log(channel, "Evaluating expression '%s'", (char *)arg); in channel_exe_cmd()
2563 ch_log(channel, "Calling '%s'", (char *)arg); in channel_exe_cmd()
2585 channel_send(channel, in channel_exe_cmd()
2600 ch_error(channel, "Received unknown command: %s", (char *)cmd); in channel_exe_cmd()
2611 channel_T *channel, in invoke_one_time_callback() argument
2616 ch_log(channel, "Invoking one-time callback %s", in invoke_one_time_callback()
2621 invoke_callback(channel, &item->cq_callback, argv); in invoke_one_time_callback()
2627 append_to_buffer(buf_T *buffer, char_u *msg, channel_T *channel, ch_part_T part) in append_to_buffer() argument
2632 chanpart_T *ch_part = &channel->ch_part[part]; in append_to_buffer()
2640 ch_error(channel, "Buffer is not modifiable, cannot append"); in append_to_buffer()
2655 ch_log(channel, "appending line %d to buffer %s", in append_to_buffer()
2736 drop_messages(channel_T *channel, ch_part_T part) in drop_messages() argument
2740 while ((msg = channel_get(channel, part, NULL)) != NULL) in drop_messages()
2742 ch_log(channel, "Dropping message '%s'", (char *)msg); in drop_messages()
2753 may_invoke_callback(channel_T *channel, ch_part_T part) in may_invoke_callback() argument
2759 chanpart_T *ch_part = &channel->ch_part[part]; in may_invoke_callback()
2767 if (channel->ch_nb_close_cb != NULL) in may_invoke_callback()
2779 else if (channel->ch_callback.cb_name != NULL) in may_invoke_callback()
2780 callback = &channel->ch_callback; in may_invoke_callback()
2787 ch_log(channel, "%s buffer has been wiped out", part_names[part]); in may_invoke_callback()
2798 if (channel_get_json(channel, part, -1, FALSE, &listtv) == FAIL) in may_invoke_callback()
2801 channel_parse_json(channel, part); in may_invoke_callback()
2802 if (channel_get_json(channel, part, -1, FALSE, &listtv) == FAIL) in may_invoke_callback()
2816 channel_exe_cmd(channel, part, argv); in may_invoke_callback()
2823 ch_error(channel, in may_invoke_callback()
2830 else if (channel_peek(channel, part) == NULL) in may_invoke_callback()
2842 if (channel->ch_close_cb.cb_name == NULL && !channel->ch_drop_never) in may_invoke_callback()
2843 drop_messages(channel, part); in may_invoke_callback()
2857 node = channel_peek(channel, part); in may_invoke_callback()
2861 if (channel_collapse(channel, part, TRUE) == FAIL) in may_invoke_callback()
2879 msg = channel_get(channel, part, NULL); in may_invoke_callback()
2884 msg = channel_get(channel, part, NULL); in may_invoke_callback()
2892 channel_consume(channel, part, (int)(nl - buf) + 1); in may_invoke_callback()
2900 msg = channel_get_all(channel, part, NULL); in may_invoke_callback()
2918 invoke_one_time_callback(channel, cbhead, cbitem, argv); in may_invoke_callback()
2924 if (channel->ch_drop_never) in may_invoke_callback()
2927 channel_push_json(channel, part, listtv); in may_invoke_callback()
2931 ch_log(channel, "Dropping message %d without callback", in may_invoke_callback()
2946 write_to_term(buffer, msg, channel); in may_invoke_callback()
2949 append_to_buffer(buffer, msg, channel, part); in may_invoke_callback()
2956 invoke_one_time_callback(channel, cbhead, cbitem, argv); in may_invoke_callback()
2960 ch_log(channel, "Invoking channel callback %s", in may_invoke_callback()
2962 invoke_callback(channel, callback, argv); in may_invoke_callback()
2967 ch_log(channel, "Dropping message %d", seq_nr); in may_invoke_callback()
2982 channel_can_write_to(channel_T *channel) in channel_can_write_to() argument
2984 return channel != NULL && (channel->CH_SOCK_FD != INVALID_FD in channel_can_write_to()
2985 || channel->CH_IN_FD != INVALID_FD); in channel_can_write_to()
2994 channel_is_open(channel_T *channel) in channel_is_open() argument
2996 return channel != NULL && (channel->CH_SOCK_FD != INVALID_FD in channel_is_open()
2997 || channel->CH_IN_FD != INVALID_FD in channel_is_open()
2998 || channel->CH_OUT_FD != INVALID_FD in channel_is_open()
2999 || channel->CH_ERR_FD != INVALID_FD); in channel_is_open()
3006 channel_has_readahead(channel_T *channel, ch_part_T part) in channel_has_readahead() argument
3008 ch_mode_T ch_mode = channel->ch_part[part].ch_mode; in channel_has_readahead()
3012 jsonq_T *head = &channel->ch_part[part].ch_json_head; in channel_has_readahead()
3017 channel_parse_json(channel, part); in channel_has_readahead()
3021 return channel_peek(channel, part) != NULL; in channel_has_readahead()
3029 channel_status(channel_T *channel, int req_part) in channel_status() argument
3034 if (channel == NULL) in channel_status()
3038 if (channel->CH_OUT_FD != INVALID_FD) in channel_status()
3040 if (channel_has_readahead(channel, PART_OUT)) in channel_status()
3045 if (channel->CH_ERR_FD != INVALID_FD) in channel_status()
3047 if (channel_has_readahead(channel, PART_ERR)) in channel_status()
3052 if (channel_is_open(channel)) in channel_status()
3055 if (channel_has_readahead(channel, part)) in channel_status()
3068 channel_part_info(channel_T *channel, dict_T *dict, char *name, ch_part_T part) in channel_part_info() argument
3070 chanpart_T *chanpart = &channel->ch_part[part]; in channel_part_info()
3083 else if (channel_has_readahead(channel, part)) in channel_part_info()
3117 channel_info(channel_T *channel, dict_T *dict) in channel_info() argument
3119 dict_add_number(dict, "id", channel->ch_id); in channel_info()
3120 dict_add_string(dict, "status", (char_u *)channel_status(channel, -1)); in channel_info()
3122 if (channel->ch_hostname != NULL) in channel_info()
3124 dict_add_string(dict, "hostname", (char_u *)channel->ch_hostname); in channel_info()
3125 dict_add_number(dict, "port", channel->ch_port); in channel_info()
3126 channel_part_info(channel, dict, "sock", PART_SOCK); in channel_info()
3130 channel_part_info(channel, dict, "out", PART_OUT); in channel_info()
3131 channel_part_info(channel, dict, "err", PART_ERR); in channel_info()
3132 channel_part_info(channel, dict, "in", PART_IN); in channel_info()
3142 channel_close(channel_T *channel, int invoke_close_cb) in channel_close() argument
3144 ch_log(channel, "Closing channel"); in channel_close()
3147 channel_gui_unregister(channel); in channel_close()
3150 ch_close_part(channel, PART_SOCK); in channel_close()
3151 ch_close_part(channel, PART_IN); in channel_close()
3152 ch_close_part(channel, PART_OUT); in channel_close()
3153 ch_close_part(channel, PART_ERR); in channel_close()
3160 if (channel->ch_close_cb.cb_name != NULL) in channel_close()
3161 ch_log(channel, in channel_close()
3165 if (channel->ch_close_cb.cb_name != NULL in channel_close()
3166 || channel->ch_part[part].ch_bufref.br_buf != NULL) in channel_close()
3170 ++channel->ch_refcount; in channel_close()
3171 if (channel->ch_close_cb.cb_name == NULL) in channel_close()
3172 ch_log(channel, "flushing %s buffers before closing", in channel_close()
3174 while (may_invoke_callback(channel, part)) in channel_close()
3176 --channel->ch_refcount; in channel_close()
3180 if (channel->ch_close_cb.cb_name != NULL) in channel_close()
3187 ++channel->ch_refcount; in channel_close()
3188 ch_log(channel, "Invoking close callback %s", in channel_close()
3189 (char *)channel->ch_close_cb.cb_name); in channel_close()
3191 argv[0].vval.v_channel = channel; in channel_close()
3192 call_callback(&channel->ch_close_cb, -1, &rettv, 1, argv); in channel_close()
3197 free_callback(&channel->ch_close_cb); in channel_close()
3205 if (!channel->ch_drop_never) in channel_close()
3208 drop_messages(channel, part); in channel_close()
3210 --channel->ch_refcount; in channel_close()
3214 channel->ch_nb_close_cb = NULL; in channel_close()
3217 term_channel_closed(channel); in channel_close()
3225 channel_close_in(channel_T *channel) in channel_close_in() argument
3227 ch_close_part(channel, PART_IN); in channel_close_in()
3246 channel_clear_one(channel_T *channel, ch_part_T part) in channel_clear_one() argument
3248 chanpart_T *ch_part = &channel->ch_part[part]; in channel_clear_one()
3252 while (channel_peek(channel, part) != NULL) in channel_clear_one()
3253 vim_free(channel_get(channel, part, NULL)); in channel_clear_one()
3282 channel_clear(channel_T *channel) in channel_clear() argument
3284 ch_log(channel, "Clearing channel"); in channel_clear()
3285 VIM_CLEAR(channel->ch_hostname); in channel_clear()
3286 channel_clear_one(channel, PART_SOCK); in channel_clear()
3287 channel_clear_one(channel, PART_OUT); in channel_clear()
3288 channel_clear_one(channel, PART_ERR); in channel_clear()
3289 channel_clear_one(channel, PART_IN); in channel_clear()
3290 free_callback(&channel->ch_callback); in channel_clear()
3291 free_callback(&channel->ch_close_cb); in channel_clear()
3298 channel_T *channel; in channel_free_all() local
3301 FOR_ALL_CHANNELS(channel) in channel_free_all()
3302 channel_clear(channel); in channel_free_all()
3381 channel_wait(channel_T *channel, sock_T fd, int timeout) in channel_wait() argument
3384 ch_log(channel, "Waiting for up to %d msec", timeout); in channel_wait()
3387 if (fd != channel->CH_SOCK_FD) in channel_wait()
3402 if (channel->ch_named_pipe) in channel_wait()
3489 channel_T *channel, ch_part_T part, int is_err, char *func) in ch_close_part_on_error() argument
3495 ch_error(channel, msg, func, "error", part); in ch_close_part_on_error()
3497 ch_log(channel, msg, func, "EOF", part); in ch_close_part_on_error()
3509 if (channel->ch_nb_close_cb != NULL) in ch_close_part_on_error()
3510 channel_save(channel, PART_SOCK, (char_u *)DETACH_MSG_RAW, in ch_close_part_on_error()
3521 if (channel->ch_part[part].ch_fd == channel->ch_part[other].ch_fd) in ch_close_part_on_error()
3522 ch_close_part(channel, other); in ch_close_part_on_error()
3524 ch_close_part(channel, part); in ch_close_part_on_error()
3528 channel_gui_unregister_one(channel, part); in ch_close_part_on_error()
3533 channel_close_now(channel_T *channel) in channel_close_now() argument
3535 ch_log(channel, "Closing channel because all readable fds are closed"); in channel_close_now()
3536 if (channel->ch_nb_close_cb != NULL) in channel_close_now()
3537 (*channel->ch_nb_close_cb)(); in channel_close_now()
3538 channel_close(channel, TRUE); in channel_close_now()
3547 channel_read(channel_T *channel, ch_part_T part, char *func) in channel_read() argument
3555 fd = channel->ch_part[part].ch_fd; in channel_read()
3558 ch_error(channel, "channel_read() called while %s part is closed", in channel_read()
3562 use_socket = fd == channel->CH_SOCK_FD; in channel_read()
3577 if (channel_wait(channel, fd, 0) != CW_READY) in channel_read()
3587 channel_save(channel, part, buf, len, FALSE, "RECV "); in channel_read()
3596 if (!channel->ch_keep_open) in channel_read()
3597 ch_close_part_on_error(channel, part, (len < 0), func); in channel_read()
3616 channel_T *channel, ch_part_T part, int timeout, int raw, int *outlen) in channel_read_block() argument
3620 ch_mode_T mode = channel->ch_part[part].ch_mode; in channel_read_block()
3621 sock_T fd = channel->ch_part[part].ch_fd; in channel_read_block()
3625 ch_log(channel, "Blocking %s read, timeout: %d msec", in channel_read_block()
3630 node = channel_peek(channel, part); in channel_read_block()
3637 if (channel_collapse(channel, part, mode == MODE_NL) == OK) in channel_read_block()
3648 if (channel_wait(channel, fd, timeout) != CW_READY) in channel_read_block()
3650 ch_log(channel, "Timed out"); in channel_read_block()
3653 channel_read(channel, part, "channel_read_block"); in channel_read_block()
3659 msg = channel_get_all(channel, part, outlen); in channel_read_block()
3676 msg = channel_get(channel, part, NULL); in channel_read_block()
3681 msg = channel_get(channel, part, NULL); in channel_read_block()
3689 channel_consume(channel, part, (int)(nl - buf) + 1); in channel_read_block()
3693 ch_log(channel, "Returning %d bytes", (int)STRLEN(msg)); in channel_read_block()
3718 channel_T *channel, in channel_read_json_block() argument
3727 chanpart_T *chanpart = &channel->ch_part[part]; in channel_read_json_block()
3730 ch_log(channel, "Blocking read JSON for id %d", id); in channel_read_json_block()
3738 more = channel_parse_json(channel, part); in channel_read_json_block()
3741 if (channel_get_json(channel, part, id, TRUE, rettv) == OK) in channel_read_json_block()
3743 ch_log(channel, "Received JSON for id %d", id); in channel_read_json_block()
3786 || channel_wait(channel, fd, timeout) != CW_READY) in channel_read_json_block()
3791 ch_log(channel, "Timed out on id %d", id); in channel_read_json_block()
3796 channel_read(channel, part, "channel_read_json_block"); in channel_read_json_block()
3816 channel_T *channel = NULL; in get_channel_arg() local
3822 channel = tv->vval.v_job->jv_channel; in get_channel_arg()
3826 channel = tv->vval.v_channel; in get_channel_arg()
3833 if (channel != NULL && reading) in get_channel_arg()
3834 has_readahead = channel_has_readahead(channel, in get_channel_arg()
3835 part != PART_COUNT ? part : channel_part_read(channel)); in get_channel_arg()
3837 if (check_open && (channel == NULL || (!channel_is_open(channel) in get_channel_arg()
3843 return channel; in get_channel_arg()
3852 channel_T *channel; in common_channel_read() local
3876 channel = get_channel_arg(&argvars[0], TRUE, TRUE, part); in common_channel_read()
3877 if (channel != NULL) in common_channel_read()
3880 part = channel_part_read(channel); in common_channel_read()
3881 mode = channel_get_mode(channel, part); in common_channel_read()
3882 timeout = channel_get_timeout(channel, part); in common_channel_read()
3889 char_u *p = channel_read_block(channel, part, in common_channel_read()
3910 rettv->vval.v_string = channel_read_block(channel, part, in common_channel_read()
3916 channel_read_json_block(channel, part, timeout, id, &listtv); in common_channel_read()
3943 channel_T *channel; in channel_handle_events() local
3947 FOR_ALL_CHANNELS(channel) in channel_handle_events()
3949 if (only_keep_open && !channel->ch_keep_open) in channel_handle_events()
3955 fd = channel->ch_part[part].ch_fd; in channel_handle_events()
3958 int r = channel_wait(channel, fd, 0); in channel_handle_events()
3961 channel_read(channel, part, "channel_handle_events"); in channel_handle_events()
3963 ch_close_part_on_error(channel, part, TRUE, in channel_handle_events()
3972 if (channel->ch_job != NULL) in channel_handle_events()
3974 job_T *job = channel->ch_job; in channel_handle_events()
3978 ch_close_part(channel, part); in channel_handle_events()
3992 channel_T *channel; in channel_any_keep_open() local
3994 FOR_ALL_CHANNELS(channel) in channel_any_keep_open()
3995 if (channel->ch_keep_open) in channel_any_keep_open()
4006 channel_set_nonblock(channel_T *channel, ch_part_T part) in channel_set_nonblock() argument
4008 chanpart_T *ch_part = &channel->ch_part[part]; in channel_set_nonblock()
4031 channel_T *channel, in channel_send() argument
4039 chanpart_T *ch_part = &channel->ch_part[part]; in channel_send()
4045 if (!channel->ch_error && fun != NULL) in channel_send()
4047 ch_error(channel, "%s(): write while not connected", fun); in channel_send()
4050 channel->ch_error = TRUE; in channel_send()
4054 if (channel->ch_nonblock && !ch_part->ch_nonblocking) in channel_send()
4055 channel_set_nonblock(channel, part); in channel_send()
4059 ch_log_lead("SEND ", channel, part); in channel_send()
4095 if (channel->ch_named_pipe && res < 0) in channel_send()
4114 ch_log(channel, "Sent %d bytes now", res); in channel_send()
4125 ch_log(channel, "Write queue empty"); in channel_send()
4148 ch_log(channel, "Adding %d bytes to the write queue", len); in channel_send()
4191 if (!channel->ch_error && fun != NULL) in channel_send()
4193 ch_error(channel, "%s(): write failed", fun); in channel_send()
4196 channel->ch_error = TRUE; in channel_send()
4200 channel->ch_error = FALSE; in channel_send()
4222 channel_T *channel; in send_common() local
4226 channel = get_channel_arg(&argvars[0], TRUE, FALSE, 0); in send_common()
4227 if (channel == NULL) in send_common()
4229 part_send = channel_part_send(channel); in send_common()
4230 *part_read = channel_part_read(channel); in send_common()
4245 channel_set_req_callback(channel, *part_read, &opt->jo_callback, id); in send_common()
4248 if (channel_send(channel, part_send, text, len, fun) == OK in send_common()
4250 return channel; in send_common()
4262 channel_T *channel; in ch_expr_common() local
4279 channel = get_channel_arg(&argvars[0], TRUE, FALSE, 0); in ch_expr_common()
4280 if (channel == NULL) in ch_expr_common()
4282 part_send = channel_part_send(channel); in ch_expr_common()
4284 ch_mode = channel_get_mode(channel, part_send); in ch_expr_common()
4291 id = ++channel->ch_last_msg_id; in ch_expr_common()
4297 channel = send_common(argvars, text, (int)STRLEN(text), id, eval, &opt, in ch_expr_common()
4300 if (channel != NULL && eval) in ch_expr_common()
4305 timeout = channel_get_timeout(channel, part_read); in ch_expr_common()
4306 if (channel_read_json_block(channel, part_read, timeout, id, &listtv) in ch_expr_common()
4330 channel_T *channel; in ch_raw_common() local
4355 channel = send_common(argvars, text, len, 0, eval, &opt, in ch_raw_common()
4357 if (channel != NULL && eval) in ch_raw_common()
4362 timeout = channel_get_timeout(channel, part_read); in ch_raw_common()
4363 rettv->vval.v_string = channel_read_block(channel, part_read, in ch_raw_common()
4381 channel_T *channel; in channel_poll_setup() local
4385 FOR_ALL_CHANNELS(channel) in channel_poll_setup()
4389 chanpart_T *ch_part = &channel->ch_part[part]; in channel_poll_setup()
4393 if (channel->ch_keep_open) in channel_poll_setup()
4410 channel->ch_part[part].ch_poll_idx = -1; in channel_poll_setup()
4426 channel_T *channel; in channel_poll_check() local
4432 FOR_ALL_CHANNELS(channel) in channel_poll_check()
4436 idx = channel->ch_part[part].ch_poll_idx; in channel_poll_check()
4440 channel_read(channel, part, "channel_poll_check"); in channel_poll_check()
4443 else if (channel->ch_part[part].ch_fd != INVALID_FD in channel_poll_check()
4444 && channel->ch_keep_open) in channel_poll_check()
4447 channel_read(channel, part, "channel_poll_check_keep_open"); in channel_poll_check()
4451 in_part = &channel->ch_part[PART_IN]; in channel_poll_check()
4455 channel_write_input(channel); in channel_poll_check()
4478 channel_T *channel; in channel_select_setup() local
4483 FOR_ALL_CHANNELS(channel) in channel_select_setup()
4487 sock_T fd = channel->ch_part[part].ch_fd; in channel_select_setup()
4491 if (channel->ch_keep_open) in channel_select_setup()
4526 channel_T *channel; in channel_select_check() local
4532 FOR_ALL_CHANNELS(channel) in channel_select_check()
4536 sock_T fd = channel->ch_part[part].ch_fd; in channel_select_check()
4540 channel_read(channel, part, "channel_select_check"); in channel_select_check()
4544 else if (fd != INVALID_FD && channel->ch_keep_open) in channel_select_check()
4547 channel_read(channel, part, "channel_select_check_keep_open"); in channel_select_check()
4551 in_part = &channel->ch_part[PART_IN]; in channel_select_check()
4557 channel_write_input(channel); in channel_select_check()
4565 if (channel->ch_job != NULL) in channel_select_check()
4567 job_T *job = channel->ch_job; in channel_select_check()
4571 ch_close_part(channel, part); in channel_select_check()
4589 channel_T *channel = first_channel; in channel_parse_messages() local
4615 while (channel != NULL) in channel_parse_messages()
4619 if (channel_can_close(channel)) in channel_parse_messages()
4621 channel->ch_to_be_closed = (1U << PART_COUNT); in channel_parse_messages()
4622 channel_close_now(channel); in channel_parse_messages()
4624 channel = first_channel; in channel_parse_messages()
4627 if (channel->ch_to_be_freed || channel->ch_killing) in channel_parse_messages()
4629 channel_free_contents(channel); in channel_parse_messages()
4630 if (channel->ch_job != NULL) in channel_parse_messages()
4631 channel->ch_job->jv_channel = NULL; in channel_parse_messages()
4634 channel_free_channel(channel); in channel_parse_messages()
4635 channel = first_channel; in channel_parse_messages()
4638 if (channel->ch_refcount == 0 && !channel_still_useful(channel)) in channel_parse_messages()
4641 channel_free(channel); in channel_parse_messages()
4642 channel = first_channel; in channel_parse_messages()
4648 if (channel->ch_part[part].ch_fd != INVALID_FD in channel_parse_messages()
4649 || channel_has_readahead(channel, part)) in channel_parse_messages()
4653 ++channel->ch_refcount; in channel_parse_messages()
4654 r = may_invoke_callback(channel, part); in channel_parse_messages()
4657 if (channel_unref(channel) || (r == OK in channel_parse_messages()
4667 channel = first_channel; in channel_parse_messages()
4676 channel = channel->ch_next; in channel_parse_messages()
4700 channel_T *channel = first_channel; in channel_any_readahead() local
4703 while (channel != NULL) in channel_any_readahead()
4705 if (channel_has_readahead(channel, part)) in channel_any_readahead()
4711 channel = channel->ch_next; in channel_any_readahead()
4725 channel_T *channel; in set_ref_in_channel() local
4728 for (channel = first_channel; !abort && channel != NULL; in set_ref_in_channel()
4729 channel = channel->ch_next) in set_ref_in_channel()
4730 if (channel_still_useful(channel)) in set_ref_in_channel()
4733 tv.vval.v_channel = channel; in set_ref_in_channel()
4743 channel_part_send(channel_T *channel) in channel_part_send() argument
4745 if (channel->CH_SOCK_FD == INVALID_FD) in channel_part_send()
4754 channel_part_read(channel_T *channel) in channel_part_read() argument
4756 if (channel->CH_SOCK_FD == INVALID_FD) in channel_part_read()
4766 channel_get_mode(channel_T *channel, ch_part_T part) in channel_get_mode() argument
4768 if (channel == NULL) in channel_get_mode()
4770 return channel->ch_part[part].ch_mode; in channel_get_mode()
4777 channel_get_timeout(channel_T *channel, ch_part_T part) in channel_get_timeout() argument
4779 return channel->ch_part[part].ch_timeout; in channel_get_timeout()
4788 channel_T *channel; in f_ch_canread() local
4794 channel = get_channel_arg(&argvars[0], FALSE, FALSE, 0); in f_ch_canread()
4795 if (channel != NULL) in f_ch_canread()
4796 rettv->vval.v_number = channel_has_readahead(channel, PART_SOCK) in f_ch_canread()
4797 || channel_has_readahead(channel, PART_OUT) in f_ch_canread()
4798 || channel_has_readahead(channel, PART_ERR); in f_ch_canread()
4807 channel_T *channel; in f_ch_close() local
4812 channel = get_channel_arg(&argvars[0], TRUE, FALSE, 0); in f_ch_close()
4813 if (channel != NULL) in f_ch_close()
4815 channel_close(channel, FALSE); in f_ch_close()
4816 channel_clear(channel); in f_ch_close()
4826 channel_T *channel; in f_ch_close_in() local
4831 channel = get_channel_arg(&argvars[0], TRUE, FALSE, 0); in f_ch_close_in()
4832 if (channel != NULL) in f_ch_close_in()
4833 channel_close_in(channel); in f_ch_close_in()
4842 channel_T *channel; in f_ch_getbufnr() local
4851 channel = get_channel_arg(&argvars[0], FALSE, FALSE, 0); in f_ch_getbufnr()
4852 if (channel != NULL) in f_ch_getbufnr()
4865 if (channel->ch_part[part].ch_bufref.br_buf != NULL) in f_ch_getbufnr()
4867 channel->ch_part[part].ch_bufref.br_buf->b_fnum; in f_ch_getbufnr()
4877 channel_T *channel; in f_ch_getjob() local
4882 channel = get_channel_arg(&argvars[0], FALSE, FALSE, 0); in f_ch_getjob()
4883 if (channel != NULL) in f_ch_getjob()
4886 rettv->vval.v_job = channel->ch_job; in f_ch_getjob()
4887 if (channel->ch_job != NULL) in f_ch_getjob()
4888 ++channel->ch_job->jv_refcount; in f_ch_getjob()
4898 channel_T *channel; in f_ch_info() local
4903 channel = get_channel_arg(&argvars[0], FALSE, FALSE, 0); in f_ch_info()
4904 if (channel != NULL && rettv_dict_alloc(rettv) != FAIL) in f_ch_info()
4905 channel_info(channel, rettv->vval.v_dict); in f_ch_info()
4915 channel_T *channel = NULL; in f_ch_log() local
4924 channel = get_channel_arg(&argvars[1], FALSE, FALSE, 0); in f_ch_log()
4926 ch_log(channel, "%s", msg); in f_ch_log()
5035 channel_T *channel; in f_ch_setoptions() local
5043 channel = get_channel_arg(&argvars[0], FALSE, FALSE, 0); in f_ch_setoptions()
5044 if (channel == NULL) in f_ch_setoptions()
5049 channel_set_options(channel, &opt); in f_ch_setoptions()
5059 channel_T *channel; in f_ch_status() local
5072 channel = get_channel_arg(&argvars[0], FALSE, FALSE, 0); in f_ch_status()
5082 rettv->vval.v_string = vim_strsave((char_u *)channel_status(channel, part)); in f_ch_status()
5092 channel_T *channel = varp->vval.v_channel; in channel_to_string_buf() local
5093 char *status = channel_status(channel, -1); in channel_to_string_buf()
5095 if (channel == NULL) in channel_to_string_buf()
5099 "channel %d %s", channel->ch_id, status); in channel_to_string_buf()