diff options
author | Don Anderson <dda@ddanderson.com> | 2015-12-11 16:05:31 -0500 |
---|---|---|
committer | Don Anderson <dda@ddanderson.com> | 2015-12-11 16:05:31 -0500 |
commit | de1a69503ddca1c1da6738ccbc2025a2626c1345 (patch) | |
tree | 0495a18016a7aef0665be40de469a94f309a238e | |
parent | 0209aca5ebd868bf1137822f0b7046901557c008 (diff) | |
download | mongo-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.c | 15 | ||||
-rw-r--r-- | src/include/extern.h | 1 | ||||
-rw-r--r-- | src/utilities/util_list.c | 7 |
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 */ |