// 31 may 2019
// only requires strsafe_header.h if you don't define sharedbitsStatic as static

#include "start.h"

#ifdef sharedbitsStatic
sharedbitsStatic
#endif
int sharedbitsPrefixName(Vsnprintf)(char *s, size_t n, const char *fmt, va_list ap)
{
#ifdef _WIN32
	int ret;

	if (s == NULL && n == 0)
		return _vscprintf(fmt, ap);
	// TODO figure out how to disambiguate between encoding errors (returns negative value; does not have documented errno values), other errors (returns negative value; errno == EINVAL), and truncations (returns -1; does not have documented errno values)
	ret = vsnprintf_s(s, n, _TRUNCATE, fmt, ap);
	if (ret == -1)
		// TODO make this safe
		return (int) n;
	return ret;
#else
	return vsnprintf(s, n, fmt, ap);
#endif
}

#include "end.h"

#include "strsafe_strncpy_impl.h"