/*- * Copyright (c) 2014-2019 MongoDB, Inc. * Copyright (c) 2008-2014 WiredTiger, Inc. * All rights reserved. * * See the file LICENSE for redistribution information. */ #include "wt_internal.h" /* * __wt_vsnprintf_len_incr -- * POSIX vsnprintf convenience function, incrementing the returned size. */ int __wt_vsnprintf_len_incr( char *buf, size_t size, size_t *retsizep, const char *fmt, va_list ap) { int len; /* * WiredTiger calls with length 0 to get the needed buffer size. Call * the count only version in this case, _vsnprintf_s will invoke the * invalid parameter handler if count is less than or equal to zero. */ if (size == 0) { *retsizep += (size_t)_vscprintf(fmt, ap); return (0); } /* * Additionally, the invalid parameter handler is invoked if buffer or * format is a NULL pointer. */ if (buf == NULL || fmt == NULL) return (EINVAL); /* * If the storage required to store the data and a terminating null * exceeds size, the invalid parameter handler is invoked, unless * count is _TRUNCATE, in which case as much of the string as will * fit in the buffer is written and -1 returned. */ if ((len = _vsnprintf_s(buf, size, _TRUNCATE, fmt, ap)) >= 0) { *retsizep += (size_t)len; return (0); } /* Return the buffer size required. */ if (len == -1) *retsizep += (size_t)_vscprintf(fmt, ap); return (0); }