Mercurial > vim
view src/proto/channel.pro @ 33570:28c2f681ec33 v9.0.2030
patch 9.0.2030: no max callback recursion limit
Commit: https://github.com/vim/vim/commit/47510f3d6598a1218958c03ed11337a43b73f48d
Author: Christian Brabandt <cb@256bit.org>
Date: Sun Oct 15 09:56:16 2023 +0200
patch 9.0.2030: no max callback recursion limit
Problem: no max callback recursion limit
Solution: bail out, if max call recursion for callback functions
has been reached.
This checks the 'maxfuncdepth' setting and throws E169 when a callback
function recursively calls itself.
closes: #13337
closes: #13339
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 15 Oct 2023 10:00:06 +0200 |
parents | fa309d9af73c |
children |
line wrap: on
line source
/* channel.c */ channel_T *add_channel(void); int has_any_channel(void); int channel_still_useful(channel_T *channel); int channel_can_close(channel_T *channel); int channel_unref(channel_T *channel); int free_unused_channels_contents(int copyID, int mask); void free_unused_channels(int copyID, int mask); void channel_gui_register_all(void); channel_T *channel_open(const char *hostname, int port, int waittime, void (*nb_close_cb)(void)); void ch_close_part(channel_T *channel, ch_part_T part); 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, jobopt_T *options); void channel_write_in(channel_T *channel); void channel_buffer_free(buf_T *buf); void channel_write_any_lines(void); void channel_write_new_lines(buf_T *buf); readq_T *channel_peek(channel_T *channel, ch_part_T part); char_u *channel_first_nl(readq_T *node); char_u *channel_get(channel_T *channel, ch_part_T part, int *outlen); void channel_consume(channel_T *channel, ch_part_T part, int len); int channel_collapse(channel_T *channel, ch_part_T part, int want_nl); int channel_can_write_to(channel_T *channel); int channel_is_open(channel_T *channel); void channel_close(channel_T *channel, int invoke_close_cb); void channel_clear(channel_T *channel); void channel_free_all(void); int channel_in_blocking_wait(void); channel_T *get_channel_arg(typval_T *tv, int check_open, int reading, ch_part_T part); void channel_handle_events(int only_keep_open); int channel_any_keep_open(void); void channel_set_nonblock(channel_T *channel, ch_part_T part); int channel_send(channel_T *channel, ch_part_T part, char_u *buf_arg, int len_arg, char *fun); int channel_poll_setup(int nfd_in, void *fds_in, int *towait); int channel_poll_check(int ret_in, void *fds_in); int channel_select_setup(int maxfd_in, void *rfds_in, void *wfds_in, struct timeval *tv, struct timeval **tvp); int channel_select_check(int ret_in, void *rfds_in, void *wfds_in); int channel_parse_messages(void); int channel_any_readahead(void); int set_ref_in_channel(int copyID); void f_ch_canread(typval_T *argvars, typval_T *rettv); void f_ch_close(typval_T *argvars, typval_T *rettv); void f_ch_close_in(typval_T *argvars, typval_T *rettv); void f_ch_getbufnr(typval_T *argvars, typval_T *rettv); void f_ch_getjob(typval_T *argvars, typval_T *rettv); void f_ch_info(typval_T *argvars, typval_T *rettv); void f_ch_open(typval_T *argvars, typval_T *rettv); void f_ch_read(typval_T *argvars, typval_T *rettv); void f_ch_readblob(typval_T *argvars, typval_T *rettv); void f_ch_readraw(typval_T *argvars, typval_T *rettv); void f_ch_evalexpr(typval_T *argvars, typval_T *rettv); void f_ch_sendexpr(typval_T *argvars, typval_T *rettv); void f_ch_evalraw(typval_T *argvars, typval_T *rettv); void f_ch_sendraw(typval_T *argvars, typval_T *rettv); void f_ch_setoptions(typval_T *argvars, typval_T *rettv); void f_ch_status(typval_T *argvars, typval_T *rettv); char_u *channel_to_string_buf(typval_T *varp, char_u *buf); /* vim: set ft=c : */