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 #5339)
diff --git a/src/channel.c b/src/channel.c
index 4db40c9..1dfb28f 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -61,6 +61,12 @@
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 @@
// 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 @@
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_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_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_T *channel;
- for (channel = first_channel; channel != NULL; channel = channel->ch_next)
+ FOR_ALL_CHANNELS(channel)
channel_write_input(channel);
}
@@ -1625,7 +1630,7 @@
// 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 @@
// 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_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 @@
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 @@
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 @@
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_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 @@
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 @@
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 @@
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 @@
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_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 @@
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 @@
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_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 @@
{
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_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;