summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDon Anderson <dda@ddanderson.com>2015-12-11 16:05:31 -0500
committerDon Anderson <dda@ddanderson.com>2015-12-11 16:05:31 -0500
commitde1a69503ddca1c1da6738ccbc2025a2626c1345 (patch)
tree0495a18016a7aef0665be40de469a94f309a238e
parent0209aca5ebd868bf1137822f0b7046901557c008 (diff)
downloadmongo-de1a69503ddca1c1da6738ccbc2025a2626c1345.tar.gz
WT-2276. Make a public function for converting cookies that does not
rely on WT_BLOCK.
-rw-r--r--src/block/block_ext.c15
-rw-r--r--src/include/extern.h1
-rw-r--r--src/utilities/util_list.c7
3 files changed, 18 insertions, 5 deletions
diff --git a/src/block/block_ext.c b/src/block/block_ext.c
index a56df220390..9974ffe8fb5 100644
--- a/src/block/block_ext.c
+++ b/src/block/block_ext.c
@@ -29,6 +29,21 @@ static int __block_merge(WT_SESSION_IMPL *,
WT_BLOCK *, WT_EXTLIST *, wt_off_t, wt_off_t);
/*
+ * __wt_block_ckpt_decode --
+ * Convert a checkpoint cookie into its components.
+ */
+int
+__wt_block_ckpt_decode(WT_SESSION_IMPL *session, const uint8_t *p,
+ size_t block_allocsize, WT_BLOCK_CKPT *ci)
+{
+ WT_BLOCK block;
+
+ memset(&block, 0, sizeof(block));
+ block.allocsize = block_allocsize;
+ return (__wt_block_buffer_to_ckpt(session, &block, p, ci));
+}
+
+/*
* __block_off_srch_last --
* Return the last element in the list, along with a stack for appending.
*/
diff --git a/src/include/extern.h b/src/include/extern.h
index 573a45336cd..a34ec0ea94a 100644
--- a/src/include/extern.h
+++ b/src/include/extern.h
@@ -25,6 +25,7 @@ extern int __wt_block_compact_start(WT_SESSION_IMPL *session, WT_BLOCK *block);
extern int __wt_block_compact_end(WT_SESSION_IMPL *session, WT_BLOCK *block);
extern int __wt_block_compact_skip(WT_SESSION_IMPL *session, WT_BLOCK *block, bool *skipp);
extern int __wt_block_compact_page_skip(WT_SESSION_IMPL *session, WT_BLOCK *block, const uint8_t *addr, size_t addr_size, bool *skipp);
+extern int __wt_block_ckpt_decode(WT_SESSION_IMPL *session, const uint8_t *p, size_t block_allocsize, WT_BLOCK_CKPT *ci);
extern int __wt_block_misplaced(WT_SESSION_IMPL *session, WT_BLOCK *block, const char *tag, wt_off_t offset, uint32_t size, bool live);
extern int __wt_block_off_remove_overlap(WT_SESSION_IMPL *session, WT_BLOCK *block, WT_EXTLIST *el, wt_off_t off, wt_off_t size);
extern int __wt_block_alloc( WT_SESSION_IMPL *session, WT_BLOCK *block, wt_off_t *offp, wt_off_t size);
diff --git a/src/utilities/util_list.c b/src/utilities/util_list.c
index 6b8c931d6f8..8ea2fb06c63 100644
--- a/src/utilities/util_list.c
+++ b/src/utilities/util_list.c
@@ -179,7 +179,6 @@ list_print(WT_SESSION *session, const char *name, bool cflag, bool vflag)
static int
list_print_checkpoint(WT_SESSION *session, const char *key)
{
- WT_BLOCK block;
WT_BLOCK_CKPT ci;
WT_DECL_RET;
WT_CKPT *ckpt, *ckptbase;
@@ -207,12 +206,10 @@ list_print_checkpoint(WT_SESSION *session, const char *key)
len = strlen(ckpt->name);
++len;
- memset(&block, 0, sizeof(block));
memset(&ci, 0, sizeof(ci));
WT_CKPT_FOREACH(ckptbase, ckpt) {
- block.allocsize = allocsize;
- if ((ret = __wt_block_buffer_to_ckpt((WT_SESSION_IMPL *)session,
- &block, ckpt->raw.data, &ci)) != 0) {
+ if ((ret = __wt_block_ckpt_decode((WT_SESSION_IMPL *)session,
+ ckpt->raw.data, allocsize, &ci)) != 0) {
fprintf(stderr, "%s: __wt_block_buffer_to_ckpt: %s\n",
progname, session->strerror(session, ret));
/* continue if damaged */