diff src/channel.c @ 19888:435726a03481 v8.2.0500

patch 8.2.0500: using the same loop in many places Commit: https://github.com/vim/vim/commit/aeea72151c31d686bcbb7b06d895006d7363585c Author: Bram Moolenaar <Bram@vim.org> Date: Thu Apr 2 18:50:46 2020 +0200 patch 8.2.0500: using the same loop in many places Problem: Using the same loop in many places. Solution: Define more FOR_ALL macros. (Yegappan Lakshmanan, closes https://github.com/vim/vim/issues/5339)
author Bram Moolenaar <Bram@vim.org>
date Thu, 02 Apr 2020 19:00:05 +0200
parents 49e38e5472e6
children e373843e2980
line wrap: on
line diff
--- a/src/channel.c
+++ b/src/channel.c
@@ -61,6 +61,12 @@ static ch_part_T channel_part_send(chann
 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
     // 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 
     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 *
 	// 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 
     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, stru
     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
     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
     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 *r
     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, in
     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;