On Sun, 15 May 2005, John W. Eaton wrote:
On 14-May-2005, Prof Brian Ripley wrote:
| R guarantees to have *vsnprintf* available. Putting things in the API is | a one-way decision and ties our hands for ever. Rvsnprintf is not even | exported from errors.c: it is static and just a convenience wrapper. | | About all a user package needs to do is | | AC_CHECK_DECLS([vsnprintf]) | | and in your code snippet | | #if defined(HAVE_DECL_VSNPRINTF) && !HAVE_DECL_VSNPRINTF | extern int vsnprintf (char *str, size_t count, const char *fmt, va_list arg); | #endif | | However, AFAIK all known R platforms do have vsnprintf these days: the | MinGW compiler used on Windows gained it within the last year.
Is checking for vsnprintf availability sufficient, or should one also check for versions that behave differently? As I recall, different versions of vsnprintf return different values when a buffer overflow occurs. Standard versions return the number of characters that would have been in the string (not including the terminating nul) if the buffer had been big enough, but older versions (apparently including glibc prior to 2.1) simply return -1 if the buffer is too small. Is it worth trying to handle these differences? Or at least detect the broken vsnprintf and fail to build?
We do distinguish between those types in R's usages.
BDR
-- Brian D. Ripley, [EMAIL PROTECTED] Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595
______________________________________________ R-devel@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-devel