Skip to content

Commit 2932359

Browse files
committed
patch 7.4.2101
Problem: Looping over windows, buffers and tab pages is inconsistant. Solution: Use FOR_ALL_ macros everywhere. (Yegappan Lakshmanan)
1 parent 6835dc6 commit 2932359

33 files changed

Lines changed: 148 additions & 142 deletions

src/buffer.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ open_buffer(
105105
* If we can't create one for the current buffer, take another buffer
106106
*/
107107
close_buffer(NULL, curbuf, 0, FALSE);
108-
for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next)
108+
FOR_ALL_BUFFERS(curbuf)
109109
if (curbuf->b_ml.ml_mfp != NULL)
110110
break;
111111
/*
@@ -1284,7 +1284,7 @@ do_buffer(
12841284
* If deleting the last (listed) buffer, make it empty.
12851285
* The last (listed) buffer cannot be unloaded.
12861286
*/
1287-
for (bp = firstbuf; bp != NULL; bp = bp->b_next)
1287+
FOR_ALL_BUFFERS(bp)
12881288
if (bp->b_p_bl && bp != buf)
12891289
break;
12901290
if (bp == NULL && buf == curbuf)
@@ -1410,7 +1410,7 @@ do_buffer(
14101410
buf = bp;
14111411
if (buf == NULL) /* No loaded buffer, find listed one */
14121412
{
1413-
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
1413+
FOR_ALL_BUFFERS(buf)
14141414
if (buf->b_p_bl && buf != curbuf)
14151415
break;
14161416
}
@@ -2406,7 +2406,7 @@ buflist_findpat(
24062406
#ifdef FEAT_WINDOWS
24072407
win_T *wp;
24082408

2409-
for (wp = firstwin; wp != NULL; wp = wp->w_next)
2409+
FOR_ALL_WINDOWS(wp)
24102410
if (wp->w_buffer == buf)
24112411
break;
24122412
if (wp == NULL)
@@ -2508,7 +2508,7 @@ ExpandBufnames(
25082508
for (round = 1; round <= 2; ++round)
25092509
{
25102510
count = 0;
2511-
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
2511+
FOR_ALL_BUFFERS(buf)
25122512
{
25132513
if (!buf->b_p_bl) /* skip unlisted buffers */
25142514
continue;
@@ -2734,7 +2734,7 @@ wininfo_other_tab_diff(wininfo_T *wip)
27342734

27352735
if (wip->wi_opt.wo_diff)
27362736
{
2737-
for (wp = firstwin; wp != NULL; wp = wp->w_next)
2737+
FOR_ALL_WINDOWS(wp)
27382738
/* return FALSE when it's a window in the current tab page, thus
27392739
* the buffer was in diff mode here */
27402740
if (wip->wi_win == wp)
@@ -3153,7 +3153,7 @@ buflist_slash_adjust(void)
31533153
{
31543154
buf_T *bp;
31553155

3156-
for (bp = firstbuf; bp != NULL; bp = bp->b_next)
3156+
FOR_ALL_BUFFERS(bp)
31573157
{
31583158
if (bp->b_ffname != NULL)
31593159
slash_adjust(bp->b_ffname);
@@ -5083,7 +5083,7 @@ ex_buffer_all(exarg_T *eap)
50835083
#endif
50845084
{
50855085
/* Check if this buffer already has a window */
5086-
for (wp = firstwin; wp != NULL; wp = wp->w_next)
5086+
FOR_ALL_WINDOWS(wp)
50875087
if (wp->w_buffer == buf)
50885088
break;
50895089
/* If the buffer already has a window, move it */
@@ -5461,7 +5461,7 @@ write_viminfo_bufferlist(FILE *fp)
54615461
#endif
54625462

54635463
fputs(_("\n# Buffer list:\n"), fp);
5464-
for (buf = firstbuf; buf != NULL ; buf = buf->b_next)
5464+
FOR_ALL_BUFFERS(buf)
54655465
{
54665466
if (buf->b_fname == NULL
54675467
|| !buf->b_p_bl
@@ -5847,7 +5847,7 @@ buf_delete_all_signs(void)
58475847
{
58485848
buf_T *buf; /* buffer we are checking for signs */
58495849

5850-
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
5850+
FOR_ALL_BUFFERS(buf)
58515851
if (buf->b_signlist != NULL)
58525852
buf_delete_signs(buf);
58535853
}

src/diff.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ diff_buf_delete(buf_T *buf)
6565
int i;
6666
tabpage_T *tp;
6767

68-
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
68+
FOR_ALL_TABPAGES(tp)
6969
{
7070
i = diff_buf_idx_tp(buf, tp);
7171
if (i != DB_COUNT)
@@ -92,7 +92,7 @@ diff_buf_adjust(win_T *win)
9292
{
9393
/* When there is no window showing a diff for this buffer, remove
9494
* it from the diffs. */
95-
for (wp = firstwin; wp != NULL; wp = wp->w_next)
95+
FOR_ALL_WINDOWS(wp)
9696
if (wp->w_buffer == win->w_buffer && wp->w_p_diff)
9797
break;
9898
if (wp == NULL)
@@ -178,7 +178,7 @@ diff_invalidate(buf_T *buf)
178178
tabpage_T *tp;
179179
int i;
180180

181-
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
181+
FOR_ALL_TABPAGES(tp)
182182
{
183183
i = diff_buf_idx_tp(buf, tp);
184184
if (i != DB_COUNT)
@@ -204,7 +204,7 @@ diff_mark_adjust(
204204
tabpage_T *tp;
205205

206206
/* Handle all tab pages that use the current buffer in a diff. */
207-
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
207+
FOR_ALL_TABPAGES(tp)
208208
{
209209
idx = diff_buf_idx_tp(curbuf, tp);
210210
if (idx != DB_COUNT)
@@ -591,7 +591,7 @@ diff_redraw(
591591
win_T *wp;
592592
int n;
593593

594-
for (wp = firstwin; wp != NULL; wp = wp->w_next)
594+
FOR_ALL_WINDOWS(wp)
595595
if (wp->w_p_diff)
596596
{
597597
redraw_win_later(wp, SOME_VALID);
@@ -1198,7 +1198,7 @@ ex_diffoff(exarg_T *eap)
11981198
int diffwin = FALSE;
11991199
#endif
12001200

1201-
for (wp = firstwin; wp != NULL; wp = wp->w_next)
1201+
FOR_ALL_WINDOWS(wp)
12021202
{
12031203
if (eap->forceit ? wp->w_p_diff : wp == curwin)
12041204
{
@@ -1879,7 +1879,7 @@ diffopt_changed(void)
18791879

18801880
/* If "icase" or "iwhite" was added or removed, need to update the diff. */
18811881
if (diff_flags != diff_flags_new)
1882-
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
1882+
FOR_ALL_TABPAGES(tp)
18831883
tp->tp_diff_invalid = TRUE;
18841884

18851885
diff_flags = diff_flags_new;
@@ -2434,7 +2434,7 @@ diff_fold_update(diff_T *dp, int skip_idx)
24342434
int i;
24352435
win_T *wp;
24362436

2437-
for (wp = firstwin; wp != NULL; wp = wp->w_next)
2437+
FOR_ALL_WINDOWS(wp)
24382438
for (i = 0; i < DB_COUNT; ++i)
24392439
if (curtab->tp_diffbuf[i] == wp->w_buffer && i != skip_idx)
24402440
foldUpdate(wp, dp->df_lnum[i],
@@ -2450,7 +2450,7 @@ diff_mode_buf(buf_T *buf)
24502450
{
24512451
tabpage_T *tp;
24522452

2453-
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
2453+
FOR_ALL_TABPAGES(tp)
24542454
if (diff_buf_idx_tp(buf, tp) != DB_COUNT)
24552455
return TRUE;
24562456
return FALSE;

src/edit.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4239,7 +4239,7 @@ ins_compl_get_exp(pos_T *ini)
42394239

42404240
if (!compl_started)
42414241
{
4242-
for (ins_buf = firstbuf; ins_buf != NULL; ins_buf = ins_buf->b_next)
4242+
FOR_ALL_BUFFERS(ins_buf)
42434243
ins_buf->b_scanned = 0;
42444244
found_all = FALSE;
42454245
ins_buf = curbuf;

src/eval.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5253,7 +5253,7 @@ garbage_collect(int testing)
52535253
abort = abort || set_ref_in_ht(&SCRIPT_VARS(i), copyID, NULL);
52545254

52555255
/* buffer-local variables */
5256-
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
5256+
FOR_ALL_BUFFERS(buf)
52575257
abort = abort || set_ref_in_item(&buf->b_bufvar.di_tv, copyID,
52585258
NULL, NULL);
52595259

@@ -5269,7 +5269,7 @@ garbage_collect(int testing)
52695269

52705270
#ifdef FEAT_WINDOWS
52715271
/* tabpage-local variables */
5272-
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
5272+
FOR_ALL_TABPAGES(tp)
52735273
abort = abort || set_ref_in_item(&tp->tp_winvar.di_tv, copyID,
52745274
NULL, NULL);
52755275
#endif
@@ -8303,15 +8303,16 @@ find_win_by_nr(
83038303
if (nr == 0)
83048304
return curwin;
83058305

8306-
for (wp = (tp == NULL || tp == curtab) ? firstwin : tp->tp_firstwin;
8307-
wp != NULL; wp = wp->w_next)
8306+
FOR_ALL_WINDOWS_IN_TAB(tp, wp)
8307+
{
83088308
if (nr >= LOWEST_WIN_ID)
83098309
{
83108310
if (wp->w_id == nr)
83118311
return wp;
83128312
}
83138313
else if (--nr <= 0)
83148314
break;
8315+
}
83158316
if (nr >= LOWEST_WIN_ID)
83168317
return NULL;
83178318
return wp;

src/evalfunc.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1439,7 +1439,7 @@ find_buffer(typval_T *avar)
14391439
{
14401440
/* No full path name match, try a match with a URL or a "nofile"
14411441
* buffer, these don't use the full path. */
1442-
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
1442+
FOR_ALL_BUFFERS(buf)
14431443
if (buf->b_fname != NULL
14441444
&& (path_with_url(buf->b_fname)
14451445
#ifdef FEAT_QUICKFIX
@@ -1597,7 +1597,7 @@ buf_win_common(typval_T *argvars, typval_T *rettv, int get_nr)
15971597
++emsg_off;
15981598
buf = get_buf_tv(&argvars[0], TRUE);
15991599
#ifdef FEAT_WINDOWS
1600-
for (wp = firstwin; wp; wp = wp->w_next)
1600+
FOR_ALL_WINDOWS(wp)
16011601
{
16021602
++winnr;
16031603
if (wp->w_buffer == buf)
@@ -6383,7 +6383,7 @@ f_last_buffer_nr(typval_T *argvars UNUSED, typval_T *rettv)
63836383
int n = 0;
63846384
buf_T *buf;
63856385

6386-
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
6386+
FOR_ALL_BUFFERS(buf)
63876387
if (n < buf->b_fnum)
63886388
n = buf->b_fnum;
63896389

@@ -12373,7 +12373,7 @@ f_winrestcmd(typval_T *argvars UNUSED, typval_T *rettv)
1237312373
char_u buf[50];
1237412374

1237512375
ga_init2(&ga, (int)sizeof(char), 70);
12376-
for (wp = firstwin; wp != NULL; wp = wp->w_next)
12376+
FOR_ALL_WINDOWS(wp)
1237712377
{
1237812378
sprintf((char *)buf, "%dresize %d|", winnr, wp->w_height);
1237912379
ga_concat(&ga, buf);

src/ex_cmds.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1497,7 +1497,7 @@ do_shell(
14971497
&& !autocmd_busy
14981498
#endif
14991499
&& msg_silent == 0)
1500-
for (buf = firstbuf; buf; buf = buf->b_next)
1500+
FOR_ALL_BUFFERS(buf)
15011501
if (bufIsChanged(buf))
15021502
{
15031503
#ifdef FEAT_GUI_MSWIN
@@ -2345,7 +2345,7 @@ read_viminfo_up_to_marks(
23452345
#endif
23462346

23472347
/* Change file names to buffer numbers for fmarks. */
2348-
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
2348+
FOR_ALL_BUFFERS(buf)
23492349
fmarks_check_names(buf);
23502350

23512351
return eof;
@@ -3413,7 +3413,7 @@ do_wqall(exarg_T *eap)
34133413
if (eap->cmdidx == CMD_xall || eap->cmdidx == CMD_wqall)
34143414
exiting = TRUE;
34153415

3416-
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
3416+
FOR_ALL_BUFFERS(buf)
34173417
{
34183418
if (bufIsChanged(buf))
34193419
{
@@ -6115,7 +6115,7 @@ prepare_tagpreview(
61156115
*/
61166116
if (!curwin->w_p_pvw)
61176117
{
6118-
for (wp = firstwin; wp != NULL; wp = wp->w_next)
6118+
FOR_ALL_WINDOWS(wp)
61196119
if (wp->w_p_pvw)
61206120
break;
61216121
if (wp != NULL)
@@ -6272,7 +6272,7 @@ ex_help(exarg_T *eap)
62726272
if (cmdmod.tab != 0)
62736273
wp = NULL;
62746274
else
6275-
for (wp = firstwin; wp != NULL; wp = wp->w_next)
6275+
FOR_ALL_WINDOWS(wp)
62766276
if (wp->w_buffer != NULL && wp->w_buffer->b_help)
62776277
break;
62786278
if (wp != NULL && wp->w_buffer->b_nwindows > 0)
@@ -7745,7 +7745,7 @@ ex_sign(exarg_T *eap)
77457745
if (idx == SIGNCMD_UNPLACE && *arg == NUL)
77467746
{
77477747
/* ":sign unplace {id}": remove placed sign by number */
7748-
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
7748+
FOR_ALL_BUFFERS(buf)
77497749
if ((lnum = buf_delsign(buf, id)) != 0)
77507750
update_debug_sign(buf, lnum);
77517751
return;

src/ex_cmds2.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1721,7 +1721,7 @@ autowrite_all(void)
17211721

17221722
if (!(p_aw || p_awa) || !p_write)
17231723
return;
1724-
for (buf = firstbuf; buf; buf = buf->b_next)
1724+
FOR_ALL_BUFFERS(buf)
17251725
if (bufIsChanged(buf) && !buf->b_p_ro)
17261726
{
17271727
#ifdef FEAT_AUTOCMD
@@ -1764,7 +1764,7 @@ check_changed(buf_T *buf, int flags)
17641764
int count = 0;
17651765

17661766
if (flags & CCGD_ALLBUF)
1767-
for (buf2 = firstbuf; buf2 != NULL; buf2 = buf2->b_next)
1767+
FOR_ALL_BUFFERS(buf2)
17681768
if (bufIsChanged(buf2)
17691769
&& (buf2->b_ffname != NULL
17701770
# ifdef FEAT_BROWSE
@@ -1868,7 +1868,7 @@ dialog_changed(
18681868
* Skip readonly buffers, these need to be confirmed
18691869
* individually.
18701870
*/
1871-
for (buf2 = firstbuf; buf2 != NULL; buf2 = buf2->b_next)
1871+
FOR_ALL_BUFFERS(buf2)
18721872
{
18731873
if (bufIsChanged(buf2)
18741874
&& (buf2->b_ffname != NULL
@@ -1904,7 +1904,7 @@ dialog_changed(
19041904
/*
19051905
* mark all buffers as unchanged
19061906
*/
1907-
for (buf2 = firstbuf; buf2 != NULL; buf2 = buf2->b_next)
1907+
FOR_ALL_BUFFERS(buf2)
19081908
unchanged(buf2, TRUE);
19091909
}
19101910
}
@@ -1964,7 +1964,7 @@ check_changed_any(
19641964
win_T *wp;
19651965
#endif
19661966

1967-
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
1967+
FOR_ALL_BUFFERS(buf)
19681968
++bufcount;
19691969

19701970
if (bufcount == 0)
@@ -1983,13 +1983,13 @@ check_changed_any(
19831983
add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum);
19841984

19851985
/* buf in other tab */
1986-
for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
1986+
FOR_ALL_TABPAGES(tp)
19871987
if (tp != curtab)
19881988
for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next)
19891989
add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum);
19901990
#endif
19911991
/* any other buf */
1992-
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
1992+
FOR_ALL_BUFFERS(buf)
19931993
add_bufnum(bufnrs, &bufnum, buf->b_fnum);
19941994

19951995
for (i = 0; i < bufnum; ++i)
@@ -2924,7 +2924,7 @@ ex_listdo(exarg_T *eap)
29242924
if (next_fnum < 0 || next_fnum > eap->line2)
29252925
break;
29262926
/* Check if the buffer still exists. */
2927-
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
2927+
FOR_ALL_BUFFERS(buf)
29282928
if (buf->b_fnum == next_fnum)
29292929
break;
29302930
if (buf == NULL)

0 commit comments

Comments
 (0)