static void check(const char *fmt, ...) { size_t len; char buf[200], *end, *p; va_list ap; len = 0; /* -Werror=maybe-uninitialized */ va_start(ap, fmt); testutil_check(__wt_struct_sizev(NULL, &len, fmt, ap)); va_end(ap); if (len < 1 || len >= sizeof(buf)) testutil_die(EINVAL, "Unexpected length from __wt_struct_sizev"); va_start(ap, fmt); testutil_check(__wt_struct_packv(NULL, buf, sizeof(buf), fmt, ap)); va_end(ap); printf("%s ", fmt); for (p = buf, end = p + len; p < end; p++) printf("%02x", (u_char)*p & 0xff); printf("\n"); }
/*内部使用的struct size pack函数封装*/ int __wt_struct_size(WT_SESSION_IMPL *session, size_t *sizep, const char *fmt, ...) { WT_DECL_RET; va_list ap; va_start(ap, fmt); ret = __wt_struct_sizev(session, sizep, fmt, ap); va_end(ap); return (ret); }
/* * wiredtiger_struct_size -- * Calculate the size of a packed byte string (extension API). */ int wiredtiger_struct_size(WT_SESSION *wt_session, size_t *lenp, const char *format, ...) { WT_DECL_RET; WT_SESSION_IMPL *session; va_list ap; session = (WT_SESSION_IMPL *)wt_session; va_start(ap, format); ret = __wt_struct_sizev(session, lenp, format, ap); va_end(ap); return (ret); }
/* * __wt_ext_struct_size -- * Calculate the size of a packed byte string (extension API). */ int __wt_ext_struct_size(WT_EXTENSION_API *wt_api, WT_SESSION *wt_session, size_t *lenp, const char *fmt, ...) { WT_DECL_RET; WT_SESSION_IMPL *session; va_list ap; session = (wt_session != NULL) ? (WT_SESSION_IMPL *)wt_session : ((WT_CONNECTION_IMPL *)wt_api->conn)->default_session; va_start(ap, fmt); ret = __wt_struct_sizev(session, lenp, fmt, ap); va_end(ap); return (ret); }
static void check(const char *fmt, ...) { char buf[200], *end, *p; va_list ap; size_t len; len = 0; /* -Werror=maybe-uninitialized */ va_start(ap, fmt); assert(__wt_struct_sizev(NULL, &len, fmt, ap) == 0); va_end(ap); assert(len > 0 && len < sizeof(buf)); va_start(ap, fmt); assert(__wt_struct_packv(NULL, buf, sizeof(buf), fmt, ap) == 0); va_end(ap); printf("%s ", fmt); for (p = buf, end = p + len; p < end; p++) printf("%02x", *p & 0xff); printf("\n"); }
static int __log_record_size(WT_SESSION_IMPL *session, size_t *sizep, WT_LOGREC_DESC *recdesc, va_list ap) { return (__wt_struct_sizev(session, sizep, recdesc->fmt, ap)); }