summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/memfile.c20
-rw-r--r--src/version.c2
2 files changed, 21 insertions, 1 deletions
diff --git a/src/memfile.c b/src/memfile.c
index f1e85fc28..d0dd8deef 100644
--- 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;
}
diff --git a/src/version.c b/src/version.c
index c0f9b4b69..17966651f 100644
--- a/src/version.c
+++ b/src/version.c
@@ -667,6 +667,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2,
+/**/
1,
/**/
0