Mercurial > vim
changeset 1230:cab25717c6a6 v7.1b.002
updated for version 7.1b-002
author | vimboss |
---|---|
date | Fri, 11 May 2007 18:15:45 +0000 |
parents | 198a695ca8e7 |
children | de2bde5aa8ff |
files | src/memfile.c src/version.c |
diffstat | 2 files changed, 21 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/memfile.c +++ b/src/memfile.c @@ -190,7 +190,25 @@ mf_open(fname, flags) mfp->mf_blocknr_min = -1; mfp->mf_neg_count = 0; mfp->mf_infile_count = mfp->mf_blocknr_max; - mfp->mf_used_count_max = p_mm * 1024 / mfp->mf_page_size; + + /* + * Compute maximum number of pages ('maxmem' is in Kbyte): + * 'mammem' * 1Kbyte / page-size-in-bytes. + * Avoid overflow by first reducing page size as much as possible. + */ + { + int shift = 10; + unsigned page_size = mfp->mf_page_size; + + while (shift > 0 && (page_size & 1) == 0) + { + page_size = page_size >> 1; + --shift; + } + mfp->mf_used_count_max = (p_mm << shift) / page_size; + if (mfp->mf_used_count_max < 10) + mfp->mf_used_count_max = 10; + } return mfp; }