Mercurial > hg > octave-lojdl > gnulib-hg
diff lib/strerror_r.c @ 15783:4b59b93e3c12
strerror_r-posix: Fix for MSVC 9.
* lib/strerror_r.c (local_snprintf): New function.
(snprintf): Define to local_snprintf, not to _snprintf.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Sun, 25 Sep 2011 14:54:47 +0200 (2011-09-25) |
parents | 4611f15ea1e8 |
children | 8250f2777afc |
line wrap: on
line diff
--- a/lib/strerror_r.c +++ b/lib/strerror_r.c @@ -87,9 +87,24 @@ #endif /* On MSVC, there is no snprintf() function, just a _snprintf(). - It is of lower quality, but sufficient for the simple use here. */ + It is of lower quality, but sufficient for the simple use here. + We only have to make sure to NUL terminate the result (_snprintf + does not NUL terminate, like strncpy). */ #if !HAVE_SNPRINTF -# define snprintf _snprintf +static int +local_snprintf (char *buf, size_t buflen, const char *format, ...) +{ + va_list args; + int result; + + va_start (args, format); + result = _vsnprintf (buf, buflen, format, args); + va_end (args); + if (buflen > 0 && (result < 0 || result >= buflen)) + buf[buflen - 1] = '\0'; + return result; +} +# define snprintf local_snprintf #endif /* Copy as much of MSG into BUF as possible, without corrupting errno.