diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-04-02 18:50:46 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-04-02 18:50:46 +0200 |
commit | aeea72151c31d686bcbb7b06d895006d7363585c (patch) | |
tree | 500d487503a1a82cecc8f2a3e9bf89b50638fe5a /src/channel.c | |
parent | f10806b25090879fdc1a86cc0da2f4f34fd21921 (diff) | |
download | vim-git-aeea72151c31d686bcbb7b06d895006d7363585c.tar.gz |
patch 8.2.0500: using the same loop in many placesv8.2.0500
Problem: Using the same loop in many places.
Solution: Define more FOR_ALL macros. (Yegappan Lakshmanan, closes #5339)
Diffstat (limited to 'src/channel.c')
-rw-r--r-- | src/channel.c | 51 |
1 files changed, 28 insertions, 23 deletions
diff --git a/src/channel.c b/src/channel.c index 4db40c9dd..1dfb28f85 100644 --- a/src/channel.c +++ b/src/channel.c @@ -61,6 +61,12 @@ static ch_part_T channel_part_send(channel_T *channel); static ch_part_T channel_part_read(channel_T *channel); static void free_job_options(jobopt_T *opt); +#define FOR_ALL_CHANNELS(ch) \ + for ((ch) = first_channel; (ch) != NULL; (ch) = (ch)->ch_next) + +#define FOR_ALL_JOBS(job) \ + for ((job) = first_job; (job) != NULL; (job) = (job)->jv_next) + // Whether a redraw is needed for appending a line to a buffer. static int channel_need_redraw = FALSE; @@ -476,7 +482,7 @@ free_unused_channels_contents(int copyID, int mask) // point. ++safe_to_invoke_callback; - for (ch = first_channel; ch != NULL; ch = ch->ch_next) + FOR_ALL_CHANNELS(ch) if (!channel_still_useful(ch) && (ch->ch_copyID & mask) != (copyID & mask)) { @@ -520,8 +526,7 @@ channel_fd2channel(sock_T fd, ch_part_T *partp) ch_part_T part; if (fd != INVALID_FD) - for (channel = first_channel; channel != NULL; - channel = channel->ch_next) + FOR_ALL_CHANNELS(channel) { for (part = PART_SOCK; part < PART_IN; ++part) if (channel->ch_part[part].ch_fd == fd) @@ -662,7 +667,7 @@ channel_gui_register_all(void) { channel_T *channel; - for (channel = first_channel; channel != NULL; channel = channel->ch_next) + FOR_ALL_CHANNELS(channel) channel_gui_register(channel); } @@ -1569,7 +1574,7 @@ channel_buffer_free(buf_T *buf) channel_T *channel; ch_part_T part; - for (channel = first_channel; channel != NULL; channel = channel->ch_next) + FOR_ALL_CHANNELS(channel) for (part = PART_SOCK; part < PART_COUNT; ++part) { chanpart_T *ch_part = &channel->ch_part[part]; @@ -1610,7 +1615,7 @@ channel_write_any_lines(void) { channel_T *channel; - for (channel = first_channel; channel != NULL; channel = channel->ch_next) + FOR_ALL_CHANNELS(channel) channel_write_input(channel); } @@ -1625,7 +1630,7 @@ channel_write_new_lines(buf_T *buf) // There could be more than one channel for the buffer, loop over all of // them. - for (channel = first_channel; channel != NULL; channel = channel->ch_next) + FOR_ALL_CHANNELS(channel) { chanpart_T *in_part = &channel->ch_part[PART_IN]; linenr_T lnum; @@ -2604,7 +2609,7 @@ append_to_buffer(buf_T *buffer, char_u *msg, channel_T *channel, ch_part_T part) // Find channels reading from this buffer and adjust their // next-to-read line number. buffer->b_write_to_channel = TRUE; - for (ch = first_channel; ch != NULL; ch = ch->ch_next) + FOR_ALL_CHANNELS(ch) { chanpart_T *in_part = &ch->ch_part[PART_IN]; @@ -3180,7 +3185,7 @@ channel_free_all(void) channel_T *channel; ch_log(NULL, "channel_free_all()"); - for (channel = first_channel; channel != NULL; channel = channel->ch_next) + FOR_ALL_CHANNELS(channel) channel_clear(channel); } #endif @@ -3202,7 +3207,7 @@ channel_fill_wfds(int maxfd_arg, fd_set *wfds) int maxfd = maxfd_arg; channel_T *ch; - for (ch = first_channel; ch != NULL; ch = ch->ch_next) + FOR_ALL_CHANNELS(ch) { chanpart_T *in_part = &ch->ch_part[PART_IN]; @@ -3227,7 +3232,7 @@ channel_fill_poll_write(int nfd_in, struct pollfd *fds) int nfd = nfd_in; channel_T *ch; - for (ch = first_channel; ch != NULL; ch = ch->ch_next) + FOR_ALL_CHANNELS(ch) { chanpart_T *in_part = &ch->ch_part[PART_IN]; @@ -3821,7 +3826,7 @@ channel_handle_events(int only_keep_open) ch_part_T part; sock_T fd; - for (channel = first_channel; channel != NULL; channel = channel->ch_next) + FOR_ALL_CHANNELS(channel) { if (only_keep_open && !channel->ch_keep_open) continue; @@ -3854,7 +3859,7 @@ channel_any_keep_open() { channel_T *channel; - for (channel = first_channel; channel != NULL; channel = channel->ch_next) + FOR_ALL_CHANNELS(channel) if (channel->ch_keep_open) return TRUE; return FALSE; @@ -4234,7 +4239,7 @@ channel_poll_setup(int nfd_in, void *fds_in, int *towait) struct pollfd *fds = fds_in; ch_part_T part; - for (channel = first_channel; channel != NULL; channel = channel->ch_next) + FOR_ALL_CHANNELS(channel) { for (part = PART_SOCK; part < PART_IN; ++part) { @@ -4281,7 +4286,7 @@ channel_poll_check(int ret_in, void *fds_in) int idx; chanpart_T *in_part; - for (channel = first_channel; channel != NULL; channel = channel->ch_next) + FOR_ALL_CHANNELS(channel) { for (part = PART_SOCK; part < PART_IN; ++part) { @@ -4332,7 +4337,7 @@ channel_select_setup( fd_set *wfds = wfds_in; ch_part_T part; - for (channel = first_channel; channel != NULL; channel = channel->ch_next) + FOR_ALL_CHANNELS(channel) { for (part = PART_SOCK; part < PART_IN; ++part) { @@ -4381,7 +4386,7 @@ channel_select_check(int ret_in, void *rfds_in, void *wfds_in) ch_part_T part; chanpart_T *in_part; - for (channel = first_channel; channel != NULL; channel = channel->ch_next) + FOR_ALL_CHANNELS(channel) { for (part = PART_SOCK; part < PART_IN; ++part) { @@ -5471,7 +5476,7 @@ job_any_running() { job_T *job; - for (job = first_job; job != NULL; job = job->jv_next) + FOR_ALL_JOBS(job) if (job_still_useful(job)) { ch_log(NULL, "GUI not forking because a job is running"); @@ -5570,7 +5575,7 @@ win32_build_cmd(list_T *l, garray_T *gap) char_u *s; range_list_materialize(l); - for (li = l->lv_first; li != NULL; li = li->li_next) + FOR_ALL_LIST_ITEMS(l, li) { s = tv_get_string_chk(&li->li_tv); if (s == NULL) @@ -5695,7 +5700,7 @@ free_unused_jobs_contents(int copyID, int mask) int did_free = FALSE; job_T *job; - for (job = first_job; job != NULL; job = job->jv_next) + FOR_ALL_JOBS(job) if ((job->jv_copyID & mask) != (copyID & mask) && !job_still_useful(job)) { @@ -5781,7 +5786,7 @@ job_stop_on_exit(void) { job_T *job; - for (job = first_job; job != NULL; job = job->jv_next) + FOR_ALL_JOBS(job) if (job->jv_status == JOB_STARTED && job->jv_stoponexit != NULL) mch_signal_job(job, job->jv_stoponexit); } @@ -5795,7 +5800,7 @@ has_pending_job(void) { job_T *job; - for (job = first_job; job != NULL; job = job->jv_next) + FOR_ALL_JOBS(job) // Only should check if the channel has been closed, if the channel is // open the job won't exit. if ((job->jv_status == JOB_STARTED && !job_channel_still_useful(job)) @@ -6589,7 +6594,7 @@ job_info_all(list_T *l) job_T *job; typval_T tv; - for (job = first_job; job != NULL; job = job->jv_next) + FOR_ALL_JOBS(job) { tv.v_type = VAR_JOB; tv.vval.v_job = job; |