/* * __curstat_get_value -- * WT_CURSOR->get_value for statistics cursors. */ static int __curstat_get_value(WT_CURSOR *cursor, ...) { WT_CURSOR_STAT *cst; WT_DECL_RET; WT_ITEM *item; WT_SESSION_IMPL *session; size_t size; uint64_t *v; const char *desc, **p; va_list ap; cst = (WT_CURSOR_STAT *)cursor; va_start(ap, cursor); CURSOR_API_CALL(cursor, session, get_value, NULL); WT_ERR(__cursor_needvalue(cursor)); WT_ERR(cst->stats_desc(cst, WT_STAT_KEY_OFFSET(cst), &desc)); if (F_ISSET(cursor, WT_CURSTD_RAW)) { WT_ERR(__wt_struct_size(session, &size, cursor->value_format, desc, cst->pv.data, cst->v)); WT_ERR(__wt_buf_initsize(session, &cursor->value, size)); WT_ERR(__wt_struct_pack(session, cursor->value.mem, size, cursor->value_format, desc, cst->pv.data, cst->v)); item = va_arg(ap, WT_ITEM *); item->data = cursor->value.data; item->size = cursor->value.size; } else { /* * Don't drop core if the statistics value isn't requested; NULL * pointer support isn't documented, but it's a cheap test. */ if ((p = va_arg(ap, const char **)) != NULL)
WT_ERR(__wt_buf_initsize(session, &cursor->value, size)); WT_ERR(__wt_struct_pack(session, cursor->value.mem, size, cursor->value_format, cst->stats[WT_STAT_KEY_OFFSET(cst)].desc, cst->pv.data, cst->v)); item = va_arg(ap, WT_ITEM *); item->data = cursor->value.data; item->size = cursor->value.size; } else { /* * Don't drop core if the statistics value isn't requested; NULL * pointer support isn't documented, but it's a cheap test. */ if ((p = va_arg(ap, const char **)) != NULL) *p = cst->stats[WT_STAT_KEY_OFFSET(cst)].desc; if ((p = va_arg(ap, const char **)) != NULL) *p = cst->pv.data; if ((v = va_arg(ap, uint64_t *)) != NULL) *v = cst->v; } err: va_end(ap); API_END_RET(session, ret); } /* * __curstat_set_key -- * WT_CURSOR->set_key for statistics cursors. */ static void
WT_ERR(__wt_buf_initsize(session, &cursor->value, size)); WT_ERR(__wt_struct_pack(session, cursor->value.mem, size, cursor->value_format, cst->stats_first[WT_STAT_KEY_OFFSET(cst)].desc, cst->pv.data, cst->v)); item = va_arg(ap, WT_ITEM *); item->data = cursor->value.data; item->size = cursor->value.size; } else { /* * Don't drop core if the statistics value isn't requested; NULL * pointer support isn't documented, but it's a cheap test. */ if ((p = va_arg(ap, const char **)) != NULL) *p = cst->stats_first[WT_STAT_KEY_OFFSET(cst)].desc; if ((p = va_arg(ap, const char **)) != NULL) *p = cst->pv.data; if ((v = va_arg(ap, uint64_t *)) != NULL) *v = cst->v; } err: va_end(ap); API_END_RET(session, ret); } /* * __curstat_set_key -- * WT_CURSOR->set_key for statistics cursors. */ static void