aboutsummaryrefslogtreecommitdiff
path: root/libstore/derive.c
diff options
context:
space:
mode:
Diffstat (limited to 'libstore/derive.c')
-rw-r--r--libstore/derive.c37
1 files changed, 20 insertions, 17 deletions
diff --git a/libstore/derive.c b/libstore/derive.c
index 63cf3430..a76fbe1c 100644
--- a/libstore/derive.c
+++ b/libstore/derive.c
@@ -1,9 +1,7 @@
/* Calculation of various derived store fields
- Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-
- Written by Miles Bader <miles@gnu.ai.mit.edu>
-
+ Copyright (C) 1995-97,2001 Free Software Foundation, Inc.
+ Written by Miles Bader <miles@gnu.org>
This file is part of the GNU Hurd.
The GNU Hurd is free software; you can redistribute it and/or
@@ -18,7 +16,11 @@
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. */
+
+#include <assert.h>
+#include <sys/types.h>
+#include <mach.h>
#include "store.h"
@@ -34,6 +36,7 @@ _store_derive (struct store *store)
/* BLOCK & SIZE */
store->blocks = 0;
+ store->wrap_src = 0;
for (i = 0; i < num_runs; i++)
{
@@ -50,7 +53,7 @@ _store_derive (struct store *store)
to include all iterations. */
{
size_t num_iters = store->end / store->wrap_src;
- off_t last_part_base = num_iters * store->wrap_src;
+ store_offset_t last_part_base = num_iters * store->wrap_src;
store->blocks *= num_iters;
@@ -68,17 +71,17 @@ _store_derive (struct store *store)
store->size = store->end * bsize;
- /* LOG2_BLOCK_SIZE */
store->log2_block_size = 0;
- while ((1 << store->log2_block_size) < bsize)
- store->log2_block_size++;
- if ((1 << store->log2_block_size) != bsize)
- store->log2_block_size = 0;
-
- /* LOG2_BLOCKS_PER_PAGE */
store->log2_blocks_per_page = 0;
- while ((bsize << store->log2_blocks_per_page) < vm_page_size)
- store->log2_blocks_per_page++;
- if ((bsize << store->log2_blocks_per_page) != vm_page_size)
- store->log2_blocks_per_page = 0;
+
+ if (bsize != 0)
+ {
+ while ((1 << store->log2_block_size) < bsize)
+ store->log2_block_size++;
+ assert ((1 << store->log2_block_size) == bsize);
+
+ while ((bsize << store->log2_blocks_per_page) < vm_page_size)
+ store->log2_blocks_per_page++;
+ assert ((bsize << store->log2_blocks_per_page) == vm_page_size);
+ }
}