From 8cf45786b11c4c96444962227a960a3683d9f2b1 Mon Sep 17 00:00:00 2001 From: Wayne Rowcliffe Date: Sat, 2 Aug 2014 20:19:33 -0500 Subject: [PATCH 1/2] Add FOR_ALL_BUFFERS helper --- src/nvim/buffer.c | 41 ++++++++++++++++++++++++++--------------- src/nvim/edit.c | 3 ++- src/nvim/eval.c | 12 ++++++++---- src/nvim/ex_cmds.c | 17 ++++++++++------- src/nvim/ex_cmds2.c | 28 +++++++++++++++++----------- src/nvim/ex_docmd.c | 2 +- src/nvim/fileio.c | 4 ++-- src/nvim/globals.h | 3 +++ src/nvim/main.c | 3 ++- src/nvim/mark.c | 5 +++-- src/nvim/memfile.c | 8 +++++--- src/nvim/memline.c | 17 +++++++++++------ src/nvim/misc1.c | 2 +- src/nvim/option.c | 8 ++++---- src/nvim/spell.c | 3 ++- src/nvim/term.c | 2 +- src/nvim/window.c | 3 ++- 17 files changed, 100 insertions(+), 61 deletions(-) diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c index a1efc98516..244fc2d3b2 100644 --- a/src/nvim/buffer.c +++ b/src/nvim/buffer.c @@ -115,9 +115,11 @@ open_buffer ( * If we can't create one for the current buffer, take another buffer */ close_buffer(NULL, curbuf, 0, FALSE); - for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next) + FOR_ALL_BUFFERS(curbuf) { if (curbuf->b_ml.ml_mfp != NULL) break; + } + /* * if there is no memfile at all, exit * This is OK, since there are no changes to lose. @@ -262,9 +264,11 @@ int buf_valid(buf_T *buf) { buf_T *bp; - for (bp = firstbuf; bp != NULL; bp = bp->b_next) - if (bp == buf) + FOR_ALL_BUFFERS(bp) { + if (bp == buf) { return TRUE; + } + } return FALSE; } @@ -946,9 +950,11 @@ do_buffer ( * If deleting the last (listed) buffer, make it empty. * The last (listed) buffer cannot be unloaded. */ - for (bp = firstbuf; bp != NULL; bp = bp->b_next) - if (bp->b_p_bl && bp != buf) + FOR_ALL_BUFFERS(bp) { + if (bp->b_p_bl && bp != buf) { break; + } + } if (bp == NULL && buf == curbuf) return empty_curbuf(TRUE, forceit, action); @@ -1047,9 +1053,11 @@ do_buffer ( if (buf == NULL) /* No loaded buffer, use unloaded one */ buf = bp; if (buf == NULL) { /* No loaded buffer, find listed one */ - for (buf = firstbuf; buf != NULL; buf = buf->b_next) - if (buf->b_p_bl && buf != curbuf) + FOR_ALL_BUFFERS(buf) { + if (buf->b_p_bl && buf != curbuf) { break; + } + } } if (buf == NULL) { /* Still no buffer, just take one */ if (curbuf->b_next != NULL) @@ -1671,7 +1679,7 @@ static buf_T *buflist_findname_file_id(char_u *ffname, FileID *file_id, { buf_T *buf; - for (buf = firstbuf; buf != NULL; buf = buf->b_next) { + FOR_ALL_BUFFERS(buf) { if ((buf->b_flags & BF_DUMMY) == 0 && !otherfile_buf(buf, ffname, file_id, file_id_valid)) { return buf; @@ -1745,7 +1753,7 @@ buflist_findpat ( return -1; } - for (buf = firstbuf; buf != NULL; buf = buf->b_next) + FOR_ALL_BUFFERS(buf) { if (buf->b_p_bl == find_listed && (!diffmode || diff_mode_buf(buf)) && buflist_match(prog, buf) != NULL) { @@ -1766,6 +1774,7 @@ buflist_findpat ( } match = buf->b_fnum; /* remember first match */ } + } vim_regfree(prog); if (match >= 0) /* found one match */ @@ -1836,7 +1845,7 @@ int ExpandBufnames(char_u *pat, int *num_file, char_u ***file, int options) */ for (round = 1; round <= 2; ++round) { count = 0; - for (buf = firstbuf; buf != NULL; buf = buf->b_next) { + FOR_ALL_BUFFERS(buf) { if (!buf->b_p_bl) /* skip unlisted buffers */ continue; p = buflist_match(prog, buf); @@ -1924,9 +1933,11 @@ buf_T *buflist_findnr(int nr) if (nr == 0) nr = curwin->w_alt_fnum; - for (buf = firstbuf; buf != NULL; buf = buf->b_next) - if (buf->b_fnum == nr) + FOR_ALL_BUFFERS(buf) { + if (buf->b_fnum == nr) { return buf; + } + } return NULL; } @@ -2345,7 +2356,7 @@ void buflist_slash_adjust(void) { buf_T *bp; - for (bp = firstbuf; bp != NULL; bp = bp->b_next) { + FOR_ALL_BUFFERS(bp) { if (bp->b_ffname != NULL) slash_adjust(bp->b_ffname); if (bp->b_sfname != NULL) @@ -4212,7 +4223,7 @@ void write_viminfo_bufferlist(FILE *fp) } fputs(_("\n# Buffer list:\n"), fp); - for (buf = firstbuf; buf != NULL; buf = buf->b_next) { + FOR_ALL_BUFFERS(buf) { if (buf->b_fname == NULL || !buf->b_p_bl || bt_quickfix(buf) @@ -4489,7 +4500,7 @@ void buf_delete_all_signs(void) { buf_T *buf; /* buffer we are checking for signs */ - for (buf = firstbuf; buf != NULL; buf = buf->b_next) { + FOR_ALL_BUFFERS(buf) { if (buf->b_signlist != NULL) { buf_delete_signs(buf); } diff --git a/src/nvim/edit.c b/src/nvim/edit.c index 3dddaea39d..e241bf5b9c 100644 --- a/src/nvim/edit.c +++ b/src/nvim/edit.c @@ -3434,8 +3434,9 @@ static int ins_compl_get_exp(pos_T *ini) int set_match_pos; if (!compl_started) { - for (ins_buf = firstbuf; ins_buf != NULL; ins_buf = ins_buf->b_next) + FOR_ALL_BUFFERS(ins_buf) { ins_buf->b_scanned = 0; + } found_all = FALSE; ins_buf = curbuf; e_cpt = (compl_cont_status & CONT_LOCAL) diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 9ccf00a3fe..382b43826d 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -5434,8 +5434,9 @@ int garbage_collect(void) set_ref_in_ht(&SCRIPT_VARS(i), copyID); /* buffer-local variables */ - for (buf = firstbuf; buf != NULL; buf = buf->b_next) + FOR_ALL_BUFFERS(buf) { set_ref_in_item(&buf->b_bufvar.di_tv, copyID); + } /* window-local variables */ FOR_ALL_TAB_WINDOWS(tp, wp) @@ -7207,13 +7208,14 @@ static buf_T *find_buffer(typval_T *avar) if (buf == NULL) { /* No full path name match, try a match with a URL or a "nofile" * buffer, these don't use the full path. */ - for (buf = firstbuf; buf != NULL; buf = buf->b_next) + FOR_ALL_BUFFERS(buf) { if (buf->b_fname != NULL && (path_with_url(buf->b_fname) || bt_nofile(buf) ) && STRCMP(buf->b_fname, avar->vval.v_string) == 0) break; + } } } return buf; @@ -10617,9 +10619,11 @@ static void f_last_buffer_nr(typval_T *argvars, typval_T *rettv) int n = 0; buf_T *buf; - for (buf = firstbuf; buf != NULL; buf = buf->b_next) - if (n < buf->b_fnum) + FOR_ALL_BUFFERS(buf) { + if (n < buf->b_fnum) { n = buf->b_fnum; + } + } rettv->vval.v_number = n; } diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c index c516b24236..ff265b25f5 100644 --- a/src/nvim/ex_cmds.c +++ b/src/nvim/ex_cmds.c @@ -1239,11 +1239,12 @@ do_shell ( if (p_warn && !autocmd_busy && msg_silent == 0) - for (buf = firstbuf; buf; buf = buf->b_next) + FOR_ALL_BUFFERS(buf) { if (bufIsChanged(buf)) { MSG_PUTS(_("[No write since last change]\n")); break; } + } /* This windgoto is required for when the '\n' resulted in a "delete line * 1" command to the terminal. */ @@ -1810,8 +1811,9 @@ static int read_viminfo_up_to_marks(vir_T *virp, int forceit, int writing) finish_viminfo_history(); /* Change file names to buffer numbers for fmarks. */ - for (buf = firstbuf; buf != NULL; buf = buf->b_next) + FOR_ALL_BUFFERS(buf) { fmarks_check_names(buf); + } return eof; } @@ -2363,7 +2365,7 @@ void do_wqall(exarg_T *eap) if (eap->cmdidx == CMD_xall || eap->cmdidx == CMD_wqall) exiting = TRUE; - for (buf = firstbuf; buf != NULL; buf = buf->b_next) { + FOR_ALL_BUFFERS(buf) { if (bufIsChanged(buf)) { /* * Check if there is a reason the buffer cannot be written: @@ -5900,10 +5902,11 @@ void ex_sign(exarg_T *eap) if (idx == SIGNCMD_UNPLACE && *arg == NUL) { /* ":sign unplace {id}": remove placed sign by number */ - for (buf = firstbuf; buf != NULL; buf = buf->b_next) - if ((lnum = buf_delsign(buf, id)) != 0) - update_debug_sign(buf, lnum); - return; + FOR_ALL_BUFFERS(buf) { + if ((lnum = buf_delsign(buf, id)) != 0) + update_debug_sign(buf, lnum); + return; + } } } } diff --git a/src/nvim/ex_cmds2.c b/src/nvim/ex_cmds2.c index afbb3b40f1..7480378e84 100644 --- a/src/nvim/ex_cmds2.c +++ b/src/nvim/ex_cmds2.c @@ -1048,13 +1048,14 @@ void autowrite_all(void) if (!(p_aw || p_awa) || !p_write) return; - for (buf = firstbuf; buf; buf = buf->b_next) + FOR_ALL_BUFFERS(buf) { if (bufIsChanged(buf) && !buf->b_p_ro) { (void)buf_write_all(buf, FALSE); /* an autocommand may have deleted the buffer */ if (!buf_valid(buf)) buf = firstbuf; } + } } /* @@ -1074,11 +1075,11 @@ int check_changed(buf_T *buf, int flags) int count = 0; if (flags & CCGD_ALLBUF) - for (buf2 = firstbuf; buf2 != NULL; buf2 = buf2->b_next) - if (bufIsChanged(buf2) - && (buf2->b_ffname != NULL - )) + FOR_ALL_BUFFERS(buf2) { + if (bufIsChanged(buf2) && (buf2->b_ffname != NULL)) { ++count; + } + } if (!buf_valid(buf)) /* Autocommand deleted buffer, oops! It's not changed now. */ return FALSE; @@ -1139,7 +1140,7 @@ dialog_changed ( * Skip readonly buffers, these need to be confirmed * individually. */ - for (buf2 = firstbuf; buf2 != NULL; buf2 = buf2->b_next) { + FOR_ALL_BUFFERS(buf2) { if (bufIsChanged(buf2) && (buf2->b_ffname != NULL ) @@ -1157,8 +1158,9 @@ dialog_changed ( /* * mark all buffers as unchanged */ - for (buf2 = firstbuf; buf2 != NULL; buf2 = buf2->b_next) + FOR_ALL_BUFFERS(buf2) { unchanged(buf2, TRUE); + } } } @@ -1209,8 +1211,9 @@ check_changed_any ( tabpage_T *tp; win_T *wp; - for (buf = firstbuf; buf != NULL; buf = buf->b_next) + FOR_ALL_BUFFERS(buf) { ++bufcount; + } if (bufcount == 0) return FALSE; @@ -1230,8 +1233,9 @@ check_changed_any ( for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next) add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum); /* any other buf */ - for (buf = firstbuf; buf != NULL; buf = buf->b_next) + FOR_ALL_BUFFERS(buf) { add_bufnum(bufnrs, &bufnum, buf->b_fnum); + } for (i = 0; i < bufnum; ++i) { buf = buflist_findnr(bufnrs[i]); @@ -1898,9 +1902,11 @@ void ex_listdo(exarg_T *eap) if (next_fnum < 0) break; /* Check if the buffer still exists. */ - for (buf = firstbuf; buf != NULL; buf = buf->b_next) - if (buf->b_fnum == next_fnum) + FOR_ALL_BUFFERS(buf) { + if (buf->b_fnum == next_fnum) { break; + } + } if (buf == NULL) break; diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c index 3eb9d1277e..fc56656681 100644 --- a/src/nvim/ex_docmd.c +++ b/src/nvim/ex_docmd.c @@ -7943,7 +7943,7 @@ makeopens ( return FAIL; /* Now put the other buffers into the buffer list */ - for (buf = firstbuf; buf != NULL; buf = buf->b_next) { + FOR_ALL_BUFFERS(buf) { if (!(only_save_windows && buf->b_nwindows == 0) && !(buf->b_help && !(ssop_flags & SSOP_HELP)) && buf->b_fname != NULL diff --git a/src/nvim/fileio.c b/src/nvim/fileio.c index fad8bd9581..932af336b8 100644 --- a/src/nvim/fileio.c +++ b/src/nvim/fileio.c @@ -4363,7 +4363,7 @@ void shorten_fnames(int force) char_u *p; os_dirname(dirname, MAXPATHL); - for (buf = firstbuf; buf != NULL; buf = buf->b_next) { + FOR_ALL_BUFFERS(buf) { if (buf->b_fname != NULL && !bt_nofile(buf) && !path_with_url(buf->b_fname) @@ -6134,7 +6134,7 @@ void ex_doautoall(exarg_T *eap) * gives problems when the autocommands make changes to the list of * buffers or windows... */ - for (buf = firstbuf; buf != NULL; buf = buf->b_next) { + FOR_ALL_BUFFERS(buf) { if (buf->b_ml.ml_mfp != NULL) { /* find a window for this buffer and save some values */ aucmd_prepbuf(&aco, buf); diff --git a/src/nvim/globals.h b/src/nvim/globals.h index c0122ae189..67c308dc51 100644 --- a/src/nvim/globals.h +++ b/src/nvim/globals.h @@ -556,6 +556,9 @@ EXTERN buf_T *firstbuf INIT(= NULL); /* first buffer */ EXTERN buf_T *lastbuf INIT(= NULL); /* last buffer */ EXTERN buf_T *curbuf INIT(= NULL); /* currently active buffer */ +// Iterates over all buffers in the buffer list. +# define FOR_ALL_BUFFERS(buf) for (buf = firstbuf; buf != NULL; buf = buf->b_next) + /* Flag that is set when switching off 'swapfile'. It means that all blocks * are to be loaded into memory. Shouldn't be global... */ EXTERN int mf_dont_release INIT(= FALSE); /* don't release blocks */ diff --git a/src/nvim/main.c b/src/nvim/main.c index 6b8c2f4d4d..c9fbfe3a39 100644 --- a/src/nvim/main.c +++ b/src/nvim/main.c @@ -785,13 +785,14 @@ void getout(int exitval) } /* Trigger BufUnload for buffers that are loaded */ - for (buf = firstbuf; buf != NULL; buf = buf->b_next) + FOR_ALL_BUFFERS(buf) { if (buf->b_ml.ml_mfp != NULL) { apply_autocmds(EVENT_BUFUNLOAD, buf->b_fname, buf->b_fname, FALSE, buf); if (!buf_valid(buf)) /* autocmd may delete the buffer */ break; } + } apply_autocmds(EVENT_VIMLEAVEPRE, NULL, NULL, FALSE, curbuf); } diff --git a/src/nvim/mark.c b/src/nvim/mark.c index 90abbb6fbb..057c524e11 100644 --- a/src/nvim/mark.c +++ b/src/nvim/mark.c @@ -1351,7 +1351,7 @@ int write_viminfo_marks(FILE *fp_out) fputs(_("\n# History of marks within files (newest to oldest):\n"), fp_out); count = 0; - for (buf = firstbuf; buf != NULL; buf = buf->b_next) { + FOR_ALL_BUFFERS(buf) { /* * Only write something if buffer has been loaded and at least one * mark is set. @@ -1467,12 +1467,13 @@ void copy_viminfo_marks(vir_T *virp, FILE *fp_out, int count, int eof, int flags } } else { /* fp_out != NULL */ /* This is slow if there are many buffers!! */ - for (buf = firstbuf; buf != NULL; buf = buf->b_next) + FOR_ALL_BUFFERS(buf) { if (buf->b_ffname != NULL) { home_replace(NULL, buf->b_ffname, name_buf, LSIZE, TRUE); if (fnamecmp(str, name_buf) == 0) break; } + } /* * copy marks if the buffer has not been loaded diff --git a/src/nvim/memfile.c b/src/nvim/memfile.c index 6e8d8f9972..8acf25f484 100644 --- a/src/nvim/memfile.c +++ b/src/nvim/memfile.c @@ -632,9 +632,11 @@ static bhdr_T *mf_release(memfile_T *mfp, int page_count) */ if (mfp->mf_fd < 0 && need_release && p_uc) { /* find for which buffer this memfile is */ - for (buf = firstbuf; buf != NULL; buf = buf->b_next) - if (buf->b_ml.ml_mfp == mfp) + FOR_ALL_BUFFERS(buf) { + if (buf->b_ml.ml_mfp == mfp) { break; + } + } if (buf != NULL && buf->b_may_swap) ml_open_file(buf); } @@ -691,7 +693,7 @@ int mf_release_all(void) bhdr_T *hp; int retval = FALSE; - for (buf = firstbuf; buf != NULL; buf = buf->b_next) { + FOR_ALL_BUFFERS(buf) { mfp = buf->b_ml.ml_mfp; if (mfp != NULL) { /* If no swap file yet, may open one */ diff --git a/src/nvim/memline.c b/src/nvim/memline.c index a10fc2b8c5..44ba69b633 100644 --- a/src/nvim/memline.c +++ b/src/nvim/memline.c @@ -468,9 +468,11 @@ void ml_open_files(void) { buf_T *buf; - for (buf = firstbuf; buf != NULL; buf = buf->b_next) - if (!buf->b_p_ro || buf->b_changed) + FOR_ALL_BUFFERS(buf) { + if (!buf->b_p_ro || buf->b_changed) { ml_open_file(buf); + } + } } /* @@ -586,9 +588,10 @@ void ml_close_all(int del_file) { buf_T *buf; - for (buf = firstbuf; buf != NULL; buf = buf->b_next) + FOR_ALL_BUFFERS(buf) { ml_close(buf, del_file && ((buf->b_flags & BF_PRESERVED) == 0 || vim_strchr(p_cpo, CPO_PRESERVE) == NULL)); + } spell_delete_wordlist(); /* delete the internal wordlist */ vim_deltempdir(); /* delete created temp directory */ } @@ -601,9 +604,11 @@ void ml_close_notmod(void) { buf_T *buf; - for (buf = firstbuf; buf != NULL; buf = buf->b_next) - if (!bufIsChanged(buf)) + FOR_ALL_BUFFERS(buf) { + if (!bufIsChanged(buf)) { ml_close(buf, TRUE); /* close all not-modified buffers */ + } + } } /* @@ -1619,7 +1624,7 @@ void ml_sync_all(int check_file, int check_char) { buf_T *buf; - for (buf = firstbuf; buf != NULL; buf = buf->b_next) { + FOR_ALL_BUFFERS(buf) { if (buf->b_ml.ml_mfp == NULL || buf->b_ml.ml_mfp->mf_fname == NULL) continue; /* no file */ diff --git a/src/nvim/misc1.c b/src/nvim/misc1.c index 6ba1e68d64..313ed932bd 100644 --- a/src/nvim/misc1.c +++ b/src/nvim/misc1.c @@ -3346,7 +3346,7 @@ void preserve_exit(void) ml_close_notmod(); /* close all not-modified buffers */ - for (buf = firstbuf; buf != NULL; buf = buf->b_next) { + FOR_ALL_BUFFERS(buf) { if (buf->b_ml.ml_mfp != NULL && buf->b_ml.ml_mfp->mf_fname != NULL) { OUT_STR("Vim: preserving files...\n"); screen_start(); /* don't know where cursor is now */ diff --git a/src/nvim/option.c b/src/nvim/option.c index 28bbfb41e7..448e0e3c43 100644 --- a/src/nvim/option.c +++ b/src/nvim/option.c @@ -4977,7 +4977,7 @@ set_bool_option ( char_u hash[UNDO_HASH_SIZE]; buf_T *save_curbuf = curbuf; - for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next) { + FOR_ALL_BUFFERS(curbuf) { /* When 'undofile' is set globally: for every buffer, otherwise * only for the current buffer: Try to read in the undofile, * if one exists, the buffer wasn't changed and the buffer was @@ -7703,7 +7703,7 @@ static void paste_option_changed(void) */ if (!old_p_paste) { /* save options for each buffer */ - for (buf = firstbuf; buf != NULL; buf = buf->b_next) { + FOR_ALL_BUFFERS(buf) { buf->b_p_tw_nopaste = buf->b_p_tw; buf->b_p_wm_nopaste = buf->b_p_wm; buf->b_p_sts_nopaste = buf->b_p_sts; @@ -7727,7 +7727,7 @@ static void paste_option_changed(void) * already on. */ /* set options for each buffer */ - for (buf = firstbuf; buf != NULL; buf = buf->b_next) { + FOR_ALL_BUFFERS(buf) { buf->b_p_tw = 0; /* textwidth is 0 */ buf->b_p_wm = 0; /* wrapmargin is 0 */ buf->b_p_sts = 0; /* softtabstop is 0 */ @@ -7752,7 +7752,7 @@ static void paste_option_changed(void) */ else if (old_p_paste) { /* restore options for each buffer */ - for (buf = firstbuf; buf != NULL; buf = buf->b_next) { + FOR_ALL_BUFFERS(buf) { buf->b_p_tw = buf->b_p_tw_nopaste; buf->b_p_wm = buf->b_p_wm_nopaste; buf->b_p_sts = buf->b_p_sts_nopaste; diff --git a/src/nvim/spell.c b/src/nvim/spell.c index 8ef67c95f7..fa09bcaa72 100644 --- a/src/nvim/spell.c +++ b/src/nvim/spell.c @@ -4142,8 +4142,9 @@ void spell_free_all(void) buf_T *buf; // Go through all buffers and handle 'spelllang'. - for (buf = firstbuf; buf != NULL; buf = buf->b_next) + FOR_ALL_BUFFERS(buf) { ga_clear(&buf->b_s.b_langp); + } while (first_lang != NULL) { slang = first_lang; diff --git a/src/nvim/term.c b/src/nvim/term.c index 98db1fb9fa..350a76b5ac 100644 --- a/src/nvim/term.c +++ b/src/nvim/term.c @@ -1608,7 +1608,7 @@ int set_termname(char_u *term) * loaded. */ buf_T *old_curbuf = curbuf; - for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next) { + FOR_ALL_BUFFERS(curbuf) { if (curbuf->b_ml.ml_mfp != NULL) apply_autocmds(EVENT_TERMCHANGED, NULL, NULL, FALSE, curbuf); diff --git a/src/nvim/window.c b/src/nvim/window.c index 98daa7eca2..a78d6e4471 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -3609,10 +3609,11 @@ win_free ( /* Remove the window from the b_wininfo lists, it may happen that the * freed memory is re-used for another window. */ - for (buf = firstbuf; buf != NULL; buf = buf->b_next) + FOR_ALL_BUFFERS(buf) { for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next) if (wip->wi_win == wp) wip->wi_win = NULL; + } clear_matches(wp); From 888a31ba454cf9c054527a26459c112593efa54b Mon Sep 17 00:00:00 2001 From: Wayne Rowcliffe Date: Sun, 10 Aug 2014 22:56:58 -0500 Subject: [PATCH 2/2] FOR_ALL_BUFFERS use locally declared buffer pointer --- src/nvim/buffer.c | 44 ++++++++++++++++++++------------------------ src/nvim/edit.c | 4 ++-- src/nvim/eval.c | 14 +++++++------- src/nvim/ex_cmds.c | 6 ++---- src/nvim/ex_cmds2.c | 23 ++++++++++++----------- src/nvim/ex_docmd.c | 1 - src/nvim/fileio.c | 2 -- src/nvim/globals.h | 2 +- src/nvim/main.c | 3 +-- src/nvim/mark.c | 17 ++++++++++------- src/nvim/memfile.c | 11 ++++++----- src/nvim/memline.c | 8 -------- src/nvim/misc1.c | 2 -- src/nvim/option.c | 3 +-- src/nvim/spell.c | 1 - src/nvim/term.c | 2 +- src/nvim/window.c | 8 -------- 17 files changed, 63 insertions(+), 88 deletions(-) diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c index 244fc2d3b2..f3128c7f6f 100644 --- a/src/nvim/buffer.c +++ b/src/nvim/buffer.c @@ -115,9 +115,13 @@ open_buffer ( * If we can't create one for the current buffer, take another buffer */ close_buffer(NULL, curbuf, 0, FALSE); - FOR_ALL_BUFFERS(curbuf) { - if (curbuf->b_ml.ml_mfp != NULL) + + curbuf = NULL; + FOR_ALL_BUFFERS(buf) { + if (buf->b_ml.ml_mfp != NULL) { + curbuf = buf; break; + } } /* @@ -262,8 +266,6 @@ open_buffer ( */ int buf_valid(buf_T *buf) { - buf_T *bp; - FOR_ALL_BUFFERS(bp) { if (bp == buf) { return TRUE; @@ -950,8 +952,10 @@ do_buffer ( * If deleting the last (listed) buffer, make it empty. * The last (listed) buffer cannot be unloaded. */ - FOR_ALL_BUFFERS(bp) { - if (bp->b_p_bl && bp != buf) { + bp = NULL; + FOR_ALL_BUFFERS(bp2) { + if (bp2->b_p_bl && bp2 != buf) { + bp = bp2; break; } } @@ -1053,8 +1057,9 @@ do_buffer ( if (buf == NULL) /* No loaded buffer, use unloaded one */ buf = bp; if (buf == NULL) { /* No loaded buffer, find listed one */ - FOR_ALL_BUFFERS(buf) { - if (buf->b_p_bl && buf != curbuf) { + FOR_ALL_BUFFERS(buf2) { + if (buf2->b_p_bl && buf2 != curbuf) { + buf = buf2; break; } } @@ -1677,8 +1682,6 @@ buf_T *buflist_findname(char_u *ffname) static buf_T *buflist_findname_file_id(char_u *ffname, FileID *file_id, bool file_id_valid) { - buf_T *buf; - FOR_ALL_BUFFERS(buf) { if ((buf->b_flags & BF_DUMMY) == 0 && !otherfile_buf(buf, ffname, file_id, file_id_valid)) { @@ -1702,7 +1705,6 @@ buflist_findpat ( int curtab_only /* find buffers in current tab only */ ) { - buf_T *buf; regprog_T *prog; int match = -1; int find_listed; @@ -1807,7 +1809,6 @@ buflist_findpat ( int ExpandBufnames(char_u *pat, int *num_file, char_u ***file, int options) { int count = 0; - buf_T *buf; int round; char_u *p; int attempt; @@ -1929,10 +1930,10 @@ static char_u *fname_match(regprog_T *prog, char_u *name) */ buf_T *buflist_findnr(int nr) { - buf_T *buf; - - if (nr == 0) + if (nr == 0) { nr = curwin->w_alt_fnum; + } + FOR_ALL_BUFFERS(buf) { if (buf->b_fnum == nr) { return buf; @@ -2354,8 +2355,6 @@ int buflist_add(char_u *fname, int flags) */ void buflist_slash_adjust(void) { - buf_T *bp; - FOR_ALL_BUFFERS(bp) { if (bp->b_ffname != NULL) slash_adjust(bp->b_ffname); @@ -4202,7 +4201,6 @@ int read_viminfo_bufferlist(vir_T *virp, int writing) void write_viminfo_bufferlist(FILE *fp) { - buf_T *buf; win_T *win; tabpage_T *tp; char_u *line; @@ -4498,13 +4496,11 @@ void buf_delete_signs(buf_T *buf) */ void buf_delete_all_signs(void) { - buf_T *buf; /* buffer we are checking for signs */ - - FOR_ALL_BUFFERS(buf) { - if (buf->b_signlist != NULL) { - buf_delete_signs(buf); - } + FOR_ALL_BUFFERS(buf) { + if (buf->b_signlist != NULL) { + buf_delete_signs(buf); } + } } /* diff --git a/src/nvim/edit.c b/src/nvim/edit.c index e241bf5b9c..22687d8203 100644 --- a/src/nvim/edit.c +++ b/src/nvim/edit.c @@ -3434,8 +3434,8 @@ static int ins_compl_get_exp(pos_T *ini) int set_match_pos; if (!compl_started) { - FOR_ALL_BUFFERS(ins_buf) { - ins_buf->b_scanned = 0; + FOR_ALL_BUFFERS(buf) { + buf->b_scanned = 0; } found_all = FALSE; ins_buf = curbuf; diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 382b43826d..fd2c3a6dd8 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -5399,7 +5399,6 @@ static int list_join(garray_T *gap, list_T *l, char_u *sep, int echo_style, int int garbage_collect(void) { int copyID; - buf_T *buf; win_T *wp; funccall_T *fc, **pfc; int did_free; @@ -7208,13 +7207,15 @@ static buf_T *find_buffer(typval_T *avar) if (buf == NULL) { /* No full path name match, try a match with a URL or a "nofile" * buffer, these don't use the full path. */ - FOR_ALL_BUFFERS(buf) { - if (buf->b_fname != NULL - && (path_with_url(buf->b_fname) - || bt_nofile(buf) + FOR_ALL_BUFFERS(bp) { + if (bp->b_fname != NULL + && (path_with_url(bp->b_fname) + || bt_nofile(bp) ) - && STRCMP(buf->b_fname, avar->vval.v_string) == 0) + && STRCMP(bp->b_fname, avar->vval.v_string) == 0) { + buf = bp; break; + } } } } @@ -10617,7 +10618,6 @@ static void f_keys(typval_T *argvars, typval_T *rettv) static void f_last_buffer_nr(typval_T *argvars, typval_T *rettv) { int n = 0; - buf_T *buf; FOR_ALL_BUFFERS(buf) { if (n < buf->b_fnum) { diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c index ff265b25f5..338a7bb4c1 100644 --- a/src/nvim/ex_cmds.c +++ b/src/nvim/ex_cmds.c @@ -1211,7 +1211,6 @@ do_shell ( int flags /* may be SHELL_DOOUT when output is redirected */ ) { - buf_T *buf; int save_nwr; /* @@ -1748,7 +1747,6 @@ static void do_viminfo(FILE *fp_in, FILE *fp_out, int flags) static int read_viminfo_up_to_marks(vir_T *virp, int forceit, int writing) { int eof; - buf_T *buf; prepare_viminfo_history(forceit ? 9999 : 0, writing); eof = viminfo_readline(virp); @@ -2358,7 +2356,6 @@ void ex_wnext(exarg_T *eap) */ void do_wqall(exarg_T *eap) { - buf_T *buf; int error = 0; int save_forceit = eap->forceit; @@ -5675,7 +5672,6 @@ void ex_sign(exarg_T *eap) int idx; sign_T *sp; sign_T *sp_prev; - buf_T *buf; /* Parse the subcommand. */ p = skiptowhite(arg); @@ -5915,6 +5911,8 @@ void ex_sign(exarg_T *eap) * Check for line={lnum} name={name} and file={fname} or buffer={nr}. * Leave "arg" pointing to {fname}. */ + + buf_T *buf = NULL; for (;;) { if (STRNCMP(arg, "line=", 5) == 0) diff --git a/src/nvim/ex_cmds2.c b/src/nvim/ex_cmds2.c index 7480378e84..e0b0b55f41 100644 --- a/src/nvim/ex_cmds2.c +++ b/src/nvim/ex_cmds2.c @@ -1044,10 +1044,10 @@ int autowrite(buf_T *buf, int forceit) */ void autowrite_all(void) { - buf_T *buf; - - if (!(p_aw || p_awa) || !p_write) + if (!(p_aw || p_awa) || !p_write) { return; + } + FOR_ALL_BUFFERS(buf) { if (bufIsChanged(buf) && !buf->b_p_ro) { (void)buf_write_all(buf, FALSE); @@ -1071,7 +1071,6 @@ int check_changed(buf_T *buf, int flags) && ((flags & CCGD_MULTWIN) || buf->b_nwindows <= 1) && (!(flags & CCGD_AW) || autowrite(buf, forceit) == FAIL)) { if ((p_confirm || cmdmod.confirm) && p_write) { - buf_T *buf2; int count = 0; if (flags & CCGD_ALLBUF) @@ -1112,7 +1111,6 @@ dialog_changed ( { char_u buff[DIALOG_MSG_SIZE]; int ret; - buf_T *buf2; exarg_T ea; dialog_msg(buff, _("Save changes to \"%s\"?"), @@ -1202,7 +1200,6 @@ check_changed_any ( ) { int ret = FALSE; - buf_T *buf; int save; int i; int bufnum = 0; @@ -1237,6 +1234,7 @@ check_changed_any ( add_bufnum(bufnrs, &bufnum, buf->b_fnum); } + buf_T *buf = NULL; for (i = 0; i < bufnum; ++i) { buf = buflist_findnr(bufnrs[i]); if (buf == NULL) @@ -1821,7 +1819,6 @@ void ex_listdo(exarg_T *eap) int i; win_T *wp; tabpage_T *tp; - buf_T *buf; int next_fnum = 0; char_u *save_ei = NULL; char_u *p_shm_save; @@ -1886,7 +1883,7 @@ void ex_listdo(exarg_T *eap) /* Remember the number of the next listed buffer, in case * ":bwipe" is used or autocommands do something strange. */ next_fnum = -1; - for (buf = curbuf->b_next; buf != NULL; buf = buf->b_next) + for (buf_T *buf = curbuf->b_next; buf != NULL; buf = buf->b_next) if (buf->b_p_bl) { next_fnum = buf->b_fnum; break; @@ -1901,14 +1898,18 @@ void ex_listdo(exarg_T *eap) /* Done? */ if (next_fnum < 0) break; + /* Check if the buffer still exists. */ - FOR_ALL_BUFFERS(buf) { - if (buf->b_fnum == next_fnum) { + bool buf_still_exists = false; + FOR_ALL_BUFFERS(bp) { + if (bp->b_fnum == next_fnum) { + buf_still_exists = true; break; } } - if (buf == NULL) + if (buf_still_exists) { break; + } /* Go to the next buffer. Clear 'shm' to avoid that the file * message overwrites any output from the command. */ diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c index fc56656681..446d51be3f 100644 --- a/src/nvim/ex_docmd.c +++ b/src/nvim/ex_docmd.c @@ -7871,7 +7871,6 @@ makeopens ( char_u *dirnow /* Current directory name */ ) { - buf_T *buf; int only_save_windows = TRUE; int nr; int cnr = 1; diff --git a/src/nvim/fileio.c b/src/nvim/fileio.c index 932af336b8..c072be424e 100644 --- a/src/nvim/fileio.c +++ b/src/nvim/fileio.c @@ -4359,7 +4359,6 @@ static int make_bom(char_u *buf, char_u *name) void shorten_fnames(int force) { char_u dirname[MAXPATHL]; - buf_T *buf; char_u *p; os_dirname(dirname, MAXPATHL); @@ -6123,7 +6122,6 @@ void ex_doautoall(exarg_T *eap) { int retval; aco_save_T aco; - buf_T *buf; char_u *arg = eap->arg; int call_do_modelines = check_nomodeline(&arg); diff --git a/src/nvim/globals.h b/src/nvim/globals.h index 67c308dc51..b496b7e576 100644 --- a/src/nvim/globals.h +++ b/src/nvim/globals.h @@ -557,7 +557,7 @@ EXTERN buf_T *lastbuf INIT(= NULL); /* last buffer */ EXTERN buf_T *curbuf INIT(= NULL); /* currently active buffer */ // Iterates over all buffers in the buffer list. -# define FOR_ALL_BUFFERS(buf) for (buf = firstbuf; buf != NULL; buf = buf->b_next) +# define FOR_ALL_BUFFERS(buf) for (buf_T *buf = firstbuf; buf != NULL; buf = buf->b_next) /* Flag that is set when switching off 'swapfile'. It means that all blocks * are to be loaded into memory. Shouldn't be global... */ diff --git a/src/nvim/main.c b/src/nvim/main.c index c9fbfe3a39..1de4b04a07 100644 --- a/src/nvim/main.c +++ b/src/nvim/main.c @@ -744,7 +744,6 @@ main_loop ( /* Exit properly */ void getout(int exitval) { - buf_T *buf; win_T *wp; tabpage_T *tp, *next_tp; @@ -772,7 +771,7 @@ void getout(int exitval) if (wp->w_buffer == NULL) /* Autocmd must have close the buffer already, skip. */ continue; - buf = wp->w_buffer; + buf_T *buf = wp->w_buffer; if (buf->b_changedtick != -1) { apply_autocmds(EVENT_BUFWINLEAVE, buf->b_fname, buf->b_fname, FALSE, buf); diff --git a/src/nvim/mark.c b/src/nvim/mark.c index 057c524e11..43469cab45 100644 --- a/src/nvim/mark.c +++ b/src/nvim/mark.c @@ -1337,7 +1337,6 @@ int removable(char_u *name) int write_viminfo_marks(FILE *fp_out) { int count; - buf_T *buf; int is_mark_set; int i; win_T *win; @@ -1346,8 +1345,9 @@ int write_viminfo_marks(FILE *fp_out) /* * Set b_last_cursor for the all buffers that have a window. */ - FOR_ALL_TAB_WINDOWS(tp, win) - set_last_cursor(win); + FOR_ALL_TAB_WINDOWS(tp, win) { + set_last_cursor(win); + } fputs(_("\n# History of marks within files (newest to oldest):\n"), fp_out); count = 0; @@ -1467,11 +1467,14 @@ void copy_viminfo_marks(vir_T *virp, FILE *fp_out, int count, int eof, int flags } } else { /* fp_out != NULL */ /* This is slow if there are many buffers!! */ - FOR_ALL_BUFFERS(buf) { - if (buf->b_ffname != NULL) { - home_replace(NULL, buf->b_ffname, name_buf, LSIZE, TRUE); - if (fnamecmp(str, name_buf) == 0) + buf = NULL; + FOR_ALL_BUFFERS(bp) { + if (bp->b_ffname != NULL) { + home_replace(NULL, bp->b_ffname, name_buf, LSIZE, TRUE); + if (fnamecmp(str, name_buf) == 0) { + buf = bp; break; + } } } diff --git a/src/nvim/memfile.c b/src/nvim/memfile.c index 8acf25f484..82369b739a 100644 --- a/src/nvim/memfile.c +++ b/src/nvim/memfile.c @@ -613,7 +613,6 @@ static bhdr_T *mf_release(memfile_T *mfp, int page_count) { bhdr_T *hp; int need_release; - buf_T *buf; /* don't release while in mf_close_file() */ if (mf_dont_release) @@ -632,13 +631,16 @@ static bhdr_T *mf_release(memfile_T *mfp, int page_count) */ if (mfp->mf_fd < 0 && need_release && p_uc) { /* find for which buffer this memfile is */ - FOR_ALL_BUFFERS(buf) { - if (buf->b_ml.ml_mfp == mfp) { + buf_T *buf = NULL; + FOR_ALL_BUFFERS(bp) { + if (bp->b_ml.ml_mfp == mfp) { + buf = bp; break; } } - if (buf != NULL && buf->b_may_swap) + if (buf != NULL && buf->b_may_swap) { ml_open_file(buf); + } } /* @@ -688,7 +690,6 @@ static bhdr_T *mf_release(memfile_T *mfp, int page_count) */ int mf_release_all(void) { - buf_T *buf; memfile_T *mfp; bhdr_T *hp; int retval = FALSE; diff --git a/src/nvim/memline.c b/src/nvim/memline.c index 44ba69b633..229de4ae1c 100644 --- a/src/nvim/memline.c +++ b/src/nvim/memline.c @@ -466,8 +466,6 @@ void ml_setname(buf_T *buf) */ void ml_open_files(void) { - buf_T *buf; - FOR_ALL_BUFFERS(buf) { if (!buf->b_p_ro || buf->b_changed) { ml_open_file(buf); @@ -586,8 +584,6 @@ void ml_close(buf_T *buf, int del_file) */ void ml_close_all(int del_file) { - buf_T *buf; - FOR_ALL_BUFFERS(buf) { ml_close(buf, del_file && ((buf->b_flags & BF_PRESERVED) == 0 || vim_strchr(p_cpo, CPO_PRESERVE) == NULL)); @@ -602,8 +598,6 @@ void ml_close_all(int del_file) */ void ml_close_notmod(void) { - buf_T *buf; - FOR_ALL_BUFFERS(buf) { if (!bufIsChanged(buf)) { ml_close(buf, TRUE); /* close all not-modified buffers */ @@ -1622,8 +1616,6 @@ static int recov_file_names(char_u **names, char_u *path, int prepend_dot) */ void ml_sync_all(int check_file, int check_char) { - buf_T *buf; - FOR_ALL_BUFFERS(buf) { if (buf->b_ml.ml_mfp == NULL || buf->b_ml.ml_mfp->mf_fname == NULL) continue; /* no file */ diff --git a/src/nvim/misc1.c b/src/nvim/misc1.c index 313ed932bd..f0c4ee492e 100644 --- a/src/nvim/misc1.c +++ b/src/nvim/misc1.c @@ -3329,8 +3329,6 @@ void prepare_to_exit(void) */ void preserve_exit(void) { - buf_T *buf; - // Prevent repeated calls into this method. if (really_exiting) { exit(2); diff --git a/src/nvim/option.c b/src/nvim/option.c index 448e0e3c43..ebf2e8b4af 100644 --- a/src/nvim/option.c +++ b/src/nvim/option.c @@ -4977,7 +4977,7 @@ set_bool_option ( char_u hash[UNDO_HASH_SIZE]; buf_T *save_curbuf = curbuf; - FOR_ALL_BUFFERS(curbuf) { + for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next) { /* When 'undofile' is set globally: for every buffer, otherwise * only for the current buffer: Try to read in the undofile, * if one exists, the buffer wasn't changed and the buffer was @@ -7694,7 +7694,6 @@ static void paste_option_changed(void) static int save_ru = 0; static int save_ri = 0; static int save_hkmap = 0; - buf_T *buf; if (p_paste) { /* diff --git a/src/nvim/spell.c b/src/nvim/spell.c index fa09bcaa72..ceb8b57f39 100644 --- a/src/nvim/spell.c +++ b/src/nvim/spell.c @@ -4139,7 +4139,6 @@ void spell_delete_wordlist(void) void spell_free_all(void) { slang_T *slang; - buf_T *buf; // Go through all buffers and handle 'spelllang'. FOR_ALL_BUFFERS(buf) { diff --git a/src/nvim/term.c b/src/nvim/term.c index 350a76b5ac..98db1fb9fa 100644 --- a/src/nvim/term.c +++ b/src/nvim/term.c @@ -1608,7 +1608,7 @@ int set_termname(char_u *term) * loaded. */ buf_T *old_curbuf = curbuf; - FOR_ALL_BUFFERS(curbuf) { + for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next) { if (curbuf->b_ml.ml_mfp != NULL) apply_autocmds(EVENT_TERMCHANGED, NULL, NULL, FALSE, curbuf); diff --git a/src/nvim/window.c b/src/nvim/window.c index a78d6e4471..7e4934bdfe 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -3571,7 +3571,6 @@ win_free ( ) { int i; - buf_T *buf; wininfo_T *wip; handle_unregister_window(wp); @@ -3584,13 +3583,6 @@ win_free ( * gui_mch_destroy_scrollbar() may trigger a FocusGained event. */ block_autocmds(); - - - - - - - clear_winopt(&wp->w_onebuf_opt); clear_winopt(&wp->w_allbuf_opt);