Fix for MinGW, although not complete -- doesn't have _vscprintf().

This commit is contained in:
Andrew Johnson
2008-08-26 20:24:25 +00:00
parent 1f1dd6b2f2
commit cd9cfacca4

View File

@@ -17,13 +17,27 @@
int epicsShareAPI epicsVsnprintf(char *str, size_t len,
const char *fmt, va_list ap)
{
int needed = _vscprintf(fmt, ap);
int retval = _vsnprintf(str, len, fmt, ap);
#ifdef _MSC_VER
int needed = _vscprintf(fmt, ap);
if ((int) len < needed + 1) {
str[len - 1] = 0;
return needed;
}
#else
/* Unfortunately MINGW doesn't provide _vscprintf and their
* _vsnprintf follows MS' broken return value semantics.
*/
if (retval == -1) {
if (len)
str[len - 1] = 0;
return len;
} else if (retval == (int) len) {
str[--retval] = 0;
}
#endif
return retval;
}