diff options
author | Bram Moolenaar <Bram@vim.org> | 2006-01-14 21:23:38 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2006-01-14 21:23:38 +0000 |
commit | c32840f2674d4c6b06cfac8ec32791b5451bf31c (patch) | |
tree | a94f91721c326e599a2a5199762ebed4dbfe2a6e /src | |
parent | 04dbce064ed4282854348bd4fb5a806a6136bd04 (diff) |
updated for version 7.0181v7.0181
Diffstat (limited to 'src')
-rw-r--r-- | src/eval.c | 11 | ||||
-rw-r--r-- | src/memfile.c | 17 | ||||
-rw-r--r-- | src/memline.c | 6 |
3 files changed, 34 insertions, 0 deletions
diff --git a/src/eval.c b/src/eval.c index 4823593317..c18b42d0f3 100644 --- a/src/eval.c +++ b/src/eval.c @@ -17667,7 +17667,18 @@ trans_function_name(pp, skip, flags, fdp) } if (lv.ll_exp_name != NULL) + { len = STRLEN(lv.ll_exp_name); + if (lead <= 2 && lv.ll_name == lv.ll_exp_name + && STRNCMP(lv.ll_name, "s:", 2) == 0) + { + /* When there was "s:" already or the name expanded to get a + * leading "s:" then remove it. */ + lv.ll_name += 2; + len -= 2; + lead = 2; + } + } else { if (lead == 2) /* skip over "s:" */ diff --git a/src/memfile.c b/src/memfile.c index e1a6b603b9..bac84fed94 100644 --- a/src/memfile.c +++ b/src/memfile.c @@ -701,6 +701,23 @@ mf_sync(mfp, flags) } /* + * For all blocks in memory file *mfp that have a positive block number set + * the dirty flag. These are blocks that need to be written to a newly + * created swapfile. + */ + void +mf_set_dirty(mfp) + memfile_T *mfp; +{ + bhdr_T *hp; + + for (hp = mfp->mf_used_last; hp != NULL; hp = hp->bh_prev) + if (hp->bh_bnum > 0) + hp->bh_flags |= BH_DIRTY; + mfp->mf_dirty = TRUE; +} + +/* * insert block *hp in front of hashlist of memfile *mfp */ static void diff --git a/src/memline.c b/src/memline.c index 9abf155234..c87a955ad0 100644 --- a/src/memline.c +++ b/src/memline.c @@ -563,7 +563,13 @@ ml_open_file(buf) /* Flush block zero, so others can read it */ if (mf_sync(mfp, MFS_ZERO) == OK) + { + /* Mark all blocks that should be in the swapfile as dirty. + * Needed for when the 'swapfile' option was reset, so that + * the swap file was deleted, and then on again. */ + mf_set_dirty(mfp); break; + } /* Writing block 0 failed: close the file and try another dir */ mf_close_file(buf, FALSE); } |